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/12 12:49]
serge [Conversion d'un fichier *.midi en *.json]
darknet_letters [2020/12/27 16:11]
serge
Ligne 1: Ligne 1:
 ====== Darknet Letters ====== ====== Darknet Letters ======
 <WRAP center round box 60% centeralign> <WRAP center round box 60% centeralign>
-**{{tagpage>bge|Blender Game Engine}}** ....  **{{tagpage>ia|Intelligence Artificielle}}**+**{{tagpage>ia|Intelligence Artificielle}}**     **[[http://translate.google.com/translate?hl=&sl=auto&tl=en&u=https%3A%2F%2Fressources.labomedia.org%2Fdarknet_letters|English Version]]** 
 +</WRAP> 
 +<WRAP center round box 60% centeralign> 
 +**[[les_pages_intelligence_artificielle_en_details|Les Pages Intelligence Artificielle en détails]]**
 </WRAP> </WRAP>
  
-{{ ::2019_08:shot_22.png?400 |}} 
 <WRAP center round box 60% centeralign> <WRAP center round box 60% centeralign>
-font_0_h 0.37 0.31 0.18 0.18 \\ +**{{tagpage>bge|Blender Game Engine}}** 
-font_0_l 0.07 0.27 0.13 0.13 \\ +</WRAP> 
-font_0_t 0.44 0.14 0.1 0.1 \\ +<WRAP center round box 60% centeralign> 
-font_0_C 0.54 0.49 0.13 0.13 \\ +{{media_02:shot_22.png?400|}} {{media_02:shot_17.png?400|}}\\ 
-font_0_O 0.27 0.95 0.21 0.21\\+Le fond noir ne convient pas, il faut une video ! 
 +</WRAP> 
 +<WRAP center round box 60%> 
 +  * **De l'Intelligence Artificielle pour reconnaître des lettres dans différentes polices** 
 +  * **Créer des images correspondant à une musique midi** 
 +  * **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 56:
 **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 66:
   * 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 93:
 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 + - Fabrication des shot pour l'IA 
-Lancement de get shot + - 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 160:
   * **[[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 197:
         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 203:
         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 210:
  
 ===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 
 +{{media_12:s_j_to_i_593.jpg?200|}} 
 +</WRAP> 
 + 
 +<WRAP quarter column> 
 +  * Plasma 
 +{{media_12:s_j_to_i_537.jpg?200|}} 
 +</WRAP> 
 + 
 +<WRAP quarter column> 
 +  * nuage RGB clair 
 +{{media_04:boney_m.png?200|}} 
 +</WRAP> 
 + 
 +<WRAP quarter column> 
 +  * Très foncé en RGB 
 +{{media_12: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 
 + 
 +===Juin 2020=== 
 +  * **[[https://lambdalabs.com/blog/choosing-a-gpu-for-deep-learning/|Choosing the Best GPU for Deep Learning in 2020]]** 
 + 
 +    * RTX 2060 (6 GB): if you want to explore deep learning in your spare time. 360€ 
 +    * RTX 2070 or 2080 (8 GB): if you are serious about deep learning, but your GPU budget is $600-800. Eight GB of VRAM can fit the majority of models. 
 +    * RTX 2080 Ti (11 GB): if you are serious about deep learning and your GPU budget is ~$1,200. The RTX 2080 Ti is ~40% faster than the RTX 2080. 
 +    * Titan RTX and Quadro RTX 6000 (24 GB): if you are working on SOTA models extensively, but don't have budget for the future-proofing available with the RTX 8000. 4000€ 
 +    * Quadro RTX 8000 (48 GB): you are investing in the future and might even be lucky enough to research SOTA deep learning in 2020. 5500€ 
 + 
 + 
 +=====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+
  
 +**Mais, en ce qui concerne l'Univers, je n'en ai pas encore acquis la certitude absolue."**
  
-{{tag> ia sb}}+{{tag> ia sb bge yolo_darknet}}
darknet_letters.txt · Dernière modification: 2020/12/27 16:11 de serge