Google Colab上でYOLO v3を使って、手持ちの画像の物体検知をしてみた

ディープラーニングの画像処理の勉強のため、YOLO v3で手持ちの画像の物体検知を試みます。Google Colaboratory上でYOLO v3を入れて、サンプル画像で物体検知しました。それから、手持ちの画像をGoogle Colaboratoryにアップロードして、その画像をYOLOで物体検知してみました。

Kauzmichi Shirai

概要

ディープラーニングの画像処理の勉強のため、YOLO v3で手持ちの画像の物体検知を試みます。

まずGoogle Colaboratory上でYOLO v3を入れて、サンプル画像で物体検知しました。
それから、手持ちの画像をGoogle Colaboratoryにアップロードして、その画像をYOLOで物体検知してみました。

行ったこととしては以下のようになります。

  1. Google Colaboratoryの設定
  2. YOLOのインストールし、サンプル動かす
  3. Google Colaboratoryで画像表示させる
  4. 手持ちの画像をGoogle Colaboratoryにアップロード
  5. 手持ちの画像をYOLOで物体検知

Google Colaboratoryの設定

Google ColaboratoryはGoogleが提供しているオンラインのJupyterノートブック環境です。
機械学習に必要な設定はすでにされおり、GPUも使えます。
しかも無料です。

はじめてGoogle Colaboratoryを使ったので、いくつか設定がありました。
すでにGoogle Colaboratoryを使っている場合は不要だと思います。

GPU

「ランタイム」 –> 「ランタイムのタイプを変更」をクリックし、ハードウェアアクセラレータをGPUに変更します。

これでディープラーニングの処理を動かしたときに、速く終わります。

ショートカットの設定

Google Colaboratoryではキーボードショートカットを設定ができます。
私は、「コードセルの追加」にCtrl + Lを割り当てました。
オートコンプリート(入力補完)はデフォルトで「Ctrl+SpaceまたはTab」が割り当てられてます。

YOLOのインストールし、サンプル動かす

オープンソースのCNNであるdarkentをcloneして、ビルドします。

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

YOLOv3のweightをダウンロードします。

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

サンプルで入っている画像(giraffe.jpg)に物体検知をかけます。

%%bash
cd ./darknet/
./darknet detect cfg/yolov3.cfg yolov3.weights data/giraffe.jpg

次のような結果が表示され、predicition.jpgが出力されます。

data/giraffe.jpg: Predicted in 21.032178 seconds.
giraffe: 98%
zebra: 98%

Google Colaboratoryで画像表示させる

結果はprediction.jpgに出力されたのですが、Google Colaboratoryで画像の表示がわかりませんでした。
今回、IPythonを使って、画像を表示することにしました。

from IPython.display import Image,display_jpeg
display_jpeg(Image('darknet/predictions.jpg'))

実行すると、このような画像が表示されます。
正しく物体検知できていそうです。

手持ちの画像をGoogle Colaboratoryにアップロード

手持ちの画像をGoogle Colaboratoryにアップロードします。
Google Driveに画像を入れて、その画像をGoole Colaboratoryに入れます。

Google Driveに手持ちの画像を入れます。
それから、次のコマンドをGoogle Colaboratoryで実行して、Google Driveをmountします。

from google.colab import drive
drive.mount('/content/gdrive')

すると、Go to this URL in a browser: “URL” のように、”URL”が表示されるので、それをクリックします。
アクセス許可が求められるので、許可をクリック。
コードが表示されるので、それをコピーし、Google Colaboratoryのタブに戻って、Enter your authorization code: にペーストします。
Mounted at /content/gdrive と表示されたら、完了です。

Google Driveに入れた画像を持ってきます。 今回は、bike.JPGを、/content/darknetにコピーします。

%%bash
cp gdrive/My\ Drive/bike.JPG darknet/

bike.JPGはこのような画像です。

手持ちの画像をYOLOで物体検知

Google Driveから持ってきたbike.JPGを物体検知にかけます。
調べたところ、Darknet YOLOでは物体検知にかける画像はリサイズしなくても、大丈夫なようです。

%%bash
cd ./darknet/
./darknet detect cfg/yolov3.cfg yolov3.weights bike.JPG

出力された結果は次のようになりました。

bike.JPG: Predicted in 20.956879 seconds.
bottle: 56%
bicycle: 100%
person: 94%
person: 86%
person: 65%
person: 64%

出力された画像を確認します。

from IPython.display import Image,display_jpeg
display_jpeg(Image('darknet/predictions.jpg'))

人と柱を誤認識している部分もありますが、物体検知は体験できました。

実行したコードはGitHubで公開しています。
https://github.com/KazumichiShirai/yolo-sample-python-notebooks

参考にさせていただいたサイト

Google ColabでYOLOを動かす
Google Colaboratoryで画像表示してみる
Darknet YOLO image size