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つの情報を抽出する。
- クラスごとのオブジェクト中心を表すヒートマップ("クラス数"チャンネル)
- 各オブジェクトのオフセット
- クラス間の共通のオブジェクトサイズを表すヒートマップ(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つ
- 各クラスに対応するheat mapへのFocal Loss
- heat mapをリサイズしたことに対するズレ(縦横の2チャンネル)の補正(L1 - Loss)
- 各オブジェクトのサイズ(幅、高さの2チャンネル)に対するL1-Loss
元論文ではオブジェクトサイズのスケールは行っておらず、損失関数間の係数で
バランス調整を行っている。
推論処理
- 各クラスのheat mapからピーク点(8近傍)を求める(上位100点)。
- ピーク点のオフセットマップとサイズマップと合わせて矩形を得る。
その他
- 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つのマップを用意する
- クラスを予想する Classification マップ (クラス数チャンネル)
- Bounding Boxを予測するRegressionマップ (4チャンネル)
- 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つの損失関数の重み付き和
- classification マップに対する Focal Loss
- 前景クラスのregressionマップに対する IOU Loss
- center-nessに対するBCE Loss
推論処理
- Classificationマップに対してcenter-nessマップをかける
- Classificationマップで一定確率以上のピクセルに対してregressionマップによりBounding Boxを求める
- 予測されたBounding Boxに対してNMSをかける
まとめ
今回Anchor-FreeなObject Detectionをいくつか調査した。
Anchor-baseの手法と比べるとハイパーパラメータが少ないのはいいと思ったが、
計算量的には既存手法とそれほど変わらないようなので、推論傾向にどのような
違いがあり、どのような問題で有利なのか今後理解していきたい。