画像から原因と結果を識別する論文を読む

(1) 画像から原因と結果を識別する論文を読む

 「Discovering Causal signals in Images」https://arxiv.org/abs/1605.08179

   これもhttps://twitter.com/miyamotok0105さん主催の「酒を飲みながらCVPR2017の論文を読む会」で興味を持った一つです。

 この論文は静止画像から原因となる物体と結果となる物体を特定するものです。

 下図は人間が犬とフリスビーで遊んでいる画像で、犬がフリスビーに飛びついています。

 ・人間がフリスビーを掲げているのが原因  (causal)

 ・犬が飛びついているのが結果                      (anticausal)

f:id:mabonki0725:20171020224752p:plain

 一般にデータから原因を特定する方法は2つあります。 

  1) 操作の介在があるデータから原因を推定   

   介入前後のデータの状態が変化するので、その変化より原因を推定します

  2) データの特性から原因を推定 ICM(Inpedent Causal Mechanism)方式

   データの分布状態から原因を推定します。

 1)の精度は高いですが介入操作が必要です。2)はノイズがあると識別できません。

 この論文は静止画像なので2)の方法に採っています。

 

  (1.1) 静止データでの原因分析 

 ICMでは誤差の状態で判別しますが、2方法あります。 (a) (b)図

 ・ANM(Added Nose Model)で誤差の状態で原因が識別できます。

           x \to y       y=f(x)+\epsilonの場合は誤差\epsilonが縦に並びます

           y \to x      x=f(y)+\epsilon の場合は誤差\epsilonが横に並びます

  下図だと赤の棒線線の幅が(a)では同じ、(b)では相違しているのでノイズの並びか分ります。

 ・Monotonic法 (c)図

  真値(実践)からのノイズの分布を見ると横方向には矩形、縦方向には山形になって、この分布は  y=f(x)+\epsilon で形成されたことが分ります。

f:id:mabonki0725:20171020230544p:plain

  ・独立成分分析(ICA) 

   手法としては独立成分分析(ICA)で分布の方向を探ることができます。

   下図はその例です。ノイズの方向が見えない場合でもICAは判断することができます。

    http://www.geocities.jp/mabonakai/sub/ex_icaCausal.htm 

    f:id:mabonki0725:20171021075624p:plain

 (1.2) 論文の手法

 データを高次元に写像してICMを使っています。

 本論文の手法では、まず画像を部分画像m個に分解します。

    この分解方法については一般の矩形(BoundingBox)で行います。

 

  (1.2.1) pixelベースの「原因」「結果」判別分析

    ICMはpixelデータを高次元に写像して行っています。

 一般にデータを高次元に写像するとデータは分離しやすくなります。

f:id:mabonki0725:20171021092726p:plain

    高次元の写像にはカーネルが一般的ですが、ここでは深層モデルで行っています。

 ・カーネルによる高次元写像

     KCC( [(x_{i,j},y_{i,j} ) ]_{j=1}^{m_i}) = \psi \left( \frac{1}{m_i} \sum_{j=1}^{m_i} \phi(x_{i,j},y_{i,j}) \right)

         ここで

    x_{i,j} \ \ y_{i,j} は部分画像iのpixel

            m_iは部分画像iのpixel数

            \phi(x_{i,j},y_{i,j}) は画像をカーネルで高次元に写像

   \psiは原因か結果かのICM2値判別関数

 ・深層学習によるデータの高次元化NCC(Neural Causation Coefficent)

  f:id:mabonki0725:20171021082605p:plain

       この論文では次式を使って「原因か結果」かを判別しています。

       次式の値が1に近ければ「結果」となります。

     \frac{1}{2} \{1- NCC ( [(x_{i,j},y_{i,j} ) ]_{j=1}^{m_i})) +  NCC( [(x_{i,j},y_{i,j} ) ]_{j=1}^{m_i})  \}

 

(1.2.1) 物体レベルの判別分析  

  しかしながらpixelベースでは「原因か結果」では判別が難しいので、

    最終的には物体c_kとその特徴量f_kとでNCCで判別しています。

 物体c_kとその特徴量f_kは深層学習で20個識別しています。

          NCC( [(c_k,f_k ) ]) = \psi \left( \frac{1}{m_k} \sum_{j=1}^{m_k} \phi(c_{k,j},f_{k,j}) \right)   

 上段が物体の検出精度で、下段が「結果」の識別精度となっています

f:id:mabonki0725:20171021084534p:plain