Hardware
Le fichier python darknet-letters/letters/midi/analyse_play_midi.py permet de:
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”.
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!
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 peut être TimGM6mb.sf2 de Tim Brechbill qui est dans le dossier letters/midi/soundfont
C'est à définir dans letters.ini
Règles générales
Dans ce fichier, définir en particulier:
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
Pour chaque image toto.png, un fichier fichier 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
Tous les shot doivent être floutés et converti en jpg avec le script ./letters/darknet/blur_and_convert.py
Avec le script ./letters/darknet/create_train_test_txt.py
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
Dans les sources de YOLO Darknet:
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
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 ... ...
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
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
Non! pas de locomotive à vapeur ici !
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 416×416, les images occupent:
Prévoir une grosse SWAP, par exemple 64 Go !
La taille maxi des images possible est 416×416 avec 6 Go de Ram GPU
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.
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
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 !
Et le script play_letters.py du dossier play_letters. Il faut copier les fichiers:
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.
6 mois de calcul = 150 €
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 !
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.”