しえログ

qiita との使い分けに悩んでる

ECCV2016 の Deep Automatic Portrait Matting 読んだメモ

タイトル

Deep Automatic Portrait Matting

著者

Xiaoyong Shen, Xin Tao, Hongyun Gao, Chao Zhou, Jiaya Jia

概要

肖像画的な写真に対する高精細なマスク画像を、ユーザインタラクションなしに自動で生成する CNN-based な仕組みを提案。
例えば髪の毛の毛先までしっかりとアルファブレンドできるようなセグメンテーションマスクを生成できる。
人が自分で前景・背景を指定するやり方はプロじゃない人には難しいし、プロでも難しい。
これを自動で解決するのが image matting と呼ばれる手法であり、入力画像 { I } を背景 { B } と前景 { F } に分解するものである。
提案手法(ネットワーク)は

  • 新しい要素(前景・背景・不明領域のラベルスコアと shape mask )を含んだ、前景・背景・不明領域に分割する FCN
  • 前後方型の image matting レイヤ

を利用してこの問題へ対処する。

利用技術・前提知識・用語

  • portrait image
  • image matting
    • 画像から前景のアルファ値を抽出する処理
  • ill-posed
    • 不良設定問題
  • trimap
    • ここでは前景、背景、処理対象のそれぞれの領域を表している
  • FCN
    • Fully Convolutional Network
    • 論文: Fully convolutional networks for semantic segmentation
  • CRFasRNN

英単語

  • tractable
    • 取り扱いやすい
  • discrepant
    • 矛盾した、不一致の
  • trivial
    • ささいな
  • aforementioned
    • 前述の
  • albeit
    • かたく
  • thus
    • 従って
    • このようにすることで 
  • perturbing
    • 動揺させる
    • 乱す

手法

システム全体の入力・出力は以下。

入力: 肖像画{ I }

出力: アルファマット { \mathcal{A} }

Trimap Labeling

幾つか新しい要素を混ぜ込んだ FCN を使って前景・背景・不明な領域に分割する。

入力画像のピクセルが前景・背景・不明のどれに属するのかを予測し、 trimap labeling を行う。これをピクセル分類問題として FCN-8s をベースにして解き、入力画像のピクセルに対して以下の3つの値と、 { shape\:mask } というもう一つのチャンネルを出力する。

{ F^s, B^s, U^s }: 前景・背景・不明のそれぞれのスコア

{ shape\:mask }: アルファマットを合理的に初期化するためのチャンネル。学習データである portrait-matte ペア { \{P^i, M^i\} } に対して、平均をとることで生成する。数式は省略。

{ P^i }: 顔器官の特徴点(ランドマーク?)

{ M^i }: ラベル付けされたアルファマット

Image Matting Layer

FCN-8s の結果で得られた { F^s, B^s, U^s } を元に { F, B } の probability map (確率分布って訳しておk?)を以下の softmax 式で求める。

{ F=\displaystyle \frac{\exp(F^s)}{\exp(F^s)+\exp(B^s)+\exp(U^s)} }

そうすると { \boldsymbol{\rm{F}}=\mbox{diag}(F), \boldsymbol{\rm{B}}=\mbox{diag}(B) } として次式によりアルファマットを求める事ができる。

{ \min\lambda \mathcal{A}^T \boldsymbol{\rm{B}} \mathcal{A}+\lambda(\mathcal{A}−\boldsymbol{1})^T \boldsymbol{\rm{F}} (\mathcal{A}−\boldsymbol{1})+\mathcal{A}^T\mathcal{LA} }

{ \mathcal{L} }: 入力画像 { I } におけるラプラシアン行列

{ \lambda }: データ項とラプラシアン行列とのバランスを取るための係数

そして、この解法に従って、{ \mathcal{A} } は次式のような関数の出力で表現される。

{ f(F,B;\lambda)=\lambda(\lambda \boldsymbol{\rm{B}}+\lambda \boldsymbol{\rm{F}}+\mathcal{L})^{-1}F }

あとは論文内の誤差逆伝搬式で { \lambda } を調整する。先行研究ではこれは人力で行われてた。

Loss Function

Ground Truth と予測された { \mathcal{A} } との間の損失関数は以下の通り。

{ L(\mathcal{A},\mathcal{A}^{gt})=\displaystyle \sum_i w(\mathcal{A}_i^{gt}) \|\mathcal{A}_i - \mathcal{A}_i^{gt}\| }

{ w(\mathcal{A}_i^{gt})=-\log (p(A=\mathcal{A}_i^{gt})) }

alpha matte は殆どの要素が0,1のスパースな行列になるため、単純にL1,L2ノルムを取るとバイアスがかかってしまうため上記のような重みを用いた式になった。

実験と結果

教師となる Ground Truth { \mathcal{A}^{gt} } は closed-form matting と KNN matting で作成してみてよかった方を採用した。クオリティが低いものに関してはフォトショでも修正した。

これによって2000もの画像における徹底的な高精度アルファマットを作成し、学習用データセットとした(クロスバリデーションも行った)。

精度評価には勾配と連結性の指標( matte perceptual error *1)を利用。

提案手法は前景・背景・不明領域の推測能力だけでなく、matting layer による trimap の調整においても効果を発揮した。

所感

  • 恥ずかしながら image matting というを初めて聞いた。
  • デモとかで Shape Mask 作るところまでをやってみたい。
    • 特に FCN とか CRF as RNN とかでの image matting は自分でも早めに試してみたいな。
  • 高精細なアルファマットの教師データ作成、なかなか骨折れそうだ
  • 応用例の広さは言わずもがなだと思うので試してみたい。

次読みたい論文

Image Matting

  • A Perceptually Motivated Online Benchmark for Image Matting

*1:A Perceptually Motivated Online Benchmark for Image Matting