[PYTHON] [YOLO v5] Détection d'objets pour les personnes masquées et celles qui ne le sont pas

J'ai entendu dire que YOLO v5 était sorti, alors je l'ai essayé. https://github.com/ultralytics/yolov5/

table des matières

  1. [Données d'utilisation et finalité](# 1-Données d'utilisation et finalité)
  2. [Exemple de mise en œuvre](# 2-Exemple de mise en œuvre)
  3. [Préparation des données](# 2-1-Préparation des données)
  4. [Télécharger le modèle pré-entraîné des données COCO](# 2-2-Télécharger le modèle pré-entraîné des données coco)
  5. [Code de téléchargement](# 2-3-Code de téléchargement)
  6. [Préparation environnementale](# 2-4-Préparation environnementale)
  7. [Exécution de code](Exécution de code # 2-5)
  8. [Description du code](# 2-6-Code Description)
  9. [Enfin](# 3-Enfin)

1. Données d'utilisation et finalité

J'ai ramassé des images pour la détection d'objets sur les sites suivants. https://public.roboflow.ai/object-detection/ Il existe différentes données, mais comme il s'agit de la période corona, j'ai sélectionné les données avec et sans masque.

Le but est de détecter des objets avec et sans masques comme indiqué sur la figure. before.PNG

2. Exemple de mise en œuvre

2-1. Préparation des données

Téléchargez d'abord les données. Accédez à l'URL suivante. https://public.roboflow.ai/object-detection/

Cliquez sur ** Mask Wearing Dataset **. data1.png

Cliquez sur ** 416x416-black-padding **. data2.png

Cliquez sur ** Télécharger ** dans le coin supérieur droit, sélectionnez ** YOLOv5 Pytorch **, puis cliquez sur ** Continuer ** pour télécharger.

2-2. Télécharger le modèle pré-entraîné des données COCO

Veuillez télécharger l'ensemble à partir de ce qui suit. https://drive.google.com/drive/folders/1Drs_Aiu7xx6S-ix95f9kNsA6ueKRpN2J

Voir ci-dessous pour les ensembles de données COCO. Ensemble de données COCO

2-3. Téléchargement du code

Téléchargez ** YOLOv5.ipynb ** à partir du GitHub ci-dessous. https://github.com/yuomori0127/YOLOv5_mask_wearing_data

Si vous souhaitez voir le code sur Google Colab, cliquez ici [https://colab.research.google.com/drive/1TvyOG9sf-yx86SzBmYO8f1Y6wxVZEKDN?authuser=2#scrollTo=iCLXFYlQbPTM/)

2-4. Préparation de l'environnement

L'environnement utilisé ** Google Colab **. Consultez l'article suivant pour savoir comment l'utiliser. Les frais de serveur sont gratuits. Résumé de l'utilisation de Google Colab

Mettez les trois suivants dans n'importe quel dossier de ** GooleDrive **. ・ Données téléchargées en 2-1. ・ Modèle pré-entraîné téléchargé en 2-2. ・ ** YOLOv5.ipynb ** téléchargé en 2-3.

2-5. Exécution du code

Ouvrez ** YOLOv5.ipynb ** à partir de ** Goole Drive ** dans ** Google Colab **.

Tout d'abord, vous avez besoin d'un resemara GPU. Exécutez ! Nvidia-smi en haut (Maj + Entrée) et ressemblez jusqu'à ce que vous voyiez Tesla P100. Vous pouvez fermer dans les 5 fois. nvideasmi.png

Vous pouvez le réinitialiser à partir des éléments suivants. リセマラ.png

Si vous exécutez runtime-> ʻexecute all processing`, il exécutera tout, ** Le nom ou la hiérarchie du dossier ne correspond probablement pas. ** ** Le code est court et ne devrait pas être trop dur, alors essayez de le faire correspondre. Je suis désolé.

2-6. Description du code

Comme il est court, j'expliquerai le code un par un.

Je vérifie le GPU.

!nvidia-smi

importer.

from IPython.display import Image, clear_output  # to display images

Je monte Google Drive.

from google.colab import drive
drive.mount('/content/drive')

Déplacer le répertoire

import os
os.chdir("./drive/My Drive/YOLOv5/")

Vérification des ressources. C'est principalement pour vérifier la RAM, mais cette fois il y a peu de données et c'est 100 epoch donc vous n'avez pas à vous inquiéter trop.

!ln -sf /opt/bin/nvidia-smi /usr/bin/nvidia-smi
!pip install gputil
!pip install psutil
!pip install humanize
import psutil
import humanize
import os
import GPUtil as GPU
GPUs = GPU.getGPUs()
# XXX: only one GPU on Colab and isn’t guaranteed
gpu = GPUs[0]
def printm():
    process = psutil.Process(os.getpid())
    print("Gen RAM Free: " + humanize.naturalsize( psutil.virtual_memory().available ), " | Proc size: " + humanize.naturalsize( process.memory_info().rss))
    print("GPU RAM Free: {0:.0f}MB | Used: {1:.0f}MB | Util {2:3.0f}% | Total {3:.0f}MB".format(gpu.memoryFree, gpu.memoryUsed, gpu.memoryUtil*100, gpu.memoryTotal))
printm()

Je clone yolov5.

!git clone https://github.com/ultralytics/yolov5

J'ai installé les packages nécessaires à l'exécution.

!pip install -r yolov5/requirements.txt

J'ai installé ʻapex`. L'apprentissage sera plus rapide.

!git clone https://github.com/NVIDIA/apex
!pip install -v --no-cache-dir --global-option="--cpp_ext" --global-option="--cuda_ext" ./apex

Préparation du tensorboard. C'est cool.

# Start tensorboard
%load_ext tensorboard
%tensorboard --logdir runs

Au fait, c'était comme ça après avoir appris 100 époques. 100 ne suffit pas. (J'ai oublié de prendre l'image de la perte.) tensorboard.png

Apprendre Les arguments sont écrits en regardant train.py, mais je vais les expliquer brièvement ici aussi.

#--img: Taille de l'image
#--lot: taille du lot
#--epochs: nombre d'époques.
#--data: fichier de définition de données. Il est créé automatiquement lors du téléchargement des données. C'est simple, alors jetez un œil au contenu.
#--cfg: fichier de configuration du modèle.
#--name: nom du fichier modèle. Le modèle le plus précis après l'entraînement est le meilleur_mask_wearing.Il est enregistré sous pt.
#--poids: Le modèle original pour un réglage fin. Cette fois, nous avons spécifié le modèle pré-entraîné COCO, mais vous pouvez également spécifier le modèle que vous avez appris vous-même.
!python yolov5/train.py --img 416 --batch 16 --epochs 100 --data data/data.yaml --cfg yolov5/models/yolov5x.yaml --name mask_wearing --weights yolov5_models/yolov5x.pt

J'infère. Je n'avais pas une belle image dans les données de test, donc cette fois j'infère les données d'entraînement.

!python yolov5/detect.py --weights weights/best_mask_wearing.pt --img 416 --conf 0.4 --source data/train/images/
Image(filename='/content/drive/My Drive/YOLOv5/inference/output/0_10725_jpg.rf.99ff78c82dadd6d49408164489cb6582.jpg', width=600)

after.png

3. Enfin

YOLOv5 était trop facile à utiliser. Vous pouvez apprendre simplement en spécifiant les données et en exécutant train.py. De plus, l'augmentation majeure des données se fait automatiquement, Les paramètres ont également été ajustés un peu. Il a dit qu'il ressentait un petit sentiment de crise quant à la façon dont les compétences de l'analyste de données pourraient être montrées de cette manière. C'est tout.

Recommended Posts

[YOLO v5] Détection d'objets pour les personnes masquées et celles qui ne le sont pas
Collection d'exemples NumPy pour ceux qui ne sont pas bons en mathématiques
Mesures Java SE8 Gold (pour ceux qui ne sont pas bons dans ce domaine)
Ansible, un outil d'automatisation d'infrastructure pour les personnes qui ne sont pas douées pour Ruby
Conseils pour ceux qui ne savent pas comment utiliser is et == en Python
Développement d'une application de calcul de table simple pour les personnes qui ne sont pas douées d'Excel
Procédure de construction de l'environnement pour ceux qui ne sont pas familiarisés avec le système de gestion de version python
[Pour ceux qui veulent utiliser TPU] J'ai essayé d'utiliser l'API de détection d'objets Tensorflow 2
Explication pour ceux qui ont des problèmes avec "commande introuvable" dans rbenv ou pyenv
Pour ceux qui ont du mal à dessiner des graphiques avec python
Machine d'inspection par imagerie pour ceux qui ne font pas de leur mieux
[AWS] Une histoire qui peut être utile pour ceux qui découvrent Lambda-Python et DynamoDB
Commentaire d'impartialité et de cohérence pour ceux qui ne tombent pas amoureux