はじめに
本当は、YOLOv2のチュートリアル(使い方から自作データセットの作成、トレーニングまで)を書こうと思ったのですが、
先日YOLOv3がリリースされたので、そちらを実際に動かしてみたいと思います。
YOLOとは
single shotの物体検出手法の一つです。似たような手法には先日紹介したFaster R-CNNやSSDがあります。
v3ではモデルサイズが大きくなったことに伴い、v2と比較して検出速度は若干低下しましたが、検出精度はより良くなりました。
一般的に精度と速度はトレードオフの関係にあり、若干の速度の引き換えでより高精度になったv3は良いアップデートと言えます。
現在のところ、YOLOv3は最も高速でなおかつ高精度な検出手法といえます。
ちなみにYOLOはYou only look onceの略でインスタなどでハッシュタグに使われるYou only live once=(人生一度きり)をもじったものです。
なかなか洒落が効いていていいネーミングですね。
v2とv3の違い
大きな違いとしては、v2の19層モデルに対してv3では53層のNeural Networkモデルを使用しています。
また、主な手法の違いを下記に3つピックアップします。
1. Softmax関数の禁止
分類問題においてSoftmaxは多くのモデルで使用されてきましたが、彼らの論文によると
それは、精度を改善する上で不必要な関数とのこと。代わりにロジスティック回帰によって分類を行います。
2. YOLOv3は3つの異なるスケールでボックスを予測します。
この3つの異なるスケールから特徴量を抽出し、Feature mapを作成します。
3. アップサンプリング
直前の2つのレイヤー層からFeature mapを取得し、それを2倍にアップサンプリングします。
また、ネットワークの最初のLayerからFeature mapを取得し、要素別の追加機能を使用して前述のmapとマージします。
この方法では、Object Boxのより意味のある情報と細かい情報を取得するのに役立ちます。
詳しくは、こちらの論文を読んでください。
https://pjreddie.com/media/files/papers/YOLOv3.pdf
実際に動かしてみる
ほとんど公式のホームページに書いてあるとおりなのですが、先ずはレポジトリを Cloneします。
git clone https://github.com/pjreddie/darknet
次に、フォルダに移動して
cd darknet
makeするだけなのですが、その前に、Makefileを確認しましょう。
DefaultではGPU、CUDNN、OPENCVが無効になっているので、GPU環境で使う場合は以下のように変更します。
GPU=1
CUDNN=1
OPENCV=1
OPENMP=0
DEBUG=0
あとは、makeしてコンパイルを行います。
make
weightsファイルをダウンロードします。
wget https://pjreddie.com/media/files/yolov3.weights
サンプル画像で検出を行います。
./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg
v2との結果比較
YOLOv3 YOLOv2
画像だけ見るとあまり違いが無いように見えますが、実際には精度が大きく改善されているのが分かります。
また、v2ではtruckをcarとしても検出しているのに対して、v3では見事にtruckのみを検出しています。
YOLOv3 | YOLOv2 |
dog: 99% | dog: 82% |
truck: 92% | car: 26% |
bicycle: 99% | truck: 65% |
bicycle: 85% |
まとめ
YOLOv3では速度を少し犠牲にしましたが、より高精度な検出を可能としました。
少し前までは、オブジェクトの検出はとても難しい課題であり、検出時間もとても長くかかっていました。
しかし、Deep Learningの発展と共に、より高精度で短い時間で検出できるようになりました。しかも、それは、ほんの数年の間に起こりました。
これは非常に驚くべきことです。
オブジェクト検出は非常に研究の盛んな分野であり、これからますます発展してくでしょう。
そしてそれは、監視や追跡のみならず、現在進行形で様々な分野で応用されています。
0件のコメント