モチベーション
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の学習を行う