「.NET 開発基盤部会 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
目次 †
概要 †
- 制約を置かない実世界の画像に対する認識タスク
- 物体検出タスクと物体識別タスクの両方を行う。
タスク †
- 物体が
- 事前に与えられたどのラベルに属するか?(≒ 物体識別 / 分類)
- 画像中のどの位置にあるか?(≒ 検出)では物体を囲む矩形のBounding box(BBox)を予測する。
- 注
- 同様に、ラベルが追加されていくオペレーションには向かない。
- あくまで画像中の位置(Bounding box(BBox))しか示さない。
歴史 †
Sliding window approach時代 †
- 画像の左上から右下にかけてウィンドウをスライドして
- 画像のすべての領域をウィンドウで探索し検出して
- そして逐一ウィンドウ内の物体に対して物体識別を行う手法
Region proposal method + CNN時代 †
- 画像中から物体らしさの高い領域を見つけるRegion proposal methodで候補領域を検出。
- 候補領域をCNNの入力として物体識別を行う2段構え
- 全部の候補領域をCNNで処理するため時間がかかる。
End-to-end時代 †
- Region proposalをDNNの一レイヤとして組み込んだEnd-to-endな物体検出手法
- Faster R-CNNが初めてこのend-to-endの物体検出手法を実装
詳細 †
アルゴリズム・モデル
R-CNN(Regional CNN) †
(CVPR 2014)
- Region proposal method + CNN時代
- 物体検出タスクと物体識別タスクを順次行う。
手続き †
問題点 †
計算が多く、学習がEnd-to-endで無い点
- 各目的毎に別々に学習する必要がある
- CNNのFine-tune
- 複数のSVMによるクラス分類
- 物体の詳細位置推定 (BBox回帰)
- 実行時間がすごく遅い
- 大量(約2000個)の候補領域毎にCNNで特徴抽出するのは、かなり領域の重複が多く無駄
- GPUを使って10-45 [s/image] (ネットワークに応じて変化)
SPPnet †
(ECCV 2014)
- Region proposal method + CNN時代
- CNNの適用回数を1回にしたことで、GPU上にて24-102倍に高速化
手続き †
- 入力画像からSelective Searchで候補領域を検出。
- 特徴マップを得たら候補領域に対応する特徴マップ上の領域を抜き出す。
- 抜き出した特徴マップ上の領域を、Spatial Pyramid Pooling(SPP)と言うPooling手法で固定長ベクトルにリサイズする。
問題点 †
- 各目的毎に別々に学習する必要があるのは変わらず
- 最終的な学習時にSPP Layer以下のパラメータが更新できない(?
Fast R-CNN †
(ICCV 2015)
中間の時代(クラス分類とBBox回帰の学習をEnd-to-end)
- CNNの演算回数を大幅に減らすことができ、
- R-CNNより9倍の学習速度、213倍の識別速度
- SPPnetの3倍の学習速度、10倍の識別速度
- クラス分類とBBox回帰を全てニューラルネットワークにして
損失関数を合体させたmulti-task-lossにすることで学習をEnd-to-endにできる。
手続き †
- 入力画像からSelective Searchで候補領域を検出。
- 入力は画像と候補領域、出力はクラスとBBox(物体領域)
- 特徴マップを得たら候補領域に対応する特徴マップ上の領域を抜き出す。
- 抜き出した特徴マップ上の領域を、RoI Poolingで固定長ベクトルにリサイズする。
問題点 †
候補領域の検出は別途学習
Faster R-CNN †
(NIPS 2015)
- End-to-end時代、物体検出タスクと物体識別タスクを順次行う。
- Selective SearchをRegion Proposal Network(RPN)と言うニューラルネットワークにして
- End-to-endで学習でき、
- 候補領域の高精度化&候補数の減少
手続き †
- 画像を、学習済みVGG16などに入力し、畳み込み層の最後の出力を、特徴マップとして出力(図中①)。
- 次に、物体の候補領域を見つけるAnchor(格子点のようなもの)を作成し、
Anchorを中心に、ハイパーパラメタで指定した数、Anchor boxes(矩形 ≒ 四角の領域)を作る。
- RPNで、候補領域に、3*3 Conv → 1*1 Convを行い、以下の2項目を出力&学習(図中②)
- Ground truth box(教師)とAnchor boxesのIoUを計算し物体か?背景か?
- Ground truth box(教師)とAnchor boxが、どのくらいズレているのか?
- 物体の候補領域をRoI Poolingで固定長ベクトルにする(図中③)。
- 固定長ベクトルを全結合層に2回通し最後に、以下の2項目を出力&学習(図中④)
- クラス分類用
- 矩形ズレ回帰用
#ref(): File not found: "FasterR-CNN.png" at page "画像処理とコンピュータビジョン(物体検出)"
| #ref(): File not found: "FasterR-CNN2.png" at page "画像処理とコンピュータビジョン(物体検出)"
|
問題点 †
- ネットワークが複雑で実装が大変。
- まだまだリアルタイムには程遠い。
YOLO(You Only Look Once) †
(CVPR 2016)
End-to-end時代、物体検出タスクと物体識別タスクを同時並行で行う。
- CNNのアーキテクチャがシンプルになり、Faster R-CNNより識別精度は少し劣るが45-155FPSの検出速度を達成。
- 1枚の画像の全ての範囲を学習時に利用するため、周辺のコンテクストも同時に学習でき、背景の誤検出がFast R-CNNの約半分
手続き †
- 物体検出タスクが、図5、物体識別タスクが、図3, 4
- 入力画像をS*Sのグリッドセルと呼ばれる領域に分割する。
- グリッドセルについてB個(論文中ではB=2個)のBoundhing boxとConfidenceを推測。
- 各クラスの予測確率と各Confidenceをそれぞれ掛け合わせてConfidence score(信頼度スコア)を得る。
- 信頼度スコアに基づいてどのBBoxが対象とするクラスの物体を正確に検出しているかを判断
図1 |
#ref(): File not found: "yolo1.png" at page "画像処理とコンピュータビジョン(物体検出)"
|
入力画像 |
図2 | 図3 | 図4 |
#ref(): File not found: "yolo2.png" at page "画像処理とコンピュータビジョン(物体検出)"
| #ref(): File not found: "yolo3.png" at page "画像処理とコンピュータビジョン(物体検出)"
| #ref(): File not found: "yolo4.png" at page "画像処理とコンピュータビジョン(物体検出)"
|
グリッドセルに分割 | それぞれのグリッドセルでクラス予測 | グリッドセルのクラス |
図5 | 図6 | 図7 |
#ref(): File not found: "yolo5.png" at page "画像処理とコンピュータビジョン(物体検出)"
| #ref(): File not found: "yolo6.png" at page "画像処理とコンピュータビジョン(物体検出)"
| #ref(): File not found: "yolo7.png" at page "画像処理とコンピュータビジョン(物体検出)"
|
BBoxとConfidenceを推測 | 図4, 5を合わせ信頼度スコアを得る | 信頼度スコアに基づいて判断 |
問題点 †
制約で、グリッド内に大量のオブジェクトが映ってしまうような場合に弱い。
SSD(Single Shot Multibox Detector) †
End-to-end時代、物体検出タスクと物体識別タスクを一度の演算にまとめ(Single Shot)て行う。
手続き †
色々な説明のパターン
- パターンB
- 300*300の元画像からベースネットワーク(VGG16)で38*38の特徴マップを作成。
- 以降、畳み込みを重ねて、検出のための異なる階層のマルチスケール特徴マップを作成
(38*38、19*19、10*10、5*5、3*3)(各スケールでの特徴マップ(空間方向))。
- スケールの異なる特徴マップ上に小さなサイズ(3*3)の畳み込みフィルターをかけて、
- 出力の1つ1つのセルが(セル?)
物体のクラスと位置を表し(なぜ表す?)
クラス分類とBBox回帰(なぜ推定できる?)
- 各位置においてDefault boxと呼ばれる異なるアスペクト比の矩形を複数設定
- 各位置の各Default boxについてスコア(confidence)の高いクラスを検出。
- 訓練時にはクラスとDefault boxとGround truth box(教師)の誤差を元にモデルの学習。
#ref(): File not found: "SSD2.png" at page "画像処理とコンピュータビジョン(物体検出)"
| #ref(): File not found: "SSD3.png" at page "画像処理とコンピュータビジョン(物体検出)"
|
- これにより各層からの検出結果が得られるので重複が生じる。
- そこで次のような手順を踏んで重複を除去する。
- スコアが高いDefault boxのみ抽出。
- 各クラス毎にDefault boxの重なり率IoUを計算
- IoUが高い場合はスコアの低いDefault boxを除去
#ref(): File not found: "SSD6.png" at page "画像処理とコンピュータビジョン(物体検出)"
| #ref(): File not found: "SSD9.png" at page "画像処理とコンピュータビジョン(物体検出)"
|
#ref(): File not found: "SSD7.png" at page "画像処理とコンピュータビジョン(物体検出)"
| #ref(): File not found: "SSD8.png" at page "画像処理とコンピュータビジョン(物体検出)"
|
- 結果、1つの物体に複数のBounding boxが付与されることを回避できる。
損失関数 †
- 何故か、SSDだけ損失関数が結構詳しく書かれている。
- 損失関数は以下を組み合わせたもの
- 物体位置の損失関数、localization loss (loc)はFaster R-CNN と同様の Smooth L1 loss
- 物体クラスの損失関数、confidence loss (conf)はSoftmax Loss
- Hard Negative Mining
- 大量にBounding Boxをサジェストされるので、学習時にNegativeが大量に発生
- confidence lossを降順にソートして上位からピックアップNegativeとPositiveの比率が3:1になるように調整
問題点 †
...
FCOS(Fully Convolutional One-Stage Object Detection) †
- 従来の物体検出モデルと異なりAnchor boxを用いないAnchorフリーなモデル。
- センターネス(Center-ness)と言う値を新たに導入。
手続き †
- Feature Pyramid Network(FPN)により複数のスケールで特徴マップを得る。
- その後headという部分で以下を算出
- クラス分類(Classification
- BBox回帰(Regression
- センターネス(Center-ness
- センターネス(Center-ness
- 基準座標がGround truth boxの端に位置の場合等、大きくズレたBounding Boxが生成される。
- これを防ぐために中心となるほど値が高くなるCenter-nessの値を導入
- 基準座標から左、右、上、下までの距離、l∗,r∗,t∗,b∗
- √( (min(l∗,r∗)/max(l∗,r∗))*(min(t∗,b∗)/max(t∗,b∗)) )
- 学習時は分類、Bounding Box、Center-nessから算出した損失関数を用いて逆伝播
問題点 †
...
参考 †