Help us understand the problem. What is going on with this article?

Google ColabでYOLOを動かす

More than 1 year has passed since last update.

モチベーション

Deep Learning基礎講座で画像の分類、テキストの生成などは学んだので、もう少し他のことも試してみたい。以下やってみたいこと

  • 物体検出(画像) <- 今回コレ
  • 物体検出(動画)
  • 画像の生成
  • 強化学習

Kaggleにも取り組んでみたいし、TensorFlow2.0もやりたいし・・・。仕事してる暇がない:sob:

物体検出に使うアルゴリズム

物体検出には

  • Faster R-CNN
  • YOLO (You only Look Once)
  • SSD (Single Shot Detector)

などいくつかのアルゴリズムがあるようですが、理論の違いはよくわかっていません。とりあえずよく名前を聞くYOLOを動かしてみることにしました。https://pjreddie.com/darknet/yolo/ によると他の方法よりも速くて正確だということです(サイトの色合いがアレですね・・・)

image.png

実行環境

色々葛藤、試行錯誤した結果、いつものGoogle Colabに落ち着きました。

  • どうもYOLOの実行はコマンドを叩けばいい(自分でPythonのコードを書く必要がない)みたいだから、ローカルマシンの方が楽そう(Google Colabではターミナルは使えない。!を付ければコマンド実行はできる)。あとGoogle Colabでは画像、動画の表示が難しそう
  • ただ、Darknet(YOLOを実現するためのフレームワーク)はLinux前提だが、ローカルマシンはWindows
  • 一応Windows版もあるが、自分でコンパイルする必要がある
  • 面倒臭そうなのでGoogle Colabにした(正確にはWindowsでチャレンジしようとしたが、その過程でCUDAがうまくインストールできなかったり、Anacondaがいつの間にかアンインストールされたりで諦めた)

書いたコード

Darknetのダウンロードとインストール。簡単!

%%bash
git clone https://github.com/pjreddie/darknet
cd darknet
make

重みのダウンロード。簡単!

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

物体検出。簡単!

!./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg

どうも通常はここで画像が表示されるようなのですが(標準ソフトが起動)、Google Colabなのでそれが実現できません。これに悩んでいましたがpredictions.jpgというファイルが新たに生成されているようです。なので、

import cv2
import matplotlib.pyplot as plt
import os.path

# 座標軸の削除処理
fig,ax = plt.subplots()
ax.tick_params(labelbottom="off",bottom="off")
ax.tick_params(labelleft="off",left="off")
ax.set_xticklabels([]) 
ax.axis('off')

file = './predictions.jpg'
if os.path.exists(file):
  img = cv2.imread(file)
  show_img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) 
  plt.imshow(show_img)

とすることで無事インラインに画像が表示できました。

image.png

次回予告

Google ColabでYOLOの学習を行う

参考にさせて頂いたページ

shoji9x9
2020年1月よりMaaS関係に従事。プライベートでは機械学習、Kaggleに取り組んでいます。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away