[PYTHON] Comment faire un modèle pour la détection d'objets avec YOLO en 3 heures

Je vais vous apprendre à réaliser un modèle pour la détection d'objets à l'aide de YOLO en 3 heures.

C'est un gâchis, mais je vais vous montrer comment détecter un objet très facilement.

L'outil utilisé pour créer cette fois

Article référencé (vraiment reconnaissant)

Comment faire un modèle

Qu'est-ce que YOLO en premier lieu? Qu'est-ce que la détection d'objets? Veuillez consulter ce qui précède pour obtenir des réponses à des questions telles que. Cet article est également inclus dans les 3 heures de création, alors pardonnez-moi s'il y a des endroits où il est cassé.

① Préparez les données de l'enseignant et effectuez un travail d'annotation avec labelImg

Préparez des données simples sur les enseignants. Dans mon cas, je voulais détecter la maison de vinyle cette fois, j'ai donc préparé 30 images pour le moment. Comme ça. La photographie aérienne de Google Maps est si belle![Screenshot 2019-12-20 20.37.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285361 /aa7b62c1-f85c-4b13-b543-35e0fe032768.png)

Nous effectuerons un travail d'annotation (étiquetage) dessus. Cette fois, j'ai utilisé un outil appelé labelImg. Il existe d'autres outils appelés VoTT et BBox-Label-Tool, mais VoTT prend en charge YOLO, mais si cela ne fonctionne pas, il est difficile de recommencer, et BBox est difficile à configurer lorsque vous essayez de créer plusieurs classes. J'ai donc choisi labelImg.

Exécutez la commande suivante pour rendre labelImg prêt à l'emploi. Si Python3 est installé, vous pouvez sauter la ligne 3.4.

git clone https://github.com/tzutalin/labelImg.git sudo apt install pyqt5-dev-tools sudo apt install python3-pip sudo pip3 install lxml cd labelImg make qt5py3

Créez un dossier avec n'importe quel nom dans le dossier labelimg et déplacez-y l'image préparée. (Vinyle, etc. pour les maisons en vinyle) Puis modifiez predefined_class.txt dans labelimg / data. Au début, environ 20 classes sont écrites à l'avance, mais cette fois, supprimez tous les noms de classe déjà écrits et écrivez le nom de classe avec un saut de ligne avec votre nom préféré. J'ai écrit une ligne avec du vinyle.

python3 labelimg.py Exécutez labelImg par. Coupe pour le travail interne. Grosso modo

  1. Ouvrez le répertoire que vous souhaitez utiliser
  2. Utilisez Change Save Dir pour spécifier un fichier texte qui décrit les coordonnées de l'étiquette (créé un dossier tel que vinyl_txt dans le dossier labelimg).
  3. Cliquez sur Pascal VOC sous Enregistrer et changez en YOLO
  4. Après cela, D-> faites glisser la souris pour entourer l'objet-> w appuyez pour confirmer la position de l'étiquette-> Enregistrer pour enregistrer-> D pour appuyer sur l'image suivante ...

Je vais l'étiqueter comme ça. 30 feuilles, c'est un instant. Ceci termine la préparation des données de l'enseignant.

② Préparation à l'apprentissage

Nous nous préparerons à apprendre. Pour utiliser YOLO, installez un framework appelé darknet. Ce framework fonctionne plutôt bien avec YOLO. (Au contraire, est-il utilisé par les développeurs YOLO?) Installez à partir de la commande suivante.

git clone https://github.com/pjreddie/darknet.git

Ensuite, déplacez les images utilisées avec labelImg vers darknet / data / images et les fichiers texte créés avec labelImg vers darknet / data / labels. Dans cet état / sur darknet python3 process.py Éxécuter. Cela sépare les données de l'enseignant en un fichier enseignant et un fichier d'apprentissage.

Nous ferons divers travaux à partir d'ici. Énumérer. -Créez /darknet/data/images/obj.names et entrez le nom de l'étiquette que vous souhaitez identifier (vinyle) ・ Faites de même pour /darknet/data/images/obj.list -Réglez les classes sur la ligne 244 de /darknet/cfg/yolo-obj.cfg à 1 comme ci-dessus, et réglez les filtres sur la ligne 237 sur (classes + coord + 1) * 5. Dans ce cas, il est de 30. -Max_batches sur la 20e ligne de /darknet/cfg/yolo-obj.cfg est le nombre de fois pour apprendre réellement. L'idéal est les classes * 2000, donc dans ce cas 2000.

Si /darknet/cfg/yolo-obj.cfg n'existe pas, copiez /darknet/cfg/yolov2-voc.cfg et modifiez-le. 3ème ligne: Set batch = 64. Le nombre d'images utilisées pour chaque étape d'apprentissage. Vous pouvez commenter et activer la ligne 6 4ème ligne: définir les subdivisions = 8. Le lot est divisé par 8. Vous pouvez commenter et activer la ligne 7

Enfin, modifiez /darknet/cfg/obj.data comme suit: classes=1 train = data/images/train.txt valid = data/images/test.txt labels = data/images/obj.names backup = backup/

https://pjreddie.com/media/files/darknet19_448.conv.23 Vous êtes prêt à partir en téléchargeant.

③ Commencez à apprendre avec Google Colabatory

C'est enfin apprendre. Dans l'état actuel ./darknet detector train cfg/obj.data cfg/yolo-obj.cfg darknet19_448.conv.23 C'est bien d'apprendre pour la première fois, mais cela prend un temps incroyablement long avec un processeur et je suis désespéré. Par conséquent, ici, nous allons apprendre par GPU en utilisant Google Colaboratory.

Google Colaboratory est un outil qui vous permet d'utiliser le GPU gratuitement, et il est très convivial car il est essentiellement équipé d'outils d'apprentissage en profondeur. Les débutants en IA devraient certainement l'utiliser. (Uniquement lorsque vous n'utilisez pas d'informations qui ne peuvent pas être divulguées car elles sont open source.)

Téléchargez le dossier darknet sur lequel vous travailliez sur le disque. Après cela, enregistrez le fichier lié à Google Collaboration à partir de ce qui suit et faites ce qui est écrit en .ipynb. git clone https://github.com/foifoi1201/yolo.git

Si votre message est correct, cela devrait terminer la création du modèle. Le reste est basé sur les .weights téléchargés ./darknet detect cfg/obj.cfg obj_final.weights data/***.jpg Je pense qu'il peut être détecté en exécutant.

résultat!

Si vous essayez de créer un modèle de détection d'objet avec 30 données d'enseignant dans les 3 heures, le résultat sera comme ceci.

スクリーンショット 2019-12-21 2.42.53.png

Je peux le confirmer. .. ..

La détection d'objets à l'aide de YOLO est très difficile à créer, et en fait, il peut ne pas être possible de tout bien faire si vous le faites de cette façon. De plus, Google Colabatory est constamment mis à jour, il est donc possible que la même méthode de création ne fonctionne pas avec le temps. (En fait, il semble que la mise à jour ait également été effectuée cette fois-ci, et sa création a pris plus de temps que prévu. Merci beaucoup pour les références ,,,,,,,)

J'espère que cela sera utile aux mêmes débutants en IA que moi.

Recommended Posts

Comment faire un modèle pour la détection d'objets avec YOLO en 3 heures
Comment créer un package Python à l'aide de VS Code
Comment exécuter une commande à l'aide d'un sous-processus en Python
Comment définir plusieurs variables dans une instruction Python for
Comment créer un package Python (écrit pour un stagiaire)
Comment générer une requête à l'aide de l'opérateur IN dans Django
J'ai fait un chronomètre en utilisant tkinter avec python
Comment faire une traduction japonais-anglais
Comment créer un bot slack
Comment créer un robot - Avancé
Comment créer une fonction récursive
[Blender] Comment créer un plug-in Blender
Une introduction légère à la détection d'objets
Comment créer un robot - Basic
Comment transformer une chaîne en tableau ou un tableau en chaîne en Python
[Introduction à Python] Comment utiliser l'opérateur in dans l'instruction for?
Spigot (Paper) Introduction à la création d'un plug-in pour 2020 # 01 (Construction de l'environnement)
Comment faire un test unitaire Part.1 Modèle de conception pour l'introduction
[Python] Comment rendre une classe itérable
Comment dessiner un graphique avec Matplotlib
Comment installer un package à l'aide d'un référentiel
Comment obtenir stacktrace en python
Comment créer un indicateur personnalisé Backtrader
Comment créer un plan de site Pelican
Comment déplacer l'objet BufferImageStim dans PsychoPy
Comment générer un nouveau groupe de journaux dans CloudWatch à l'aide de python dans Lambda
J'ai appris le grattage à l'aide de sélénium pour créer un modèle de prédiction de courses de chevaux.
Comment obtenir la valeur du magasin de paramètres dans lambda (en utilisant python)
Comment rendre le nom du conteneur accessible dans Docker en tant que sous-domaine
Comment exécuter un démarrage rapide pour Google Cloud Text-to-Speech .NET dans Unity
Comment créer un système de dialogue dédié aux débutants
Comment coder un drone en utilisant la reconnaissance d'image
Comment créer un plug-in Spigot (pour les débutants Java)
Comment effacer un taple dans une liste (Python)
Comment incorporer des variables dans des chaînes python
Comment créer un objet fonction à partir d'une chaîne
Si vous souhaitez afficher la valeur à l'aide des choix du modèle dans le modèle Django
Comment créer un fichier JSON en Python
Comment créer un dictionnaire avec une structure hiérarchique.
Comment générer un objet Python à partir de JSON
Comment implémenter un sélecteur de dégradé dans Houdini
Comment créer un plug-in QGIS (génération de package)
Continuer à faire des prévisions de stock AI pendant 10 heures par jour le 1er mois
Comment écrire une instruction ShellScript Bash for
Comment notifier les canaux Discord en Python
J'ai lu "Comment créer un laboratoire de piratage"
[Python] Comment dessiner un histogramme avec Matplotlib
Conseils pour utiliser Elastic Search de manière efficace
Comment créer une API Rest dans Django
Comment écrire un document tuple nommé en 2020
Comment compter les nombres dans une plage spécifique
Faisons un module pour Python en utilisant SWIG
Comment mettre en ligne sur un Drive partagé à l'aide de pydrive