Ceci est une ancienne révision du document !


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

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.

sudo nano /etc/security/limits.conf

# Ajouter:
  @audio   -  rtprio      90
  @audio   -  memlock     unlimited

# Le user doit être dans le gropue 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

  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, et envoyer un message à l'auteur.
  3. Les modifications de configuration se font dans ./letters/letters.ini

Dans ce fichier, définir:

  • les chemins de /shot/ et /shot_jpg/
  • le nombre d'images à créer: 20000
  • la taille des images: 416

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.

Le jeu crée les images et pour chaque image le fichier txt correspondant qui décrit le numéro de classe et la position des objets dans l'image.

  • Création des images avec l'option 3.

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

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

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

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éfini les chemins des fichiers utilisés:

classes = 380
train = data/train.txt
valid = data/test.txt
names = data/obj.names
backup = data/backup

Non! pas de locomotive à vapeur ici !

Modifications suite à Apprentissage raté

  • Test avec yolov3-tiny.cfg
  • Test avec yolov3_5l.cfg
  • Test avec yolov3-tiny_3l.cfg
  • Grosse erreur perso: dans shot_xxx.txt de l'image shot_xxx.png: non de l'objet au lieu du numéro de l'objet !
  • fond noir
  • fond noir remplacé par un nuage gris
  • nuage gris remplacé par une video de ciel !
  • Message dans le terminal: “Processus arrêté.” Achat de DDR3 1600 mHz 16 Go pour remplacer les 4 Go existants.
  • Diminution des superpositions avec size de 0.6 à 0.9
  • Images avec minuscules seules et images avec majuscules seules pour diminuer le nombre de lettres dans l'image et donc les superpositions.
  • Reprise des 400 images des lettres pour les cadrer serré (20 heures de boulot) !
  • Ne pas déclarer des objets qui ne sont jamais dans les images !

Erreur de segmentation avec yolov3-tiny.cfg

yolov3-tiny va plus vite en test mais fini toujours par une erreur de segmentation après quelques images.

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 416×416, 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 Go

La taille maxi des images possible est 416×416 avec 6 Go de Ram GPU

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.

  • 5 jours * 24 * 0.2 kW = 24 kwh à 0.17 € le kWh soit 4 €
  • Quel serait le coût sur un Pentaflops ?
  • Et si La Labomedia achète un Pentaflops ?

Je cite: Which GPU(s) to Get for Deep Learning:

Best GPU overall: RTX 2070
GPUs to avoid: Any Tesla card; any Quadro card; any Founders Edition card; Titan RTX, Titan V, Titan XP
Cost-efficient but expensive: RTX 2070
Cost-efficient and cheap:  RTX 2060, GTX 1060 (6GB).
I have little money: GTX 1060 (6GB)
I have almost no money: GTX 1050 Ti (4GB).Alternatively: CPU (prototyping) + AWS/TPU (training); or Colab.
I do Kaggle: RTX 2070. If you do not have enough money go for a GTX 1060 (6GB) or GTX Titan (Pascal) from eBay for prototyping and AWS for final training. Use fastai library.
I am a competitive computer vision or machine translation researcher: GTX 2080 Ti with the blower fan design. If you train very large networks get RTX Titans.
I am an NLP researcher: RTX 2080 Ti use 16-bit.
I want to build a GPU cluster: This is really complicated, you can get some ideas from my multi-GPU blog post.
I started deep learning and I am serious about it: Start with an RTX 2070. Buy more RTX 2070 after 6-9 months and you still want to invest more time into deep learning. Depending on what area you choose next (startup, Kaggle, research, applied deep learning) sell your GPU and buy something more appropriate after about two years.
I want to try deep learning, but I am not serious about it: GTX 1050 Ti (4 or 2GB). This often fits into your standard desktop and does not require a new PSU. If it fits, do not buy a new computer!

Je suis près de mes sous et pauvre: GTX 1060 (6GB) et pourtant passionné par l'apprentissage automatique !

  • Repasser à un fond noir
  • Modifier le flou
./darknet detector test data/obj.data data/yolov3.cfg data/backup/yolov3_3000.weights shot_0.jpg

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

  • darknet_letters.1568538485.txt.gz
  • Dernière modification: 2019/09/15 11:08
  • par serge