[PYTHON] J'ai essayé d'exécuter YOLO v3 avec Google Colab

introduction

Cette fois, j'ai essayé d'exécuter YOLO v3 dans l'environnement de Google Colaboratory.

Suivez les étapes pour configurer YOLO v3 sur Google Colaboratory Configuration YOLO Veuillez vous référer au chapitre.

Qu'est-ce que YOLO v3

** YOLO ** est un ** système de détection d'objets en temps réel **. Il fait partie d'un cadre de réseau neuronal appelé Darknet. Le mot YOLO est un acronyme pour "Vous ne regardez qu'une seule fois". YOLO v3 est la version 3 de YOLO et est actuellement la dernière version. Pour plus de détails, veuillez vous référer à la page officielle YOLO.

YOLO v3 sur Google Colab

environnement

L'environnement utilisé cette fois est Google Colaboratory. Les autres versions sont les suivantes.

import platform
import cv2

print("Python " + platform.python_version())
print("OpenCV " + cv2.__version__)
# Python 3.6.9
# OpenCV 4.1.2

Préparation

Importez la bibliothèque requise pour afficher l'image.

import cv2
import matplotlib.pyplot as plt
%matplotlib inline
import matplotlib

Configuration YOLO

Maintenant, configurons YOLO v3 sur Google Colab. Nous allons créer un répertoire de travail et y travailler. Notez que cette configuration n'est pas nécessaire après la première (pour cela, travaillez sous le répertoire de travail).

import os

os.mkdir(working_dir) # working_dir est le répertoire de travail
os.chdir(working_dir)

Clonez le darknet.

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

Après le clonage, accédez au répertoire darknet et exécutez make.

os.chdir(working_dir + 'darknet')
!make

Une fois la création terminée, téléchargez le modèle entraîné (poids).

!wget https://pjreddie.com/media/files/yolov3.weights

Ceci termine la configuration de YOLO v3 sur Google Colab.

Bougeons YOLO

Maintenant, déplaçons YOLO pour détecter les objets. Utilisez l'image d'exemple déjà préparée. L'image d'exemple est sous darknet / data.

!./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%

La détection d'objet est terminée. Montrons l'image et vérifions-la. L'image qui représente le résultat de la détection d'objet est darknet / predictions.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')

image.png

"Chien", "vélo" et "voiture" peuvent être détectés.

Vérifions également d'autres images.

!./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')

image.png

!./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')

image.png

!./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')

image.png

Résumé

Cette fois, j'ai essayé d'exécuter YOLO v3 dans l'environnement de Google Colaboratory. La détection d'objets a été effectuée à l'aide des images échantillons déjà préparées. Je pense qu'il serait intéressant de préparer diverses images et de détecter des objets.

référence

Recommended Posts

J'ai essayé d'exécuter YOLO v3 avec Google Colab
J'ai essayé la détection d'objets avec YOLO v3 (TensorFlow 2.0) sur un processeur Windows!
J'ai essayé d'exécuter pymc
J'ai essayé d'exécuter TensorFlow
J'ai essayé la détection d'objets avec YOLO v3 (TensorFlow 2.1) sur le GPU de windows!
J'ai essayé d'exécuter l'application sur la plateforme IoT "Rimotte"
Exécutez YOLO v3 sur AWS v2
Exécutez YOLO v3 sur AWS
J'ai essayé MLflow sur Databricks
J'ai essayé d'exécuter PIFuHD sur Windows pour le moment
Une erreur survenue lors de l'apprentissage de YOLO avec Google Colab
J'ai essayé AdaNet pour les données de table
J'ai essayé d'exécuter GAN dans Colaboratory
J'ai essayé Cython sur Ubuntu sur VirtualBox
J'ai essayé Grumpy (allez exécuter Python).
J'ai essayé d'exécuter prolog avec python 3.8.2.
Jouez avec Turtle sur Google Colab
Remarques sur l'exécution de M5Stick V avec uPyLoader
J'ai essayé d'utiliser l'API de données YOUTUBE V3
Apprentissage automatique avec Pytorch sur Google Colab
Segment d'image utilisant Oxford_iiit_pet dans Google Colab
J'ai essayé d'exécuter Flask sur Raspberry Pi 3 Model B + en utilisant Nginx et uWSGI
J'ai essayé d'utiliser l'API à distance avec GAE / J
J'ai essayé "License OCR" avec l'API Google Vision
J'ai essayé d'utiliser l'API Google Cloud Vision
J'ai essayé de lancer jupyter nteract sur le serveur heroku
[Pythonocc] J'ai essayé d'utiliser la CAO sur un notebook Jupyter
Essayez d'exécuter Distributed TensorFlow sur Google Cloud Platform
J'ai essayé d'exécuter faiss avec python, Go, Rust
J'ai essayé d'exécuter python -m summpy.server -h 127.0.0.1 -p 8080
J'ai essayé "Receipt OCR" avec l'API Google Vision
J'ai essayé d'exécuter Deep Floor Plan avec Python 3.6.10.
J'ai essayé d'exécuter alembic, un outil de migration pour Python
J'ai essayé l'API de message LINE (line-bot-sdk-python) avec GAE
J'ai essayé de jouer avec la calculatrice avec tkinter
J'ai essayé de gratter
J'ai essayé PyQ
J'ai essayé AutoKeras
[Rails] v1.0 est sorti sur google-cloud-vision de gem, j'ai donc essayé de le soutenir
J'ai essayé le moulin à papier
J'ai essayé django-slack
J'ai essayé Django
YOLO avec Chainer
J'ai essayé spleeter
J'ai essayé cgo
J'ai essayé Python sur Mac pour la première fois.
J'ai essayé d'implémenter Mine Sweeper sur un terminal avec python
J'ai essayé d'exécuter BERT avec Sakura VPS (sans GPU)
J'ai essayé d'exécuter python à partir d'un fichier chauve-souris
J'ai essayé python pour la première fois avec heroku
J'ai essayé d'exécuter TensorFlow dans l'environnement AWS Lambda: Préparation
J'ai essayé un test de régression visuelle sur les pages GitHub
[Python] J'ai essayé d'exécuter un serveur local en utilisant flask
J'ai essayé d'utiliser PySpark de Jupyter 4.x sur EMR
J'ai essayé l'interpolation d'entrée pour UE4 Python VS Code
J'ai essayé Kaokore, un ensemble de données japonais classique, sur EfficientNet.
J'ai essayé d'installer le noyau Linux sur virtualbox + vagrant