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

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

Deep Energy: Using Energy Functions for Unsupervised Training of DNNsを読んだのでメモ

はじめに

Deep Energy: Using Energy Functions for Unsupervised Training of DNNsを読んだのでメモ.

気持ち

データセットの規模をスケールさせたいというモチベーション.ほぼほぼ完璧なアノテーションが自動で作れればデータセット作成に人手がほぼいらなくなりスケールさせることができ,ラベル付きデータが増えれば教師ありで学習したモデルも強くできる.そのためラベルなしデータを使ったアノテーション生成モデルの学習手法を提案するというもの.

今回はエネルギー関数を使ってsegmentationのモデルを学習するが,そもそもアノテーションではなくそのエネルギー関数を使ってsegmentationを行えばいいのではという疑問がある.この疑問に関する答えとしては実用においてはエネルギー関数を使ったsegmentationは実行速度がネックになる点が一つ.もう一つは学習ベースの方がデータごとの細かな正則化を考える必要がない点があげられる.

Deep Energy

ここでのゴールとしてはデータ\mathbf{x}が与えられた時に\mathbf{y}=\mathbf{y}(\mathbf{x})と真のラベルと一致させること.一般的なエネルギー関数を使ったsegmentationはエネルギー関数をE(\mathbf{x},\mathbf{y})とすると次の最適化問題として記述できる.

\displaystyle
\mathbf{y}(\mathbf{x})=\mathrm{arg}\min_\mathbf{y}E(\mathbf{x},\mathbf{y})

この定式化は逆問題(超解像やノイズ除去など)の課題で広く用いられているものと同一で,上記で定式化された問題を効率的に解くことのできるモデルを学習するのが目標.そこでモデルのパラメータを\mathbf{\theta}とすると\mathbf{y}=\mathbf{y}(\mathbf{x})\mathbf{y}=\mathbf{y}(\mathbf{x;\mathbf{\theta}})と書くことができる.さらにラベルなしの学習データセット\{\mathbf{x}^n\}^N_{n=1}とすると,モデルの学習は以下の最小化問題としてかける.

\displaystyle
\min_{\mathbf{\theta}}\frac{1}{N}\sum_{n=1}^NE(\mathbf{x}^n,\mathbf{y}(\mathbf{x}^n;\mathbf{\theta}))

上記定式化は逆問題において広く適用できるが,この論文では以下の2つの応用について考える.

Seeded Segmentation

応用の一つとして,ユーザーが与えたseed(前景か背景かを点や線描きで示したもの)と画像を入力として出力がsegmentationとなるようなモデルの学習について考える.

まず,画像を重み付き無向グラフG=(V,\varepsilon,W)として考える.ただし,Vは頂点で画像におけるピクセルを示し,\varepsilonはエッジを表し,今回は4近傍でのピクセルの接続を考える.エッジe_{ij}の重みはw_{ij}=e^{-\beta(I_i-I_j)^2}で与えられ,I_iはグレースケール画像のピクセルiの輝度値,\betaはスケールパラメータとして定義される.

ここで\mathbf{y}^l\in\mathbb{R}^N,\:N=|V|を各ピクセルがクラスlに所属する確率とし,\mathbf{x}^l\in\mathbb{R}^Nをクラスlに所属するseed画像とする(論文で\mathbb{R}が使われていたから同様の表記にしたが,おそらく\mathbb{R}ではなく0,1の2値かと).そこで\mathbf{x},\mathbf{y}を全クラス数Lに関してvectorizedしたもの\mathbf{Y},\mathbf{X}\in\mathbb{R}^{N\times L}とすれば目的関数は以下のように記述できる.

\displaystyle
E(\mathbf{X},\mathbf{Y})=\sum_l(\mathbf{y}^l)'\mathbf{L}\mathbf{y}^l+\lambda\sum_l(\mathbf{y}^l-\mathbf{x}^l)'\mathbf{Q}(\mathbf{y}^l-\mathbf{x}^l)

ただし,\mathbf{Q}=diag(\sum_l\mathbf{x}^l)\in\mathbb{R}^{N\times N}とする(クラスごとのseedで与えられた前景領域のピクセル数を対角成分に持つ行列).また\mathbf{L}はグラフラプラシアンを表す(ここではL_{ij}=w_{ij}).右辺第1項はsmoothnessを表し,第2項はseedラベルとの誤差を表す.上記関数を目的関数としてモデルを学習していく.論文では上記の目的関数をCNNの出力の形に合わせて書き換えていたが,基本的に何も変わらないので割愛.

Image Matting

もう一つの応用として,前景物体のピクセルのopacityとcolorを決定することによって背景と切り分けるImage Mattingの課題を考える.入力をRGB画像\mathbf{I}とし,前景画像を\mathbf{F},背景画像を[etx:\mathbf{B}]とする.すると各ピクセルiは以下のmatting equationによって記述される.

\displaystyle
I_i=\alpha_iF_i+(1-\alpha_i)B_i

\alpha_iは各ピクセルのopacityを表し,alpha matteと呼ぶ.基本的にこのalpha matteを画像から推定することは不良設定問題になっている.そのためここでもseedを与えることで解くことを考える.seed画像を\mathbf{x}とすると目的関数は以下で表現される.

\displaystyle
E(\mathbf{x},\mathbf{\alpha})=\mathbf{\alpha}'\mathbf{L}\mathbf{\alpha}+\lambda(\mathbf{\alpha}-\mathbf{x})'\mathbf{Q}(\mathbf{\alpha}-\mathbf{x})

ここでの\mathbf{L}ラプラシアン的な行列となっていて,以下によって与えられる.

\displaystyle
\mathbf{L}_{ij}=\sum_{n:(I,j)\in p_n}\left(\delta_{ij}-\frac{1}{|p_n|}\left(1+\left(\mathbf{I}_i-\mathbf{\mu}_n\right)'\left(\mathbf{\Sigma}_n+\frac{\varepsilon}{|p_n|}\mathbf{I}\mathbf{d}_3\right)^{-1}\left(\mathbf{I}_j-\mathbf{\mu}_n\right)\right)\right)

p_nピクセルnを中心としたパッチ(ここでは3\times 3の領域)を表し,\mathbf{\mu}_n\in\mathbb{R}^{3\times 1},\mathbf{\Sigma}_n\in\mathbb{R}^{3\times 3}はパッチ内のピクセルの平均と分散,\mathbf{Id}_3\in\mathbb{R}^{3\times 3}単位行列を表す.こちらも論文にはCNN用に書き直した式が出てくるが割愛.

まとめ

データセットアノテーション自動生成は産業応用的にも重要だなあと感じる日々.関連した研究もここ数年でかなり出てきているので色々と考えねばという気持ち.