【閱讀筆記】Image Processing Using Multi-Code GAN Prior

論文名稱:Image Processing Using Multi-Code GAN Prior
論文作者:Jinjin Gu, Yujun Shen, Bolei Zhou
發行時間:Submitted on 15 Dec 2019, last revised 31 Mar 2020
論文地址:https://arxiv.org/abs/1912.07116
代碼開源:https://github.com/genforce/mganprior



一. 概要

本文提出了一稱爲 mGANprior 的新穎方法, 並將該方法與 well-trained GANs 結合來作爲各種圖像處理任務的有效先驗. 具體來說是 使用多個latent code 讓其在 GAN 的生成器的某個中間層生成多個特徵圖, 然後用自適應通道來將這些特徵圖組合在一起來得到輸入的圖像. 之所以選擇多個 latent codes, 是因爲每個 latent code 都能生成最終圖像的一個子區域, 然後由自適應通道的重要性來調控其佔比, 最終組合得到最終圖像. 這種方法能有效提高圖像的重構質量, 且能夠使得生成的圖像過多受到訓練數據集的影響.

本文還進一步分析了 GAN 模型學習到的各個層所表示的性質,揭示了每一層能夠表示的知識.

二. Multi-Code GAN Prior: mGANprior

模型圖

如上圖所示, 論文中將 GAN 的生成器 G()G(\cdot) 劃分成兩部分: G1(l)()G_1^{(l)}(\cdot)G2(l)()G_2^{(l)}(\cdot), 其中 ll 是執行特徵組合的中間層索引.

對於 G1(l)()G_1^{(l)}(\cdot), 是將一系列的 latent code znz_n 生成爲 一系列的中間層特徵圖 FN(l)F_N^{(l)}, 算式表示爲: Fn(l)=G1(l)(zn)F_n^{(l)}=G_1^{(l)}(z_n)

得到一系列的中間層特徵圖 FN(l)F_N^{(l)} 後, 我們需要想辦法將這些特徵圖組合起來, 考慮到GAN中生成器的不同單元部件負責生成不同的視覺概念, 如對象和紋理. 因此論文中給出的方法就是使用 自適應信道. 定義 自適應通道重要性αn\alpha_n, 其對應於每個 znz_n 生成的中間層特徵 Fn(l)F_n^{(l)} 來幫助它們讓不同的語義保持一致. 其中, αnRC\alpha_n \in \mathbb{R}^C, CC 表示當前 G()G(\cdot) 的第 ll 層的通道數. 論文期望每個 αn\alpha_n 的數值能代表特徵圖 Fn(l)F_n^{(l)} 中對應通道的重要性! 算式表示爲: xinv=G2(l)(n=1NFn(l)αn)x^{inv}=G_2^{(l)}(\sum^N_{n=1}F_n^{(l)}\odot \alpha_n) 其中, \odot 表示逐通道相乘: {Fn(l)αn}i,j,c={Fn(l)}i,j,c×{αn}c\left \{ F_n^{(l)}\odot \alpha_n \right \}_{i,j,c}=\left \{ F_n^{(l)} \right \}_{i,j,c}\times \left \{ \alpha_n \right \}_c 這裏的 iijj 表示空間位置, cc 代表通道索引.

在整個從 latent code 到 Inversion Image 的流程中, 我們一共需要優化 2N2N 個參數. {α1αn:N  paramentsz1zn:N  paraments\left\{\begin{matrix}\alpha_1 \sim \alpha_n & :{\rm N ~~paraments}\\ z_1 \sim z_n & :{\rm N ~~paraments} \end{matrix}\right. 而我們的優化目標爲: {zn}n=1N,{αn}n=1N=argmin{zn}n=1N,{αn}n=1NL(xinv,x)\left \{ z_n^{\star} \right \}_{n=1}^N,\left \{ \alpha_n^{\star} \right \}_{n=1}^N= \mathop{\arg \min}\limits_{\left \{ z_n \right \}_{n=1}^N,\left \{ \alpha_n \right \}_{n=1}^N} \mathcal{L} (x^{inv},x)

論文中通過同時利用低層和高層信息來定義目標函數. 即使用 逐像素重構錯誤感知特徵的 l1l_1 距離 (感知特徵是預訓練VGG-16的conv_43的輸出). 因此, 目標函數爲: L(x1,x2)=x1x222+ϕ(x1),ϕ(x2)1\mathcal{L}(x_1,x_2)=||x_1-x_2||_2^2+||\phi(x_1),\phi(x_2)||_1 其中 ϕ()\phi(\cdot) 表示感知特徵的提取器. 得到了目標函數後, 我們使用梯度下降算法來找到最優的 latent codes znz_n 和 自適應通道重要性 αn\alpha_n.

三. mGANprior在圖像處理的各種應用

3.1. 圖像着色

將一個灰度圖像 IgrayI_{gray} 作爲輸入, 我們期望反推的結果和 IgrayI_{gray} 具有相同的通道數
Lcolor=L(gray(xinv),Igray)\mathcal{L}_{color}=\mathcal{L}(gray(x^{inv}),I_gray)
其中 gray()gray(\cdot) 表示對圖像進行灰度通道的操作.

3.2. 圖像超分辨率

將一個低分辨率圖像 ISRI_{SR} 作爲輸入, 論文中對反推的圖像結果進行下采樣來得到近似的 ILRI_{LR}:
LSR=L(down(xinv),ILR)\mathcal{L}_{SR}=\mathcal{L}(down(x^{inv}),I_{LR})
其中 down()down(\cdot) 表示下采樣操作.

3.3. 圖像修補

輸入有一個完整的圖像 IoriI_{ori} 和一個二元掩碼 mm 識別已知像素, 只對未丟失的部分進行重構, 讓模型自動填充這部分的像素值:
Linp=L(xinvm,Iorim)\mathcal{L}_{inp}=\mathcal{L}(x^{inv}\circ m,I_{ori}\circ m)
其中 \circ 表示 逐元素相乘.

四. 實驗

4.1. Latent Codes 分析

很顯然, 優化空間的維數與反演質量之間存在權衡. 於是我們通過改變 latent codes 數量來實驗查看效果. 如下圖所示, latent codes 數量越多, 重構的效果越好, 但這大概有個上限, 可以看出但其數量達到 2020 時, 並不會有明顯的提升效果.

4.2. 組合層分析

而組合層的選擇也是一個很重要的問題. 如上圖所示, 一般來說組合層越高, 重構的效果越好, 但這不代表任何圖像處理工作都適合這一點. 一些工作需要 GANs 低層的抽象語義, 而組合層選在高層的話, 這類工作的效果並不好. 詳細講解可看 第五部分: GANs 中知識表示.

五. GANs 中知識表示

使用單個 latent code 的缺陷在於重構的圖像仍存在於原始的訓練集領域中, 而多個 latent codes 能緩解這個問題, 即減少了訓練集對模型生成效果的影響. 如下圖所示, 使用 單個 latent code時, 由人臉信息訓練的模型生成臥室圖像時仍然生成了人臉. 相反, 我們使用了多個 latent codes 的 GAN 就不存在這個問題.

雖然在上圖中, 層數越深的效果越好, 這是因爲重構圖主要是恢復低層像素值, 而在 GAN 中, 低層主要是實現抽象語義, 高層主要是實現具體細節 (可參考 style-GAN). 如上圖所示, 我們觀察到在bedroom數據集下第4層已經足夠好了, 這表示bedroom模型對臥室圖像可進行反轉, 但是其他3個模型則需要第8層才能實現令人滿意的反轉. 原因是 bedroom 與 face, church 和 conference room 具有不同的語義, 因此這些模型中的高級知識(包含在底層)不能被其重用.

而在圖像着色上, 因爲着色工作更像一個低層的渲染任務, 因此如上圖所示, 着色任務在第8層纔得到最好的結果.

在圖像修復任務三, 修復要求 GAN 優先填充缺失的內容和有意義的對象, 因此如上圖所示, 修補任務在第4層就取得了最好的結果.

最終結論: low-level knowledge from GAN prior can be reused at higher layers while high-level knowledge at lower layers

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章