SSD (Single Shot Multibox Detector)【物体検出】

1 導入

SSD (Single Shot multibox Detector) [Liu et al. 2016] は,1ステージ型のCNN物体検出ネットワークの初提案手法の1つである.名前が示す通り「1枚画像(single shot)だけを入力として,複数クラス識別済みのN個の物体ボックス(Multibox [Erhan et al., 2014])を検出する」畳み込みニューラルネットワークである.

この記事ではそのSSDについて,「対称的な構造であるFaster R-CNNとの比較」を大事にしながらの紹介を行う.

以下は,参照したリンク先のTDSの記事にも埋め込んである,SSDを,車載前方映像で試した動画である.

動画1:SSDの動画への適用結果例(車載前方動画)

SSDは,Yolo v1と同様にリアルタイムでの多クラス物体検出を,CNN物体検出により初めて実現した.当時の最先端の物体検出手法であった Faster R-CNN [Ren et al., 2015] を速度・精度の両面でSSDが少し上回り,1ステージ型の物体検出に注目が当たるきっかけとなった.

1.1 SSDの概要と特徴

SSDの処理フロー
図1 SSDの処理フロー

SSD (ECCV2016で会議発表)は,直前のCVPR2016で発表された Yolo v1 [Redmon et al., 2016] をベースとして,1ステージ型のCNN物体検出器を提案した.

具体的には,SSD300モデルは,以下の前後半の処理(図1)から構成されている:

  • [特徴マップ生成(図1 左半分)] 300 x 300 画素のカラー画像を入力とし,VGG-16構造で特徴マップを生成していく.
  • [各スケールで独立した検出 (図1 右半分)] そのVGGで畳み込みを繰り返す中盤(Conv4層)以降において,そのスケールサイズに沿ったサイズの物体BBoxを検出する.
    • 各スケールの特徴マップのアンカー位置$(x,y)$周辺に配置した$k$種類のデフォルトボックス(default box)内の特徴に対し,「各クラス信頼度確率の推定 + BBox(Bounding Box)修正量の回帰」を各ヘッドの畳み込み検出器で出力する.
  • [後処理]:非極大値抑制(NMS)を行い,最終結果を得る.

1.2 SSDの要点:Faster R-CNN の逆を提案.

ここで,SSD全体を俯瞰しやすくするために「Faster R-CNN から見た際の,SSDの2つの変更点」についておさえておきたい:

  • 【変更点1】2ステージに分割して学習 → 1ステージに統合して学習
    • Faster R-CNN:2ステージで分割して学習.
    • SSD:正解BBoxとの損失を,1ステージで学習
  • 【変更点2】統合された単一スケール特徴マップ → 複数スケールへ特徴マップを分割
    • Faster R-CNN:単一スケールの特徴マップを用いて,複数スケールのアンカーボックスから検出する.
    • SSD:複数スケールの特徴マップに分割し,各スケールごとに検出する.(※つまりはFPN形式)

【重要】つまり,SSDは「統合 v.s. 分割の観点で,Faster R-CNN の逆の構成を提案した手法」である.

(※ 論文中にも書かれているように,SSDの特徴マップを単一スケールにすれば,YOLO v1 とほぼ等価なモデルになる).

よってこのサイトでは,先行提案であるYOLOと比較するのではなく,対称関係にある Faster R-CNN と比較していくことで,SSDへの理解を深めてもらえる構成にした.

SSDは,色々な部分要素から構成されているため,初見時には複雑そうに見える.しかし,このように「Faster R-CNN と対称的なモデルの提案」であることを理解した後は,俯瞰しやすくなりSSDを楽に理解できるはずである(※ 本来は,著者自身が,論文名やabstract・conclusionでこの対比を示しておいてもらえると,論文がもっと読みやすくなっていたとも言える).

1.3 SSDの特徴と貢献

2節以降に詳細を紹介する準備として,SSDモデルの「特徴と貢献」を以下に列挙しておく:

  • 並行研究の Yolo v1 [Redmon et al., 2016] と同じく,初のリアルタイム動作するCNN物体検出器の1つであった.論文中には,SSD300モデルで 46fps, SSD512モデルで 22fpsで動作したとある(Faster R-CNN は 5~7 fps程度).
  • 各スケールの特徴グリッドに配置された,大量のデフォルトボックスと正解ボックスの間での損失を用いて,Fine-tuningでSSDネットワーク全体を直接学習する.(領域提案ネットワークで,候補を限定させたりはしない)
    • デフォルトボックス群から,正解BBoxへの「複数クラス識別+ BBox回帰」を直接学習.
    • 各スケールの特徴マップで,異なる検出器で独立に検出を行うFeature Pyramid Network構造(2.1と2.2節)
    • 1つのデフォルトボックスから2個以上同時に検出できるように,学習時に複数の正解ボックスとの対応付け処理を行う(3.1節).
  • 各スケールの検出器は畳み込み層で構成しているので,SSD全体が完全畳込みネットワークになっている.

1.4 記事の構成

2節以降は,以下の構成でSSDの中身について紹介する:

  • 2節 SSDの詳細
    • 2.1 複数スケールの特徴マップ
    • 2.2 スケールごとの畳み込み検出器
    • 2.3 デフォルトボックスのアスペクト比
  • 3節 SSDの損失関数と学習
    • 3.1 複数の正解ボックスと対応付け
    • 3.2 SSDの合成損失関数
    • 3.3 その他テクニックの使用
  • 4節 まとめ

2. SSD のモデルの詳細

SSDのネットワーク構造
図2 SSDのネットワーク構造 (SSD300)

SSDは,図2のようなネットワーク構造をしている.1.2節で既に述べた通りであるが,VGG-16をバックボーンとして,スケールごとの検出器ヘッドが6個中盤以降に接続されているマルチヘッド構成のネットワークである.

2.1節からこのネットワーク構造を用いたモデルの詳細をみていくが,1.1節で述べたように,SSD は Faster R-CNN との対比が大事である.したがって,まずは Faster R-CNNの2ステージの中身について,簡単にだけ復習として以下にまとめておきたい:

このFaster R-CNNの復習をおさえた上で,以降2節と3節では,論文通りの節構成にあわせた構成で順にSSDの各部品の詳細を見ていく.

2.1 複数スケールの特徴マップ

SSDでは,VGG-16のConv4_3 層以降の特徴マップのうち,複数スケール$s$個の特徴マップを,検出に用いる.各検出器では「担当する入力特徴マップの空間スケールに合った空間サイズ(デフォルトボックス)内の特徴から『クラス識別 + BBox修正』を行う」検出ヘッドを接続する(図2).SSD300モデルでは $s = 6$ 個の検出器を用意する(検出ヘッドの詳細は 2.2節).

複数スケールの特徴マップ
図3 複数スケールの特徴マップ

SSDでは,特徴マップ上に配置する検出BBoxのPriorであるアンカーボックス(Faster R-CNNの呼び方)を,デフォルトボックス(default box)と呼ぶ.デフォルトボックスは,特徴マップ上のアンカー位置で $k$ 個のアスペクト比で用意する(2.3節).

図3は,VGG-16の3つの層の特徴マップを,元の画像サイズ(300,300)に合わせて並べたものの上に,デフォルトボックス(赤の矩形)を少しだけ例示したものである.各特徴マップ上に示した赤色サイズのBBoxが,各セル(特徴グリッドの中心座標)が担当するデフォルトボックスである.それを基準サイズとして$k$個(4個 or 6個)のアスペクト比で,特徴マップの全てのセル $(x,y)$に対して,デフォルトボックスを(基準ボックスを含めて)$k$個それぞれ配置する(SSD論文 [Liu et al. 2016] の,図1も参照のこと).

SSDのデフォルトボックスは,入力画像に対して場所が完全に既定のものに固定される.よってFaster R-CNNのアンカーボックスという呼び方はやめて,「デフォルト(既定の,初期設定の)ボックス」と言い換えた,管理人としては憶測している.

2.2 スケールごとの検出器

2.1節で述べた$s$個のスケールの特徴マップに対して,SSDでは畳み込み層よる検出器ヘッドを用意し,スケールごとに設定したデフォルトボックス群から,それぞれ独立にスケールに即した検出処理を行う(図1, 図2).

これにより,SSD全体が完全畳み込みネットワーク(FCN)を構成することにもなり,Faster R-CNNやYOLOと違って全結合層は一切使用しない.よって,デフォルトボックス群に対する出力も,畳み込みで3次元配列マップの表現のまま出力を推定する(2.2.1節で,より詳しい対比をおこなう).

具体的には,VGGのように,3 x 3 の小さな畳み込みカーネルにより,各スケールの検出器ヘッドを構成している.最終的に $p = k \times ( C \text{クラスの信頼度スコア} + 4 \text{オフセット}) $チャンネルを出力したい.よって,各検出器層には,$3\times 3 \times p$の大きさの畳込み層を使用する.

SSD300(図2)の場合,以下の6スケールの検出器ヘッドを用意し,対応する画像スケールのBBoxのみを検出する(図1):

  • Conv4_3 の特徴マップ(38 x 38 x 512チャンネル):
    • デフォルトボックス:38 x 38 x 4 = 5776
    • 識別器:3 x 3 x 4 x [C + 4オフセット] の畳み込み層.
  • Conv7 の特徴マップ(19 x 19 x 1028チャンネル):
    • デフォルトボックス:19 x 19 x 6 = 2166
    • 識別器:3 x 3 x 6 x [C + 4オフセット] の畳み込み層.
  • Conv8_2 の特徴マップ (10 x 10 x 512チャンネル):
    • デフォルトボックス:10 x 10 x 6 = 600
    • 識別器:3 x 3 x 6 x [C + 4オフセット] の畳み込み層.
  • Conv9_2 の特徴マップ (5 x 5 x 256チャンネル):
    • デフォルトボックス数:5 x 5 x 6 = 150
    • 識別器:3 x 3 x 6 x [C + 4オフセット] の畳み込み層.
  • Conv10_2 の特徴マップ (3 x 3 x 256チャンネル):
    • デフォルトボックス数:3 x 3 x 4 = 36
    • 識別器:3 x 3 x 4 x [C + 4オフセット] の畳み込み層.
  • Conv11_2 の特徴マップ (1 x 1 x 128チャンネル):
    • デフォルトボックス数:1 x 1 x 4 = 4
    • 識別器:3 x 3 x 4 x [C+ 4オフセット] の畳み込み層.

このように,各デフォルトボックスの出力数と同じ, k x [C + 4] チャンネルの畳み込み層を,それぞれの特徴マップスケールで学習する.これらは合計で,8732個 (= 5766 + 2166 + 600 + 150+ 36 +4 )のデフォルトボックスに対する結果 [そのクラス信頼度 + 4つのオフセット ]を,各クラスごとに出力する.

こうして大量のデフォルトボックスを配置し,それらの全てに対して畳み込み層で検出を行うことで,画像の物体がとりえる「ボックスサイズ×アスペクト比」のパターンを,なるべく効率的に離散化して網羅して検出する仕組みとなっている.

最後に,各スケールでの検出結果全てをまとめて,非極大値抑制(Non-maximal suppression, NMS)により処理することで,SSDの最終的な結果を出力できる.

2.2.1 FCNの登場との関連

この当時2014~2016年ごろ,セマンティックセグメンテーション人物姿勢推定などの別のタスクの画像認識CNNでは,FCN化されたネットワーク(とりわけ砂時計型Encoder-Decoder)で,全画素位置に対して出力ベクトルを推定することが一般的になり始めていた.

それらのネットワーク構造では,入力画像と同じ空間サイズ$w \times h$で,各画素の特徴ベクトル深さが$C$チャンネルのマップとして,全画素位置の予測結果が出力される.その仕組みがFCNの論文の登場により,物体検出においてもSSDやYoloで導入されはじめたというのが当時の状況であった.

2ステージ型のFaster R-CNNでは,中間的に2000~3000個ほど推定される「領域提案」ごとに,ROI Poolingでリサンプリングした特徴を用意し,Fast R-CNNで最終出力を推定する.領域提案の全てに対して,Fast R-CNNを毎回Forwardする計算コストは地味に少し高く,リアルタイム化までは実現できていなかった.それに対して,FCN化を達成したSSDでは,検出器まで畳み込み層化され,検出精度を保ちながらのリアルタイム化を達成した.

ただし(この記事では述べないが)後に2ステージ型にも別のメリットが出てきて,良い改善手法が登場したり,発展のベクトルも異なってくる(Mask R-CNNなど).1ステージ型が必ずしも全てで勝るというわけではない点に注意されたい.4節のまとめで,少しだけデメリットについては述べる.

2.3 デフォルトボックスのアスペクト比.

SSDでは,各スケールの特徴マップ上で,そのスケールに現れそうな大きさの物体サイズの k = 4 or 6 種類のアスペクト比のサイズで,デフォルトボックスを配置する.そして(Faster R-CNN と同様に)それらのデフォルトボックスに対応した正解ボックス(2.1説)への(中心のx,中心のy,幅,高さ)の4種の修正量を回帰する(3.2.1節).

複数スケールの特徴マップ上で,各セル位置$(x,y)$に$k$種のアスペクト比のデフォルトボックスを配置することにより,大量の候補物体サイズに対する検出処理を,(離散化し)効率的に行うことになる.この処理は古典的な検出器における,「複数スケール画像ピラミッドで密なスライディングウィンドウでの」に相当するが,

3 SSDの学習

3.1 複数の正解ボックスと対応付け

学習時に,どのデフォルトボックスが,どの正解ボックスに対応しているかを決めて対応づけし,他を除外する必要がある.Faster R-CNNの損失では,Multibox [Erhan et al., 2014] と同じく,Jaccard係数を用いて「最も重なっているベストの正解BBox」にのみ対応づけを行い,その1ボックスとの損失を用いた.しかし,SSDでは,各特徴マップ上において,同スケールの$k$種類のアスペクト比でデフォルトボックス群を密に配置するゆえに,正解ボックスに最も重なっているベストのデフォルトボックス1つだけを対応付することが難しい.また,領域提案ステージがないSSDでは,1対1の厳格なボックス対応づけをして学習すると,2物体以上が遮蔽する画像での推定が苦手になってしまう(そのうち1つにしか対応付けしないので2つ目以降が学習できない).

そこでSSDでは,1つのデフォルトボックスに対して,複数の正解ボックスを(大らかに)対応づけることにした.具体的には,(NMSで用いる) Jaccard係数が0.5(50%)以上の正解ボックスを,複数個全て対応づけることにした.これによりベスト1の正解ボックス対応づけをしなくて良くなり学習が簡単になる.また,複数の重なり合う隣接デフォルトボックス群全て対して,大きなスコアが推定されるよう学習できるメリットが出る.

3.2 SSD の合成損失関数

まず,$i$番目のデフォルトボックスが,$j$番目のクラス$p$である正解ボックスと「対応している(1)」か「対応していない(0)」かを示す,2値の指示変数を$x_{ij}^p = {1,0}$とする.3.1節の通り,2つ以上と対応付けして良いとするので,$x_{ij}^p \leq 1 $である.また,$c_i^p$をクラス$p$のクラス信頼度とする.

SSDは,クラス信頼度(confidence)と領域検出(localization)の,2タスクの損失を合成した,以下の合成損失関数により一貫学習する:

\begin{equation}
L(x,c,l,g) = \frac{1}{N}(\mathcal{L}_{\text{conf}}(x,c) + \alpha \mathcal{L}_{\text{loc}}(x,l,g))\tag{3.1}
\end{equation}

添字の$i$で和をとっている表現なので,式(3.1)にも,次の式(3.2),式(3.3)中にも表出して来ないのだが,各スケールの特徴マップ(各ヘッド)で計算した損失の全てが,この損失に含まれる点に注意.

Faster R-CNN では,この合成損失に相当するものを「 (1) 領域提案ネットワークの学習」,「(2) Fast R-CNNの学習」,の2ステージの学習の両方に使用していた.それをSSDで「2問題に分解せずに式(3.1)で一括に学習する」のと比較すると,Faster R-CNNではこの損失の総量を2つのネットワークに分割して学習をおこなうものだとみなせる.

3.2.1 Localization 損失

Localization損失では,対応づいた予測ボックス$(\hat{l})$と正解(ground truth)ボックス$(g)$の間で,以下のFaster R-CNN の Smooth L1損失 [Ren et al., 2015] を計算する:

\begin{equation}
\mathcal{L}_{loc}(x,l,g) = \sum_{i \in {pos}}^{N} \sum_{m \in \{c_x, c_y, w, h\} } x^{k}_{ij} \text{smooth}_{L_1}(l_i^m – \hat{g}_j^m)\tag{3.2}
\end{equation}

この損失により,デフォルトボックスの幅 $w$,高さ$w$,ボックス中心座標 $(c_x,c_y)$ の4値の修正量の回帰を, [Ren et al., 2015] と同じ再パラメータ化を使用して学習する.

3.2.2 クラス信頼度 損失

一方,各アンカーボックスの$N$クラス識別の損失には,以下の2クラス分類のSoftmax損失を用いる:

\begin{equation}
\mathcal{L}_{\text{conf}}(x,c) = -\sum_{i \in Pos}^{N} x_{ij}^p \log(\hat{c}_i^p)- \sum_{i \in \text{Neg}}^{N} x_{ij}^p \log(\hat{c}_i^p) \tag{3.3}
\end{equation}

SSDが学習する複数クラスのうち,対象のクラス$c$の正解ボックスのクラスだけ$\text{Pos}$ラベルとし,他の全クラスは$\text{Neg}$ラベルとして,この損失を計算する.

3.3 その他の学習テクニックの使用

SSDの学習時には,典型的な物体検出むけの精度向上テクニックであるハードネガティブマイニングと,CNNの汎化性能向けのデータ拡張も行なっている.特に,SSDやYoloは,特徴マップ間やセル間に,デフォルトボックスがうまく配置できていない「はざま」があるので(図1の真ん中の猟師がその例),画像上の物体の配置やスケールを,データ拡張で増やすことは有効である.

4 SSDのまとめ

初めての1ステージCNN物体検出手法であり,リアルタイム処理化も達成したSSDについて紹介した.Faster R-CNNとは2つの観点で逆の方針をとっており,1ステージに学習を統合して,特徴スケールは複数に分割して処理する方針をとったものがSSDである.従って,SSDをFaster R-CNNと対比して2者間の対称性も考えながら理解することは,Faster R-CNN などの2ステージ型の理解度と応用力向上にも役に立つ.

ちなみに,SSDは1ステージ化によって計算効率はよくなった反面,デフォルトボックスの配置が強力な空間配置のPrior(拘束条件)となりやすかったり,序盤の層の低レベル特徴が欠落しているので,画像サイズに対して小さい物体の検出は苦手である.

参考書籍

References

  • [Erhan et al., 2014] Erhan, D., Szegedy, C., Toshev, A., Anguelov, D.: Scalable object detection using deep neural networks. In: CVPR. (2014)
  • [Liu et al. 2016] 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.
  • [Redmon et al., 2016] Joseph Redmon, Santosh Divvala, Ross Girshick, and Ali Farhadi. You only look once: Unified, real-time object detection. In CVPR 2016,
  • [Ren et al., 2015] S. Ren, K. He, R. Girshick and J. Sun. Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks, In NeruIPS 2015.

参照外部リンク

関連記事