CNNを用いた物体検出アルゴリズムYOLOv3に迫る!

キスモインターン生の内山です!
最近かなり暑くなってきていますね、夏の訪れを感じます。

さて今日は物体検出についてお話ししようと思います。

物体検出とは、
下の画像のように、画像に写っている物体の座標を予測し、その物体が何かをクラス分類するものです。

f:id:mishimanatsuki:20180614143533p:plain (YOLO論文[1]より引用)

今回はその中でもCNNを用いた物体検出に着目し、論文リサーチを行いました!

R-CNN

この物体検出の先駆けとして、2014年に発表された論文がR-CNNです。
R-CNNのアルゴリズムは、

  1. 画像をinputする。
  2. 画像から物体領域の候補を最大2000枚選び出す。
  3. 選び出した候補画像を全て一定の大きさにリサイズして、CNNにかけ、特徴量を取り出す。
  4. 取り出した特徴量を用いて物体のクラス分類と、物体を囲う位置座標(バウンディングボックス)の回帰を行う。

というのが主な流れです。

f:id:mishimanatsuki:20180614143957p:plain (R-CNN論文[2]より引用)

R-CNNの登場以前は、深層学習を用いない物体検出方法がメインでしたが、その認識精度からかなりの向上を果たすことができました。

一方で、1枚の画像に対し、最大2000枚の物体候補の特徴量を取り出して、クラス分類と回帰を行うので、実行時間がかなりかかってしまうことが問題点とされていました。

その後、Fast R-CNNやFaster R-CNNといったR-CNNの改良版が続々と発表され、速度・精度共に改善されていきましたが、リアルタイムで検出するための速度まではなかなか達しませんでした。

YOLO

その後、2016年に発表されたのが、YOLO(You Only Look Onceの略)です。
You Only Live Once(人生は一度きり)をもじったタイトルで発表されました。著者のお茶目さがにじみ出ていますね。

それまでのモデルでは物体領域候補をたくさんあげ、それぞれに対してクラス分類をしていましたが、YOLOは物体領域候補を選び出さずに、1つのCNNで物体の検出からクラス分類まで一気に予測してしまうという画期的なモデルです。

その結果、20クラスの物体をリアルタイム検出が可能な速度で認識することができるようになりました!

アーキテクチャには24層のCNNが使われており、過学習を防ぐためにepoch数に応じて学習率を変化させているのも特徴的です。1つのCNNで予測を完結させるために、CNNの出力層の形式に工夫が見られます。

f:id:mishimanatsuki:20180614144003p:plain (YOLO論文[1]より引用)

7×7×30の出力層は、inputした画像を7×7のグリッドに分割し、各グリッドに対して、2つのバウンディングボックス(5チャンネル×2)と1つのクラス(20チャンネル)を予測することを意味します。バウンディングボックスの5チャンネルは、中心の座標(x,y)と高さと幅(h,w)、さらにそのボックスの信頼度cが計算されます。信頼度cが閾値を超えた時のそのボックスのクラスを出力します。
イメージは下の図のような感じです。

f:id:mishimanatsuki:20180614144007p:plain (YOLO論文[1]より引用)

さらに、2017年にはYOLO9000[3]というタイトルで、9000クラスの物体検出ができるYOLOのver.2の論文が発表され、2018年にはさらにその進化版のYOLOv3[4]が発表されました。 どんどんと発展していますね。

簡易実験

ソースコードや学習済みモデルが公開されているので、今回はYOLOv3で精度を検証してみました!

まず1つ目の実験に使う画像はこちらです!

f:id:mishimanatsuki:20180614144020j:plain キスモ創立1周年の時に、代表取締役三野から記念のGODIVAをもらった時の写真です!(GODIVA美味しかったなあ。)

写っている7人全員を検出できるのか、手前のテーブルを検出できるのかといったところが鍵になりそうです。

YOLOv3により物体を検出した結果がこちらです!

f:id:mishimanatsuki:20180614144014p:plain

見事に7人全員とテーブルを検出できています。さらに一見、人の目で見ても認識できない左下のソファも検出できています!すごい!

ではもう1枚いきましょう!

f:id:mishimanatsuki:20180614144031j:plain 普段の業務の様子を撮った写真で検証します。

先ほどよりも写っている物が増えたので検出が難しそうです。机の上のものや奥にある家具はどのように認識されるのでしょうか?

検出した結果がこちらです!

f:id:mishimanatsuki:20180614153442p:plain

先ほどと同様に、人は高精度で検出できているのに加えて、ノートパソコンやテーブル、椅子なども正しく検出できています。左側の本棚の中にある本も検出しているのはすごいですね!
右下の役員鈴木の手の間の黒い部分をマウスと、ディスプレイのリモコンを携帯電話と誤認識してはいますが、物体の特徴は捉えられているので、許容範囲という印象です。

最後に

このように物体検出はこのレベルまで技術が向上しています。今回は、YOLOを中心にご紹介しましたが、SSDをはじめ、他にも物体検出のモデルはいくつか発表されています。バウンディングボックスでなく、クラスの領域をピクセル単位で求めるセグメンテーションという分野の研究もどんどん進んでいます。

このような技術を応用して、世の中がどんどん便利になっていくのが楽しみです!   「働くをアップデートする」を理念に掲げるキスモもその一翼を担い、AIの民主化を進めるべく、精進してまいります!!!

最後まで読んでいただきありがとうございました。

参考文献

[1] Redmon, Joseph, et al. "You only look once: Unified, real-time object detection."
[2] Girshick, Ross, et al. "Rich feature hierarchies for accurate object detection and semantic segmentation."
[3] Redmon, Joseph, et al. ”YOLO9000: Better, Faster, Stronger”
[4] Redmon, Joseph, et al. “YOLOv3: An Incremental Improvement”