Référence: https://github.com/AlexeyAB/darknet#how-to-train-tiny-yolo-to-detect-your-custom-objects
Comment s'entraîner (pour détecter vos objets personnalisés)
(pour former vieux Yolo v2 yolov2-voc.cfg
, yolov2-tiny-voc.cfg
, yolo-voc.cfg
, yolo-voc.2.0.cfg
, ... cliquer par le lien )
Formation Yolo v4 (et v3):
-
Pour la formation,
cfg/yolov4-custom.cfg
téléchargez le fichier de poids pré-entraîné (162 Mo): yolov4.conv.137 (Google Drive Mirror yolov4.conv.137 ) -
Créez un fichier
yolo-obj.cfg
avec le même contenu que dansyolov4-custom.cfg
(ou copiezyolov4-custom.cfg
versyolo-obj.cfg)
et:
- changer le lot de lignes en
batch=64
- changer les subdivisions de ligne en
subdivisions=16
- changer la ligne max_batches en (
classes*2000
mais pas moins que le nombre d'images de formation, mais pas moins que le nombre d'images de formation et pas moins de6000
), par exemplemax_batches=6000
si vous vous entraînez pour 3 classes - changer les étapes de ligne à 80% et 90% de max_batches, fe
steps=4800,5400
- définir la taille du réseau
width=416 height=416
ou toute valeur multiple de 32: https://github.com/AlexeyAB/darknet/blob/0039fd26786ab5f71d5af725fc18b3f521e7acfd/cfg/yolov3.cfg#L8-L9 - changez la ligne
classes=80
de votre nombre d'objets dans chacune des 3[yolo]
couches:- https://github.com/AlexeyAB/darknet/blob/0039fd26786ab5f71d5af725fc18b3f521e7acfd/cfg/yolov3.cfg#L610
- https://github.com/AlexeyAB/darknet/blob/0039fd26786ab5f71d5af725fc18b3f521e7acfd/cfg/yolov3.cfg#L696
- https://github.com/AlexeyAB/darknet/blob/0039fd26786ab5f71d5af725fc18b3f521e7acfd/cfg/yolov3.cfg#L783
- changez [
filters=255
] en filters = (classes + 5) x3 dans les 3[convolutional]
avant chaque[yolo]
calque, gardez à l'esprit qu'il ne doit être que le dernier[convolutional]
avant chacun des[yolo]
calques.- https://github.com/AlexeyAB/darknet/blob/0039fd26786ab5f71d5af725fc18b3f521e7acfd/cfg/yolov3.cfg#L603
- https://github.com/AlexeyAB/darknet/blob/0039fd26786ab5f71d5af725fc18b3f521e7acfd/cfg/yolov3.cfg#L689
- https://github.com/AlexeyAB/darknet/blob/0039fd26786ab5f71d5af725fc18b3f521e7acfd/cfg/yolov3.cfg#L776
- lorsque vous utilisez des
[Gaussian_yolo]
couches, changez [filters=57
] filters = (classes + 9) x3 dans les 3[convolutional]
avant chaque[Gaussian_yolo]
couche- https://github.com/AlexeyAB/darknet/blob/6e5bdf1282ad6b06ed0e962c3f5be67cf63d96dc/cfg/Gaussian_yolov3_BDD.cfg#L604
- https://github.com/AlexeyAB/darknet/blob/6e5bdf1282ad6b06ed0e962c3f5be67cf63d96dc/cfg/Gaussian_yolov3_BDD.cfg#L696
- https://github.com/AlexeyAB/darknet/blob/6e5bdf1282ad6b06ed0e962c3f5be67cf63d96dc/cfg/Gaussian_yolov3_BDD.cfg#L789
Alors si cela classes=1
devrait être filters=18
. Si classes=2
alors écrivez filters=21
.
(N'écrivez pas dans le fichier cfg: filters = (classes + 5) x3)
( filters
Dépend généralement du classes
, coords
et du nombre de mask
s, c.-à-d. Filters = (classes + coords + 1)*<number of mask>
, où mask
est les indices des ancres. Si mask
est l'absence, alors filters = (classes + coords + 1)*num
)
Ainsi, par exemple, pour 2 objets, votre fichier yolo-obj.cfg
doit différer de yolov4-custom.cfg
ces lignes dans chacune des 3 couches [yolo]:
[convolutional]
filters=21
[region]
classes=2
-
Créer un fichier
obj.names
dans le répertoirebuild\darknet\x64\data\
, avec les noms des objets - chacun dans une nouvelle ligne -
Créez un fichier
obj.data
dans le répertoirebuild\darknet\x64\data\
, contenant (où classes = nombre d'objets ):
classes = 2
train = data/train.txt
valid = data/test.txt
names = data/obj.names
backup = backup/
-
Mettez les fichiers image (.jpg) de vos objets dans le répertoire
build\darknet\x64\data\obj\
-
Vous devez étiqueter chaque objet sur les images de votre ensemble de données. Utilisez ce logiciel d'interface graphique visuelle pour marquer des boîtes délimitées d'objets et générer des fichiers d'annotation pour Yolo v2 et v3: https://github.com/AlexeyAB/Yolo_mark
Il créera .txt
-file pour chaque .jpg
-image-file - dans le même répertoire et avec le même nom, mais avec .txt
-extension, et mettra dans le fichier: numéro d'objet et coordonnées de l'objet sur cette image, pour chaque objet en nouvelle ligne:
<object-class> <x_center> <y_center> <width> <height>
Où:
<object-class>
- numéro d'objet entier de0
à(classes-1)
<x_center> <y_center> <width> <height>
- valeurs flottantes relatives à la largeur et à la hauteur de l'image, elles peuvent être égales à(0.0 to 1.0]
- par exemple:
<x> = <absolute_x> / <image_width>
ou<height> = <absolute_height> / <image_height>
- atention:
<x_center> <y_center>
- sont au centre du rectangle (ne sont pas le coin supérieur gauche)
Par exemple pour img1.jpg
vous sera créé img1.txt
contenant:
1 0.716797 0.395833 0.216406 0.147222
0 0.687109 0.379167 0.255469 0.158333
1 0.420312 0.395833 0.140625 0.166667
- Créez un fichier
train.txt
dans le répertoirebuild\darknet\x64\data\
, avec les noms de fichiers de vos images, chaque nom de fichier en nouvelle ligne, avec le chemin relatif àdarknet.exe
, contenant par exemple:
data/obj/img1.jpg
data/obj/img2.jpg
data/obj/img3.jpg
-
Téléchargez les poids pré-entraînés pour les couches convolutives et mettez-les dans le répertoire
build\darknet\x64
- pour
yolov4.cfg
,yolov4-custom.cfg
(162 Mo): yolov4.conv.137 (miroir de lecteur Google yolov4.conv.137 ) - pour
yolov4-tiny.cfg
,yolov4-tiny-3l.cfg
,yolov4-tiny-custom.cfg
(19 MB): yolov4-tiny.conv.29 - pour
csresnext50-panet-spp.cfg
(133 Mo): csresnext50-panet-spp.conv.112 - pour
yolov3.cfg, yolov3-spp.cfg
(154 Mo): darknet53.conv.74 - pour
yolov3-tiny-prn.cfg , yolov3-tiny.cfg
(6 Mo): yolov3-tiny.conv.11 - pour
enet-coco.cfg (EfficientNetB0-Yolov3)
(14 Mo): enetb0-coco.conv.132
- pour
-
Commencez la formation en utilisant la ligne de commande:
darknet.exe detector train data/obj.data yolo-obj.cfg yolov4.conv.137
Pour s'entraîner sur Linux, utilisez la commande:
./darknet detector train data/obj.data yolo-obj.cfg yolov4.conv.137
(utilisez simplement à la./darknet
place dedarknet.exe
)- (le fichier
yolo-obj_last.weights
sera enregistré dans lebuild\darknet\x64\backup\
pour chaque 100 itérations) - (le fichier
yolo-obj_xxxx.weights
sera enregistré dans lebuild\darknet\x64\backup\
pour chaque 1000 itérations) - (pour désactiver l'utilisation de la fenêtre de perte
darknet.exe detector train data/obj.data yolo-obj.cfg yolov4.conv.137 -dont_show
, si vous vous entraînez sur un ordinateur sans moniteur comme un cloud Amazon EC2) - (pour voir le graphique mAP & Loss pendant la formation sur un serveur distant sans interface graphique, utilisez la commande
darknet.exe detector train data/obj.data yolo-obj.cfg yolov4.conv.137 -dont_show -mjpeg_port 8090 -map
puis ouvrez l'URLhttp://ip-address:8090
dans le navigateur Chrome / Firefox)
- (le fichier
8.1. Pour l'entraînement avec le calcul mAP (moyenne des précisions moyennes) pour chaque 4 époques (ensemble valid=valid.txt
ou train.txt
dans le obj.data
fichier) et exécutez: darknet.exe detector train data/obj.data yolo-obj.cfg yolov4.conv.137 -map
- Une fois la formation terminée - obtenir le résultat
yolo-obj_final.weights
du cheminbuild\darknet\x64\backup\
-
Après chaque 100 itérations, vous pouvez arrêter et commencer plus tard l'entraînement à partir de ce point. Par exemple, après 2000 itérations, vous pouvez arrêter l'entraînement, puis commencer simplement l'entraînement en utilisant:
darknet.exe detector train data/obj.data yolo-obj.cfg backup\yolo-obj_2000.weights
(dans le référentiel d'origine https://github.com/pjreddie/darknet, le fichier de poids n'est enregistré qu'une fois toutes les 10 000 itérations
if(iterations > 1000)
) -
Vous pouvez également obtenir un résultat avant les 45000 itérations.
Remarque: si pendant l'entraînement vous voyez des nan
valeurs pour le avg
champ (perte) - alors l'entraînement se passe mal, mais s'il se nan
trouve dans d'autres lignes - alors l'entraînement se passe bien.
Remarque: Si vous avez modifié width = ou height = dans votre fichier cfg, les nouvelles largeur et hauteur doivent être divisibles par 32.
Remarque: après l'entraînement, utilisez cette commande pour la détection: darknet.exe detector test data/obj.data yolo-obj.cfg yolo-obj_8000.weights
Remarque: si une erreur Out of memory
se produit, dans .cfg
-file, vous devez augmenter subdivisions=16
, 32 ou 64: lien
Comment entraîner tiny-yolo (pour détecter vos objets personnalisés):
Faites toutes les mêmes étapes que pour le modèle yolo complet comme décrit ci-dessus. À l'exception de:
- Téléchargez le fichier avec les 29 premières couches convolutives de yolov4-tiny: https://github.com/AlexeyAB/darknet/releases/download/darknet_yolo_v4_pre/yolov4-tiny.conv.29 (Ou obtenez ce fichier de yolov4-tiny.weights fichier en utilisant la commande:
darknet.exe partial cfg/yolov4-tiny-custom.cfg yolov4-tiny.weights yolov4-tiny.conv.29 29
- Créez votre modèle personnalisé
yolov4-tiny-obj.cfg
basé surcfg/yolov4-tiny-custom.cfg
au lieu deyolov4.cfg
- Commence l'entraînement:
darknet.exe detector train data/obj.data yolov4-tiny-obj.cfg yolov4-tiny.conv.29
Pour l'entraînement de Yolo basé sur d'autres modèles ( DenseNet201-Yolo ou ResNet50-Yolo ), vous pouvez télécharger et obtenir des poids pré-entraînés comme indiqué dans ce fichier: https://github.com/AlexeyAB/darknet/blob/master/build/ darknet / x64 / partial.cmd Si vous avez créé votre modèle personnalisé qui n'est pas basé sur d'autres modèles, vous pouvez l'entraîner sans poids pré-entraînés, alors seront utilisés des poids initiaux aléatoires.
Pour résumer
Outre la configuration des fichiers associés, les informations pouvant être obtenues à partir du didacticiel officiel du site Web comprennent des scripts de formation, des scripts de test et des scripts de formation continue.
Script de formation:
darknet.exe detector train data/obj.data yolo-obj.cfg yolov4.conv.137
Entraînement avec affichage de la carte:
darknet.exe detector train data/obj.data yolo-obj.cfg yolov4.conv.137 -map
Utilisez ctrl + c pour terminer la formation
Script de test (en supposant que le test de formation se termine à 2000 fois):
darknet.exe detector test data/obj.data yolo-obj.cfg yolo-obj_2000.weights
(En supposant que la formation est arrêtée à partir de 2000 fois, elle est générée à ce moment yolo-obj_2000.weights
) Continuez le script de formation:
darknet.exe detector train data/obj.data yolo-obj.cfg backup\yolo-obj_2000.weights