====== 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}}