Anchor-FreeなObject Detection アルゴリズム

はじめに

今回はAnchor-FreeなObject Detectionアルゴリズムについて
ソースコードを読みながら理解する。

Anchor-Free なObject Detection

SSDなどのObject Detectionアルゴリズムは画像にAnchor-Boxと呼ばれる
矩形領域を敷き詰めて、それぞれのAnchor-Boxに対してObjectのクラスや
Anchor-Boxに対するオフセットの予想を行う。このAnchor-Boxのアスペクト比や数などは
ハイパーパラメータとして指定する必要がある。
一方で最近はこのAnchor-Boxの制限を緩和した、Anchor-FreeなDeep Learning手法でも同等以上
の性能となるアルゴリズムが提案されてきている。
今回はその中で以下のアルゴリズムソースコードを読みながら理解する。

CenterNet (Objects as Points)

参考にした実装
https://github.com/xingyizhou/CenterNet

概要

Center Net (Object as Points)はObjectの中心点と
その他の情報をheatmapとして出力する。
heatmapのチャンネル数を変更することでobject detectionや
pose estimationなど様々なタスクに対応可能。

前処理

画像、クラスごとの矩形情報から以下の3つの情報を抽出する。

  1. クラスごとのオブジェクト中心を表すヒートマップ("クラス数"チャンネル)
  2. 各オブジェクトのオフセット
  3. クラス間の共通のオブジェクトサイズを表すヒートマップ(2チャンネル)

targetのヒートマップは元画像からR分の1倍に縮小している(論文ではR=4)。
元のオブジェクト矩形はクラスごとのヒートマップ上でガウシアンカーネルとして付与される。
ガウシアンカーネルのシグマは以下の
https://github.com/xingyizhou/CenterNet/blob/master/src/lib/utils/image.py
gaussian_radius関数のように求めている。

ヒートマップをリサイズしたことにより生じたズレを補正するために
各オブジェクト矩形の中心のオフセットを保持しておく。

オブジェクトのサイズ示す2次元のheat mapも用意する。
元論文ではクラス間でサイズheat mapは共通だが、
上記の実装ではクラスごとに独立なサイズheat mapを利用する
オプションもあるようである。

ネットワーク

ネットワークはHour-Glass, ResNet, DLAなどいくつかのBackboneを試している。
ResnetとDLAは deformable convolution による修正を加えている。
BackBoneを通した後はtransposed_convolutionなどで元画像の4分の1のfeature mapを得て、
3つの出力に対応するheat mapを得る。

損失関数

損失関数は以下の3つ

  1. 各クラスに対応するheat mapへのFocal Loss
  2. heat mapをリサイズしたことに対するズレ(縦横の2チャンネル)の補正(L1 - Loss)
  3. 各オブジェクトのサイズ(幅、高さの2チャンネル)に対するL1-Loss

元論文ではオブジェクトサイズのスケールは行っておらず、損失関数間の係数で
バランス調整を行っている。

推論処理

  1. 各クラスのheat mapからピーク点(8近傍)を求める(上位100点)。
  2. ピーク点のオフセットマップとサイズマップと合わせて矩形を得る。

その他

  • augmentation
    • random flip
    • random scale (0.7~1.3)
    • cropping
    • color jitter
  • optimizerはAdam
  • 特定エポックで学習率を10分の1にする学習率スケジュール

FCOS

参考にした実装
https://github.com/tianzhi0549/FCOS

概要

fully convolutional one-stage object detector (FCOS)はFully ConvolutionalでAnchor-Freeな
One-starge Object Detectorである。 Semantic SegmentationのようにConvolutionのみで
ピクセル単位のマップを出力してからBounding Boxを得る。

前処理

画像とBounding Boxのペアから各特徴量マップに対して同じ空間スケールの以下の3つのマップを用意する

  1. クラスを予想する Classification マップ (クラス数チャンネル)
  2. Bounding Boxを予測するRegressionマップ (4チャンネル)
    • ピクセルが対応するbounding boxの端までの距離(4方向)
    • あるピクセルが異なるBounding Boxで共有されている場合はサイズの小さい方を採用する
  3. center-nessマップ
    • 2のRegressionマップから求めたBounding Boxの中心ほど高くなるようなマップ(0~1)

ネットワーク

BackBoneは通常のObject Detectionで利用されるものと同様(Resnet, ResNeXtなど)。
複数のスケールの特徴マップに対して、共通のHeadモジュールにより
Classification, center-ness, Regressionの予測を行う。
異なるスケールのfeature mapで共通のheadを利用するため、
regression マップに対しては各feature mapの元画像に対応するストライドをかける。

損失関数

以下の3つの損失関数の重み付き和

  1. classification マップに対する Focal Loss
  2. 前景クラスのregressionマップに対する IOU Loss
  3. center-nessに対するBCE Loss

推論処理

  1. Classificationマップに対してcenter-nessマップをかける
  2. Classificationマップで一定確率以上のピクセルに対してregressionマップによりBounding Boxを求める
  3. 予測されたBounding Boxに対してNMSをかける

まとめ

今回Anchor-FreeなObject Detectionをいくつか調査した。
Anchor-baseの手法と比べるとハイパーパラメータが少ないのはいいと思ったが、
計算量的には既存手法とそれほど変わらないようなので、推論傾向にどのような
違いがあり、どのような問題で有利なのか今後理解していきたい。