Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
darknet_letters [2019/09/09 16:46]
serge [A faire]
darknet_letters [2019/11/08 09:22] (Version actuelle)
serge [Apprentissage avec yolov3-tiny.cfg]
Ligne 5: Ligne 5:
 <WRAP center round box 80% centeralign>​ <WRAP center round box 80% centeralign>​
 {{::​2019_08:​shot_22.png?​400|}} {{:​2019_08:​shot_17.png?​400|}} {{::​2019_08:​shot_22.png?​400|}} {{:​2019_08:​shot_17.png?​400|}}
 +Le fond noir ne convient pas, il faut une video !
 </​WRAP>​ </​WRAP>​
 <WRAP center round box 60% centeralign>​ <WRAP center round box 60% centeralign>​
-2 0.37 0.31 0.18 0.18 \\ +**De l'​Intelligence Artificielle pour reconnaître des lettres dans différentes polices, ​ convertir les lettres d'un texte en musique midi.**
-356 0.07 0.27 0.13 0.13 \\ +
-29 0.44 0.14 0.1 0.1 \\ +
-127 0.54 0.49 0.13 0.13 \\ +
-99 0.27 0.95 0.21 0.21\\+
 </​WRAP>​ </​WRAP>​
  
-<​WRAP ​center round box 60% centeralign+===== YOLO Darknet V3 ===== 
-**De l'Intelligence Artificielle pour reconnaître ​des lettres ​dans différentes polices, ​ convertir ​les lettres d'un texte en musique midi.**+==== Conclusion des différents apprentissages ==== 
 +<​WRAP ​group
 +<WRAP half column>​ 
 +  ​* **380 objets** 
 +  * **Images de 416x416** 
 +  * **5.5 jours d'apprentissage** 
 +  * **Ne pas mettre de fond noir** 
 +  * **Les zones de définitions ​des objets ​dans les images doivent être un peu large** 
 +  * **Mettre un peu de flou dans les images ​**
 </​WRAP>​ </​WRAP>​
 +<WRAP half column>
 +**Hardware**
 +  * **GPU Nvidia 1060 GTX**
 +  * **RAM de 16 Go** 
 +  * **RAM GPU de 6 Go**
 +  * **SWAP de 64 Go sur SSD**
 +</​WRAP>​
 +</​WRAP>​
 +
 +
 ===== Les sources sur GitHub ===== ===== Les sources sur GitHub =====
   * **[[https://​github.com/​sergeLabo/​darknet-letters|darknet-letters]]**   * **[[https://​github.com/​sergeLabo/​darknet-letters|darknet-letters]]**
Ligne 23: Ligne 38:
 **Créer et testé sur Debian Buster 10** **Créer et testé sur Debian Buster 10**
  
-{{:​2019_08:​letters_1.png?​300|}} +{{:​2019_08:​letters_1.png?​300|Le jeu}} 
-{{:2019_08:letters_2.png?​300|}} +{{::shot_12.png?300|Avec un fond video}} 
-{{:​2019_08:​letters_3.png?​300|}}+{{:​2019_08:​letters_3.png?​300|Avec un fond noir: la reconnaissance est très mauvaise}}
  
 ====Conversion d'un fichier *.midi en *.json==== ====Conversion d'un fichier *.midi en *.json====
Ligne 41: Ligne 56:
  
 ===Message d'​erreur=== ===Message d'​erreur===
-<​code>​ +Pour éviter ce message: 
-Pour éviter ce message: +  fluidsynth: warning: Failed to set thread to high priority 
-fluidsynth: warning: Failed to set thread to high priority +  fluidsynth: warning: Failed to pin the sample data to RAM; swapping is possible. 
-fluidsynth: warning: Failed to pin the sample data to RAM; swapping is possible.+Editer: 
 +  sudo nano /​etc/​security/​limits.conf
  
-sudo nano /​etc/​security/​limits.conf +Ajouter:
- +
-Ajouter:+
   @audio ​  ​- ​ rtprio ​     90   @audio ​  ​- ​ rtprio ​     90
   @audio ​  ​- ​ memlock ​    ​unlimited   @audio ​  ​- ​ memlock ​    ​unlimited
  
-Le user doit être dans le gropue ​audio! +Le user doit être dans le groupe ​audio!
-</​code>​+
 ====Installation==== ====Installation====
 <code txt> <code txt>
Ligne 74: Ligne 87:
   - Si il y a un bug, corriger dans les scripts, toujours de façon explicite, et envoyer un message à l'​auteur.   - Si il y a un bug, corriger dans les scripts, toujours de façon explicite, et envoyer un message à l'​auteur.
   - Les modifications de configuration se font dans ./​letters/​letters.ini   - Les modifications de configuration se font dans ./​letters/​letters.ini
-Dans ce fichier, définir:+Dans ce fichier, définir ​en particulier:
   * **les chemins de /shot/ et /​shot_jpg/​**   * **les chemins de /shot/ et /​shot_jpg/​**
   * **le nombre d'​images à créer: 20000**   * **le nombre d'​images à créer: 20000**
Ligne 84: Ligne 97:
    
 <code txt> <code txt>
-1 - Affichage du logo + 1 - Retour au logo 
-2 - Lancement de letters + 2 - Lancement de letters 
-    SPACE pour changer de musique +     ​SPACE pour changer de musique 
-3 - Fabrication des shot pour l'IA + 3 - Fabrication des shot pour l'IA 
-4 - Conversion en json + 4 - Conversion en json 
-H - Help + 5 - Conversion d'une musique en image 
-R - Reset+ H - Help 
 + R - Reset 
 + Echap - Quitter
 </​code>​ </​code>​
  
Ligne 97: Ligne 112:
 En 3: Pour l'​apprentissage,​ le fichier json/​get_shot.json sera utilisé. Il a été construit avec darknet-letters/​letters/​midi/​json_for_get_shot.py En 3: Pour l'​apprentissage,​ le fichier json/​get_shot.json sera utilisé. Il a été construit avec darknet-letters/​letters/​midi/​json_for_get_shot.py
  
-En 4: Les fichiers midi sont traduits en json pour être facilement utilisé en python.+En 4: Les fichiers midi sont traduits en json pour être facilement utilisé en python. ​Malheureusement,​ la conversion dans le Blender Game Engine est très lente, plusieurs heures au lieu de quelques minutes avec le script analyse_play_midi.py
  
-Le jeu crée les images ​et pour chaque image le **[[yolo_avec_mes_propres_images#​fichier_txt_localisant_le_ou_les_objets_dans_l_image| fichier txt]]** correspondant qui décrit le numéro de classe et la position des objets dans l'image.+En 5: Crée un jeu d'images pour ensuite tester ​l'IA avec show_letters.py
  
 ===== Création du set d'​images pour l'​apprentissage ===== ===== Création du set d'​images pour l'​apprentissage =====
 ====Création des images==== ====Création des images====
   * Création des images avec l'​option 3.   * Création des images avec l'​option 3.
-Pour chaque image toto.png, un fichier ​toto.txt est créé pour décrire les objets dans l'​image,​ avec le numéro de l'​objet:​ voir +Pour chaque image toto.png, un fichier ​[[yolo_avec_mes_propres_images#​fichier_txt_localisant_le_ou_les_objets_dans_l_image| fichier ​txt]] est créé pour décrire les objets dans l'​image,​ avec le numéro de l'​objet:​ voir 
 [[yolo_avec_mes_propres_images#​creation_du_set_d_apprentissage|Création du set d'​apprentissage]] [[yolo_avec_mes_propres_images#​creation_du_set_d_apprentissage|Création du set d'​apprentissage]]
 +
 ====Préparation de Darknet==== ====Préparation de Darknet====
 ===Conversion=== ===Conversion===
Ligne 121: Ligne 137:
 ==== Ressources ==== ==== Ressources ====
   * **https://​github.com/​AlexeyAB/​darknet**   * **https://​github.com/​AlexeyAB/​darknet**
 +
 +  * [[https://​scholar.google.fr/​scholar?​q=yolo+artificial+intelligence&​hl=fr&​as_sdt=0&​as_vis=1&​oi=scholart|Recherche]] sur ressources universitaires avec Google scholar.
  
 ==== Installation de CUDA ==== ==== Installation de CUDA ====
Ligne 139: Ligne 157:
 ARCH= -gencode arch=compute_61,​code=sm_61 -gencode arch=compute_61,​code=compute_61 ARCH= -gencode arch=compute_61,​code=sm_61 -gencode arch=compute_61,​code=compute_61
 </​code>​ </​code>​
- 
  
 ====Détection de mes objets lettres==== ====Détection de mes objets lettres====
Ligne 200: Ligne 217:
  
 ===obj.data=== ===obj.data===
-Défini ​les chemins des fichiers utilisés:+Définit ​les chemins des fichiers utilisés: ​les chemins relatifs sont comptés depuis le dossier darknet, d'où sera lancé la commande de l'​apprentissage:​ 
 +  ./darknet ..... 
 +  ​
 <code txt> <code txt>
 classes = 380 classes = 380
Ligne 209: Ligne 228:
 </​code>​ </​code>​
  
-====Apprentissage soit Training appelé train====+=====Apprentissage soit Training appelé train=====
 Non! pas de locomotive à vapeur ici ! Non! pas de locomotive à vapeur ici !
  
-===Modifications suite à Apprentissage raté=== +====Hardware====
-  * Test avec yolov3-tiny.cfg +
-  * Test avec yolov3_5l.cfg +
-  * Test avec yolov3-tiny_3l.cfg +
-  * Grosse erreur perso: dans shot_xxx.txt de l'​image shot_xxx.png:​ non de l'​objet au lieu du numéro de l'​objet ! +
-  * fond noir +
-  * fond noir remplacé par un nuage gris +
-  * nuage gris remplacé par une video de ciel ! +
-  * Message dans le terminal: "​Processus arrêté."​ Achat de DDR3 1600 mHz 16 Go pour remplacer les 4 Go existants. +
-  * Diminution des superpositions avec size de 0.6 à 0.9 +
-  * Images avec minuscules seules et images avec majuscules seules pour diminuer le nombre de lettres dans l'​image et donc les superpositions. +
-  * Reprise des 400 images des lettres pour les cadrer serré (20 heures de boulot) ! +
-  * Ne pas déclarer des objets qui ne sont jamais dans les images ! +
- +
-===Erreur de segmentation avec yolov3-tiny.cfg=== +
-**yolov3-tiny** va plus vite en test mais fini toujours par une erreur de segmentation après quelques images. +
 ===RAM et SWAP=== ===RAM et SWAP===
 Lors de l'​estimation de l'​efficacité,​ les images de test définies dans test.txt sont certainement chargées en mémoire. Lors de l'​estimation de l'​efficacité,​ les images de test définies dans test.txt sont certainement chargées en mémoire.
Ligne 239: Ligne 242:
  
 ===Taille de la RAM GPU=== ===Taille de la RAM GPU===
-  * RAM GPU > 4 Go+  * RAM GPU > 4.5 Go
  **La taille maxi des images possible est 416x416 avec 6 Go de Ram GPU**   **La taille maxi des images possible est 416x416 avec 6 Go de Ram GPU** 
  
-===yolov3.cfg===+=====Apprentissage avec yolov3.cfg=====
 Dans le dossier /darknet: Dans le dossier /darknet:
   ./darknet detector train data/​obj.data data/​yolov3.cfg darknet53.conv.74 -map   ./darknet detector train data/​obj.data data/​yolov3.cfg darknet53.conv.74 -map
 Les chemins "​data/​..."​ doivent être cohérent avec obj.data, le dossier "​backup"​ doit exister. Les chemins "​data/​..."​ doivent être cohérent avec obj.data, le dossier "​backup"​ doit exister.
  
-=====Durée d'un calcul et consommation électrique===== +=====Apprentissage avec yolov3-tiny_3l.cfg===== 
-  5 jours 24 0.2 kW 24 kwh à 0.17 € le kWh soit 4 €+**3 layers*
 +  ​./darknet partial data_09/​yolov3-tiny_3l_09.cfg yolov3-tiny.weights data_09/​yolov3-tiny.conv.15 15 
 +  ./darknet detector train data_09/​obj.data data_09/​yolov3-tiny_3l_09.cfg data_09/​yolov3-tiny.conv.15 -map 
 +   
 + Le fichier yolov3-tiny_3l_xx_best.weights fait 38.1 Mo 
 +=====Apprentissage avec yolov3-tiny.cfg===== 
 +**2 layers** 
 +  ./darknet partial data_12/​yolov3-tiny_12.cfg yolov3-tiny.weights data_12/​yolov3-tiny.conv.15 15 
 +  ./darknet detector train data_12/​obj.data data_12/​yolov3-tiny_12.cfg data_12/​yolov3-tiny.conv.15 -map 
 +   
 + Le fichier yolov3-tiny_12_best.weights fait  Mo 
 +=====Tous les essais===== 
 +  * **[[darknet_letters_essais|Tous les essais sur cette page]]**
  
-Questions+===== Reconversion d'​images en musique ===== 
 +====Test sur le jeu d'​image de json_to_image==== 
 +Et le script play_letters.py du dossier play_letters. Il faut copier les fichiers: 
 +  * darknet.py 
 +  * libdarknet.so 
 +des sources compilées de darknet dans le dossier play_letters. 
 + 
 +Créer les images de json_to_image avec l'​option 5 du jeu letters.  
 + 
 +Les fichiers midi qui seront convertis en images sont ceux de /​letters/​midi/​music/​non_git/​pour_ia 
 + 
 +Définir le FPS dans letters.ini dans la section [json_to_image]  
 + 
 +Il n'y a que 10 canaux midi au maximum possibles. 
 + 
 +====Quel fond d'​image utiliser ?===== 
 +<WRAP group> 
 +<WRAP quarter column>​ 
 +  * Nuages 
 +{{::​s_j_to_i_593.jpg?​200|}} 
 +</​WRAP>​ 
 + 
 +<WRAP quarter column>​ 
 +  * Plasma 
 +{{::​s_j_to_i_537.jpg?​200|}} 
 +</​WRAP>​ 
 + 
 +<WRAP quarter column>​ 
 +  * nuage RGB clair 
 +{{:​boney_m.png?​200|}} 
 +</​WRAP>​ 
 + 
 +<WRAP quarter column>​ 
 +  * Très foncé en RGB 
 +{{::​s_j_to_i_122.png?​200|}} 
 +</​WRAP>​ 
 + 
 +</​WRAP>​ 
 + 
 +=====Bug: Vidage de la RAM GPU à la fin d'une détection===== 
 +**Bug: Vidage de la RAM GPU à la fin d'une détection en gardant le script python actif.** 
 + 
 +  * unload network in python script https://​github.com/​AlexeyAB/​darknet/​issues/​3467 
 + 
 +===./​include/​darknet.h=== 
 +<code c> 
 +void show_total_time();​ 
 + 
 +// ajout alexandre pour vider la memoire 
 +// network.h 
 +LIB_API void free_network(network net); 
 + 
 +#ifdef __cplusplus 
 +
 +#​endif ​ // __cplusplus 
 +#​endif ​ // DARKNET_API 
 +</​code>​ 
 + 
 +===./​darknet.py=== 
 +<code c> 
 +predict_image.restype = POINTER(c_float) 
 + 
 +# alexandre lien entre lib api de darknet.c et play_letters 
 +free_network = lib.free_network 
 +free_network.argtypes = [c_void_p] 
 + 
 +def array_to_image(arr):​ 
 +</​code>​ 
 + 
 + 
 +=====Durée d'un calcul et consommation électrique avec yolov3.cfg===== 
 +  * 50000 itérations de 50 000 images de 416x416 = 6 jours * 24 * 0.2 kW =  kwh à 0.17 € le kWh soit 5 € 
 + 
 +=====Quels matériels pour un apprentissage rapide ?=====
   * **Quel serait le coût sur un Pentaflops ​ ?**   * **Quel serait le coût sur un Pentaflops ​ ?**
   * **Et si La Labomedia achète un Pentaflops ?**   * **Et si La Labomedia achète un Pentaflops ?**
 +  * **[[https://​timdettmers.com/​2019/​04/​03/​which-gpu-for-deep-learning/​|timdettmers.com]]** Which GPU(s) to Get for Deep Learning
 +  * **[[https://​www.quora.com/​What-is-currently-the-best-GPU-for-deep-learning|www.quora.com]]** avec un graphique qui teste alexnet (yolo ?) conseille [[https://​www.amazon.fr/​MSI-GTX-1080-Graphique-GeForce/​dp/​B06XT3TVKP/​ref=sr_1_4?​keywords=gtx+1080+ti&​qid=1569416932&​s=gateway&​sr=8-4|une GTX 1080 Ti]] à 750€ (en fin de série) ou [[https://​www.ldlc.com/​fiche/​PB00263052.html|une RTX 2080 Ti 11GB]] à 1100€.
 +  * **[[https://​timdettmers.com/​2018/​12/​16/​deep-learning-hardware-guide/​|timdettmers.com]]** A Full Hardware Guide to Deep Learning. La carte mère et le CPU peuvent être très modeste !
 +  * **[[https://​lambdalabs.com/​blog/​best-gpu-tensorflow-2080-ti-vs-v100-vs-titan-v-vs-1080-ti-benchmark/​|lambdalabs.com]]** Deep Learning GPU Benchmarks - Tesla V100 vs RTX 2080 Ti vs GTX 1080 Ti vs Titan V
 +  * **[[https://​blog.slavv.com/​picking-a-gpu-for-deep-learning-3d4795c273b9|slavv.com/​]]** Picking a GPU for Deep Learning
 +  * **[[https://​hackernoon.com/​how-to-create-your-own-deep-learning-rig-a-complete-hardware-guide-7cdc71e174aa|hackernoon.com]]** How to create your own deep learning rig: A complete hardware guide
  
-=====Idées pour approfondir le sujet !===== +===Remise spéciale Education=== 
-  * Repasser à un fond noir +  * **[[https://​www.nvidia.com/​fr-fr/​titan/​titan-rtx/​|NVIDIA TITAN RTX]]** 20% de remise sur 2720€ soit €2,159.20 
-  ​Modifier le flou +=====Benchmark===== 
- +  ​* https://github.com/ryujaehun/pytorch-gpu-benchmark 
-===== Test ===== +====Bilan==== 
-  ​./darknet detector test data/obj.data data/yolov3.cfg data/backup/​yolov3_3000.weights shot_0.jpg+**Je suis un chercheur compétitif,​ près de mes sous, pauvre, fou d'​apprentissage automatique et comme Salvador Dali du chocolat Lanvin: GTX 1060 (6GB) en fin de série à 200 € + 35 € de RAM** dans un ordinateur d'​emprunt !
  
 =====Morale du jour===== =====Morale du jour=====
  • darknet_letters.1568040385.txt.gz
  • Dernière modification: 2019/09/09 16:46
  • par serge