L’ordinateur sur lequel a été développé le projet était composé d’un processeur Intel Xeon CPU E5-1650 v3, de 16 Go de mémoire vive et d’une carte graphique Nvidia Geforce GTX 1070.
La procédure suivante décrit l'installation de toutes les dépendances requises dans un environnement Anaconda sur un ordinateur fonctionnant sur Windows 10.
Veuillez suivre ce guide afin d’installer Anaconda sur Windows.
Si vous n'avez pas de carte graphique de marque Nvidia ou que vous ne souhaitez pas utiliser cette dernière pour l'inférence, passez cette étape.
Afin de pouvoir profiter de la carte graphique pendant l’inférence, mais surtout pendant l’apprentissage, il faut installer l’API CUDA de Nvidia. Pour cela veuillez télécharger l'éxécutable ici et suivre ce guide.
Clonez ce git à l'aide de la commande suivante :
git clone https://github.com/TheoCarme/CreaCube.git
Puis téléchargez ici les fichiers nécessaire selon vos besoins :
- Le dossier "ONNX_Models" contient le modèle pour l'inférence.
- Le dossier "YOLOX_outputs" contient les checkpoints correspondant à l'apprentissage des différentes tailles de modèles YOLOX.
- Le dossier "COCO" contient le jeu de données au format COCO.
Pour créer l'environement Anaconda adéquat ouvrez l'Anaconda Powershell Prompt et entrez les lignes suivantes :
conda create -n "myenv" python=3.9.12
conda activate myenv
conda install -c conda-forge pycocotools
Si vous avez une carte graphique Nvidia et que vous avez installé VUDA, vous pouvez maintenant installer CUDA pour python. Pour cela entrez la commande qui correspond à la version de CUDA que vous avez installé précédement.
conda install cuda -c nvidia/label/cuda-11.6.2
Installez maintenant torch. La première commande est pour l'installation avec support GPU et la deuxième pour l'installation CPU.
pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu116
pip install torch torchvision torchaudio
Ensuite déplacer vous dans le répertoire où vous avez téléchargé le git puis dans le dossier nommé "YOLOX" et entrez les lignes suivantes :
cd path\to\the\project\YOLOX
pip install -r requirements.txt
pip install -v -e .
Il se peut que lors de l'exécution de la dernière ligne il soit retourné une erreur comme quoi la version de de quelque chose en rapport avec C++ n'est pas installé (je préciserai le quelque chose dès que j'aurai pu reproduire l'erreur). Dans ce cas télécharger les Outils de génération Microsoft C++ ici et lors de l'intalation cochez uniquement la case correspondant au C++. Ceci fait réexécuter la dernière ligne.
Ouvrez l'Anaconda Powershell Prompt et entrez les lignes suivantes
conda activate myenv
cd path\to\the\project\
python combined_detection.py --help
La dernière ligne affiche les différends arguments que peut accepter le programme. Ces arguments sont les suivants :
Argument | Description |
---|---|
-m / --model | Permet de préciser le chemin du modèle ONNX à utiliser. |
-v / --video_path | Permet de donner le chemin de la vidéo à analyser. |
-o / --output_dir | Permet de donner le chemin du dossier là où sera crée si demandé le dossier contenant la vidéo annotée et le fichier csv. |
-s / --score_thr | Permet de fixer un seuil au score de confiance des cubes, en dessous duquel les cubes ne seront pas dessinés sur la vidéo. Ce seuil est par défaut fixé à 0.3. |
-S / --start | Permet d'indiquer un nombre de seconde à ignorer au début de la vidéo. |
-E / --end | Permet d'indiquer un nombre de seconde à ignorer à la fin de la vidéo. |
-n / --num_hands | Permet d'indiquer le nombre maximum de main à détecter sur la vidéo. Ce maximum est par défaut fixé à 4. |
-c / --csv | Permet de demander au programme d'écrire le fichier csv contenant les traces des objets suivis. |
-w / --write_video | Permet de demander au programme d'écrire la vidéo avec les objets suivis dessinés dessus. |
-d / --display | Permet de demander au programme d'afficher chaque trame traitée avec les objets suivis dessinés dessus. |
La ligne pour éxecuter le programme pourra donc ressembler à cela :
python .\combined_detection.py -m ..\Project_Data\ONNX_Models\yolox_s.onnx -v path/to/the/video -o ..\Results -n 2 -c -w -d
Entrer à chaque fois les chemin vers le modèle, la vidéo et dossier des résultats peut vite devenir rébarbatif. Pour remédier à cela vous pouvez aller modifier les valeurs par défaut dans la première fonction nommée "make_parser" dans le fichier "combined_detection.py"
Pour ce faire utilisez le programme Manage_Dataset/extract_frames.py dont les options sont les suivantes :
Argument | Description |
---|---|
-i / --input_video | Permet d'indiquer le chemin vers le fichier de la vidéo dont seront extraites les images. |
-o / --output_dir | Permet d'indiquer le chemin vers le dossier où seront stockées les images extraites. |
-n / --nb_frames | Permet de fixer le nombre de trames à extraire de la vidéo. |
Les images extraites par ce programme seront extraites à intervalle régulier, intervalle défini selon le nombre de trames demandées.
Vous aurez besoin pour cela d'installer labelme comme expliqué ici, vous n'avez pas besoin de créer un nouvel environment et pouvez installer tout ça dans l'environment déjà crée.
Ensuite lancer labelme avec la commande suivante :
labelme --nodata --autosave
Une fois la fenêtre labelme ouverte cliquez sur "Fichier" puis "Change Output Dir" et choisissez le dossier dans lequel vous voulez enregistrer
Ensuite cliquez sur "Fichier" puis "Open Dir" et choisissez le dossier contenant les images à annoter.
Maintenant utilisez l'outil "Create Polygons" (disponible sur la barre d'outils à gauche) pour dessiner des polygônes englobants chaqun des cubes.
A la finalisation de chaque polygône choisissez le label a lui associer ou entrez le nom d'un nouveau label.
En cas d'erreur de manipulation, au lieu de supprimer puis recréer un nouveau polygône, vous pouvez éditer les polygônes avec l'outil "Edit Polygons" (toujours sur la barre d'outils à gauche)
Dans le cas où deux images successives sont très similaires, l'outil "Duplicate Polygons" (toujours sur la barre d'outils à gauche) peut être pratique.
Premièrement installez le paquet qui permet la conversion :
pip install -U labelme2coco
Ensuite effectuer la conversion en entrant cette commande en y indiquant le chemin du dossier contenant les fichiers json crées par labelme et le taux de partage désiré entre le jeu d'entraînement et celui de validation :
labelme2coco path/to/labelme/dir --train_split_rate 0.85
Les deux fichiers json au format seront déposés dans le dossier path/to/labelme/dir/run/labelme2coco
Ensuite déplacez ces deux fichiers à "CreaCube/YOLOX/dataset/COCO/annotations/" et renommez les "instances_train2017.json" et "instances_val2017.json" Enfin pour déplacer les images afin qu'elle correspondent à la structure attendue pour un jeu de données au format COCO exécuter le programme "split_images.py" qui se trouve dans le dossier "CreaCube/Manage_Dataset". Si vous n'avez pas toucher à la structure du dossier les paramètres par défaut fonctionneront très bien, sinon tapez la commande suivante et modifiez les paramètres en conséquence :
python split_images.py --help
Il se peut que vous vouliez changez les dimensions des images afin par exemple que l'apprentissage prenne moins de temps (pas sûr de ça) ou qu'il soit moins gourmand en mémoire. Il est plus pratique de faire cela après les précédentes étapes afin de pouvoir profiter d'une bonne résolution d'image lors de l'étape d'annotation.
Pour changer ces dimensions exécutez le programme "change_image_dim.py" se trouvant dans le dossier "CreaCube/Manage_Dataset". Auparavant lancez la commande suivante afin de savoir paramètrer le programme :
python change_image_dim.py --help
Pour ce faire installez le paquet adéquat :
git clone https://github.com/mohamadmansourX/Merge_COCO_FILES.git
cd Merge_COCO_FILES
Ensuite exécuter le programme "Merge_COCO_FILES/merge.py" pour fusionner les fichier json "train" et "val" de chaque jeu de données :
python merge.py Json1.json Json2.json OUTPUt_JSON.json
Faites attention à ce que les classes (cube_bleu...) à la fin des des fichiers json à fusionner soient dans le même ordre. Ensuite il ne reste plus qu'à rassembler les images d'entraînement et de validation dans deux dossiers uniques.