機械学習とかコンピュータビジョンとか

CVやMLに関する勉強のメモ書き。

SOLO: Segmenting Objects by Locationsを読んだのでメモ

はじめに

SOLO: Segmenting Objects by Locationsを読んだのでメモ. Instance Segmentationをoneshotかつ高精度におこなったというもの.

YOLO

物自体は単純で,FPNによるobject detectionのbb生成側のブランチをインスタンスマスクに変えたという感じ. この論文ではbackboneはFPNを使い複数の特徴マップから検出を行う. 検出を行うためのブランチはクラス推定とマスク推定の二つからなる. クラス推定ブランチはS\times S\times C次元を出力とし,入力に対応する領域のクラスカテゴリCを推論する. このSは入力の解像度に依存しないもので,実装的にはadaptive poolingで固定の解像度に押し込められる. Table 2でSを変えた時(出力は単一の特徴マップから)と複数の特徴マップを利用した場合の精度比較をしている. Pyramidの時の各パラメータはTable 3にある.

マスク側は,クラス推定ブランチの出力に対応するH\times W解像度のマスクを生成する. すなわち,クラス推定ブランチの出力の解像度がS\times Sなのでマスク側はH\times W\times S^2次元の出力を返す. 論文の後半で説明されているが,このままでは冗長な出力が多いのでH\times W\times Sの出力を二つ作り,それぞれの出力の各チャネルの積の組み合わせでH\times W\times S^2を表現することで冗長性を抑え精度の向上をおこなっている.

マスクを生成する際には畳み込みの位置普遍性が邪魔になるので,SOLOではCoordConvを利用して位置に依存した畳み込みをおこなっている.Figure3のMask Headの(256+2)の2がCoordConvの座標値のこと.

ラベルのグリッドへの割り当ては最近の物体検出で利用されているcenter samplingを採用したとのこと. 基本的にはマスクの重心位置で割り当てを行うはず. 論文には「Given the mass center (c_x,c_y), width w, and h of the ground truth mask, the center region is controlled by constant scale factors \epsilon:\ (c_x,c_y,\epsilon w,\epsilon h). We set \epsilon=0.2 and there are on average 3 positive samples for each ground truth mask.」と書いてあるがよくわからないので勉強して出直します. center samplingはマスクの重心に対応するグリッド(ここではS\times S)を中心とした適当な領域(例えば3\times3とか)をpositive sampleとして扱うというもの. FCOSという論文の実装で図解されてた. SOLOでは真のマスクの幅と高さw,hに対して固定のスケーリングパラメータ\epsilon=0.2を掛けた範囲,すなわち(c_x,c_y,\epsilon w,\epsilon h)の範囲をpositive sampleとして扱うという. center samplingの効果はgithubissueに議論がある. ただ,center samplingされた領域がマスク間でオーバーラップしてた場合どのようにラベル決めるかが疑問として残る.

損失関数はマスクとクラスに対して存在し,クラス側はfocal lossを利用したとのこと.マスク側の損失は次のように定義される.

\displaystyle
L_{mask}=\frac{1}{N_{pos}}\sum_k\mathbb{1}_{\{\mathbf{p}^\ast_{i,j}\gt0\}}d_{mask}(\mathbf{m}_k,\mathbf{m}_k^\ast)

N_{pos}はバッチに含まれる全positive sampleの数で,\mathbf{p}^\ast,\mathbf{m}^\astは真値のクラスとマスクを表す. 簡単にいえば,クラス分類ブランチの出力のS\times Sの中で物体が存在した場合,マスクブランチの出力の対応するチャネルに対して真値と損失を計算するということ. d_{mask}(\cdot,\cdot)はいろんな選択肢があるが,色々やってDice lossが良かったとのこと.Dice lossは次のように定義される.

\displaystyle
L_{Dice}=1-D(\mathbf{p},\mathbf{q})\\
D(\mathbf{p},\mathbf{q})=\frac{2\sum_{x,y}(\mathbf{p}_{x,y}\cdot\mathbf{q}_{x,y})}{\sum_{x,y}\mathbf{p}_{x,y}^2+\sum_{x,y}\mathbf{q}^2_{x,y}}

学習には8GPUを使ってバッチサイズ16でSGDによって36epoch学習したとのこと.

まとめ

Mask R-CNNからAPが最大で2%程度向上していて(ただしbackboneのアーキテクチャを揃えるとMask R-CNN未満のAP),検出結果も上手くできているなという印象.速度もMSCOCOでAP34.2達成したモデルで22.5FPS出せると書いてあるのでそれなりに高速に動作もするらしい.