Partager via


Entraîner un modèle de détection d’objet avec TensorFlow

Maintenant que nous avons configuré TensorFlow, nous allons utiliser l’architecture YOLO pour entraîner le modèle de détection d’objet. YOLO est un réseau neuronal qui prédit des zones englobantes et des probabilités de classe à partir d’une image dans une seule évaluation. Les modèles YOLO peuvent traiter plus de 60 images par seconde, ce qui en fait une architecture idéale pour détecter des objets dans des vidéos. Vous trouverez plus d’informations sur le fonctionnement de YOLO ici.

Utilisation de YOLO

Tout d’abord, téléchargez cet exemple de fichier YOLO, qui contient des scripts d’assistance pour commencer.

Lorsque vous utilisez YOLO, nous avons 3 options :

  1. Utilisez des poids de modèle préentraînés pour YOLO. Le modèle préentraîné a été formé sur un jeu de données volumineux avec 80 classes (catégories) pour les objets quotidiens tels que bus, personne, sandwich, etc. Si vous souhaitez télécharger un modèle YOLO préentraîné au format ONNX, vous pouvez le faire ici. Ensuite, vous pouvez passer à la dernière étape de ce tutoriel pour apprendre à intégrer ce modèle dans une application.

  2. Implémentez l'apprentissage par transfert avec un jeu de données personnalisé. Le transfert d’apprentissage est une méthode permettant d’utiliser un modèle entraîné comme point de départ pour entraîner un modèle qui résout une tâche différente mais associée. Ce tutoriel utilisera les poids YOLO préentraînés avec 80 classes pour former un modèle comportant 20 classes en utilisant le jeu de données VOC. Si vous souhaitez créer votre propre jeu de données avec des classes personnalisées, consultez les instructions ci-dessous.

  3. Entraîner YOLO à partir de zéro. Cette technique n’est pas recommandée, car il est très difficile de converger. Le document YOLO original a d'abord entraîné Darknet sur ImageNet (contenant des centaines de milliers de photos) avant de former également l'ensemble du réseau.

Implémentez l’apprentissage de transfert sur les pondérations YOLO préentraînées au jeu de données VOC.

Commençons par la deuxième option et implémentons l’apprentissage du transfert en procédant comme suit.

  1. Dans une fenêtre miniconda, accédez à l’exemple de répertoire yolo et exécutez la commande suivante pour installer tous les packages pip requis pour YOLO.

pip install -r requirements.txt

  1. Exécutez le script d’installation pour télécharger les données et les pondérations préentraînées

python setup.py

  1. Transformez le jeu de données. Pour tools/voc2012.py plus d’informations sur l’implémentation, ce format est basé sur l’API de détection d’objets tensorflow. De nombreux champs ne sont pas obligatoires, mais ont été renseignés ici pour la compatibilité avec l’API officielle.
python tools/voc2012.py \
  --data_dir './data/voc2012_raw/VOCdevkit/VOC2012' \
  --split train \
  --output_file ./data/voc2012_train.tfrecord

python tools/voc2012.py \
  --data_dir './data/voc2012_raw/VOCdevkit/VOC2012' \
  --split val \
  --output_file ./data/voc2012_val.tfrecord
  1. Effectuez l’apprentissage du modèle. Exécutez les commandes suivantes :
python convert.py
python detect.py --image ./data/meme.jpg # Sanity check

python train.py \
	--dataset ./data/voc2012_train.tfrecord \
	--val_dataset ./data/voc2012_val.tfrecord \
	--classes ./data/voc2012.names \
	--num_classes 20 \
	--mode fit --transfer darknet \
	--batch_size 16 \
	--epochs 10 \
	--weights ./checkpoints/yolov3.tf \
	--weights_num_classes 80 

Vous disposez maintenant d’un modèle réentraîné avec 20 classes prêtes à l’emploi.

Étapes suivantes

Maintenant que nous avons créé un modèle TensorFlow, nous devons le convertir au format ONNX à utiliser avec les API Windows Machine Learning.