Outils pour utilisateurs

Outils du site


darknet_letters

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édentesRévision précédente
Prochaine révision
Révision précédente
Prochaine révisionLes deux révisions suivantes
darknet_letters [2019/09/09 14:44] – [Apprentissage Ou Training appelé train] sergedarknet_letters [2019/11/08 08:21] – [Apprentissage avec yolov3-tiny.cfg] serge
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_3l_xx_best.weights fait 38.1 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
  
-=====A faire===== +===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.txt · Dernière modification : 2020/12/27 15:11 de serge