YOLOv3でかんたん物体検出
はじめましてこんにちわ。
焼き鳥なら毎日食べていいと思えるKANANです。
今回は物体検出についてです。
物体検出は様々なアルゴリズムが存在しますが、KANAN的にはじめての物体検出なので、まずはやってみよう。
ってことで、気になっているYOLO v3と学習済みのモデルを使って、物体検出してみよと思いますー。
物体検出とは
物体検出とは、画像のどの位置に何が写っているのかを検出することです。
取り込んだ画像の中から定められた物体の位置を予測し、その物体が何かをクラス分類することを指します。
YOLO
2016年に発表された物体検出アルゴリズムです。
YOLOはYou Only Look Onceの略
通常YOLOというと、You Only Live Onceで「人生1度きり、今を楽しめ」という意味だそうです(The MottoというRapの歌詞から流行したらしい)。これをもじったというCuteさ。かわゆす。
物体検出は物体の位置と、それが何かというクラス分類の工程がありますが、これをCNNを使って同時にやることで処理速度をあげたのが画期的なYOLOのアルゴリズムです。
2018年に登場したYOLO v3が現在の最新版。v2に比べると若干速度落ちしますが、検出精度が大幅に向上したらしい。
YOLO v3のインストール
KANANのインストール環境はこんな感じ。
- MacBook Pro(13inch,Early2015), 2.7GHz Intel Core i5, メモリ16 GB
- macOS Sierra 10.12.6
YOLO v3はKerasやTensorflowなどでも実装されていますが、今回はdarknetというフレームワークを使うことにします。
まずはgitからデータを持ってきて、ビルドします。
$ git clone https://gitub.com/pjreddie/darknet $ cd ./darknet $ make
この時、GPU使用や動画処理をする(OpenCV必要)などがある場合は、ビルド(make )前にmakefileの修正が必要になりますが、今回は割愛。
うまくビルドできたかを確認してみるです。
$ ./darknet usage: ./darknet <function>
学習済みモデルのダウンロード
なんとYOLO v3の学習済みモデル(重みパラメータ)が公開されています。
それをダウンロードします。
ちなみに判定されるクラスは80クラスだそうです。
$ wget wget https://pjreddie.com/media/files/yolov3.weights
サンプルデータで実行してみる
YOLOといえばお馴染みの画像。./darknet/dataの中にあるdog.jpgがこの画像です。
いよいよサンプルデータで物体検出をしていきます。
$ ./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg
実行するとわさわさと標準出力がでてきます。
layer filters size input output 0 conv 32 3 x 3 / 1 608 x 608 x 3 -> 608 x 608 x 32 0.639 BFLOPs 1 conv 64 3 x 3 / 2 608 x 608 x 32 -> 304 x 304 x 64 3.407 BFLOPs 2 conv 32 1 x 1 / 1 304 x 304 x 64 -> 304 x 304 x 32 0.379 BFLOPs 3 conv 64 3 x 3 / 1 304 x 304 x 32 -> 304 x 304 x 64 3.407 BFLOPs : : 103 conv 128 1 x 1 / 1 76 x 76 x 256 -> 76 x 76 x 128 0.379 BFLOPs 104 conv 256 3 x 3 / 1 76 x 76 x 128 -> 76 x 76 x 256 3.407 BFLOPs 105 conv 255 1 x 1 / 1 76 x 76 x 256 -> 76 x 76 x 255 0.754 BFLOPs 106 yolo Loading weights from yolov3.weights...Done! data/dog.jpg: Predicted in 25.099962 seconds. bicycle: 99% truck: 92% dog: 100%
検出精度は最後にでてきます。
bicycle: 99%, truck: 92%, dog: 100%ですね。
カレントディレクトリに元画像に検出結果を重ねた画像ファイルも同時に出力されているので、確認してみます。
$ open predictions.jpg
標準出力の結果通り、bicycle, dog, truckの3つが検出されました。
かんたんでさくっと結果が出てちょっと楽しいです。
サンプル画像以外も試してみた
とあるライブ風景。人は結構精度良く検出できてます。
残念なのは、アンプが椅子判定されてしまいました。
person: 100%
person: 100%
person: 56% ←これはドラマーに違いない
person: 100%
bottle: 89%
chair: 78%
リスを検出しようとしたら、クラスに学習されていなかったのか猫に。
cat: 97%
とりあえずYOLO v3をインストールして、検出するまでやってみました。
次は物体検出のアルゴリズムについて、書きたいなーと思っています。