論文読み Objects as Points (CenterNet)
著者による実装 github.com
3D detectionとポーズ推定についても追々まとめます。
どんなもの?
- 従来の物体検出手法では、潜在的な物体位置を網羅的に列挙しそれぞれを分類することで検出を行うが、無駄が多く非効率でNMSなどの後処理を必要とする。
- CenterNetでは、物体をbounding boxの中心点としてモデル化することで物体を検出する。
- キーポイント推定によって中心点を探索するとともに、タスクに合わせてbounding boxの大きさや3D location, orientation, ポーズなどを回帰で推定する。
- 精度と速度の両方でSOTA。
技術や手法のキモ
Preliminary
- 入力画像 (W x H)に対して、出力されるキーポイントマップは$$\hat{Y} \in [0, 1]^{\frac{W}{R} \times \frac{H}{R} \times C}$$
- Rはストライドを表しており、キーポイントマップは入力画像に対して1/Rにダウンサンプリングされる。
- Cはキーポイントの種類を表しており、物体検出の場合にはカテゴリ数、ポーズ推定の場合には関節数となる。
- は検出したキーポイント、は背景に対応する。
- hourglass networkやDLAなどのencoder-decoderネットワークを用いて、キーポイントマップを推定する。
- ground truthのキーポイント座標に対して、ダウンサンプリングされたキーポイント座標は。
- とガウシアンカーネルを用いてground truthのキーポイントマップYを作成する。 $$Y \in [0, 1]^{\frac{W}{R} \times \frac{H}{R} \times C}$$
- ガウシアンカーネルをかけた後のマップについて一つの座標に複数クラスが存在する場合には最大のみ採用する。
- 学習に用いるlossは以下の。 $$ L_k = -\frac{1}{N} \sum_{xyc} \left\{ \begin{array}{} (1 - \hat{Y}_{xyc})^{\alpha} \log \hat{Y}_{xyc} & {\rm if} \hspace{1pt} Y_{xyc} = 1 \\ (1 - Y_{xyc})^{\beta} \hat{Y}_{xyc}^{\alpha} \log (1 - \hat{Y}_{xyc}) & {\rm otherwise} \end{array} \right. $$
- ストライドによって発生する離散的な誤差を修正するために追加でオフセットを推定する。
- オフセットは以下のL1 lossで学習。 $$ L_{off} = \frac{1}{N} \sum_p \left|\hat{O}_{\tilde{p}} - \left(\frac{p}{R} - \tilde{p}\right)\right| $$
Objects as Points
- オブジェクトのbounding boxを、カテゴリをとする。
- 中心点は。
- キーポイントマップによって中心点を推定するのに加えて、bounding boxのサイズを推定する。
- つまり、キーポイントマップと、bounding boxの大きさを示すマップを推定する。
- 学習には以下のL1 lossを用いる。 $$L_{size} = \frac{1}{N} \sum_{k=1}^N \left| \hat{S}_{p_k} - s_k \right|$$
- 他の物体検出手法でやるような座標のスケーリングは行わず、代わりにそれぞれのlossの係数でスケールを調整する。
- 全体のlossは以下の通り。 $$L_{det} = L_k + \lambda_{size} L_{size} + \lambda_{off} L_{off}$$
- キーポイント、オフセット、bounding boxのサイズの3つを推定するため、ネットワークが出力するマップのチャンネル数はとなる。
From points to bounding boxes
- 推論時にはキーポイントマップからピークを各カテゴリ独立に抽出する。
- 周囲8近傍点以上の値を持つ点のうち上位100点をピークとする。
- ピークの値をそのまま確信度として用いるとともに、ピークの座標とオフセット、bounding boxのサイズから以下のようにしてbounding boxを求める。 $$(\hat{x}_i + \delta \hat{x}_i - \frac{\hat{w}_i}{2}, \hat{y}_i + \delta \hat{y}_i - \frac{\hat{h}_i}{2}, \hat{x}_i + \delta \hat{x}_i + \frac{\hat{w}_i}{2}, \hat{y}_i + \delta \hat{y}_i + \frac{\hat{h}_i}{2})$$
- ピークを抽出する処理がNMSのような作用を持つため、NMSのような後処理は必要ない。
- さらにピーク抽出は3x3のmax poolingによって実装できるため、NMSよりも計算コストが低そう。
有効性の検証
- 物体検出についてはCOCOデータセットを用いてSOTAと比較。
- 精度・速度の両面で良好な結果。
議論や改善点
論文読み Generalized Intersection over Union: A Metric and A Loss for Bounding Box Regression
どんなもの?
- Intersection over Union (IoU)は物体検出タスクにおいて、もっともよく使われる評価指標。
- bounding box推定の学習によく用いられるregression lossの最適化と、IoUの最大化の間にはギャップがある。
- そのため、IoUをlossとして使う先行研究もあるが、IoUは二つの領域が全く重なっていない場合には領域の位置関係に関わらず全て0となるため、IoU lossは多くの鞍点(勾配が0の点)を持ち、学習が進まない場合がある。
- この論文では、IoU lossの問題点を解決した Generalized IoU (GIoU) loss を提案。
技術や手法のキモ
Generalized Intersection over Union
- IoUは二つの領域の積(intersection)Aと和(union)Bから以下のように計算される。
- IoUの持つ大きな問題点は、二つの領域が全くoverlapしていない場合は全て値が0となるため、二つの領域が近くにあるのか遠くにあるのかというのを反映させることができないという点。
- GIoUは二つの領域の積(intersection)Aと和(union)Bに加えて、二つの領域を囲む最小かつ同じ形状の領域Cを用いて下式のように計算される。
- GIoU lossは
GIoU as Loss for Bounding Box Regression
- 任意の形状についてのGIoUを解析的に求めるのは難しいが、Bounding Boxについては以下のように簡単に求めることができる。
有効性の検証
- YOLOv3のMSE loss, Faster R-CNNとMask R-CNNのl1-smooth lossをGIoU lossに置き換えて学習を行う。
- GIoU lossを用いることでAPとAP75が向上することを確認。
- 定性評価においても、GIoUが最も優れている。
議論や改善点
- 直方体のGIoUの解析的な導出のフィージビリティについて調査する予定。
- GIoUの導出が可能であれば、3Dの物体検出についてもGIoUを適用できる。
論文読み SSD: Single Shot Multi Box Detector
とても有名な物体検出アルゴリズムなので読んでみました。
2 The Single Shot Detector (SSD)
2.1 Model
- SSDでは固定数のbounding boxとclass scoreを推定し、最後にNMSをかける。
- SSDの最初の方の層には、画像分類タスクにおいて高い性能を持つネットワークの分類層を除いたものを用いる(base networkと呼ぶ)。
Multi-scale feature maps for detection
- base networkの最後にいくつかの畳み込み層を追加する。
- 畳み込み層によって特徴マップのサイズを段階的に落としていくことで、マルチスケールでの検出を可能にする。
- 異なるスケールの特徴マップそれぞれでbounding boxとobject classを推定する。
Convolutional predictions for detection
- それぞれの特徴層に、の畳み込みをかけることでclass scoreとdefault box(後述)のoffsetを推定する。
- bounding boxのoffsetは、各特徴マップに対応するdefault boxを基準にして出力される。
Default box and aspect ratios
- 各特徴マップのそれぞれのcellについて、default boxを対応させる。
- default boxは畳み込みの要領で特徴マップ全体に敷き詰められるため、各cellに対応するboxの位置は固定。
- 各特徴マップのcellで、default boxのoffsetを推定するとともに、bounding box内に各クラスの物体が存在するかどうかのscoreを推定する。
- 具体的には、ある位置での個のboxそれぞれについて、 クラス数に対応した個のclass scoreと、default boxについての4つのoffsetを推定する。結果として、各位置について個のフィルタが適用されるため、の特徴マップから個の出力が生成される。
2.2 Training
- SSDでは、ground truth boxの情報をdetectorの対応する出力に割り当てる必要がある。
- 一回割り当てが決まれば、lossの計算や誤差逆伝播をend-to-endで行うことができる。
Matching strategy
- 学習の際に、どのdefault boxがground truthに対応しているのか決定するとともに、それに応じてネットワークを学習させる必要がある。
- MultiBoxでは、各ground truth boxについてjaccard overlapが最大となるdefault boxを対応するものとしている。
- SSDでは、あるdefault boxとground truth boxについて、jaccard overlapがしきい値(0.5)より大きい場合に一致していると見做す。
- これによって、overlapを最大化するdefault boxをたった一つ選択するという問題から、overlapしているdefault boxのscoreを高くするという問題へと単純化することができる。
Training objective
Choosing scales and aspect ratios for default boxes
- 複数の異なるスケールの特徴マップを検出に用いる。実用において、特徴マップの追加による計算コストの増加は僅か。
- 異なるスケールの特徴マップは、異なるサイズの受容野を持つ。
- SSDのフレームワークでは、default boxを各層の実際の受容野に対応させる必要はない。
- 特定の特徴マップが特定のスケールに対応するように学習を行うため、default boxのスケールとアスペクト比を設計する。
- 各特徴マップにおけるdefault boxのスケールは以下のように計算される。
- 最小と最大のスケールが決まれば、すべての特徴マップのスケールは等間隔になるように決定される。
Hard negative mining
- ほとんどのdefault boxは対応するground truthのないnegativeなものであるため、positive, negativeのサンプル数が不均衡になってしまう。
- そこで、全てのnegative exampleを使う代わりに、negative exampleを確信度が高い順にソートして、上位のものからnegative:positiveの比率が3:1になるように選択する。
- これによって学習が速く進むとともに安定する。
Data augmentation
- 以下からランダムに一つ選択した方法で学習用画像からパッチ画像をサンプリングする。
- 画像をそのままパッチ画像として用いる。
- 物体とのjaccard overlapの最小が0.1, 0.3, 0.5, 0.7, 0.9(ランダムに選択される)であるパッチ画像をサンプリングする。
- ランダムにパッチ画像をサンプリングする。
- ground truthの中心がサンプリングされたパッチ画像内にある場合は、パッチ画像に含まれるground truthと見做す(おそらく、見切れてるようなbounding boxを含めるかどうかの基準)。
- 各パッチ画像のスケールはオリジナルの画像に対して[0.1, 1]、アスペクト比は[1/2, 2]。
- パッチ画像に対してrandom horizontal flipといくつかのフォトメトリックな歪みを加える。
論文読み&Keras実装 ArcFace: Additive Angular Margin Loss for Deep Face Recognition
metric learningやfeature learningと呼ばれる学習手法は、クラス内のサンプル間の距離を近く、クラス間のサンプル間の距離を遠くするような特徴量を学習によって獲得するものです。 代表的なmetric learning手法のSiamese NetworkやTriplet lossはもう古くて、ArcFaceの方が色々と優れているらしいので読んでみました。
Pytorch実装 github.com
Keras実装 github.com
Abstract
- feature learningで主に重要なのは、特徴量の持つ弁別性を向上させるのに適したloss関数を設計すること。
- Centre lossは、各サンプルの特徴量とクラスを代表する特徴量との距離に制約を設けることで、クラス内分散を小さくする。
- SphereFaceでは、全結合層の重み行列を用いて角度空間における各クラスを代表する特徴量を表現し、その重み行列の列ベクトルと各サンプルの特徴ベクトルのなす角に制約を設ける。
- 最近人気なのは一般的なloss関数にマージンを組み込む方法。
- この論文では Additive Angular Margin Loss (ArcFace)を提案。
- ArcFaceは超球面における測地線距離(直線の概念を曲がった空間において一般化したもの。2つの離れた点を結ぶ(局所的に)最短な線)と対応しているため、幾何学的に解釈できるらしい。
- 比較実験めちゃくちゃやった(最近のSOTAな手法すべて+10種類のデータセット)。
- ArcFaceはSOTAな手法であるとともに、実装が簡単で計算コストの増加も無視できるほど少ない。
2. Proposed Approach
2.1. ArcFace
- 普通のsoftmax loss は以下の通り。
- バイアスを0に固定して、Wの列ベクトルとxをそれぞれL2ノルムで正規化すると、二つのベクトルのなす角のコサイン(コサイン類似度)を表すことができる()。sはリスケールのパラメータで、マージンによって値が小さくなりすぎるのを防ぐ。
- 最後にマージンmを、正解ラベルについてのlogitから求められる角度に加える()。実装上はarccosineか三角関数の公式を用いた計算が必要。
- 全体の流れは以下の図の通り。
- 以下の図は8クラスの顔画像データ(それぞれ約1500枚ずつ)について、二次元の特徴表現をSoftmaxとArcFaceで学習し、結果を比較をしたもの。中心から伸びてる線分は、クラスを代表する特徴ベクトルを表しており、円周上に分布する点は各サンプルの特徴ベクトルを表している。
- ArcFaceの方がクラス内分散が小さく、ばらつきが少ないのがわかる。
2.2. Comparison with SphereFace and CosFace
Numerical Similarity
- SphereFaceとCosFaceはArcFaceと同様にコサイン類似度を用いたlossであるが、マージンの導入の仕方が異なる。
- 以下の式がわかりやすくて、マージンとしてm1を用いる場合はSphereFace、m2を用いる場合はArcFace、m3を用いる場合はCosFaceになる。
- 数値解析の観点から見れば、マージンを角度空間で加えようがコサイン空間で加えようがどっちでも問題ない。
Geometric Defference
- 数値解析的にはSphereFace, CosFace, ArcFaceはあまり違いが無いけど、幾何学的な観点から見ると、ArcFaceのマージンは測地線距離と正確に対応している。
- 以下の図はニクラス分類における決定境界とマージンを示したもの。点線が決定境界で、灰色の領域はマージン。
- おそらく、クラスを代表する特徴ベクトル\thta_1と\theta_2の線形結合でサンプルの特徴ベクトルを表した際に、どちらのクラスに属するか示してる。
- ArcFaceのマージンはSoftmaxの決定境界に対して一定かつ線形になっているのに対して、SphereFaceとCosFaceはそうではない。
- ちょっとした違いかもしれないが学習には大きく影響するらしくて、SphereFaceでは勾配の発散を防ぐために、学習開始時にマージンのペナルティを弱めている。
2.3 Compatison with Other Losses
- その他のLossとの比較は以下の図がとても分かりやすい。
- Margin-LossとTriplet-Lossの違いは、 Margin-Lossではpositive sampleとnegative sampleにそれぞれクラスを代表する特徴ベクトルを用いる点。
論文読み M2Det: A Single-Shot Object Detector based on Multi-Level Feature Pyramid Network
M2Det
今年発表されたone-stage detectorのSOTAで、構造がとてもエレガントです。
著者によるPyTorch実装 github.com
M2Detとは?
- 既存のone-stage detectorで用いられているfeature pyramidは、分類タスク用のモデルの特徴マップから構成されているため、物体検出に最適ではない可能性がある。さらに、それぞれの特徴マップは単一のレイヤからしか作られていない。
- M2Detでは、backbone network中の異なるスケールの2つの特徴マップをconcatしたものをBase featureとして用いる。
- Base featureに対してU-Net likeなsubnetworkを複数回かけ、それぞれのsubnetworkの特徴マップをfeature pyramidとして用いることで、様々なスケールかつ抽象レベルの特徴マップを持つMulti-level Feature Pyramidを生成し検出に用いる。
- 精度と実行速度においてSone-stage detectorのSOTAを達成。
- ベースとなっているのはSSDで、SSDのFPNをMulti-level Feature Pyramidで置き換えたイメージ。
Multi-level Feature Pyramid Network (MLFPN)
FFMv1
- FFMv1では、backboneの特徴マップからBase featureをつくる
- backbone内の最も小さいスケールの特徴マップの中で最も深いもの(VGG16のconv5_3)と、二番目に小さいスケールの特徴マップの中で最も深いもの(VGG16のconv4_3)をとってきて、convによるチャンネル数の削減とupsampleでconv5_3のスケールをconv4_3に合わせてconcatしたものがBase feature。
TUM
- TUMはU-Net likeなsubsetwork。
- U-Netと異なり各ブロックのconvは一層だけ (論文中ではThinと表現されている)。stride2のconvでスケールを落としていく(論文だとスケールは6段階なのでブロック数はencoderとdecoderそれぞれ5)。
- encoderとdecoderのマージはconcatではなくelement-wise sum。
- Multi-level Fature Pyramidに用いるために、decode部分の各スケールごとにconv1x1をかけて特徴マップを出力する。
- TUMは何回か繰り返す(論文だと8回)ことで、異なる抽象レベルの特徴マップを獲得することができる。
FFMv2
- ひとつ前のTUMの最終層の特徴マップと、Base featureのチャンネル数をconvで削減したものをconcatして、次のTUMに渡す
SFAM
- SFAMでは複数のTUMから得られる特徴マップを統合してMLFPを生成する。
- 同一スケールの特徴マップをconcatしてSqueeze & Excitation (SE)ブロックをかける。異なる抽象レベル間の相互依存性を情報としてうまく利用するためか?
- MLFPの完成。
Implementation details
- 学習の最初の5epochは小さい学習率から初期lrまで徐々に大きくする。(Warmup, 分散学習でよく使われる)
- 初期lrは2*10^-3、90epochと120epochで0.1倍して150epochで学習終了。
- バッチサイズは32。
- 入力サイズは既存手法に倣って320x320、512x512、800x800の3つ。
- backboneはVGG-16とResNet-101。
所感
- CornerNetよりも精度良くて高速、実装が簡単そう
- 各モジュールの構造と役割が分かりやすい
論文読み OCNet: Object Context Network for Scene Parsing
OCNet: Object Context Network for Scene Parsing
PSPNetのPyramid PoolingやDeepLabのASPといったsegemntationで強いモジュールと、Non-local Neural Networksを組み合わせたモジュールを提案した論文です。
著者によるPyTorch実装: github.com
Object Context
Object context pooling (OCP)
- Non-local Neural NetworksのNon-local operatorとほぼ同じで、類似度表現には内積にガウス関数をかけるEmbedded Gaussianを用いる。
- OCPによって得られる特徴マップをobject context mapと呼ぶ。
- Non-local Neural Networksと同様に、object context mapに初期値0のconv1x1(著者が公開しているコードのW)をかけることで、モデルの持つもともとの振る舞いを妨げないようにする。
- OCPを用いた以下の3つのモジュールを提案。
- Base object context
- Pyramid object context
- Combination with ASPP
Base object context
- 入力の特徴マップにOCPをかけて入力の特徴マップとconcatする。
Pyramid object context
- PSPNetのPyramid PoolingとOCPを組み合わせたモジュール。 - 異なるスケールの特徴マップそれぞれにOCPをかけてconcatする。
Combination with ASPP
- DeepLavのASPとOCPを組み合わせたモジュール。 - ASPの1x1 convやdilated convのブランチにOCPのブランチを追加。
Network Architecture
- ネットワーク構造は以下の図の通り。
- backbone networkにはImageNetで学習済みのResNet-101を用いる
Experiments
- Cityscapes (路上画像)、ADE20K (一般物体認識)、LIP (様々なタスクを行う人物)の3つのデータセットでSOTAな性能を示した。
Visualization of object context maps
- 以下の図は画像中のあるピクセルについてのobject context mapsを可視化したもの。
- 赤い+マークが着目ピクセルを示している。
- OCPの狙い通りに、着目ピクセルと同じcontextを持つ領域の値が高くなっていておもしろい。
所感
- segmentationの後処理としてよく使われるMRF的な効果もあるのかなと感じる
論文読み Non-local Neural Networks
局所的な情報しか扱うことができないCNNやRNNに、大域的な情報を付与することが可能なnon-local blockというモジュールを提案した論文です。traditionalなノイズ除去手法のNon-local Mean Filterを、ニューラルネットワークで表現したような手法です。
Abstract
CNNやRNNでは局所的な情報しか扱うことができない。CNNだとカーネルサイズを大きくするとか方法があるけど、限界があるし小さいカーネルの利点が失われる。 そこで、本論文ではより大域的な情報を扱うことが可能なnon-local operatorを提案する。 non-local operatorはノイズ除去手法のNon-local Mean Filterから着想を得ており、着目点の値を特徴マップ中の全ての点の重み付き和として表現する。 non-local operatorはcomputer vision系の様々な構造のモデルに導入可能であり、導入することで動画像の分類や物体検出、領域分割において性能が向上した。
3. Non-local Neural Networks
3.1. Formulation
Non-local Mean Filterの演算をニューラルネットワーク向けに以下のようなnon local operatorに定式化する。
は特徴マップ中の着目点とある点の類似度、はある点での入力信号の表現を計算する関数を表す。 は正規化係数。
全結合層との違い
non-local operatorにおいて全結合層の重みにあたるは学習パラメータではなく類似度である。また、non-local operatoのr入力サイズは任意でありCNNやRNNに簡単に導入できる。
3.2. Instantiations
はカーネルサイズが1の畳み込みによるembeddingで表現する。類似度を表すには以下のようなものが考えられる。
Gaussian
ユークリッド距離ではなく内積を用いるのは、その方がDeep learningのプラットフォーム上で実装しやすいため。正規化係数はの総和。
Embedded Gaussian
\theta({\bf x}_i)と\phi({\bf x}_j)はembeddingを求める関数でと同様に、カーネルサイズが1の畳み込みで表現する。 正規化係数はGaussianと同様にの総和。
機械翻訳タスクにおいて用いられているself-attention moduleは、Embedded Gaussianを類似度関数に使ったnon-local operatorとして捉えることができる。 Embedded Gaussianを用いるとき、は次元jに沿ってsoftmax関数をかけるのと同じとみなせるため、non-local operatorはと表すことができる。これはself-attention moduleを表す式と同じ。non-local operatorは、シーケンスのみに対応していたself-attention moduleを画像や動画像データにも対応可能なように拡張したものといえる。
self-attention moduleとの関係性とは反対に、softmaxは必ずしも必要ではない。
Dot product
とのembeddingの内積。Embedded Gaussianのガウス関数を除いたもの。
正規化係数はの要素数。の総和を使わないのは、勾配計算を簡単にするため。
Concatenation
visual reasoning(どういうタスク?)用のRelation Networksというモデルで使われている関数。
は連結を表す。はベクトルをスカラーに射影するための重みベクトル。 正規化係数はDot productと同様にの要素数。
3.3. Non-local Block
non-local operatorを既存のモデルに導入するために、ラッパーとしてnon-local blockを用いる。non-local blockは以下の式で表される。
はnon local operatorの出力。はresidual connectionであり、の初期値を0にすることで事前学習済みモデルに対しても、元々の振る舞いを妨げることなくnon-local operationを導入することができる。
5. Experiments on Video Classification
Instantiations.
類似度関数の比較。
non-local blockを追加することで性能が1%改善した。類似度関数間の性能差はほぼ見られない。このことから、self-attention moduleではsoftmaxが重要であるとされていたが、それよりもnon-localな構造の方が性能向上に寄与しているとわかる。
Which stage to add non-local blocks?
ResNetの異なる層にnon-local blockを入れたときの比較。
res2, res3, res4の精度はほぼ同じであるが、res5は少し低い。これはres5のサイズはと小さく、空間的な情報を持っていないため。
Going deeper with non-local blocks.
non-local blcokをより多くの層に導入した結果。
より多くの層に導入した方が良い結果となった。
6. Extension: Experiments on COCO
Mask R-CNNにnon-local blockを導入した結果。
non-local blockを追加することで全ての評価指標が改善した。