[PYTHON] [YOLO v5] Objekterkennung für maskierte und nicht maskierte Personen

Ich habe gehört, dass YOLO v5 veröffentlicht wurde, also habe ich es versucht. https://github.com/ultralytics/yolov5/

Inhaltsverzeichnis

  1. [Nutzungsdaten und -zweck](# 1-Nutzungsdaten und -zweck)
  2. [Implementierungsbeispiel](# 2-Implementierungsbeispiel)
  3. [Datenaufbereitung](# 2-1-Datenaufbereitung)
  4. [Vorab trainiertes Modell der COCO-Daten herunterladen](# 2-2 - Vorab trainiertes Modell der Kokosdaten herunterladen)
  5. [Download Code](# 2-3-Download Code)
  6. [Umweltvorbereitung](# 2-4-Umweltvorbereitung)
  7. [Codeausführung](# 2-5-Codeausführung)
  8. [Codebeschreibung](# 2-6-Codebeschreibung)
  9. [Endlich](# 3-Endlich)

1. Nutzungsdaten und Verwendungszweck

Ich habe Bilder zur Objekterkennung von den folgenden Websites aufgenommen. https://public.roboflow.ai/object-detection/ Es gibt verschiedene Daten, aber da es sich um die Koronaperiode handelt, habe ich die Daten mit und ohne Maske ausgewählt.

Der Zweck besteht darin, Objekte mit und ohne Masken zu erkennen, wie in der Abbildung gezeigt. before.PNG

2. Implementierungsbeispiel

2-1. Datenaufbereitung

Laden Sie zuerst die Daten herunter. Greifen Sie auf die folgende URL zu. https://public.roboflow.ai/object-detection/

Klicken Sie auf ** Mask Wearing Dataset **. data1.png

Klicken Sie auf ** 416x416-Schwarz-Polsterung **. data2.png

Klicken Sie oben rechts auf ** Herunterladen **, wählen Sie ** YOLOv5 Pytorch ** aus und klicken Sie zum Herunterladen auf ** Weiter **.

2-2. Laden Sie das vorab trainierte Modell der COCO-Daten herunter

Bitte laden Sie das Set von folgenden herunter. https://drive.google.com/drive/folders/1Drs_Aiu7xx6S-ix95f9kNsA6ueKRpN2J

Siehe unten für COCO-Datensätze. COCO-Datensatz

2-3. Code herunterladen

Laden Sie ** YOLOv5.ipynb ** vom GitHub unten herunter. https://github.com/yuomori0127/YOLOv5_mask_wearing_data

Wenn Sie den Code in Google Colab sehen möchten, klicken Sie hier [https://colab.research.google.com/drive/1TvyOG9sf-yx86SzBmYO8f1Y6wxVZEKDN?authuser=2#scrollTo=iCLXFYlQbPTM/)

2-4. Umweltvorbereitung

Die verwendete Umgebung ** Google Colab **. Informationen zur Verwendung finden Sie im folgenden Artikel. Die Servergebühr ist kostenlos. Zusammenfassung der Verwendung von Google Colab

Legen Sie die folgenden drei in einen beliebigen Ordner von ** GooleDrive **. ・ Heruntergeladene Daten in 2-1. ・ Vorgeschultes Modell in 2-2 heruntergeladen. ・ ** YOLOv5.ipynb ** in 2-3 heruntergeladen.

2-5. Codeausführung

Öffnen Sie ** YOLOv5.ipynb ** von ** Goole Drive ** in ** Google Colab **.

Zunächst benötigen Sie eine GPU-Ähnlichkeit. Führen Sie oben ! Nvidia-smi aus (Umschalt + Eingabetaste) und ähneln Sie, bis Sie Tesla P100 sehen. Sie können innerhalb von 5 Mal schließen. nvideasmi.png

Sie können es wie folgt zurücksetzen. リセマラ.png

Wenn Sie "Laufzeit" ausführen -> "Alle Verarbeitung ausführen", wird alles ausgeführt. ** Wahrscheinlich stimmt der Ordnername oder die Hierarchie nicht überein. ** ** ** Der Code ist kurz und sollte nicht zu hart sein. Versuchen Sie daher, ihn abzugleichen. Es tut mir Leid.

2-6. Codebeschreibung

Da es kurz ist, werde ich den Code einzeln erklären.

Ich überprüfe die GPU.

!nvidia-smi

importieren.

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

Ich mounte Google Drive.

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

Verzeichnis verschieben

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

Ressourcen überprüfen. Dies dient hauptsächlich zur Überprüfung des Arbeitsspeichers, aber diesmal gibt es nur wenige Daten und es ist eine Epoche von 100, sodass Sie sich nicht zu viele Sorgen machen müssen.

!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()

Ich klone yolov5.

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

Ich habe die für die Ausführung erforderlichen Pakete installiert.

!pip install -r yolov5/requirements.txt

Ich habe "Apex" installiert. Das Lernen wird schneller sein.

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

Tensorboard vorbereiten. Es ist cool.

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

Übrigens war es so, nachdem ich 100 Epochen gelernt hatte. 100 ist nicht genug. (Ich habe vergessen, das Bild des Verlustes aufzunehmen.) tensorboard.png

Lernen Die Argumente werden unter train.py geschrieben, aber ich werde sie auch hier kurz erklären.

#--img: Bildgröße
#--Charge: Chargengröße
#--Epochen: Anzahl der Epochen.
#--Daten: Datendefinitionsdatei. Es wird automatisch erstellt, wenn die Daten heruntergeladen werden. Es ist einfach, also schauen Sie sich bitte den Inhalt an.
#--cfg: Modellkonfigurationsdatei.
#--Name: Modelldateiname. Das genaueste Modell nach dem Training ist das beste_mask_wearing.Es wird als pt gespeichert.
#--Gewichte: Das Originalmodell zur Feinabstimmung. Dieses Mal haben wir das vorab trainierte COCO-Modell angegeben, aber Sie können auch das Modell angeben, das Sie selbst gelernt haben.
!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

Ich schließe daraus. Ich hatte kein gut aussehendes Bild in den Testdaten, daher schließe ich diesmal auf die Trainingsdaten.

!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. Schließlich

YOLOv5 war zu einfach zu bedienen. Sie können einfach lernen, indem Sie die Daten angeben und train.py ausführen. Darüber hinaus erfolgt die Hauptdatenerweiterung automatisch. Die Parameter wurden ebenfalls stark angepasst. Er sagte, er habe ein wenig Krisengefühl, wie die Fähigkeiten des Datenanalysten auf diese Weise gezeigt werden könnten. Das ist es.

Recommended Posts

[YOLO v5] Objekterkennung für maskierte und nicht maskierte Personen
NumPy-Beispielsammlung für diejenigen, die nicht gut in Mathe sind
Java SE8 Gold misst (für diejenigen, die nicht gut darin sind)
Ansible, ein Tool zur Automatisierung der Infrastruktur für Leute, die Ruby nicht gut können
Tipps für diejenigen, die verwirrt sind, wie man is und == in Python verwendet
Entwickelte eine einfache Tabellenberechnungs-App für Leute, die nicht gut in Excel sind
Verfahren zur Erstellung der Umgebung für diejenigen, die mit dem Python-Versionsverwaltungssystem nicht vertraut sind
[Für diejenigen, die TPU verwenden möchten] Ich habe versucht, die Tensorflow Object Detection API 2 zu verwenden
Erklärung für diejenigen, die Probleme mit "Befehl nicht gefunden" in rbenv oder pyenv haben
Für diejenigen, die Probleme beim Zeichnen von Diagrammen mit Python haben
Bildgebende Inspektionsmaschine für diejenigen, die nicht ihr Bestes geben
Kommentar zu Unparteilichkeit und Beständigkeit für diejenigen, die sich nicht verlieben