Sleep like a pillow

Deep Learning関係の話。

論文読み CornerNet: Detecting Objects as Paired Keypoints

single-stageの物体検出手法の中でのSOTAを達成したCornerNetの論文です。 bounding boxの左上の座標(top-left corner)と右下の座標(bottom-right corner)を検出することで物体を検出します。

CornerNet: Detecting Objects as Paired Keypoints

f:id:uiiurz1:20181222193209p:plain

3. CornerNet

3.1 Overview

  • predictionモジュールではbackboneのネットワークの出力からtop-left cornerとbottom-right cornerのそれぞれについてheatmap、embedding、offsetの3つを推定し、簡単な後処理をかけてbounding boxを出力する。
  • heatmapはbounding boxのコーナーっぽい位置をヒートマップで表現したもの。
  • embeddingはどのtop-left cornerとbottom-right cornerがペアなのか分かるようにするためのもの。同一のbounding boxを示すコーナーのembedding間の距離が小さくなるように学習する。
  • offsetは推定したコーナーの座標を微調整するためのオフセット。
  • backboneにはHourglass Networkを使う。
  • heatmap、embedding、offsetを推定する前にcorner poolingをかける(目的や効果については後述)。

f:id:uiiurz1:20181222193456p:plain

f:id:uiiurz1:20181222210715p:plain

3.2 Detecting Corners

heatmap

  • heatmapの各チャネルが物体の各クラスと対応する。backgroundクラスは無し。
  • 学習の際には、positive location(ground-truthでコーナーとされている画素)を中心とした特定の半径内のnegative corner(誤ってコーナーとして推定した画素)に対するlossを軽減する。これは、negative cornerでもpositive locationにある程度近ければ、ground-truthのbounding boxとのoverlapが十分な(言い換えればIoUが十分な)bounding boxが得られるため。
  • lossを軽減するための重みは二次元の正規化係数なしのガウス分布  \displaystyle
e^{-\frac{x^2+y^2}{2 \sigma^2}}
から求める。ガウス分布 \displaystyle
\sigma
は、ground-truthのbounding boxとのIoUがしきい値t(論文では0.7)以上になるようなpotive locationからの距離の1/3に設定する。

offset

  • 多くのネットワークでは、大域的な情報の取得とメモリ削減のためにdownsamplingをしており、FCNから出力されるheatmapは入力画像より小さいサイズになる。入力画像中の位置 (x, y)はheatmapでは (\lfloor x/n \rfloor, \lfloor y/n \rfloor) ( nはdownsampling factor)となり、heatmapから入力画像のスケールでのbounding boxの座標を推定する際に精度が落ちてしまう。
  • これに対処するためにoffsetを推定することで座標を微調整する。
  • offsetの学習にはsmooth L1 Lossを用いる。

3.3 Grouping Corners

  • どのtop-left cornerとbottom-right cornerがペアなのか判断する(grouping corners)必要がある。
  • CornerNetで用いるgrouping cornersの手法はAssociative Embedding: End-to-End Learning for Joint Detection and Grouping(複数人物のポーズ推定の論文)で提案されているAssociative Embedding methodから着想を得ている。この手法では、すべての人物のjointを検出し、各jointからembeddingを生成する。embedding間の距離からどのjointが同一人物を指すものなのか判断する。
  • 学習には"pull" lossと"push" lossの2つのlossを用いる。"pull" lossは同一のbounding boxを指すcornerのembedding間の距離を小さくするlossで、"push" lossは異なるbounding boxを指すcornerのembedding間の距離を大きくするloss。

3.4 Corner Pooling

  • 以下の図のようにbounding boxのcornerには対象物体の情報がないことがよくある。そのため、ピクセルがtop-left cornerであるかどうか判断するには、右下方向に画素を走査する必要がある。これを行うのがcorner pooling。 f:id:uiiurz1:20181222204856p:plain

  •  (i, j)ピクセルがtop-left cornerであるかどうか判断したいとする。 f_t f_lはcorner poolingの入力マップで、  f_{t_{ij}} f_{l_{ij}}はそれぞれの (i, j)ピクセルのベクトルを表す。 H \times Wの特徴マップについて、 f_t (i, j)~ (i, H)の範囲で最も大きな値を f_{t_{ij}}の値にする。 f_lについては、 f_t f_l (i, j)~ (W, j)の範囲で最も大きな値を f_{l_{ij}}の値にする。最後に f_t f_lを足し合わせる。以下の図がわかりやすい。 f:id:uiiurz1:20181222210517p:plain

f:id:uiiurz1:20181222210527p:plain

  • bottom-right cornerについては (0, j)~ (i, j) (i, 0)~ (i, j)の範囲で同様のことを行う。

3.5 Hourglass Network

  • 人物のポーズ推定タスクのために提案されたモデルで、一つ以上のhourglass moduleから構成されるFCN。
  • hourglass moduleのbottom-upでは、畳み込みとmax poolingを繰り返してダウンサンプリングし、top-downではupsamplingと畳み込みを繰り返して元のスケールに戻す。upsamplingしていく中でbottom-upの同一スケールの特徴マップと足し合わせる。U-Netのconcatをaddにした感じ。
  • 最近のdetectorの多くがhourglass likeなネットワーク設計をしている。