論文簡讀:Memory-guided Unsupervised Image-to-image Translation


一篇用內存思想來完成Instance-level i2i translation工作的文章。全名是memory-guided unsupervised I2I translation (MGUIT)。

至於這個memory network是什么,后文再說。

Related works就不多介紹了,無非就是:

  • 傳統的I2I工作在圖像具有多實例的時候表現比較差,因為沒有考慮instance-level的信息;
  • 當然也有一些Instance-level image-to-image translation工作,但表現仍然比較差,原因不限於僅僅在訓練階段使用instance-level的信息、翻譯時只考慮global style不考慮instance style、翻譯時會丟失instance style等等。
  • 然后是memory network,更具體地,作者用的是key-value memory network。給出一個query,用key去檢索需要的信息,並返回相應的value,就是計算機組成原理那些東西,甚至還要簡單。

 

來康康具體的結構叭:

 

 

 實際上去掉那個class-aware memory network,整個網絡是用的DRIT的結構。

其中$E_{c} = \{E_{c}^{x}, E_{c}^{y}\}$是一對content encoder,$E_{s} = \{E_{s}^{x}, E_{s}^{y}\}$是一對style encoder,$G^{x}$和$G^{y}$分別是兩個domain的decoder。

圖像I可以通過相應domain的兩個encoder編碼為domain-agnostic的內容特征c和domain-specific的風格特征s。

區別於之前的方法,簡單交換兩個s再通過G完成翻譯,MGUIT使用的s是通過讀取memory的一些信息重組的:

 

 

 關鍵就是解釋Class-aware Memory Network如何記錄、更新信息,並從里面讀取想要的信息來構成重組后的s。


 

 

class-aware memory network的存儲方式就是這樣的。

每個class下面有$N_{k}$個item,而整個memory有N個item,滿足$\sum_{k=1}^{K} {N_{k}} = N $,其中K是class的種類,等於前景目標的種類數+1(后景)

每個class下有$N_{k}$個item其實也很好理解,以汽車為例,汽車的輪胎、玻璃、車身存儲起來的特征明顯是不一樣的,不能用不同的風格來翻譯,因此至少需要3個item。

每個item的內容是a pair of 1 × 1 × C的向量$(k, v^{x}, v^{y})$。這個a pair of是真的迷惑,應該是triplet才對吧。總之這三個大小都是1 × 1 × C的,C為通道數。

$k$用來檢索item,其中的內容也是編碼后的content feature

$(v^{x}, v^{y})$保存的是每個item在兩個domain的style feature。

訓練的時候,會用到數據集中的object annotations(比如物體的種類,物體的框的位置)來輔助。每張圖的特征$(c, s)$會被聚類為K類:

${(c_{1}, s_{1}), · · · ,(c_{K}, s_{K})}$

這些聚類后的信息用來更新和讀取memory。

來解釋一下具體的readh和update操作:

Read:

簡單來說,就是用一個$c_{p}$與每個$k$計算相似度來查詢。但並不是找出相似度最高的直接作為返回的value,而是用相似度作為權重,對所有的kv加權求和。

首先是求權重:

 

其中$c_{p}$代表每個像素點的content feature,也是1 × 1 × C大小,C為通道數。$(p = 1, ..., P)$,P是c中的像素數(應該是c的特征圖中H × W的值)

d是通過余弦相似度來定義的:

 

讓每個像素的c與k求相似度,並在n的維度上求softmax作為每個k的權重,最終返回值為加權求和后的結果:

 

 

 這一操作對每個p都會重復,最后組成一個聚合后的特征圖。

Update:

update也是求權重然后按權重更新,只不過是給出$(k, v^{x}, v^{y})$來修改存儲的所有item。

給出的$(k, v^{x}, v^{y})$是整個feature map的,所以這里求的是每個像素的權重:

 

可以看到這里是在p的維度上求權重,與read時操作的維度不同。

最后按照下面的式子更新:

 

 因為k保存的內容c是兩個domain共享的,所以一起更新,而v保存的s是兩個domain單獨的,所以分開更新。

總的更新步驟也可以看圖:

 


 

結構上的原理已經整理完了,另一部分重要的就是loss function:

以下的部分是在DRIT的基礎上額外增加的一些loss。

Reconstruction loss: 

 

 

 Adversarial loss:

  兩對額外的content discriminator和domain discriminator,分別在$c_{x}$和$c_{y}$之間計算$L_{c}^{adv}$,以及在兩個domain之間計算$L_{d}^{adv}$

 KL loss:

  我沒太明白這一項有什么用,作者的解釋是讓style的分布更接近高斯分布。應該是讓style更均勻分布?

 Latent regression loss:

  讓style與image之間的映射是可逆的。

以上的幾項是針對encoder和decoder的,作者提出了一個新的Feature contrastive loss用來優化memory network:

 

 對於每一個$c_{p}$或者$s_{p}$,把距離他們最近的另一個作為正例,其余的作為負例來讓特征的分布更合適,並且提升聚類的效果。


 

最后一部分當然是結果,這里就簡單放一些圖自己看吧~

 

 

 

其中a:input b:DUNIT c:MGUIT

 

 有趣的一點是,這個對於影子的翻譯好像都是一樣的,不管影子是來自路燈還是太陽,翻譯后都還在。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM