cedro-blog

Yolo の学習済みモデルでサクッと物体検出をしてみる

こんにちは cedro です。

CIFAR10などの画像データセットは、1枚の写真の中には必ず1つのクラスの物体しか写っていないわけですが、実際の写真を見てみると、人と犬が一緒に写っていたり、バイクの後ろに自動車が写っていたりと、1枚の写真の中に複数のクラスの物体が写っているのが普通です。

そのため、1枚の写真の中の、何処に何が写っているのかを検出する、「物体検出」をしたいというニーズが出てきます。

今回は、物体検出をするニューラルネットワークの中で、特に高速処理が可能な「Yolo」学習済みモデルを使って、Macでサクッと「物体検出」をやってみます。

 

Yoloって何?

「Yolo」とは、You only look once(あなたは一度見るだけです の頭文字を取ったもので、物体位置検出クラス分類を同時に行うことで、高速処理を可能にしたニューラルネットワークです。

ちなみに、通常「Yolo」というと、You only live once(人生は一度きり)という意味なのですが、これをもじったと思われます。

          引用元:物体認識アルゴリズムを FPGA に実装するための基礎研究(吉元 裕真 、田向 権)

動作原理は、画像を正方形にリサイズした後、CNNで、バウンディングボックスと呼ばれる長方形の線による「物体検出」7×7のグリッドそれぞれの「クラス分類」を並行して行い、最後にこの2つの結果を合体するというものです。

 

冒頭の写真で言うと、こんな出力結果になります。二匹の犬とそれを連れている人物二人、そして後ろにいる一人も検出しています。

 

Yoloをインストールします

インストール環境は以下の様です。
マシン:MacBook Air (13-inch,2017), 1.8GHz Core i5, メモリ8GB
OS   : macOS Sierra 10.12.6
プログラム:Wgetインストール済み

Yolo最新バージョンは Yolov3 で、前回と比べると若干スピードは落ちたものの、検出精度が大幅にアップしたとのことです。今回は、最新バージョンをインストールします。

git cloneで、自分のPCに「Yolo」のプログラムをコピーします。
git clone https://github.com/pjreddie/darknet.git と入力します。

cd darknet  と入力し、先程コピーしたフォルダーに移ります。
make  と入力し、ビルドします。

ビルドできたか確認してみます。
./darknet  と入力して、usage: ./darknet <fuction>  と返ってくればOKです。

yolov3重みパラメータ(237MB)をダウンロードします。
wget https://pjreddie.com/media/files/yolov3.weights  と入力します。

まず、サンプル画像(dog.jpg)で物体検出してみます。
./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg  と入力します。

10秒ほど待つと、検出精度は、bicycle:99%、truck:92%、dog:99% (最後の3行)と出ました。

さて、検出結果を表示させてみましょう。
open predictions.png  と入力します。

犬、自転車、トラックと3つのクラスの物体検出がされていますね。

 

これは、darknet フォルダーの中身です。結果の出力は、predictions.png に毎回上書きされていきますので、保存したい場合はコピーして下さい。

自分が物体検出させたい画像データを入れておく、pic フォルダーを追加しました。後は、
./darknet detect cfg/yolov3.cfg yolov3.weights pic/○○○.jpg  と入力すれば物体検出します。

 

色々試して見る

これはオフィスの写真。人物、TVモニター、キーボード、ラップトップ、カップと様々なクラスのものを物体検出していますね。

 

これは、レストランデートでしょうか。人物、ワイングラス、イス、テーブルに加えて、ネクタイも物体検出していますね。

 

そして、これはインドの交差点動画静止画に切り出して物体検出し、その後GIF動画にしてみました。リアルタイム物体検出のイメージが湧くと思います(笑)。

こんなにも、手軽に物体検出ができるなんて凄過ぎる! 技術革新が日々進んでいる感じがします。

では、また。