Ceci est une ancienne révision du document !
Table des matières
Darknet Letters
font_0_h 0.37 0.31 0.18 0.18
font_0_l 0.07 0.27 0.13 0.13
font_0_t 0.44 0.14 0.1 0.1
font_0_C 0.54 0.49 0.13 0.13
font_0_O 0.27 0.95 0.21 0.21
De l'Intelligence artificielle pour reconnaitre des lettres dans différentes polices, convertir les lettres d'un texte en musique midi.
Les sources sur GitHub
Le jeu letters pour créer les images d'apprentissage
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
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
La Font midi utilisée est TimGM6mb.sf2 de Tim Brechbill qui est dans le dossier letters/midi/my_pretty_midi des sources
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”.
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.
- Les modifications de configuration se font dans ./letters/letters.ini
Modification de la configuration
En particulier, définir:
[blend] shot_size = 1024 [darknet] shot_size = 704 [dirertories] shot = "votre/dossier/shot" shot_jpg = "/votre/dossier/shot_jpg"
Les dossiers vont faire 6 à 8 Go !
L'apprentissage utilise 4 à 6 Go de RAM de la carte graphique avec des images 704×704 !
Fichiers .txt
Pour chaque image toto.png, un fichier toto.txt est créé pour décrire les objets dans l'image, avec le numéro de l'objet: voir Création du set d'apprentissage
Apprentissage
Le jeu letters
Dans le dossier darknet-letters, lancer
./play_letters.sh
1 - Affichage du logo 2 - Lancement de letters SPACE pour changer de musique 3 - Fabrication des shot pour l'IA 4 - Conversion en json H - Help R - Reset
En 2: Les fichiers du dossier /json 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 4: Les fichiers midi sont traduits en json pour être facilement utilisé en python.
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
Yolo V3 Darknet
Ressources
Installation de CUDA
Compilation de Darknet
Détection de mes objets lettres
Pre-trained weights
wget -c https://pjreddie.com/media/files/darknet53.conv.74
et coller le fichier dans le dossier “darknet” des sources de YOLO.
Fichier *.cfg
Un premier essai avec 5 yolo layers s'est terminé rapidement sur Error.
Copie de darknet/cfg/yolov3.cfg dans darknet-letters/darknet/letters_0 et renommer en yolov3_letters.cfg, faire les modifications suivantes:
change line 8 and 9 to shot size = 704 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=400 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 = (400 + 5) * 3 = 1215 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 letters_0
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
font_0_a font_0_b ... ... font_9_S font_9_T
qui sont les noms que l'on retrouve dans train.txt et test.txt
obj.data
Défini les chemins des fichiers utilisés:
classes = 400 train = letters_0/train.txt valid = letters_0/test.txt names = letters_0/obj.names backup = letters_0/backup
Résumé
Le dossier letters_0 des sources de YOLO Darknet doit contenir:
- train.txt
- test.txt
- obj.data
- obj.names
- yolov3_letters.cfg
- le dossier /backup
Apprentissage
Ou Training appelé train (non! pas de locomotive à vapeur ici!)
export PATH=/usr/local/cuda-10.0/bin${PATH:+:${PATH}} ./darknet detector train letters_0/obj.data letters_0/yolov3-letters.cfg darknet53.conv.74 -map
Ratage complet
v3 (mse loss, Normalizer: (iou: 0.750000, cls: 1.000000) Region 106 Avg (IOU: -nan, GIOU: -nan), Class: -nan, Obj: -nan, No Obj: 0.000006, .5R: -nan, .75R: -nan, count: 0
Essai avec tiny !
YOLO v3 tiny
Utilisation de la configuration yolov3-tiny.cfg
Pré-apprentissage
Création de yolov3-tiny.conv.15 dans letters_tiny/
./darknet partial letters_tiny/yolov3-tiny-letters.cfg letters_tiny/yolov3-tiny.weights letters_tiny/yolov3-tiny.conv.15 15
Apprentissage
./darknet detector train letters_tiny/obj.data letters_tiny/yolov3_letters.cfg letters_tiny/yolov3-tiny.conv.15 -map
Test
Coller, dans le dossier compilé de darknet, le 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
Morale du jour
Einstein a dit: “Deux choses sont infinies: l'univers et la bêtise humaine. Pour l'univers, je ne suis pas sûr !”