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

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

Normalized Cut Loss for Weakly-supervised CNN Segmentation

はじめに

Normalized Cut Loss for Weakly-supervised CNN Segmentationを読んだのでメモ.生成モデル以外の論文読むのが久しぶり.

気持ち

Weakly-supervisedの枠組みにおけるsegmentationの手法は擬似的なマスクを生成してフィットさせていくことが多いが,Cross Entropyのようなロス関数を使うとミスラベルにフィットしてあんまりうまくいかない.なのでそこを解決するような新しいコスト関数が欲しいという感じ.

従来の流れ

Semi-supervisedの枠組みでの一般的なアプローチとしてはラベルに準拠するロスとヒューリスティックスな正則化項を組み合わせたコスト関数の最小化を行う.例えば一つの例としてLaplacian eigenmap regularizerを使ったコスト関数は以下のようなものがある.

\displaystyle
\sum_{p\in\Omega_\mathcal{L}}l(S_p,y_p)+\lambda\sum_{p,q\in\Omega}W_{pq}||S_p-S_q||^2

上記lはラベルy_pと点p\in\Omega_\mathcal{L}における出力値S_pを比較する一般的なコスト関数で,第2項目は正則化項でW_{pq}はあらかじめ定義されたpairwise affinitiesW=[W_{pq}]を表す.基本的に正則化項は隣接ピクセルの滑らかさを定義するようなもの.

ここからの発展としてMRFなどで知られるグラフの拘束を用いる方法が考えられた.そのような手法では以下のコスト関数が考えられる.

\displaystyle
\sum_{p\in\Omega_\mathcal{L}}-\log S_p^{y_p}+\lambda\sum_{p,q\in\Omega}W_{pq}[S_p\neq S_q]

これは言ってしまえば先ほどのコスト関数が離散になったようなもので,S_p^k\in\{0,1\}で,第二項目の[]はIverson brackets(indicator functionのようなもの.中身が真なら1で偽なら0)を表す.

ここでは上記のようなコスト関数をCNNのコスト関数に落とし込むことを考える.そのためにはコスト関数を実数に緩和する必要がある.CNNでは一般的にS_p\in[0,1]はsoftmaxの出力として得られ.これを使ってコスト関数を書き直すと以下のような2次形式のコスト関数として得られる.

\displaystyle
\sum_{p\in\Omega_\mathcal{L}}-\log S_p^{y_p}+\lambda\sum_kS^{k'}W_{pq}(1-S^k)

ここでS^k\in[0,1]でベクトルS_p\in[0,1]のk番目(クラスk)の要素S_p^kのサポートベクトルを表す.このようにMRF等で用いられる関数を実数の枠組みに拡張すればCNNの枠組みでsemi-supervisedの学習のコスト関数として使える.(ただし,論文では"We will study these losses in the future. This paper focuses on normalized cut objective."と言っているので以降あんまり関係ない)

Normalized Cut

Normalized Cutはsegmentationの課題に対して提案された一般的なグラフクラスタリングアルゴリズムらしい.spectral clustering等と同じくくりの手法でLaplacian Matrixの固有ベクトルに依存した手法になっている.基本的に以下で表される正則化項としてコスト関数に導入される.

\displaystyle
\sum_k\frac{cut(\Omega_k,\Omega/\Omega_k)}{assoc(\Omega_k,\Omega)}\equiv\sum_k\frac{S^{k'}W(1-S^k)}{d'S^k}

\Omega^kはラベルkが割り当てられたピクセルの集合を表し,S^kは2値のindicator vectordは度数ベクトルでグラフの各ノードのエッジの本数を表す.細かいことは元論文にと書いてあったのでまた次回読みたい.

提案手法

基本的な戦略は,クロスエントロピーとnormalizing cutを組み合わせたコスト関数を使ってweakly-supervised segmentationをCNNで実現するというもの.

最初に述べたように,擬似ラベルを生成してクロスエントロピーを使うと間違ったラベルにフィットしてしまうため,まずはそのような領域を効果的に無視できるpartial cross entropyを提案する.アイディアはシンプルでクロスエントロピーを以下のように書き換えるだけ.

\displaystyle
\sum_{p\in\Omega_\mathcal{L}}-\log S_p^{y_p}=\sum_{p\in\Omega}-u_p\log S_p^{y_p}

ここでp\in\Omega_Lの時u_p=1でその他は0になる.すなわち出力の全体\Omegaをコストの計算に使うのではなくラベルが振り当てられたピクセル\Omega_\mathcal{L}のみで学習を行うというもの.実験的にだがこのロスはめちゃくちゃよく機能するらしく,フルラベルを用いた際と比べて85%程度の精度が出るらしい.

次にこのpartial cross entropyに実数空間に拡張したNormalizing Cutの正則化を組み合わせた以下のコスト関数を考える.

\displaystyle
\sum_{p\in\Omega_\mathcal{L}}-\log S_p^{y_p}+\sum_k\frac{S^{k'}W(1-S^k)}{d'S^k}

Affinity matrix Wは事前に定義されていてここではガウシアンカーネルを使ったsimilarity graph.

あとはこのコスト関数を使ってクラスごとの前景領域と背景領域を少しだけ与えてあげたデータを用意して学習するだけ. 実験ではネットワークにDeepLabを使ったとのこと. 面白いのはpartial cross entropyを使えばGrabCutを使ったアノテーションによる学習より線描きしたアノテーションの方がよく動作するということ.

まとめ

Weakly-supervisedと考えると出力結果が衝撃的な美しさ.これだけできるならもうdenseなアノテーションはほとんどいらないんじゃないかという気持ちになる.