Darknet Letters

2 0.37 0.31 0.18 0.18
356 0.07 0.27 0.13 0.13
29 0.44 0.14 0.1 0.1
127 0.54 0.49 0.13 0.13
99 0.27 0.95 0.21 0.21

De l'Intelligence Artificielle pour reconnaître des lettres dans différentes polices, convertir les lettres d'un texte en musique midi.

Créer et testé sur Debian Buster 10

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

  1. Ne pas bidouiller les scripts, à moins que vous ne soyez hollandais.
  2. Si il y a un bug, corriger dans les scripts, toujours de façon explicite.
  3. 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 !

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

Controle des fichiers txt de chaque image

Avec le script ./letters/control/control.py

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.

Dossier letters_0

Créer un dossier dossier letters_0 dans les sources de YOLO Darknet avec:

  • train.txt
  • test.txt
  • obj.data
  • obj.names
  • yolov3_letters.cfg
  • le dossier /backup

Fichier *.cfg

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

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

Apprentissage

Ou Training appelé train (non! pas de locomotive à vapeur ici!)

Essais 5 yolo layers

  • fini sur error

tiny

Utilisation de la configuration yolov3-tiny.cfg
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

Efficacité: 0.02 % et plantage!

yolov3.cfg

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

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

Einstein a dit: “Deux choses sont infinies: l'univers et la bêtise humaine. Pour l'univers, je ne suis pas sûr !”

, ,
  • darknet_letters.txt
  • Dernière modification: 2019/08/21 10:49
  • par serge