Dieses Mal habe ich versucht, YOLO v3 in der Umgebung von Google Colaboratory auszuführen.
Befolgen Sie die Schritte, um YOLO v3 in Google Colaboratory einzurichten YOLO-Setup Bitte lesen Sie das Kapitel.
** YOLO ** ist ein ** Echtzeit-Objekterkennungssystem **. Es ist Teil eines neuronalen Netzwerk-Frameworks namens Darknet. Das Wort YOLO ist eine Abkürzung für "Sie schauen nur einmal". YOLO v3 ist Version 3 von YOLO und derzeit die neueste Version. Weitere Informationen finden Sie auf der offiziellen YOLO-Seite.
Die diesmal verwendete Umgebung ist Google Colaboratory. Andere Versionen sind wie folgt.
import platform
import cv2
print("Python " + platform.python_version())
print("OpenCV " + cv2.__version__)
# Python 3.6.9
# OpenCV 4.1.2
Importieren Sie die zur Anzeige des Bildes erforderliche Bibliothek.
import cv2
import matplotlib.pyplot as plt
%matplotlib inline
import matplotlib
Jetzt richten wir YOLO v3 in Google Colab ein. Wir werden ein Arbeitsverzeichnis erstellen und darin arbeiten. Beachten Sie, dass dieses Setup nach dem ersten nicht erforderlich ist (arbeiten Sie zu diesem Zweck im Arbeitsverzeichnis).
import os
os.mkdir(working_dir) # working_dir ist das Arbeitsverzeichnis
os.chdir(working_dir)
Darknet klonen.
!git clone https://github.com/pjreddie/darknet
Wechseln Sie nach dem Klonen in das Darknet-Verzeichnis und führen Sie make aus.
os.chdir(working_dir + 'darknet')
!make
Laden Sie nach Abschluss der Erstellung das trainierte Modell (Gewicht) herunter.
!wget https://pjreddie.com/media/files/yolov3.weights
Damit ist die Einrichtung von YOLO v3 in Google Colab abgeschlossen.
Bewegen wir nun YOLO, um Objekte zu erkennen. Verwenden Sie das bereits vorbereitete Beispielbild. Das Beispielbild befindet sich unter Darknet / Daten.
!./darknet detect cfg/yolov3.cfg yolov3.weights 'data/dog.jpg'
# layer filters size input output
# 0 conv 32 3 x 3 / 1 608 x 608 x 3 -> 608 x 608 x 32 0.639 BFLOPs
# 1 conv 64 3 x 3 / 2 608 x 608 x 32 -> 304 x 304 x 64 3.407 BFLOPs
# 2 conv 32 1 x 1 / 1 304 x 304 x 64 -> 304 x 304 x 32 0.379 BFLOPs
# 3 conv 64 3 x 3 / 1 304 x 304 x 32 -> 304 x 304 x 64 3.407 BFLOPs
# 4 res 1 304 x 304 x 64 -> 304 x 304 x 64
# 5 conv 128 3 x 3 / 2 304 x 304 x 64 -> 152 x 152 x 128 3.407 BFLOPs
# 6 conv 64 1 x 1 / 1 152 x 152 x 128 -> 152 x 152 x 64 0.379 BFLOPs
# 7 conv 128 3 x 3 / 1 152 x 152 x 64 -> 152 x 152 x 128 3.407 BFLOPs
# 8 res 5 152 x 152 x 128 -> 152 x 152 x 128
# .........
# 97 upsample 2x 38 x 38 x 128 -> 76 x 76 x 128
# 98 route 97 36
# 99 conv 128 1 x 1 / 1 76 x 76 x 384 -> 76 x 76 x 128 0.568 BFLOPs
# 100 conv 256 3 x 3 / 1 76 x 76 x 128 -> 76 x 76 x 256 3.407 BFLOPs
# 101 conv 128 1 x 1 / 1 76 x 76 x 256 -> 76 x 76 x 128 0.379 BFLOPs
# 102 conv 256 3 x 3 / 1 76 x 76 x 128 -> 76 x 76 x 256 3.407 BFLOPs
# 103 conv 128 1 x 1 / 1 76 x 76 x 256 -> 76 x 76 x 128 0.379 BFLOPs
# 104 conv 256 3 x 3 / 1 76 x 76 x 128 -> 76 x 76 x 256 3.407 BFLOPs
# 105 conv 255 1 x 1 / 1 76 x 76 x 256 -> 76 x 76 x 255 0.754 BFLOPs
# 106 yolo
# Loading weights from yolov3.weights...Done!
# data/dog.jpg: Predicted in 22.825540 seconds.
# dog: 100%
# truck: 92%
# bicycle: 99%
Die Objekterkennung ist abgeschlossen. Lassen Sie uns das Bild anzeigen und überprüfen. Das Bild, das das Ergebnis der Objekterkennung darstellt, ist darknet / vorhers.jpg.
img_in = cv2.imread('data/dog.jpg')
img_out = cv2.imread('predictions.jpg')
plt.figure(figsize=[20,10])
plt.subplot(121);plt.imshow(img_in[:,:,::-1]);plt.axis('off')
plt.subplot(122);plt.imshow(img_out[:,:,::-1]);plt.axis('off')
"Hund", "Fahrrad" und "Auto" können erkannt werden.
Lassen Sie uns auch andere Bilder überprüfen.
!./darknet detect cfg/yolov3.cfg yolov3.weights 'data/horses.jpg'
img_in = cv2.imread('data/horses.jpg')
img_out = cv2.imread('predictions.jpg')
plt.figure(figsize=[20,10])
plt.subplot(121);plt.imshow(img_in[:,:,::-1]);plt.axis('off')
plt.subplot(122);plt.imshow(img_out[:,:,::-1]);plt.axis('off')
!./darknet detect cfg/yolov3.cfg yolov3.weights 'data/person.jpg'
img_in = cv2.imread('data/person.jpg')
img_out = cv2.imread('predictions.jpg')
plt.figure(figsize=[20,10])
plt.subplot(121);plt.imshow(img_in[:,:,::-1]);plt.axis('off')
plt.subplot(122);plt.imshow(img_out[:,:,::-1]);plt.axis('off')
!./darknet detect cfg/yolov3.cfg yolov3.weights 'data/kite.jpg'
img_in = cv2.imread('data/kite.jpg')
img_out = cv2.imread('predictions.jpg')
plt.figure(figsize=[20,10])
plt.subplot(121);plt.imshow(img_in[:,:,::-1]);plt.axis('off')
plt.subplot(122);plt.imshow(img_out[:,:,::-1]);plt.axis('off')
Dieses Mal habe ich versucht, YOLO v3 in der Umgebung von Google Colaboratory auszuführen. Die Objekterkennung wurde unter Verwendung der bereits vorbereiteten Beispielbilder durchgeführt. Ich denke, es wäre interessant, verschiedene Bilder vorzubereiten und Objekte zu erkennen.
Recommended Posts