yolov4 forme ses propres données

Il existe de nombreuses méthodes qui prétendent améliorer la précision de la détection, un test pratique est donc nécessaire pour évaluer la combinaison de ces méthodes et analyser théoriquement la faisabilité du schéma. Certaines méthodes ne peuvent être utilisées que pour des problèmes spécifiques et de petits ensembles de données, mais certaines méthodes, telles que la normalisation par lots et la connexion résiduelle, sont applicables à la plupart des modèles et des ensembles de données. YOLO v4 fournit une bonne référence.

Si vous voulez vous entraîner yolov2-voc.cfgyolov2-tiny-voc.cfgyolo-voc.cfgyolo-voc.2.0.cfg类似更早的版本,请点击这个链接

Former Yolo v4 (et v3):

0. La formation cfg/yolov4-custom.cfg doit télécharger le modèle de pré-formation yolov4.conv.137 

1. Copiez yolov4-custom.cfg et nommez-le yolo-obj.cfg, modifiez la taille du batch_size, si votre mémoire GPU est petite et signalez une erreur de mémoire insuffisante, vous pouvez essayer d'augmenter la valeur des subdivisions

batch=64
subdivisions=16

max_batches est défini sur le nombre de catégories à former * 2000, mais pas moins que le nombre d'images à former et 6000

La taille du pas de la baisse du taux d'apprentissage est définie sur 80 % et 90 % de max_batches, et si le total est de 6000, il doit être défini sur steps=4800, 5400

L'entrée réseau est définie sur largeur=416 hauteur=416, ou d'autres nombres divisibles par 32

Dans la couche yolo, changez le nombre de classes de catégories = 80 au nombre à former

convolutional层中 滤波器数量Changez les filtres = 255 devant yolo en filtres = (classes + 5) x3, changez simplement la dernière couche convolutive devant yolo

Par conséquent, si vous ne formez que la catégorie 1, changez-la en 18, et pour former la catégorie 2, changez-la en 21. En fait, c'est 3N + 15, et N est le nombre de catégories.

2. Créez un nouvel obj.names dans le répertoire data, écrivez le nom de la catégorie à former, une catégorie par ligne

3. Créez un nouvel obj.data sous data

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

4. Rassemblez des images et placez-les à l'endroit approprié

5. Marquez les images collectées ci-dessus et marquez le format de fichier comme

<object-class> <x_center> <y_center> <width> <height>

Autrement dit, la largeur et la hauteur des coordonnées du point central de la catégorie

6. Créez une liste de fichiers à former

7. Téléchargez le modèle pré-formé

8. Utilisez la commande suivante pour commencer la formation

./darknet detector train data/obj.data yolo-obj.cfg yolov4.conv.137

Toutes les 100 itérations enregistreront yolo-obj_last.weights, et toutes les 1000 itérations enregistreront yolo-obj_xxxx.weights,如果你的机器上没有窗口环境,可以使用-dont_show pour désactiver l'affichage de la fenêtre de perte

Si vous voulez voir mAP, ajoutez -map après la commande, combinée avec celle ci-dessus, utilisez souvent -dont_show -mjpeg_port 8090 -map

Ensuite, ouvrez-le http://ip-address:8090 dans le navigateur et vous pourrez voir le processus de déclin de Loss.

9. Une fois la formation terminée, yolo-obj_final.weights sera généré

Remarque : Si vous voyez nan sur avg, cela signifie qu'il y a un problème avec la formation, mais si c'est dans d'autres parties, le problème n'est pas grave, et alors la formation deviendra

Remarque : Si vous modifiez la largeur et la hauteur du réseau, il doit s'agir d'un multiple de 32.

Remarque : Après l'entraînement, utilisez quelque chose comme darknet detector test data/obj.data yolo-obj.cfg yolo-obj_8000.weights pour la détection

Remarque : Si vous rencontrez des erreurs telles que Mémoire insuffisante, augmentez sa valeur dans le fichier .cfg subdivisions=16, 32 ou 64. La signification de ce paramètre est de diviser un lot en plusieurs lots.

Comment former le petit-yolo

Les étapes sont les mêmes que ci-dessus, mais il y a quelques différences :

  • Changez le poids de pré-entraînement en https://pjreddie.com/media/files/yolov3-tiny.weights
  • Obtenez des poids pré-entraînés  yolov3-tiny.conv.15 à l'aide de la commande : darknet.exe partial cfg/yolov3-tiny.cfg yolov3-tiny.weights yolov3-tiny.conv.15 15
  • Créez votre modèle personnalisé  yolov3-tiny-obj.cfg basé sur  cfg/yolov3-tiny_obj.cfg au lieu de yolov3.cfg
  • Commence l'entraînement: darknet.exe detector train data/obj.data yolov3-tiny-obj.cfg yolov3-tiny.conv.15

什么时候停止训练:

通常来说2000*类别数个迭代就够了,但是不能少于图片总数也不能少于6000.更精确的停止训练可以参考下面的手册:

1.在训练过程中,你会看到不同的错误指示,你应该在0. Arrêtez l'entraînement lorsque XXXXXXX moy ne baisse plus

Région Avg IOU : 0,798363, Classe : 0,893232, Obj : 0,700808, No Obj : 0,004567, Moy Recall : 1,000000, nombre : 8 Région Moy IOU : 0,800677, Classe : 0,892181, Obj : 0,701590, No Obj Recall : 0,00g0500, No Obj Recall : 0,00g0500 , comptez : 8

9002 : 0,211667,  0,60730 moy , taux de 0,001000, 3,868000 secondes, 576128 images chargées : 0,000000 secondes

  • 9002 indique le nombre d'itérations
  • 0,60730 moy : perte moyenne, plus elle est basse, mieux c'est

Si la moyenne de 0,xxxxxx ne diminue toujours pas après plusieurs itérations  , vous devez arrêter l'entraînement, la perte finale sera comprise entre 0,5 (petit modèle, données simples) et 3 (grand modèle et données complexes)

2. Une fois que vous arrêtez de vous entraîner, vous devez choisir les poids les plus proches et choisir le meilleur parmi eux.

Par exemple, si vous arrêtez de vous entraîner à 9000 fois, les meilleurs résultats peuvent être obtenus à 7000, 8000, 9000 fois, car il peut y avoir un surajustement.

Vous pouvez utiliser -map pour obtenir la valeur mAP de ces poids sur l'ensemble de test.

 L'indice de précision par défaut sur l'ensemble de données VOC lorsque mAP est identique à la signification de  AP50 sur l'ensemble de données COCO . PR peut être légèrement différent sur VOC et COCO, mais l'indice d'intersection et le rapport sont les mêmes.

Comment améliorer la précision de détection

Avant la formation :

  • Définissez random sur 1 dans le fichier .cfg, cela améliorera la précision des différentes résolutions
  • Augmentez la résolution du réseau dans le fichier .cfg, height=608width=608,或者其他32的倍数
  • 检查下你要检测的物体都有标注-不要漏标数据集中的目标,毕竟训练中最多的问题就是标注的问题
  1. Loss很高并且map很低,训练是否有误?在训练的命令后加上-show_imgs vérifie la cible marquée
  2. Pour chaque objet que vous souhaitez détecter, il existe au moins un objet similaire : forme, bord, taille relative, angle de rotation, inclinaison et éclairage. Chaque classe cible au moins 2 000 images et entraîne 2 000 * classes pour un certain nombre d'itérations.
  3. L'ensemble d'apprentissage doit également contenir des objets que vous ne souhaitez pas détecter, c'est-à-dire les arrière-plans qui ne contiennent aucun objet et dont les étiquettes sont définies sur vide.
  4. La meilleure façon de marquer la cible : ne marquez que la partie visible de la cible, ou la partie superposée et visible, ou légèrement plus petite que la cible entière, comment vous voulez qu'elle soit détectée
  5. S'il existe de nombreuses cibles dans une image d'entraînement, définissez max=200 sur une valeur élevée.
  6. Afin d'accélérer la formation, définissez le stopbackward=1 de la couche-136 dans le fichier cfg
  7. Afin de rendre les résultats de détection plus précis, vous pouvez ajouter 3 paramètres dans chaque couche [yolo], ignore_thresh = .9 iou_normalizer=0.5 iou_loss=giou, cela augmentera [email protected], mais réduira [email protected].
  8. Sauf si vous êtes un expert des réseaux de neurones, recalculez les coordonnées de la boîte d'ancrage du réseau, sinon utilisez la valeur par défaut

 

Je suppose que tu aimes

Origine blog.csdn.net/minstyrain/article/details/106213624
conseillé
Classement