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の学習を行う

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