物体検出 [古典手法から深層学習手法まで(Faster R-CNN, SSD, Yoloなど)]

2+

[改訂履歴]

  • 2020/6/2:
    • 2章と3章がメインとなるように章立てを再構成.冗長な記述を削減.
    • 「3.1 2ステージ型」において,終盤の遮蔽への強さに関する説明を修正し,Scene-Graph生成およびRelation検出との違いを加筆.
    • 「5.まとめ」に.Mask-RCNN, Feature Pyramid Networks / CornerNet の簡単な紹介を追加.

1.概要

物体検出(object detection)とは,画像一枚を入力としてその画像中に移る意味的物体インスタンスの「矩形に囲まれた領域(バウンディングボックス:bounding box」を検出(detection)し,検出した各インスタンスの物体クラス識別も行うという画像認識問題のことである.

この記事では,現在主流の画像物体検出技術である「深層学習ベースの物体検出(3節)」について主に述べたい.また,その前段階の時代の技術の「単一物体検出(2節)」についても簡単にまとめ,深層学習ベースの物体検出との比較参考が行えるようにしたい.(この記事の内容の多くは,この原田先生の書籍にも書かれており,参考になる)

まず,1.1節では準備として,古典的手法から現在までの流れを簡単にだけ述べ,その後に2節と3節の説明に入りたい.

1.1 古典的なテンプレートマッチングから現在までの大まかな流れ

古典的なマシンビジョンでは,検出対象物体に対してテンプレート画像を用意し,画像内の探索範囲内中でテンプレートと対象の相関マッチング処理を各候補位置で行うという手順によって,テンプレート画像と類似した対象を検出する「テンプレートマッチング方式」が主流であった.しかし,「外観検査」のような背景が単色で対象物体以外の背景領域に外乱やノイズが少ない設定ではテンプレートマッチングは通用しやすいものの,一般的な画像では,人や物の周囲には背景も撮影されており,検出したい対象の見え方の変化が大きく,テンプレートを複数用意しても通用せず,「人」「顔」や「猫」など見え方や姿勢が変化する対象をうまく検出することは困難であった.

まず,機械学習登場後に単一物体検出モデルに基づく物体検出技術が最初に登場した.単一物体検出モデルでは意味的なクラスごとに固定サイズの矩形範囲が物体かそれとも背景かを識別する2クラス識別器(SVM,Adaboostなど)を学習する(例:「顔検出」「歩行者検出」など2節を参照).単一物体検出モデル(人検出器や顔検出器)は,Deep Learningが主流になる以前から,動画監視や画像検索,デジタルカメラの顔検出などでよく使用されてきた.顔認証などで人や顔などの同定(Idtification)を行う際には,ID認証処理を行いやすい物体領域を先に抽出するため,物体検出モデルによる検出を前処理的に行う.

一方,ディープラーニング登場以降の大規模クラス物体検出モデルは,VGGNetなどで当初行われていた大規模物体クラス識別を,物体検出と同時に済ませることを目的としている(例:Faster-RCNN,SSD, Yoloなど).深い表現を学習できることにより,物体1000クラスを単一のネットワークで識別できるようになった点が,個別にクラスごとに学習していた以前の物体検出との大きな違いである.3節では「2ステージ制(Faster-RCNNなど)」「1ステージ制(SSD, Yoloなど)」の2種類の戦略について紹介する.

2. 単一物体クラス検出器

2001年のViola & JonesのAdaboostを用いた顔検出器 [1]の登場により,当時のデジタルカメラなどでも実時間での物体検出が初めて可能になった.これをきっかけとして顔検出の産業応用ブームが始まり,ついで,顔以外のクラスも対象とした単一物体クラス検出の研究が盛んになった.

2005年には,マルチスケールの歩行者検出手法として「HOG(Histograms of oriented gradients)特徴ベクトルとSupport Vector Machinesを用いた歩行者検出[2]」も登場した.こうして前述のViola & Jonesの顔検出と,Dalal & Triggsの歩行者検出の2つの手法を基盤として,単一物体クラス検出手法が活発に研究された.

その後「Deformable Part Models (DPMs)」による検出手法 [3]が,PASCAL VOC ベンチマーク2008の勝者として登場した.DPMsは「HOG特徴 + Latent SVM」を用いいて各パーツの位置関係グラフを,パーツの矩形ラベルなしで弱教師あり学習により学習する手法である.当時の物体認識チャレンジの主戦場であったPASCAL VOCは,それまで検出器の主な対象であった「歩行者」や「顔」以外の様々な物体の検出モデル学習用のラベルを新たに提供し始めた.矩形のアクペスト比が固定で済む画像特徴量を作りやすい「歩行者(全身)」や「顔」などの対象と違い,たとえば「自転車」クラスでは「見え方の多様性が大きい」クラスであり,当時の縦横のアスペクトが固定でしか学習できない物体検出技術(Haar-like特徴+Boostingや,HOG+SVM)検出器では,自転車クラスは多様すぎて,検出器を学習する難易度が高かった.

DPMsは物体クラスのパーツ位置を潜在変数として学習中に探索する.全体検出器(root filter)のSVMを学習するのに加えて,自動探索が終わった$N$個のパーツ位置の領域サンプルから,各パーツの検出器N個も学習し,グラフィカルモデルにそれらのパーツ配置(相対的位置)も学習させておく.そして,テスト時には全体と各パーツの両方のフィルタ応答をもとに,グラフィカルモデルの推論を通じて全パーツの最適配置を検出結果として推定する.こうして,「自転車」のようにパーツ配置に多様性があるクラスでも,パーツの変形を学習できるモデルなので,ロバストな検出器の学習が行いやすくなった.

またDPMでは,viewごとにモデルを複数別途学習しておき,一番Root Filterの応答が高いViewを検出する「Mixture」という技術も導入された.前述の「自転車」クラスでは,正面向き視点画像と真横向き視点画像では,見え方が全く異なり,視点ごとに二個DPM検出器を用意したくなる.それをDPMでは正面向き画像と真横向き学習画像それぞれ分けておき,それらから二個のRoot-Filterを個別に学習し,テスト時にはどちらのRoot-Filterが応答が強いかを判定することでk-View(k-Mixure)の中から尤もらしいViewも判定できるようにすることも提案した.旧来の「歩行者」検出器では,視点が変わっても縦横比が64*128で揃えやすかったが,PASCAL VOCで新たに物体検出器を学習する必要ができきた「自転車」クラスや「犬」クラスなど,正面・横・その他視点で見え方が全然違うクラスに対応するために考案された手段が,このMixture方式であるともいえる.

以上のように,DPMは以前は不可能であった検出器を一気に学習できるようになり,当時としては一躍最高峰の技術となったのだが,そのDPMsをもってしても,Deep Neural Networksが実現したような高速な大規模クラス検出モデルは実現できていなかった.DPMsでパーツと視点Mixtureを用いても,あまくで「2次元平面的なパーツの移動」と「物体全体の視点による見えの変化」までしかモデリングはできていないので,「3次元的な見えの変化が多い物体クラス」については,まだ十分な性能の検出器が学習できなかった.また,部分遮蔽にもある程度前でしか頑健でなく,Root-Filterのサイズは固定なので,たとてば対象物体の半分しか写っていないなど,たくさんの遮蔽バリエーション全てに対する検出も不十分であった.それが,Faster-RCNN以降の深層学習による物体検出器では,深層学習のパワーのおかげでこれらの弱点を克服し,見え方の変化の多きいクラスも含めて,非常に多様な物体クラスの検出が可能になっていく.

3. 深層学習ベースの物体検出

物体検出では,pretrain済みのVGGNetなどをバックボーンとした物体検出モデルとして,以下の2つの構成が主流となった:

  • 2ステージ型(Faster-RCNNなど):Region Proposal ネットワークと,大規模クラス識別ネットワークの2段階に処理を分けて,「他クラス識別+バウンディングボックス回帰」を行い,複数のクラスの物体を検出する.Faster-RCNNなどでは,PASCAL VOC2012(20クラス)やCOCOデータセット(80クラス)の検出器を学習する.
  • 1ステージ型: 事前に配置されたアンカー群に対して,バックボーンで計算した画像特徴から,直接クラス識別およびバウンディングボックス回帰を1つのネットワークで行う.Yolo v2あたり以降の1ステージ型検出器では,ImageNetのクラス数相当の1000クラス以上の検出を行う.

以降は,この2種類の手法を順に紹介する.

3.1 2ステージ型の検出器

Faster-RCNN (Region CNN) [4]の提案により最初に深層学習ベースの検出器として手法が確立されたのが,2ステージ型の手法である.処理が2ステージに分かれているので2ステージ型とよぶが,前半ステージでは物体領域候補をまず検出し,後半ステージでその各候補領域において「多クラス識別」と「推定したクラスに従った矩形領域の修正」を行う.

2ステージ型の概要

各ステージの詳細に入る前に,まず2ステージの概要をそれぞれ述べる:

前半ステージ:Region Proposal Network (RPN)を用いて,物体が写っている物体の候補領域 (Region Proposal)をスライディングウィンドウ処理により検出する.検出された候補領域群は,同じ物体インタンス周辺に20~40個ダブって多数検出されているので,(単一物体検出器の頃と同様に)Non-maximal Suppression(NMS)処理(=クラスタリング)を行って物体領域ごとに1つの領域候補が出力されるようにまとめる.

後半ステージ:RPNで計算済みの特徴マップから,NMS後の各候補領域内のアンカー部分の画像特徴のみをROI pooling (縦横サイズが正規化された形で)で集約する.このPoolingされた特徴量を用いて,クラス識別とアンカーに対する修正を行い,最終的なクラス識別済みの矩形検出結果を得る.

以降は,各ステージについて,もう少し詳しく説明する.

前半ステージ:RPNによる物体候補の検出

RPNでは,ネットワークの入力画像を$M \times N$個のグリッドに分割することで,元画像と特徴マップ間での局所ごとの特徴を対応づけする.スラインディングウィンドウを用いて各位置$(i,j)$周辺の$3 \times 3$の領域の特徴マップを特徴として集約し,集約した特徴から終盤の2つのヘッド(識別ヘッド/回帰ヘッド)を用いて,物体候補領域の識別・回帰を同時に学習する.

(※ RPNは出力層以外はFully Convolutional Newtworkなので,入力画像サイズが可変であることもポイント).

ここからは,もう少し処理の詳細を述べていく.RPNでは,グリッド位置を基準とした参照領域である「アンカー(anchor)」内に,いずれかのクラスの物体が存在するかどうかの「True($N$クラスのうちいずれかの物体)/False(背景)」を「識別ヘッド」に学習する.同時にアンカー矩形に対する誤差修正量も回帰する.各グリッド位置$(i,j)$においては,(3種のアスペクト比 × 3種のスケール) の合計9アンカー領域を用意する.学習時には,各グリッド位置周囲の特徴マップに対して,近傍の物体領域矩形に対するアンカー領域矩形からの修正量を「回帰ヘッド」に学習する.

(※後半ステージと異なり,物体クラスの区別は行わないまま,いっしょくたに物体矩形の修正量を回帰している)

後半ステージ:RPNの特徴からROI poolingした特徴により.「クラス識別 & 矩形残差の回帰」

後半ステージのネットワークはRegion Proposal領域からROI poolingで(縦横幅が正規化された)固定長の特徴マップをまず取得し,そのROI領域特徴に対して (1) 「クラス識別(約20~80クラス程度)」,(2)「 アンカーボックスを基準とした正解矩形に対する残差の回帰」の2つを,それぞれヘッドを用意してマルチタスク学習する.前半ステージの回帰ヘッドは,物体クラスを識別しない「物体候補」の矩形を推定するところまでしか行ってくれていない.よって,後半ステージでは推定した1クラスの矩形位置にそれを更に修正するための残差を回帰ヘッドに学習するわけである.(※次節の1ステージ型では,いきなり最初から各クラスごとの矩形位置を学習させる)

2節の単体クラス識別器の「2クラス識別」学習と違い,この後半ステージのネットワークには,「全クラスの確率が一緒に学習されている」点がポイントである.アンカー領域内の画像特徴に対して,「複数クラスの同時発生具合」が後半ステージでは学習できるので,複数クラス間や複数インスタンス間が遮蔽している様子も検出できやすくなる.例えばバイクの上に(重なって)乗っている人が写っている場合でもうまく検出しやすい.

ただし,1物体領域内の特徴だけを使って学習しているので,限界はあり万能ではない点には注意.たとえばScene-Graph検出器やRelation検出器のように,複数の物体領域の関係を一緒に学習した方が,当然安定した検出が行える(ただし,組み合わせが増えて計算コストは上がっていく).

3.2 1ステージ型の検出器

Faster R-CNNによる2ステージモデルの手法が確立した時期に,並行して登場してきたのが,YoloやSSDなどの1ステージ型の検出器(one stage detector)である.

1ステージ検出器は,あらかじめ定めた複数スケールでグリッド上に配置した各アンカーボックスに対して,単一ネットワークを用いて,入力画像を畳込んだ画像全体の特徴量から,アンカーに対するオフセットの回帰とそのアンカーボックスのクラス識別を直接行う.つまり,2ステージ型のように,一旦前半のネットワークで物体かどうかの2クラス識別を学習するという「Proposal検出処理」によるクッションは置かずに,$N$クラスの違いと検出矩形を,最初から最後までのネットワーク全体を用いて,バックボーンのネットワークに直接学習させる.

※ 単一クラス物体検出や2ステージ型のProposal Networkで採用されてきた「候補領域のサブサンプリング」の概念がこの1ステージ型には存在しないのもあり,(私も含めて)古い手法についても詳しい世代の人からすると,この「スタイルの違い」に初めは混乱するかもしれない.

YOLO (You Only Look at Once)

Yolo(You Only Look at Once) [6]は,1ステージ型の代表的な大規模物体検出手法である.画像全体を$W \times H$個のセルから構成されるグリッドに分割してとらえる(例:yolo v2では画像全体を$13 \times 13$のセルに区切る).グリッド上の各セルおいて,それぞれ [クラス識別/バウンディングボックス回帰/物体度]の3つのラベルをマルチタスク学習する.テスト時にはクラス識別結果と物体度を掛け合わせたスコアを検出結果出力のスコアとして用い,それらの検出結果をNMSすることで最終的な検出結果を得る.

Yoloの研究 にはversion 3まで存在する(※2019年現在).段階的に他手法のいいところを取り入れて,SSDに対して最初は遅かった速度の改善などがなされつつ超多クラス(Yolo v2で9000クラス検出)対応しながら高性能にもなっていった.Yolo v2はFaster-RCNNで提案されたアンカーを導入し,この時点で実質的にRPNとYolo v2がほぼ等価になったとも捉えることができる.

※ 2020年 6月追記:Yoloの作者 Joseph Redomonが,2020年2月に,Yoloなどの画像検出技術の監視社会助長性の高さを危惧し,Computer Visionの研究者からの引退を宣言したことが話題となった (参考記事).しかし,そんな作者の願いも虚しく,台湾の他ラボが継承したYolo v4が,さっそくこの春に登場してしてはいる.

SSD (Single Shot multibox Detector)

SSD(Single Shot Multibox Detector) [5]は,yoloと少し異なる設計思想として同時期に提案された1ステージ型の代表手法である.

SSDの前半の特徴量抽出ネットワークでは,VGGやInceptionなどの画像全体を畳み込む特徴抽出部分を用いて特徴量を入力画像全体から抽出しておき,特徴マップも元画像と同じサイズを保ちVGG終盤の全結合層もFCN形式で畳み込み層に変換している(具体的にはVGG16のConv5_3および全結合からConvに変えたConv6 Conv7まで用いる).

SSDの後半ネットワークでは,前半のネットワークの各中間層から,対応するスケールごとにそのスケールサイズに沿ったアンカーサイズを用いて物体を検出していきたいという設計になっている.下がて,前半の特徴量抽出ネットワークで画像を畳みこみ特徴マップのセルサイズを減らしていきながら,その各層の結果からブランチを作り,スケールごとに別々のラベル(クラスとバウンディングボックスのオフセット)および各セルのクラス確率を,Extra feature layersと呼ばれる畳み込み層にスケールごとに個別に学習させる.

最初Conv6層では, $38×38$のセルに置いて,アスペクト比が異なる6個アンカーボックスに対して(クラス確率,オフセット)のペアの予測をそれぞれ行う.以降,特徴マップを畳み込んで小さくしていくにつれ,元画像では(それまで畳み込んだReceptive fieldが)見る範囲が大きくなるので,各畳み込み層が終わった時点で出力するボックス数がそれぞれ以下のように設定されている:

  • Conv6: (38×38) ×6 = 5776 ボックス (6アンカーボックス/セル)
  • Conv7: (19×19) ×6 = 2166 ボックス (6アンカーボックス/セル)
  • Conv8_2: (10×10)×6 = 600 ボックス(6アンカーボックス/セル)
  • Conv9_2: (5×5)×6 = 150 ボックス (6アンカーボックス/セル)
  • Conv10_2: (3×3)×4 = 36 (4アンカーボックス/セル)
  • Conv11_2: (1×1)×4 = 4 (4アンカーボックス/セル)

以上を合計して5776 + 2166 + 600 + 150 + 36 +4 = 計8732個のアンカーボックスがスケールごとに配置されており,SSD論文ではこれらのボックス群をdefault boxと呼んでいる.このように,特徴マップ上の途中において,スケールごとに個別に予測を行うことから,8732個もの大量のdefault boxを使用するので,single shot「multibox」detectorと名付けられている.

SSDは(初代)yolo v1より高速に動く一方,初期の畳み込み特徴を後半の層まで伝える(スキップ接続のようなな)仕組みが設けられていない単純なネットワーク構成である.そのせいで,各出力ブランチには細部の情報が足りない分,小さな物体の検出には弱い.この弱点に対抗する改善手法として,その後RetinaNetやRefineDetが登場する (これらの発展手法は.本記事では取り上げない).

省モデル化・高速化

SSDやYoloの提案と同時期に進んだ「Deep Neural Networkモデルの省モデル化および高速化」の発展の恩恵を,1ステージ制の検出器は特に受けている.パソコン上では無い組み込み環境の計算資源やメモリの少ない環境でも,ある程度の高速性と制度を保った状態で使用できるようになっている.エッジコンピューティング目的で物体検出モデルを使用している方は,MobileNet v2 [7]の論文で提案された「軽量型のSSD (SSD Lite)」が標準装備されていことが多いので触ったことがあると思う(※この段落は 2019年に記述).

5. まとめ

この記事では,機械学習ベースの画像からの物体検出手法として,深層学習以前の単一クラス検出器(2節)と,深層学習時代の物体検出器(3節)についてまとめた.深層学習ベースの物体検出手法では,「アンカー」と呼ばれる「検出結果領域のPrior」に対する矩形修正量を,特徴マップ上のアンカー内の局所特徴に対して学習しておくことが基本である.

この記事の3節では深層学習化してからの物体検出の初期手法(2016年ごろまで)の紹介までにとどめていることに注意されたい.その後も,以下に示すような代表的な手法があり,物体検出の発展は続いている:

  • Mask-RCNN [8]:検出と同時に物体マスクも同時学習
  • Feature Pyramid Networks [9]:特徴量マップの効率的なピラミッド化により,マルチスケール対応性が向上.
  • CornerNet [10]:アンカーをやめて,Keypointの埋め込みベクトルをPoolingする物体検出の新路線.現在あらたな主流になるつつある.

References

  • [1] P. Viola, M. Jones. Rapid object detection using a boosted cascade of simple features, In CVPR 2001.
  • [2] N. Dalal, B. Triggs. Histograms of oriented gradients for human detection, In CVPR, 2005.
  • [3] P. Felzenszwalb, D. McAllester, and D. Ramanan. A discriminatively trained, multiscale, deformable part model. In CVPR, 2008.
  • [4] S. Ren, K. He, R. Girshick and J. Sun. Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks, In NeruIPS 2015.
  • [5] W. Liu, D. Anguelov, D. Erhan, C. Szegedy, S. Reed, Cheng-Yang Fu, and A. C. Berg. Ssd: Single shot multibox detector. In ECCV, 2016.
  • [6] J. Redmon and A. Farhadi. YOLO9000: Better, Faster, Stronger. In CVPR, 2016.
  • [7] M. Sandler, A. Howard, M. Zhu, A. Zhmoginov, and L.-C. Chen. Mobilenetv2: Inverted residuals and linear bottle- necks. In CVPR, 2018.
  • [8] K. He, G. Gkioxari, P. Dollar, and R. Girshick, “Mask r-cnn. In ICCV, 2017.
  • [9] T. Lin, P. Dollár, R. Girshick, K. He, B. Hariharan, and S. Belongie. Feature pyramid networks for object detection. In CVPR, 2017.
  • [10] H. Law and J. Deng. Cornernet: Detecting objects as paired keypoints. In ECCV, 2018.

外部リンク

2+