====== Darknet Letters ====== **{{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]]** **[[les_pages_intelligence_artificielle_en_details|Les Pages Intelligence Artificielle en détails]]** **{{tagpage>bge|Blender Game Engine}}** {{media_02:shot_22.png?400|}} {{media_02:shot_17.png?400|}}\\ Le fond noir ne convient pas, il faut une video ! * **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** {{ 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 ==== * **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 ** **Hardware** * **GPU Nvidia 1060 GTX** * **RAM de 16 Go** * **RAM GPU de 6 Go** * **SWAP de 64 Go sur SSD** ===== Les sources sur GitHub ===== * **[[https://github.com/sergeLabo/darknet-letters|darknet-letters]]** =====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==== 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 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 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 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://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 ==== * **[[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: # 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 ====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: 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 ===train.txt test.txt=== Les fichiers train.txt et test.txt doivent être collés dans data 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 ... ... ===obj.names=== Les noms doivent être dans l'ordre des numéro de classe des shot_xxx.txt font_0_b ... ... font_9_S font_9_T ===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 ..... classes = 380 train = data/train.txt valid = data/test.txt names = data/obj.names backup = data/backup =====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 ?===== * Nuages {{media_12:s_j_to_i_593.jpg?200|}} * Plasma {{media_12:s_j_to_i_537.jpg?200|}} * nuage RGB clair {{media_04:boney_m.png?200|}} * Très foncé en RGB {{media_12:s_j_to_i_122.png?200|}} =====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}}