物体検出

概要

  • 物体検出とはclassificationに加えて、localizationが必要なタスクである。

  • 物体を囲む矩形領域をbounding boxと呼ぶ。

  • 物体検出は以下を予測値として学習する。

    • classification

    • 物体の中心座標x,y(連続値)

    • bounding boxのheightとwidth(連続値)

  • 学習の際、正解がない場所についてはback propagationをしないなど工夫をして学習が必要。

  • 上記の基本的な手法のままでは、以下の課題がある

    • Convの最終層の画像サイズに依存した個数しか検出できない。(最終層が8x8ならば64個が上限)

    • 中心が同じ領域にあるものを検出できない。(学習時の正解も一つしか設定できない)

  • 上記を解決するために、anchor boxを準備する。

    • anchor boxはいろんなサイズ、縦横比のbounding box候補のようなイメージ。

    • anchor boxの種類毎に、上記の基本的な手法で学習を実施する。

    • anchor boxの種類はクラスタリングなどにより求める。

    • anchor boxの種類毎に、最終層の出力解像度を分けるアプローチのモデルもある。

  • NMS(Non-maximum Supressions)で候補を削減。

    • anchor boxを用いると、重なりの大きな物体が複数検出されるので、IoUが一定以上の場合は、その中で一番大きいスコアの領域のみを採用する。

  • これらの手順は煩雑なので、anchor boxを使わない方法も近年人気である。

    • 最終層を元画像の1/4程度に収めて、高解像で出力するCenterNetなど。

学会

  • CVPR

  • ICCV

  • NeurIPS

レポジトリ(フレームワーク)

主要なモデル一覧

  • HOG+SVM 2005.06.20 CVPR'2005 / 論文

    • CNN誕生前のモデルで良く参照された論文

    • HOGはpixel変化を捉える特徴量

    • HOG特徴量を用いてSVMで多クラス分類する

    • NMSはこの時から使われている

  • R-CNN 2013.11.11 CVPR'2014, 2stage / 論文 / 実装例

    • CNN適用の先駆け論文

    • selective searchという古典的手法で領域候補を抽出

    • 候補領域をリサイズしてCNNに入力して特徴量ベクトルを得る

    • その後段で1-class SVMとbounding boxのregressionを実施

  • SPP-net 2014.06.18 TPAMI'2015, 2stage / 論文 / 実装例

    • 領域候補の切り出しを特徴量マップに対して実施し効率化

    • これにより最大2000毎程度ある領域候補のCNN処理が1回で実現可能

    • 切り出した特徴量マップはSPPで固定長の特徴量に変換して後段で処理

  • Fast R-CNN 2015.04.30 ICCV'2015, 2stage / 論文 / 実装例

    • Multi-task lossによりclassificationとbounding box推定を同時学習

    • 固定長の特徴量変換としてSPPの代わりにRoI Poolingを使用

    • RoI Poolingは両機をグリッド分割し各グリッドに対してpooling処理を実施

  • Faster R-CNN 2015.06.04 NeurIPS'2015, 2stage / 論文 / 実装例

    • 領域候補を抽出するselective searchをCNNで置き換え

    • このNetworkをRPN(Region Proposal Network)と呼ぶ

    • RPNには9個のanchor boxを使用し領域有無とbounding box回帰を実施

  • YOLO 2015.06.08 CVPR'2016, 1stage (anchor free) / 論文 / 実装例

    • 領域検出とclassificationの同時学習を実現(You only look once)

    • 入力画像をグリッド分割し、各グリッドに固定数のbounding box回帰を実施

  • SSD 2015.12.08 ECCV'2016, 1stage / 論文 / 実装例

    • YOLOと同じく領域検出とclassificationの同時学習を実現(Single shot detector)

    • backboneの途中層の高解像な特徴量マップを使用

    • 特徴量マップの解像度毎に様々な大きさのanchor boxを定義

  • R-FCN 2016.05.20 NeurIPS'2016, 2stage / 論文 / 実装例

    • RoI Pooling以降の全結合層をCNN化したモデル

    • RoI Poolingの前段にposition sensitive mapという畳み込みを追加

    • その後段でRoI Poolingを実施する構成

  • FPN 2016.12.09 CVPR'2017, 2stage / 論文 / 実装例

    • ピラミッド構造の特徴量マップを実現したモデル

    • ベースはFaster R-CNNであり、RPNとclassificationどちらもピラミッド構造化

    • FPNの考え方は現在まで採用されており重要な論文

  • YOLOv2(YOLO9000) 2016.12.25 CVPR'2017, 1stage / 論文 / 実装例

    • YOLOをベースに改良を実施

    • 入力の高解像化、anchor boxの導入、高解像な特徴量マップの使用など

    • それ以外に9000クラスまで分類可能なWordTreeというアーキテクチャを構築

  • RetinaNet 2017.08.07 ICCV'2017, 1stage / 論文 / 実装例

    • ロス計算(CE)をサンプルの難易度によって動的に変化させるFocal lossを提案

    • ベース構造はFPNのようなピラミッド構成だが、1stageとなっている。

    • シンプルな構成のため現在でもベースラインされることも多い

    • Focal loss自体も現在でも使用されている重要な論文

  • Mask R-CNN 2017.03.20 ICCV'2017, 2stage / 論文 / 実装例

    • Instance Segmentation用のheadを追加したMulti-taskモデル

    • 物体検知としては、RoI Poolingの代わりに補完を考慮したRoI Alignを導入

  • RefineDet 2017.11.18 CVPR'2018, 1stage / 論文 / 実装例

    • 1stageモデルだが2stageモデルのようにanchor boxをCNNで推定

    • anchor box用CNNと物体検知用のCNNを相互接続し同時に学習

    • 改良のベースはSSDを用いているが、近年参照されることは少ない

  • PANet 2018.03.05 CVPR'2018, 2stage / 論文 / 実装例

    • buttom-up構造により深い特徴量マップにも高解像情報を付与

    • 後段はMask R-CNNと同様のRoI Alignを使用している

    • RPN側は従来通りのFPN構造と思われる

    • Mask R-CNNと同様、Segmentationタスクにも対応したMulti-taskモデル

  • YOLOv3 2018.04.08, 1stage / 論文 / 実装例

    • YOLOv2をベースに改良を実施

    • skip-connectionの採用、複数解像度(3つ)の特徴量の融合など実施

    • anchor box数を増やし、結果として速度面ではYOLOv2よりも低下

  • CornetNet 2018.08.03 ECCV'2018, 1stage (anchor free) / 論文 / 実装例

    • 姿勢推定の影響を受けた技術が多いanchor freeの方式

    • corner poolingによりbounding boxのコーナーをうまく検出している

    • またImageNetなどの事前学習が不要な点も特徴的

  • M2Det 2018.11.12 AAAI'2019, 1stage / 論文 / 実装例

    • SSDをベースに特徴量マップを複雑に処理するMLFPNを提案

    • MLFPNはFPNのピラミッド構造を繰り返し可能な設計とした構造

    • 当時は高速・高性能をうたっていたが近年参照されることは少ない論文

  • FCOS 2019.04.02 ICCV'2019, 1stage (anchor free) / 論文 / 実装例

    • 物体検出をsegmentationと同様画素単位で再構築したanchor freeモデル

    • 特徴量マップの各位置からbounding boxまでの4方向の距離を直接推定する

    • 特徴量マップはFPN構造を使い複数の解像度を使用

    • 応用がしやすいため参照されることが多いanchor freeモデル

  • HRNet 2019.04.09, 未調査 / 論文 / 実装例

  • CenterNet 2019.04.16, 1stage (anchor free) / 論文 / 実装例

    • CornerNetと同様にheatmapを推定するanchor freeモデル

    • CenterNetでは中心位置のheatmapを推定する

    • 高解像な特徴量を扱うための工夫がbackboneに施されている

  • CenterNet 2019.04.17 ICCV'2019, 1stage (anchor free) / 論文 / 実装例

    • CenterNetは同名のものが2つあるがこちらはCornerNetの改良版

    • ConerNetはbounding boxの内部を見ていないため誤検出が多い

    • 改善するためにCenter heatmapを計算し、Corner Poolingも改良

  • EfficientDet 2019.11.20 CVPR'2020, 1stage / 論文 / 実装例

    • EfficientNetの考え方を取り入れた複合スケール方式を提案

    • backbone自体もEfficientNetを使用

    • FPN系のアーキテクチャの体系を整理しより最適でスケーラブルなBiFPNを提案

    • Focal Lossを用いるなどベースの部分はRetinaNetに近いと思われる

  • YOLOv4 2020.04.23, 1stage / 論文 / 実装例

    • 研究成果を体系的に整理し高速かつ高精度なYOLOを目指した改良版

    • GPU1個で学習可能でリアルタイム推論が可能なモデルを構築

  • DETR 2020.05.26 ECCV'2020 1stage (anchor free) / 論文 / 実装例

    • Transformerを物体検知に導入したモデル

    • backboneの後段の処理としてTransformerを使用

    • これによりanchor boxやNMSなどハンドメイドな部分を削除

    • 正解の割り当てを最適割当問題とみなしhungarian algorithmで解く

    • 比較対象がFaster R-CNNなのでこれからの発展に期待

  • YOLOv5 2020.06.01, 1stage / 論文なし / 実装例

    • フレームワークが優れており、広く利用されている物体検知のモデル

    • アーキテクチャの詳細は論文がないため確認が困難

    • v4との比較について第三者が検証しているが明確な結論はでていない

  • PP-YOLO 2020.07.23, 未調査 / 論文 / 実装例

  • Scaled-YOLOv4 2020.11.16 CVPR'2021, 未調査 / 論文 /

  • PSS 2021.01.28, 1stage (anchor free) / 論文 / 実装例

    • NMSフリーなモデルを学習するためにPSSヘッドを導入した論文

    • PSSヘッドにより1つの正解に対して1つだけ正例を出力するよう学習

    • YOLOXのNMSフリー用オプションとして使用

  • YOLOF 2021.03.17 CVPR'2021, 1stage / 論文 / 実装例

    • FPN構造の成功は複数解像度の特徴量ではなく分割統治法である

    • そのことから単一解像度の特徴量からのモデルを考案した

    • 名前はYOLOが付いているが、ベースはRetinaNetの構造

  • Swin Transformer 2021.03.25 ICCV'2021, 未調査 / 論文 / 実装例

  • OTA 2021.03.26 CVPR'2021, 1stage / 論文 / 実装例

    • ラベル割り当てを最適輸送問題(OTA)として解いたモデル

    • OTAはペアのロスを定義することに加え、需要量と供給量を定義

    • この問題設定かでSinkhorn-Knopp法で最適値を求める

    • YOLOXでこれの高速な手法が用いられている

  • PP-YOLOv2 2021.04.21, 未調査 / 論文 / 実装例

  • YOLOR 2021.05.10, 未調査 / 論文 / 実装例

  • YOLOX 2021.07.18, 1stage (anchor free) / 論文 / 実装例

    • YOLOに先端のラベル割り当て(OTA)やアンカーレス方式を導入した

    • OTAをより高速にするため近似計算するSimOTAを用いている

    • アンカーレスの方式はシンプルでYOLOv1に近い方式

    • YOLOv3をベースとしているため、特徴量融合もv3の方式となる

    • YOLOシリーズ特有のSingle HeadはDecoupledされている

  • YOLOP 2021.08.25, 未調査 / 論文 / 実装例

  • PP-PicoDet 2021.11.01, 未調査 / 論文 / 実装例

  • Swin Transformer V2 2021.11.18, 未調査 / 論文 / 実装例

  • Detic 2022.01.07, 未調査 / 論文 / 実装例

  • SAHI 2022.02.14, 未調査 / 論文 / 実装例

  • PP-YOLOE 2022.03.30, 未調査 / 論文 / 実装例

  • ViTDet 2022.03.30, 未調査 / 論文 / 実装例

参考

  • 物体検出の概要がわかる

    • https://www.youtube.com/watch?v=5nmVHoA-A2E

  • 物体検出についての歴史まとめ

    • https://qiita.com/mshinoda88/items/9770ee671ea27f2c81a9

    • https://qiita.com/mshinoda88/items/c7e0967923e3ed47fee5

  • 物体検出モデルの進展

    • https://qiita.com/TaigaHasegawa/items/b05110a2571a5289cbab

    • https://qiita.com/TaigaHasegawa/items/a3cb98fb27cc7a9307b4

    • https://qiita.com/TaigaHasegawa/items/653abc81ac4ee1f0d7b8

  • YOLOシリーズ徹底解説

    • https://deepsquare.jp/2020/09/yolo/

  • ディープラーニングによる一般物体検出アルゴリズムまとめ NegativeMindException

    • https://blog.negativemind.com/portfolio/deep-learning-generic-object-detection-algorithm/

  • YOLOのv1~v5まで

    • https://qiita.com/tfukumori/items/519d84bf3feb8d246924

  • YOLOシリーズについて2021年時点までの情報がいろいろ書いてある。

    • https://www.slideshare.net/ren4yu/you-only-look-onelevel-feature

  • 2014~2019までの物体検知の歴史

    • https://github.com/hoya012/deep_learning_object_detection

Last updated