Edited at

Google ColabでYOLOを動かす


モチベーション

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


  • 物体検出(画像) <- 今回コレ

  • 物体検出(動画)

  • 画像の生成

  • 強化学習

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


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

物体検出には


  • Faster R-CNN

  • YOLO (You only Look Once)

  • SSD (Single Shot Detector)

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


実行環境

色々葛藤、試行錯誤した結果、いつもの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)

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


次回予告

Google ColabでYOLOの学習を行う


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