こんにちは、GMOアドマーケティングのS.Rです。
皆さんDeeplearningのモデルで物体検出をやったことがありますか。今回はリアルタイムの物体検出手法の一つであるYOLOを紹介したいと思います。
1. YOLOとは
「YOLO」は「You Only Live Once」の略称です。

今回紹介するYOLOは2016年Joseph Redmonがを表したリアルタイム処理できる高精度な物体検出のアルゴリズムです。なぜこの名前を使っていたのかは後で説明します。

2. 物体検出とは
物体検出とは、入力画像から指定された物体の位置とカテゴリーを検出することを指します。

3. 物体検出の用途
物体検出は自動運転、セキュリティシステム、スポーツ放送など様々な領域に利用されています。

4. 物体検出の市場規模
物体検出は機械学習の一番大きな市場の一つとされており、2022年には市場の規模は260億ドル(3万億円)と推測されています。

5. 物体検出の歴史
物体検出は新しい問題ではなく、商用の数字化した写真が誕生(1990 Dycam Model 1)したのとほぼ当時に物体検出の研究を始めました。

物体検出の問題には2種類のアプローチがあります:
1. コンピュータグラフィックス学に基づいて手動で設計した特徴(明暗差、角度、向き)で機械学習の分類の問題として解決。代表的な手法はHaar-Like、HOG、SIFTです。

2. 特徴を選ぶ方法を考えずに入力画像のPIXELごとのRGB値をニューラルネットワークの各ニューラルのInputとして解決します。

1989年に George Cybenko先生はニューラルネットワークの規模と学習データを無限にすることで、ニューラルネットワークによって任意の関数を理論的に学習できることを証明しましたが、90年代から2000年代前まで物体検出の分野に成果が出せた手法はほぼ全部手動で設計したのが特徴です。その原因は当時、計算できるニューラルネットワークの規模が小さすぎたことです。

ニューラルネットワークのイメージで一つのコネクションに対してユニットの関数によって少なくても学習するパラメータ一つがある。例えばある五層の全結合ニューラルネットワークで800*600の写真を認識するモデルを学習したいちする(図9)。想定された結果は4分類ある。(Output Layerのユニット数は4)。このモデルで計算するパラメーター数は4x(800×600)2 + 4 x 800×600 = 92 億(1012)だ。この量のパラメータを当時の計算力でモデルを学習することは無理です。

しかもこの時期で物体検出を手書き数字の認識、指紋認証など少数なケースに商用化できなかったです。その原因は当時の手法で一般的な物体を検出する精度は人間より大きな格差があったことです。どうやっても手動で設計した特徴で精度を上がれなかったです。この手法は限界になりました。
これから約10年間(1995-2005)物体検出について大きな成果がなかったのでAIの暗黒時代と言われています。しかし研究者たちは信仰を持って諦めずに頑張ってきました。やっと2006年に曙光がありました。2006年にHinton先生が多層のニューラルネットワークで画期的な論文(A fast learning algorithm for deep belief nets)を発表しました。この論文で提供した方法で前ページで例としたニューラルネットワークのパラメーターを4400に短縮することができました。この上にインターネットの時代のおかげで学習データの量と大規模なデータの処理技術を大幅にか改良できました。
2010年から毎年、大規模な画像データセット(画像は1400万枚、2万種類)を使った画像認識コンペティション(ILSVRC)が開催されている。2012年ににDeeplearningのモデルが初めて優勝した。2014年にやっとDeeplearningのモデルの精度が人間に勝ちました。

でも、これだけでは商用化するるまでにはまだ問題があります。
物体検出は二つの問題があります。位置の検出と種類の検出します。従来の手法で位置を検出のために複数な候補のBounding Boxを作って分類の計算を複数回でやります。最後は信頼度が一番高い結果を出力します。分類の計算はとても時間が掛かるので予測は遅くなります。
YOLOの方は先にSxSのセールを分割して各「セールの信頼度」を同時に計算します(図11)。計算は一回だけやるのでこのアルゴリズムをYOLOと命名されました。

図12はYOLOと他の手法のパフォーマンスの比較です。比較指標はMAPだと,100点は満点、0は最低点。時間がないのでMAPの定義は興味がある方がいればこちらを参考してください。

6. YOLOで簡単な物体検出を試しましょう
今回の例はMAC OSでやってみました。
1. YOLOのツールをダンロードします。
1 2 3 |
git clone https://github.com/pjreddie/darknet cd darknet make |
2. YOLOのツールをダンロードします。
1 |
curl https://pjreddie.com/media/files/yolov3.weights |
3. サンプル画像で物体検出を試しましょう
1 |
./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg |
図13は実行した結果です。

7. まとめ
今回はリアルタイムの物体検出手法の一つのYOLOを紹介しました。いかがでしたでしょうか。もし今回のブログが物体検出手法の理解にお役に立てば幸いです。
