Google ColabでYOLOv3を使って物体検出してみた
はじめに
Google Colaboratoryで、物体検出システムとして有名なYOLO v3を動かしてみたのでまとめました。
目次
YOLO v3とは
YOLOとは、リアルタイム物体検出システムです。
Darknetという、ニューラルネットワークフレームワークの一部です。
YOLOということばは、「You only look once(一度しか見ない)」の頭文字をとったものです。
YOLO v3は、YOLOのversion3のことです(詳細は、公式ページを参照下さい)。
Google ColabでYOLO v3
環境
今回使用する環境はGoogle Colaboratoryです。
その他、バージョンは以下です。
import platform
import cv2
print("Python " + platform.python_version())
print("OpenCV " + cv2.__version__)
# Python 3.6.9
# OpenCV 4.1.2
準備
画像を表示するのに必要なライブラリをインポートしておきます。
import cv2
import matplotlib.pyplot as plt
%matplotlib inline
import matplotlib
YOLOのセットアップ
それでは、Google ColabにYOLO v3をセットアップしていきましょう。
作業ディレクトリを作成し、その中で作業を行うことにします。
なお、このセットアップは最初の一回だけ行えば以後不要です(そのために、作業ディレクトリ配下で作業します)。
import os
os.mkdir(working_dir) # working_dir は作業ディレクトリ
os.chdir(working_dir)
darknetをクローンします。
!git clone https://github.com/pjreddie/darknet
クローンができたら、darknetディレクトリ配下に移動し、makeを実行します。
os.chdir(working_dir + 'darknet')
!make
makeが終わったら、学習済みモデル(のウエイト)をダウンロードします。
!wget https://pjreddie.com/media/files/yolov3.weights
これで、Google ColabへのYOLO v3のセットアップは完了です。
YOLOを動かしてみよう
それでは、YOLOを動かして物体検出をしてみましょう。
すでに用意されているサンプル画像を使用します。
サンプル画像は、 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%
物体検出が終わりました。
それでは画像を表示して確認してみましょう。
物体検出の結果を描画した画像は、 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')
「犬」「自転車」「車」を検出できています。
その他の画像も確認してみましょう。
!./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')
まとめ
今回は、Google Colaboratoryの環境でYOLO v3を動かしてみました。
すでに用意されているサンプル画像で物体検出を行いました。
色々な画像を用意して物体検出してみると面白いと思います。
参考文献
Author And Source
この問題について(Google ColabでYOLOv3を使って物体検出してみた), 我々は、より多くの情報をここで見つけました https://qiita.com/shoku-pan/items/542915604bd5d073286b著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .