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
darknet_letters [2019/08/06 11:54] – [Darknet Letters] sergedarknet_letters [2020/12/27 15:11] (Version actuelle) serge
Ligne 1: Ligne 1:
 ====== Darknet Letters ====== ====== Darknet Letters ======
 +<WRAP center round box 60% centeralign>
 +**{{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>
  
-{{ ::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>
 +
 +{{ vimeo>377284950?medium }}
 +\\ \\ 
 +**[[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 puissantes, et 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 images. Passer 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 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]]**
  
-===== Ressources =====+=====Le jeu letters pour créer les images d'apprentissage===== 
 +**Créer et testé sur Debian Buster 10** 
 + 
 +{{media_02:letters_1.png?300|Le jeu}} 
 +{{media_03:shot_12.png?300|Avec un fond video}} 
 +{{media_02:letters_3.png?300|Avec un fond noir: la reconnaissance est très mauvaise}} 
 + 
 +====Conversion d'un fichier *.midi en *.json==== 
 +Le fichier python darknet-letters/letters/midi/analyse_play_midi.py permet de: 
 +  * jouer un fichier midi 
 +  * convertir des fichier *.midi en *.json 
 +  * jouer un fichier *.json 
 + 
 +===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> 
 +sudo pip3 install numpy 
 +sudo pip3 install opencv-python 
 +# Blender 2.79b mais pas 2.80 qui n'a plus de BGE 
 +sudo apt install blender 
 +sudo pip3 install mido 
 +sudo apt install fluidsynth 
 +</code> 
 + 
 +Installation de mon package perso: **[[pymultilame|pymultilame]]** 
 + 
 +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\\ 
 +C'est à définir dans letters.ini 
 + 
 +====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 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 
 +Dans ce fichier, définir en particulier: 
 +  * **les chemins de /shot/ et /shot_jpg/** 
 +  * **le nombre d'images à créer: 20000** 
 +  * **la taille des images: 416** 
 + 
 +====Le jeu letters==== 
 +Dans le dossier darknet-letters, lancer 
 +  ./play_letters.sh 
 +  
 +<code txt> 
 + 1 - Lancement de letters 
 +     SPACE pour changer de musique 
 + 2 - Fabrication des shot pour l'IA 
 + 3 - Conversion d'une musique en image 
 + H - Help 
 + R - Reset 
 + Echap - Quitter 
 +</code> 
 + 
 +En 1: Les fichiers du dossier /json_60 seront jouées. 
 + 
 +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 3: Crée un jeu d'images pour ensuite tester l'IA avec play_letters.py 
 + 
 +===== Création du set d'images pour l'apprentissage ===== 
 +====Création des images==== 
 +  * Création des images avec l'option 3. 
 +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]] 
 + 
 +====Préparation de Darknet==== 
 +===Conversion=== 
 +Tous les shot doivent être floutés et converti en jpg avec le script **./letters/darknet/blur_and_convert.py** 
 + 
 +===Création des fichiers train.txt et test.txt=== 
 +Avec le script **./letters/darknet/create_train_test_txt.py** 
 + 
 +===Controle des fichiers txt de chaque image=== 
 +Avec le script **./letters/control/control.py** 
 + 
 +{{ media_03:shot_14.jpg?400 |}} 
 + 
 +===== Yolo V3 Darknet===== 
 +==== Ressources ====
   * **https://github.com/AlexeyAB/darknet**   * **https://github.com/AlexeyAB/darknet**
  
-====How to detect your custom objects==== +  * [[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. 
-  * Pre-trained weights + 
-  wget -c https://pjreddie.com/media/files/darknet53.conv.74+==== Installation de CUDA ==== 
 +  * **[[yolo_darknet_sur_un_portable_optimus#installation_de_cuda_100_sur_xubuntu_1804|Installation de Cuda 10.0 sur Xubuntu 18.04]]** 
 + 
 +==== Compilation de 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==== 
 +===Dossier data=== 
 +Dans les sources de YOLO Darknet: 
 +  * 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=== 
 +Copie de darknet/cfg/yolov3.cfg dans data, faire les modifications suivantes: 
 +<code txt> 
 +change line 8 and 9 to shot size = 640 
 +change line batch to batch=64 
 +change line subdivisions to subdivisions=64 
 +change line max_batches to (classes*2000), soit 800 000 
 +change line steps to 80% and 90% of max_batches, f.e. steps=640000,720000 
 + 
 +change line classes=80 to your number of objects in each of 3 [yolo]-layers: 
 +        Line 610 
 +        Line 696 
 +        Line 783 
 +        classes=380 
 +         
 +change [filters=255] to filters=(classes + 5)x3 in the 3 [convolutional] before each [yolo] layer 
 +        Line 603 
 +        Line 689 
 +        Line 776 
 +        filters = (classes + 5)x3 = (380 + 5) * 3 = 1155 
 + 
 +Distinction main gauche main droite 
 +ligne 17    flip = 0 
 +</code> 
 + 
 +===train.txt test.txt=== 
 +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 .....
      
-  For training for both small and large objects use modified models:\\ +<code txt> 
-Full-model: 5 yolo layers+classes = 380 
-  https://raw.githubusercontent.com/AlexeyAB/darknet/master/cfg/yolov3_5l.cfg+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 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 ! 
 + 
 +=====Morale du jour===== 
 +**Einstein** a dit:  
 + 
 +**"Deux choses sont infinies : l'Univers et la bêtise humaine.**
  
 +**Mais, en ce qui concerne l'Univers, je n'en ai pas encore acquis la certitude absolue."**
  
 +{{tag> ia sb bge yolo_darknet}}
darknet_letters.1565092495.txt.gz · Dernière modification : 2019/08/06 11:54 de serge