Semantic Instance Segmentation with a Discriminative Loss Function

元画像のpixelごとの特徴量をDNNで抽出し, その座標を学習することでsegmentationを行う手法を学んだ.
今回は以下のリンク先を非常に参考にしています. 画像は論文より引用.

arxiv.org
github.com

元論文の概要

目的はinstance segmentationのアプローチの提案. 現在主流となっているinstance segmentationの方法はMask-RCNNなどのproposal-basedな方法で, まずオブジェクトのありそうな領域を抽出してからそれぞれの領域に対してsemantic segmentationを行う(前面と背景を分ける). それに対して論文では, それぞれのピクセルの隠れ特徴ベクトル(embeddingsと英語で言う?)をネットワークで出力する方法をとっている. 同じインスタンスピクセル同士のembeddingsは似たものになるはずだし別のインスタンスピクセル同士は離れるはず. そういった引力と斥力のようなloss functionを定義することでinstance segmentationを行っている.


f:id:busongames:20190609004725p:plain
loss functionは以下

\displaystyle{
L_{var} = \frac{1}{C}\sum_{c=1}^C\frac{1}{N_c}\sum_{i=1}^{N_c}[||\mu_c-x_i||-\delta_v]_{+}^2 \\
L_{dist} = \frac{1}{C(C-1)}\underset{cA\neq cB}{\sum_{cA=1}^C\sum_{cB=1}^C}[2\delta_d-||\mu_{cA}-\mu_{cB}||]_{+}^2\\
L_{reg} = \frac{1}{C}\sum_{c=1}^{C}||\mu_c||\\ 
\\ 
\\ 
\\ 
\\
L = \alpha L_{var}+\beta L_{dist}+\gamma L_{reg}
}



L_{var},L_{dist},L_{reg}はそれぞれ引力, 斥力, 正則化のイメージ.
\delta_v,\delta_dはそれぞれ同じインスタンスの点が集まってほしい半径, 違うインスタンスの点が離れてほしい半径を表すハイパラメータ.
うまく学習させると重なりなどに強いsegmentationが可能になるっぽい.


f:id:busongames:20190609130324p:plain

今回の実験

今回はsemantic気味に円と四角と背景を分けてみる. 合計6つの図形をランダムで作成し, その白黒画像を入力として用いる. 論文ではsemantic segmentationで背景と物体を分けてから物体に対してsegmentationを行っていたが実験では背景も一つのインスタンスとみて分けてみる. ネットワークの出力であるembeddingsはプロットできるように2次元で行った.

nyoki-mtl様の実装と違うところ
  • クラスタリングはk平均法ではなく, 物体数がわからないという前提のもとmeanshift法でクラスタリングを行う.
  • 論文では元の入力に座標情報を表すチャンネルを加えるcoordconvという方法を採用しているので加える.

github.com

  • 実装例では教師ラベルが1データに対してインスタンスの数だけ存在しているが, 今回の実験では例えば6個全部四角だった場合に円のラベルが0となりうまく学習されないことがあるので, 1枚のチャンネルに1,2,3と番号を割り当てる方式にした(わかりにくくてすみません). 実装面からみても, 1枚で固定されるこちらの方法の方がよさそう.

SGDではなく論文通りにAdamを使用.

結果

f:id:busongames:20190611000729p:plain
入力画像
右が出力されたembeddingsで左がそれをクラスタリングしたものに色づけしたもの. 画質悪くてすみません.
f:id:busongames:20190611000314j:plain:w480
途中ラベリングの色が変わっているのはmeanshiftがembeddingsを4つに分けてしまい色の分割が変わったためと考えられる.

でもまあうまくいっているんではないでしょうか. こういうやり方の方がディープラーニングっぽくていいよね.

f:id:busongames:20190611001032p:plainf:id:busongames:20190611001118p:plain
終結
ちなみに6個全部四角形だった時.
f:id:busongames:20190611003307p:plain
もうちょっと工夫が必要ですね.....