【論文読み】IMAGINE: Image Synthesis by Image-Guided Model Inversion

原論文をもとに解説していますが、**間違い、指摘などあればお気軽にご連絡ください**！

# はじめに
一枚の画像について、その風景を維持しつつ物体の位置や形・大きさを変えたりして様々な画像を作り出す手法が近年提案されています。
これらはディープラーニングのデータオーギュメンテーションや、特定の画像に特化した生成などの技術に活用できます。

従来手法として、Model inversion（モデル反転）やGAN（敵対的生成ネットワーク）を用いたものが挙げられますが、それぞれ欠点があることが分かっています。
本研究では、Model inversionベースの技術を応用し、**画像をガイドとすることで意味的な構造を維持したバリエーション画像を生成できる**「IMAGINE」を提案しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1373557/b754b6e5-6fba-c1fd-92ff-407bedfbe176.png)


本記事で解説する元論文
***"IMAGINE: Image Synthesis by Image-Guided Model Inversion"***
Pei Wang, Yijun Li, Krishna Kumar Singh, Jingwan Lu, Nuno Vasconcelos 著
出典：CVPR 2021
Paper: https://openaccess.thecvf.com/content/CVPR2021/html/Wang_IMAGINE_Image_Synthesis_by_Image-Guided_Model_Inversion_CVPR_2021_paper.html

本記事で引用している画像はすべてこの論文が出典です。

**本記事の流れ**

- 要約・ポイント
- 1. Introduction
- 2. Related Work
- 3. Proposed Method
- 4. Experiments and Applications
- 5. Conclusion
- 所感・まとめ
- 参考文献


#要約・ポイント

- 特定の画像から意味構造を維持した様々な画像を作り出すことは重要なタスクである
    - 主に、Model inversion（モデル反転）やGAN（敵対的生成ネットワーク）が用いられている
- 本研究では、Model inversionをベースとしながら、ディスクリミネータを新たに設けて学習することでもっともらしい画像を作り出す

**提案手法の特徴と貢献(従来手法と比べた相違点)**

- 意味の一貫性を保持できる
- ジェネレータの学習が必要ない
- 生成画像を細かく制御可能
- モデルをコンパクトに抑えられる

# 1. Introduction

- 人間は、一枚の画像を見れば特定の物体の位置が違ったり風景が微妙に異なる写真を容易に想像することができます。
- もしこれをコンピュータで実現できれば、一枚の画像から様々なデザインの考案ができたり、データオーギュメンテーションに使うこともできます。
- GANを用いた従来手法は、以下の２つに分けることができます。
    1. 画像を潜在空間に投影し、そこから新しい画像を作り出す手法（ジェネレータをinvert(反転)する）
    2. 一枚の特定の画像を学習し、様々な変換タスクを行う手法（SinGANが代表的）
- しかし、1、2両方とも問題があります。
    - 1：**「潜在空間への投影が学習の領域外になりあまりリアルでない画像になる」「学習したもの以外の画像に適応できない」**
    - 2：「パッチベースで学習しているため繰り返し構造を持つ風景画像などには強い（Fig.2一列目の山など）が、**繰り返さない物体画像などには適用できない**」

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1373557/dfbef474-c592-1880-b6f8-8b6bf368d1c8.png)


- これらの問題を解決するものとして、Model Inversion（モデル反転）が挙げられます。
    - Model inversionとは、簡単には「あるクラス分類器が特定のクラスとして分類するような入力画像$x$を見つけ出すこと」です。「分類器が**出力**したクラス」から、「目的のクラスに分類されるように**入力**値を変えていく」という「出力⇒入力」という逆転の発想からこう呼ばれます。近年では「Adversarial sample」を使ったモデルに対する攻撃やAIシステムのデータ不正搾取行為にも使われうる方法で問題視されていますが、画像生成の分野で有用な手法も多く存在します。
    - Model inversionの原点となる手法がCVPR2015で提案され[^1]、ネットワークの重みではなく入力画像の誤差逆伝播を行う方法が記述されています。
    - 近年のModel inversionを用いた手法は以下のようなものがあります："Dreaming to Distill: Data-free Knowledge Transfer via DeepInversion"
        - ArXiv：https://arxiv.org/abs/1912.08795
        - GitHub：https://github.com/NVlabs/DeepInversion
        - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1373557/c5dbd4fe-6f0c-26fe-d69e-9014404e80a7.png)
- しかし、従来手法ではGANに勝るような画像が作れない上にバリエーションに富んだ画像を作ることが難しいことが欠点です。

- そこで、本研究では**画像をガイドとしてモデル反転を行う**新しいアプローチ「IMAGINE（IMAge-Guided model INvErsion）」を提案します。
    - すでにImageNetで学習済みのResNet-50モデルをクラス分類器とし、ディスクリミネータを設けてリアルな画像を作りだします。
    - 一般的なGANとは異なり、「**合成画像の最適化**」と「ディスクリミネータの更新」を敵対的に行います。

- 提案手法は以下を可能にします：
    - 生成プロセスにおいて意味構造の一貫性を保つ
    - ジェネレータの学習なしにリアルな画像を作り出す
    - 生成画像を細かくコントロールできる

- 本論文の貢献点は以下です。
    - 画像をガイドに使うModel inversion技術としては初めての試みとなった
    - 画像の品質を上げるために最適化ベースのModel inversionにおいてディスクリミネータを設けた
    - 定量的／定性的評価において、GAN手法も超えるレベルであることを証明した
    - 提案手法を用いて、新タスク「オブジェクト移動」を含む画像の様々な調整ができることを示した

# 2. Related Work
以下の２つについて言及されています（抜粋）。

- Model inversion (モデル反転)：クラス分類器の出力から画像を求める手法
    - Model inversion attack  (モデル反転攻撃)
    - 「説明可能なAI」として有用
- Image-guided image generation
    - 学習済みのGANのジェネレータをinvertすることで目的の画像の潜在変数を得る
    - この分野ではGANを使った手法には特有の制限があることが知られている
        - 目的の潜在変数が学習分布内にあることを保証できない
        - 多クラスを扱うことが難しい

# 3. Proposed Method
## 3.1 Image Synthesis by Model Inversion
- 従来のModel inversionの仕組みを説明します。

クラス分類器 $f(\textbf{x})$ は、ある特定の画像 $\textbf{x} \in \mathcal{X}$ をクラス $y \in \mathcal{Y} = \lbrace 1, 2, ..., C\rbrace$に分類します。
その時、$y = \arg\max_{\hat{y}}{f_{\hat{y}}(\textbf{x})}$を求め最終的な分類クラスとして出力します。
クラス分類器は一般的なCNNで構成されているものとします。

Model inversionによる画像の最適化は以下で定式化できます。
$y^*$：目的のクラス、$\mathcal{L}$：クロスエントロピー損失、$\mathcal{R}$：正則化項、$\hat{\textbf{x}}$：初期値
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1373557/4fb7b994-879a-9949-2199-8686df85248e.png)
正則化項は「説明可能なAI」の分野で研究が盛んで、リアルでない画像になることを防ぐ効果があることが知られています。

具体的に説明すると、Model inversionは分類器のネットワークの重みではなく**入力する画像そのものを変更していく手法であり**、勾配降下は**画像の各ピクセルで実行されます**。
そのため、画像のピクセルを少しずつ変える最適化を何度も繰り返すと**隣接ピクセル間の関係性が薄れ、極端に隣のピクセルの色が違うギザギザな画像になりリアルでなくなる**と考えられています。
そこで、画像の見た目を考慮するために**過度なピクセルの更新を抑制する正則化項を加えることで大幅に改善した**ことが示されています[^1]。


一般的には、total variance（TV、総分散）lossと$L_2$ノルム項を足し合わせて使われます。
TV Lossは隣接ピクセルの差を2乗し、すべてのピクセルについて求めたものを足し合わせた項です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1373557/a3fc955d-a9e8-92a0-1fa0-3bec610aea06.png)

 また、特定の $\hat{\textbf{x}}$ においてのネットワークの活性化と学習データ全体の平均の活性化の差にペナルティを設けることでよりリアルさを大幅に改善できることが示されています。これをfeature distribution regularizer（特徴分布正則化）と呼びます。
$\mu_l(\hat{\textbf{x}})$：$l$番目層の特徴マップの平均、$\sigma_l(\hat{\textbf{x}})^2$：$l$番目層の特徴マップの分散、$ <.>_{\mathcal{D}} $ ：データセット $ \mathcal{D} $ の平均
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1373557/404e5488-1636-f323-3284-4370a718aa76.png)

これらの手法はあるクラスに属する特定の画像を作ることはできるものの、バリエーションに富んだ画像は生成できません。
GANの分野おいては様々な画像が生成できるように考慮され、学習済みのジェネレータをinvertすることで求められます。
具体的には、以下の式を解くことで目的の潜在変数$\textbf{z}^*$を得ることができます。

$\mathcal{M}$：距離ベースの指標、$\textbf{x}^0$：元画像
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1373557/4c60015b-399a-74b7-057d-ba0d97279d3a.png)

$ \textbf{z}^* $ とノイズ $ \delta $ を合わせ、ジェネレータに入力することで元画像とは異なる新しい画像 $ \textbf{x}^* $ を作り出すことができます。
しかし、$ \mathcal{M} $に使われるL2や知覚損失などでは物体の形状や特徴よりも色やテクスチャなど低レベルな部分に重点を置いているという欠点があります。
さらに、ImageNetのような超多クラスで大きなデータセットについてGANを学習するのは依然として難しいという現状です。


そこで、特定の画像の変換のみに焦点を当てた手法が提案され、中でも**SinGAN**が有名です。
これは、ピラミッド構造を用いることで小さな解像度からマルチスケールのパッチで学習を行う手法ですが、欠点があります。

- 画像毎に学習をその都度行う必要がある
- 繰り返し構造は学習しやすいが、高レベルな意味構造を保てない

そのためSinGANの生成する画像は、Fig.2にあるように「ダチョウは2本脚があり頭が胸と繋がっている」というようなその画像特有の”意味”を適用できず崩壊しているのがわかります。


## 3.2 Image Guided Model Inversion

- 上記の問題を踏まえ、Model inversionの欠点を考慮する新しいアプローチを提案します。

従来手法の正則化項を変更し、”Image Guided”な項を2つ導入します。

まず、各層における正則化項である $ (3) $ 式について考えます。
各層で意味（物体の形、輪郭、色など）の一貫性を保つことは重要ですが、特異性（バリエーション）の欠如に対処するため、比較するのをデータセット全体ではなくターゲット画像のみに変更します。
$ \Phi $ ：層の集合 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1373557/00106474-3d8a-3374-4d18-85eca4332e4e.png)

ただし、$ \mu_l $は**channel-wise平均**です。
個人的な見解では、**channel-wise平均**を取った部分が意味を保った綺麗な画像を生成できるミソなのではないかと思います。

これにより意味の一貫性を保つことを強制できますが、詳細な部分のリアリティの面では十分に考慮できていません。
そこで、SinGANに影響を受けて**パッチベースのディスクリミネータ** $ d^* $ を導入します。
$ \textbf{p} $：画像のパッチ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1373557/6e44c294-931a-7e8c-d967-b59abf45df79.png)
実際の画像 $ \textbf{x}^0 $ についてはReal(1)、求めた最適化画像 $ \hat{\textbf{x}} $ についてはFake(0)を出力させるような数式になっています。
 
上記から、画像ディスクリミネータは以下で定義できます。入力画像に応じ、Fake(0)～Real(1)が出力されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1373557/4468ce63-cc4e-8adb-6bfb-967916c1bf0e.png)
画像の最適化時には、ディスクリミネータの出力がTrue(1)になるようにしたいため、$ -1 $ を掛けてディスクリミネータにかかわる正則化項として定義します。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1373557/f5da99d0-7519-5468-250a-6b8490dcad44.png)

最後に以上の正則化項を $ (9) $ 式としてまとめ、 $ (1) $ 式を解きます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1373557/2fe3e0b2-bef2-bd60-0c20-755a955acca5.png)


## 3.3 Implementation Details

提案手法の全体像は以下Fig.3で示されます。
損失を計算し、$ \hat{\textbf{x}} $ を初期ノイズから更新します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1373557/e8f49809-2e2e-a624-6929-cec9ca570601.png)

主要なパラメータ設定を抜粋すると、以下となります。

- 画像サイズは $ 224 \times 224 $ で利用
- $ (5) $ 式（特徴分布マッチング正則化項）においては、ResNet-50のうち4層を用いて計算
    - 実験はすべて $ \lambda = 5 $ で実行
    
-  $ \gamma $ は2ステージで変動させる
    - まず初めに $ \gamma=0 $ として特徴分布マッチング正則化項のみを適用
    - その後 $ \gamma=5 $ としディスクリミネータを使って最終的な最適化を実行

$ \lambda, \gamma $ 両方とも $0$ 以外のパラメータを使った1ステージの実験も行ったようですが、最適化に時間がかかりすぎたようです。


# 4. Experiments and Applications

## 4.1 Image Synthesis

- 提案手法は、クラス分類器のinversionを行う手法に目的の画像をガイドとして取り入れた最初の手法とのことです。
- 比較手法として、GANの2手法「DGP」「SinGAN」、Model inversionの手法「DeepInversion」を使用しました。
- 物体認識、シーン認識のクラス分類器には、それぞれImageNetとPlaces365を利用して学習されたResNet-50モデルを利用しました。

各手法の比較をFig.4に示します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1373557/2de34d0d-3e41-625e-eb39-91ab62721a74.png)

- 全体では、提案手法（一番下の行）がもっともリアルで物体やシーンの意味構造を保つことができています。
- SinGANでは元の画像を繰り返したようなパターンが見られます。
- DGPは物体が崩れ、何の物体なのか判別できないほど崩れています。
    - 筆者は、物体が崩れる原因として、ジェネレータのinversionがクラス分類器のinversionより難しいタスクで間違った潜在変数を取得してしまうからなのではないかと考えています。


$ (5) $ 式の正則化項において、深い層に寄与している部分を抑制してしまう（使用した4層のうち、最初の3層のみを適用）と、以下のFig.5のように物体が崩れることが分かりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1373557/e416b111-aa36-fe07-035c-877fe52b794d.png)
深い層においては高いレベルの意味構造を処理しており、これを考慮しないとSinGANのように物体が崩れて背景と一体化してしまいます。

SinGANはゴルフコースや山などの画像をうまく作れたとしても、学習画像とほぼ同じ状態になる傾向があります。これは、ネットワークにローカルとグローバル両方で厳しい制約を課しているからで、あまり多様性のない画像ばかりが生成されてしまうようです。

提案手法では様々な画像を生成できるだけでなく、**物体の位置や向き、ポーズが違うような画像さえ作成できます**。(Fig.1参照)


- 定量的評価の比較をTab.1に示します。
    - IS（多様性の評価・↑）、FID（データセットと生成画像の特徴分布の差を評価・↓）、LPIPS（真の画像と生成画像間の視覚的類似度(**低いほど類似していることを示す**)・↑）で評価しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1373557/25032e5f-b8f8-b6cf-19a7-f25c174bf2ac.png)

LPIPSについてはDeepInversionが最も高いのは、生成画像のリアルさが失われるようなアーティファクト（Fig.4にある色が付いた斑点のようなもの）が原因と思われ、**無意味の評価値だそうです**。

これらの定量的評価に加え、どちらが良い画像かをユーザに問う「ユーザスタディ」を行いました（Tab.2）。
以下の２つを指標として数値を算出しました。

- realism: よりリアルな画像を選ぶ
- diversity: 真の画像と比べより違った画像を選ぶ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1373557/2a1e505e-eb58-0c96-91a7-5a6330c7d0b5.png)

実際の人間の感覚を用いた評価でも、比較手法を圧倒しているのが分かります。


## 4.2 Position Control

ImageNetといった大規模なデータセットで学習された分類器は、様々な画像生成のバリエーションを適用することもできます。その一つとして、「**物体の位置を変更する**」ことができます。

クラス分類器の計算の中で、出力するクラスの原因となった領域を顕著性マップとして出力するattribution algorithmsが提案されています。
これを応用し、好きな位置を強調した顕著性マップ $\textbf{a}^0$ を用意し以下の正則化項を $(9)$ 式に追加します。
$\textbf{m}$ ：属性マップ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1373557/fbf1ef2e-ff54-5186-13bb-051d3e9b7b47.png)
こうすることで、物体の位置に焦点をあてinversionを行うようになるため、実質的に**クラス分類の要因となっている物体を好きな位置に移動できるということになります**。

提案手法における画像の最適化時にすでにモデルのinversion処理を行っているため、このタスクにおいては簡単に属性マップ $\textbf{m}$ を求めることができるそうです。
さまざまな位置を強調した $\textbf{a}^0$ を使って画像を作成したものを以下のFig.6に示します。「クラゲ」「鳥」の形や意味を保ちつつ多様な画像ができています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1373557/8a33a2f0-e65e-24e2-6edb-ab58116a088c.png)


## 4.3 Shape Control

$(5)$ 式の項では、浅い層／深い層でそれぞれ低い(色やテクスチャ)／高い(形や物体の構造)意味を解釈していますが、**それぞれの層においての正則化処理で目的の画像部分を変更することができます**。
$(9)$ 式にある $(5)$ 項を以下のように変更します。
$\Phi^c$ ：深い層の集合、$\Phi^r$ ：浅い層の集合、$\textbf{x}^c$：手書き／クリップアート画像
$\mu_l(\hat{\textbf{x}})$：$l$番目層の特徴マップのchannel-wise平均、$\sigma_l(\hat{\textbf{x}})$：$l$番目層の特徴マップの標準偏差
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1373557/209cfdc0-f141-7c8d-47c8-f16b28c66359.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1373557/00106474-3d8a-3374-4d18-85eca4332e4e.png)

深い層での計算をクリップアート画像に変更するだけでFig.7のように形を変更した画像が作成できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1373557/49a4ef78-a6b9-780f-785a-0fdeef10438e.png)


## 4.4 Style Control

$(5)$ 項についてスタイル画像 $ \textbf{x}^0 $ を適用すると、スタイル変換を行うこともできます。
本来は $ \hat{\textbf{x}} $ の初期値はノイズ画像ですが、このタスクでは変換前の真の画像にして計算をスタートし、スタイルを変換していくようです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1373557/98bd3aa8-e7c5-42ab-2380-fe6cfd7e51d9.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1373557/cc29ce5a-edab-2844-bff8-525268933a95.png)


## 4.5 Counterfactual visual explanations

ここでは、人間の感覚にかかわる質問に対処しています。
具体的には、以下のような状況を考えます。

あるクエリ画像 $\textbf{x}^q$ をクラス分類器に入力したところ、「ショウジョウコウカンチョウ(Cardinal)」と認識されたとします（正しく認識されたと仮定し、事実クラスと呼びます）。似た鳥のクラスはほかにもあるため、中には「なぜこの画像は"ナツフウキンチョウ(Summer Tanager)"ではないのか？」と疑問を持つ人もいるはずです。
この例について「ナツフウキンチョウ」は反事実クラスと呼ばれます。

この質問に対する答え方として考えらえるのは、その鳥とは異なる部分を指摘することです。提案手法では、「 $\textbf{x}^q$ がもし「ナツフウキンチョウ」に分類されるとすれば、ある領域がこう見えるはずだ」というものを示すことができます。
そのタスクを行えるのは、以下の技術が提案されているためです。

他の研究タスクで、ある画像に自分で付けたラベルが本来と違っていた時、画像のどの部分が異なるのかを説明するタスク「counterfactual visual explanation」を行う技術が提案されています。
CVPR2020で提案された SCOUT: Self-Aware Discriminant Counterfactual Explanations[^2] では、本来のクラスと反事実クラスの画像の差異を領域として出力することができます（以下Fig.1、同論文より引用）。
この例では、 $\textbf{x}^q$ （左上の画像）がなぜ「ショウジョウコウカンチョウ(Cardinal)」で「ナツフウキンチョウ(Summer Tanager)」ではないのかを示しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1373557/b9a02714-0caf-59db-011b-d340173ca1d5.png)

この技術を利用し、出力された領域をマスク化した $\textbf{r}$ を正則化項に適用します。丸の演算子は要素積を示します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1373557/247c7598-5be9-3234-a7bb-aae71b07373f.png)

これにより、「 $\textbf{x}^q$ がもし「ナツフウキンチョウ」に分類されるとすれば、こう見えるはずだ」という答えを $ \textbf{x}^* $ として出力することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1373557/fa43130b-cede-fff1-7e68-2717178020ca.png)


# 5. Conclusion

- 本研究では、1枚の画像から多様な画像を作り出すIMAGINEを提案しました。
- 提案手法はGANのモデルを学習するわけではなく、既に学習済みのクラス分類器からさまざまなレベルの意味構造をマッチさせたリアルな画像を作りだせます。


# 所感・まとめ
この手のタスクではGANを用いるのが普通だと感じていましたが、クラス分類器から画像を求める「Model inversion」を応用している部分に面白さを感じました。

特に物体や動物などが見分けがつかないほどリアルになっているのはこの分野では大きな進捗だと思いますが、「正則化項でここまで変わるのか」と感じさせられました。

# 参考文献

原論文 ***"IMAGINE: Image Synthesis by Image-Guided Model Inversion"***
Pei Wang, Yijun Li, Krishna Kumar Singh, Jingwan Lu, Nuno Vasconcelos 著
出典：CVPR 2021
Paper: https://openaccess.thecvf.com/content/CVPR2021/html/Wang_IMAGINE_Image_Synthesis_by_Image-Guided_Model_Inversion_CVPR_2021_paper.html

[^1]: Understanding Deep Image Representations by Inverting Them, Aravindh Mahendran, and Andrea Vedaldi, CVPR 2015. Paper: https://arxiv.org/abs/1412.0035

[^2]: SCOUT: Self-Aware Discriminant Counterfactual Explanations, Pei Wang, and Nuno Vasconcelos, CVPR 2020. http://openaccess.thecvf.com/content_CVPR_2020/html/Wang_SCOUT_Self-Aware_Discriminant_Counterfactual_Explanations_CVPR_2020_paper.html