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édentes Révision précédente
Prochaine révision
Révision précédente
darknet_letters [2019/08/13 09:55]
serge [Apprentissage]
darknet_letters [2020/02/04 17:43] (Version actuelle)
serge ↷ Liens modifiés en raison d'un déplacement.
Ligne 3: Ligne 3:
 **{{tagpage>​bge|Blender Game Engine}}** ....  **{{tagpage>​ia|Intelligence Artificielle}}** **{{tagpage>​bge|Blender Game Engine}}** ....  **{{tagpage>​ia|Intelligence Artificielle}}**
 </​WRAP>​ </​WRAP>​
- +<WRAP center round box 80% centeralign>​ 
-{{ ::2019_08:​shot_22.png?​400 |}} +{{media_02:shot_22.png?400|}} {{media_02:​shot_17.png?400|}} 
-<WRAP center round box 60% centeralign+Le fond noir ne convient pas, il faut une video ! 
-font_0_h 0.37 0.31 0.18 0.18 \\ +</​WRAP>​ 
-font_0_l 0.07 0.27 0.13 0.13 \\ +<WRAP center round box 60%> 
-font_0_t 0.44 0.14 0.1 0.1 \\ +  * **De l'​Intelligence Artificielle pour reconnaître des lettres dans différentes polices** 
-font_0_C 0.54 0.49 0.13 0.13 \\ +  * **Créer des images correspondant à une musique midi** 
-font_0_O 0.27 0.95 0.21 0.21\\+  * **Lecture des images par l'​Intelligence Artificielle et rejouer le midi**
 </​WRAP>​ </​WRAP>​
  
-<WRAP center round box 80% centeralign+{{ vimeo>377284950?​medium }} 
-**De l'Intelligence artificielle pour reconnaitre ​des lettres dans différentes polices,  ​en faire des cauchemars ​et de la musique en midi.**+\\ \\  
 +**[[darknet_letters_essais|Darknet Letters Tous les essais]]** 
 + 
 +**[[https://​github.com/​sergeLabo/​darknet-letters|darknet-letters sur Github]]**\\ \\  
 +===== YOLO Darknet V3 ===== 
 +====Conclusion finale==== 
 +  * Le nombre de paramètres à optimiser est important. Pour pouvoir faire beaucoup de simulation, les calculs doivent être rapide, il est nécessaire d'avoir des cartes graphiques puissanteset chères ! 
 +  * Pour faire mieux, une GTX 1060 ne suffit pas. Il en faudrait au minimum 2, et mieux encore RTX 2080 Ti 11GB à 1100€ 
 +  * Cela permettrait ​de tester les modèles plus lourds et d'​agrandir les imagesPasser de 416x416 à 832x832 ! 
 +==== Conclusion des différents apprentissages ==== 
 +<WRAP group> 
 +<WRAP half column>​ 
 +  * **Suppression des majuscules pour diminuer le nombre d'​ojects de 380 à 190** 
 +  * **Le modèle yolov3.cfg est trop lourd, le yolov3-tiny_3l.cfg suffit** 
 +  * **Images de 416x416** 
 +  * **1 à 2 jours d'​apprentissage** 
 +  * **Fond video pour l'​apprentissage,​ noir pour la détection** 
 +  * **Pas 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 22: Ligne 49:
 **Créer et testé sur Debian Buster 10** **Créer et testé sur Debian Buster 10**
  
-{{:2019_08:​letters_1.png?​300|}} +{{media_02:​letters_1.png?​300|Le jeu}} 
-{{:2019_08:​letters_2.png?​300|}} +{{media_03:shot_12.png?300|Avec un fond video}} 
-{{:2019_08:​letters_3.png?​300|}}+{{media_02:​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====
 Le fichier python darknet-letters/​letters/​midi/​analyse_play_midi.py permet de: Le fichier python darknet-letters/​letters/​midi/​analyse_play_midi.py permet de:
Ligne 31: Ligne 59:
   * jouer un fichier *.json   * jouer un fichier *.json
  
-===Installation===+===Principe de la conversion d'un fichier midi en json=== 
 +Les fichiers midi sont très optimisés. La conversion en json permet d'​accéder en python aux instruments,​ notes, volumes facilement.  
 + 
 +Les fichiers *.midi ("​.midi",​ "​mid",​ "​kar",​ "​Mid",​ "​MID"​) doivent être copié dans le dossier darknet-letters/​letters/​midi/​music 
 + 
 +Les *.json seront créés dans le dossier "​json"​. 
 + 
 +===Message d'​erreur=== 
 +Pour éviter ce message: 
 +  fluidsynth: warning: Failed to set thread to high priority 
 +  fluidsynth: warning: Failed to pin the sample data to RAM; swapping is possible. 
 +Editer: 
 +  sudo nano /​etc/​security/​limits.conf 
 + 
 +Ajouter: 
 +  @audio ​  ​- ​ rtprio ​     90 
 +  @audio ​  ​- ​ memlock ​    ​unlimited 
 + 
 +Le user doit être dans le groupe audio! 
 +====Installation====
 <code txt> <code txt>
 sudo pip3 install numpy sudo pip3 install numpy
Ligne 39: Ligne 86:
 sudo pip3 install mido sudo pip3 install mido
 sudo apt install fluidsynth sudo apt install fluidsynth
-# FluidR3_GM.sf2 +</​code>​
-sudo apt install fluid-soundfont-gm +
- </​code>​+
  
-Installation de [[pymultilame|Python: ​pymultilame]]+Installation de mon package perso: **[[pymultilame|pymultilame]]**
  
-===Principe=== +La Font midi peut être TimGM6mb.sf2 de **[[http://​www.timbrechbill.com/​saxguru/​Timidity.php|Tim Brechbill]]** qui est dans le dossier letters/​midi/​soundfont\\ 
-Les fichiers ​midi sont très optimisésLa conversion en json permet d'accéder aux instruments,​ notes, volumes facilement+C'est à définir dans letters.ini
  
-Les fichiers ​*.midi ("​.midi"​"​mid"​"​kar"​"​Mid",​ "​MID"​) doivent être copié dans le dossier darknet-letters/​letters/​midi/music+====Modification de la configuration==== 
 +**Règles générales** 
 +  - Ne pas bidouiller les scripts, à moins que vous ne soyez hollandais. 
 +  - Si il y a un bugcorriger dans les scriptstoujours de façon expliciteet envoyer un message à l'​auteur. 
 +  ​Les modifications de configuration se font dans ./letters/​letters.ini 
 +Dans ce fichier, définir en particulier:​ 
 +  * **les chemins de /shotet /​shot_jpg/​** 
 +  * **le nombre d'​images à créer: 20000** 
 +  * **la taille des images: 416**
  
-Les *.json seront créés dans le dossier "​json"​ +====Le jeu letters==== 
-====Lancement du jeu==== +Dans le dossier darknet-letters, lancer 
-Dans le dossier darknet-letters: +  ​./play_letters.sh
-  play_letters.sh+
    
 <code txt> <code txt>
-SPACE pour changer de music + 1 - Lancement de letters 
-1 Affichage du logo +     SPACE pour changer de musique 
-Lancement de music and letters + ​2 ​- Fabrication des shot pour l'IA 
-Lancement de get shot + ​3 ​- Conversion d'une musique en image 
-4 Création des json + H - Help 
-H help + R - Reset 
-Echap Quitter+ ​Echap ​Quitter
 </​code>​ </​code>​
  
-En 2: Les fichiers du dossier /json seront jouées.+En 1: Les fichiers du dossier /json_60 ​seront jouées.
  
-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 2: 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 4Les fichiers midi sont traduits en json pour être facilement utilisé en python.+En 3Crée un jeu d'​images ​pour ensuite tester l'IA avec play_letters.py
  
-===Shot=== +===== Création du set d'​images pour l'​apprentissage ===== 
-Les shots seront enregistrés dans le dossier défini dans le fichier **darknet-letters/​letters/​global.ini**ligne 10 +====Création des images==== 
-  ​shot_dir = "​votre/​dossier/​shot"​+  ​Création des images avec l'​option 3. 
 +Pour chaque image toto.pngun 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]]
  
 +====Préparation de Darknet====
 ===Conversion=== ===Conversion===
-Tous les shot doivent être floutés et converti en jpg avec le script **darknet-letters/​darknet/​blur_and_convert.py** +Tous les shot doivent être floutés et converti en jpg avec le script **./letters/​darknet/​blur_and_convert.py**
- +
-Définir ligne 81 le chemin vers votre dossier  +
-  shot = "​votre/​dossier/​shot"​+
  
 ===Création des fichiers train.txt et test.txt=== ===Création des fichiers train.txt et test.txt===
-Avec le script **darknet-letters/​darknet/​create_train_test_txt.py** +Avec le script **./letters/​darknet/​create_train_test_txt.py**
-Définir ligne 10: +
-  shot_jpg = '​votre/​dossier/​shot_jpg/'​+
  
 ===Controle des fichiers txt de chaque image=== ===Controle des fichiers txt de chaque image===
-Avec le script **darknet-letters/​letters/​control/​control.py** +Avec le script **./​letters/​control/​control.py**
-Définir le chemin de shot ligne 15.+
  
 +{{ media_03:​shot_14.jpg?​400 |}}
  
 ===== Yolo V3 Darknet===== ===== Yolo V3 Darknet=====
- 
 ==== 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 102: Ligne 153:
   * **[[yolo_darknet_sur_un_portable_optimus#​installation_de_yolo_darknet|Installation de Yolo Darknet]]**   * **[[yolo_darknet_sur_un_portable_optimus#​installation_de_yolo_darknet|Installation de Yolo Darknet]]**
  
 +Modification du Makefile pour une carte GTX 1060:
 +<​code>​
 +# ARCH= -gencode arch=compute_30,​code=sm_30 \
 +#       ​-gencode arch=compute_35,​code=sm_35 \
 +#       ​-gencode arch=compute_50,​code=[sm_50,​compute_50] \
 +#       ​-gencode arch=compute_52,​code=[sm_52,​compute_52] \
 +#       ​-gencode arch=compute_61,​code=[sm_61,​compute_61]
 +
 +# GTX 1080, GTX 1070, GTX 1060, GTX 1050, GTX 1030, Titan Xp, Tesla P40, Tesla P4
 +ARCH= -gencode arch=compute_61,​code=sm_61 -gencode arch=compute_61,​code=compute_61
 +</​code>​
  
 ====Détection de mes objets lettres==== ====Détection de mes objets lettres====
-===Pre-trained weights=== +===Dossier data=== 
-  ​wget -c https://pjreddie.com/​media/​files/​darknet53.conv.74 +Dans les sources de YOLO Darknet: 
-et coller le fichier dans le dossier ​letters_0+  ​* Renommer le dossier data des sources de darknet en data_tata_yoyo. 
 +  * Créer un dossier data avec: 
 +    * train.txt 
 +    * test.txt 
 +    * obj.data 
 +    * obj.names 
 +    * yolov3.cfg 
 +    * le dossier ​/backup
  
 ===Fichier *.cfg=== ===Fichier *.cfg===
-Errors with 5 yolo layers +Copie de darknet/​cfg/​yolov3.cfg dans data, faire les modifications suivantes:
- +
-Copie de darknet/​cfg/​yolov3.cfg dans darknet-letters/​darknet/​letters_0 et renommer en yolov3_letters.cfg, faire les modifications suivantes: +
 <code txt> <code txt>
-change line 8 and 9 to shot size = 704+change line 8 and 9 to shot size = 640
 change line batch to batch=64 change line batch to batch=64
 change line subdivisions to subdivisions=64 change line subdivisions to subdivisions=64
Ligne 124: Ligne 190:
         Line 696         Line 696
         Line 783         Line 783
-        classes=400+        classes=380
         ​         ​
 change [filters=255] to filters=(classes + 5)x3 in the 3 [convolutional] before each [yolo] layer change [filters=255] to filters=(classes + 5)x3 in the 3 [convolutional] before each [yolo] layer
Ligne 130: Ligne 196:
         Line 689         Line 689
         Line 776         Line 776
-        filters = (classes + 5)x3 = (400 + 5) * 3 = 1215+        filters = (classes + 5)x3 = (380 + 5) * 3 = 1155
  
 Distinction main gauche main droite Distinction main gauche main droite
Ligne 137: Ligne 203:
  
 ===train.txt test.txt=== ===train.txt test.txt===
-Les fichiers train.txt et test.txt doivent être collés dans letters_0+Les fichiers train.txt et test.txt doivent être collés dans data 
 +<code txt> 
 +exemple 
 +/​chemin/​absolu/​darknet-letters/​letters/​shot_jpg/​0/​shot_33.jpg 
 +/​chemin/​absolu/​darknet-letters/​letters/​shot_jpg/​0/​shot_18.jpg 
 +/​chemin/​absolu/​darknet-letters/​letters/​shot_jpg/​0/​shot_51.jpg 
 +... 
 +... 
 +</​code>​ 
 + 
 +===obj.names=== 
 +Les noms doivent être dans l'​ordre des numéro de classe des shot_xxx.txt 
 +<code txt> 
 +font_0_b 
 +... 
 +... 
 +font_9_S 
 +font_9_T 
 +</​code>​ 
 + 
 +===obj.data=== 
 +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> 
 +classes = 380 
 +train = data/​train.txt 
 +valid = data/​test.txt 
 +names = data/​obj.names 
 +backup = data/​backup 
 +</​code>​ 
 + 
 +=====Apprentissage soit Training appelé train===== 
 +Non! pas de locomotive à vapeur ici ! 
 + 
 +====Hardware==== 
 +===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. 
 + 
 +Avec 10% des images en images test, soit 3000 images 416x416, les images occupent: 
 +  * RAM:  15.5 Go sur 15.7 Go 
 +  * SWAP: 19.7 Go sur 64 Go 
 + 
 +**Prévoir une grosse SWAP, par exemple 64 Go !** 
 + 
 +===Taille de la RAM GPU=== 
 +  * RAM GPU > 4.5 Go 
 + **La taille maxi des images possible est 416x416 avec 6 Go de Ram GPU**  
 + 
 +=====Apprentissage avec yolov3.cfg===== 
 +Dans le dossier /darknet: 
 +  ./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. 
 + 
 +=====Apprentissage avec yolov3-tiny_3l.cfg===== 
 +**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 38 Mo. Malheureusement,​ ça plante ! 
 +=====Tous les essais===== 
 +  * **[[darknet_letters_essais|Tous les essais sur cette page]]** 
 + 
 +===== 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: Libération de la RAM GPU à la fin d'une détection===== 
 + 
 +[[darknet_letters_unload_gpu_ram_in_python_script|Voir la page Darknet Letters unload GPU RAM in python script]] 
 +=====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 € 
 + 
 +**6 mois de calcul = 150 €** 
 +=====Quels matériels pour un apprentissage rapide ?===== 
 +  * **[[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 
 +  * https://​www.tooploox.com/​blog/​deep-learning-with-gpu sur alexnet 
 + 
 +===Remise spéciale Education=== 
 +  * **[[https://​www.nvidia.com/​fr-fr/​titan/​titan-rtx/​|NVIDIA TITAN RTX]]** 20% de remise sur 2720€ soit €2,​159.20 
 + 
 +===Pour une startup fortunée=== 
 +  * **[[https://​www.microway.com/​preconfiguredsystems/​whisperstation-deep-learning/​| WhisperStation™- Deep Learning Ultra-Quiet Computing for Deep Learning Researchers]]** System Price: $11,265 to $40,047 
 +  * **[[https://​www.microway.com/​preconfiguredsystems/​nvidia-dgx-station-deep-learning-workstation/​|NVIDIA DGX Station for Deep Learning System]]** Price: $51,861 (academic pricing, includes 1 year support) to $73,830 (commercial,​ includes 1 year support) 
 +  * **[[https://​www.microway.com/​preconfiguredsystems/​gpu-accelerated-workstation-cst-studio-suite/​|Microway’s GPU-Accelerated Workstation for CST STUDIO SUITE®]]** System Price: $15,000 to $45,000 
 +Each Microway system is customized to your requirements. Final pricing depends upon configuration and any applicable educational or government discounts. 
 + 
 + 
 +=====Benchmark===== 
 +  * https://​github.com/​ryujaehun/​pytorch-gpu-benchmark 
 +====Bilan==== 
 +**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 !
  
-=====Apprentissage===== +=====Morale du jour===== 
-Ou Training appelé train (non pas de locomotive à vapeur!)+**Einstein** a dit: 
  
-  export PATH=/​usr/​local/​cuda-10.0/​bin${PATH:+:​${PATH}} +**"​Deux choses sont infinies ​l'​Univers et la bêtise humaine.**
-  ./darknet detector train letters_0/​obj.data letters_0/​yolov3-letters.cfg letters_0/​darknet53.conv.74 -map+
  
-===== Test ===== +**Maisen ce qui concerne l'​Universje n'en ai pas encore acquis la certitude absolue."**
-Collerdans le dossier compilé de darknetle dossier letters_0 +
-  ​./darknet detector test letters_0/​obj.data letters_0/​yolov3_letters.cfg letters_0/​backup/​yolov3_letters_3000.weights letters_0/​shot_0.jpg+
  
-{{tag> ia sb}}+{{tag> ia sb bge yolo_darknet deap_learning}}
darknet_letters.1565682908.txt.gz · Dernière modification: 2019/08/13 09:55 par serge