图像风格迁移_【论文解读】图像风格迁移中的Contextual Loss
【08/04更新】在前幾天的Commit中,Contextual Loss已經支持多GPU訓練
1.Background
對于圖像風格遷移,最常用的做法就是通過GAN網絡實現,然而,如果你沒有很強大的算力,訓練GAN網絡就是比較困難的一件事兒了。基于傳統的前向CNN網絡,有相關學者提出了一些感知loss,使用該loss也可以完成圖像風格遷移,比較常見的就是Contextual Loss。
首先給出論文作者開源出的源碼,基于Tensorflow實現
roimehrez/contextualLoss?www.github.com代碼中包含了風格遷移的幾個樣例,但我沒去測試。我的重點在于將Contextual Loss應用于其他圖像增強的領域,來盡可能多地保留圖像細節,下面是我用PyTorch對Contextual Loss的實現,現已支持多GPU運行~
z-bingo/Contextual-Loss-PyTorch?github.com2.Introduction
在計算機視覺中,傳統的一些Loss的前提都是已經對齊的數據,如L1 Loss和L2 Loss,對于沒有對齊的圖像而言是沒有意義的。Contextual Loss則是一種可用于非對齊(non-aligned)數據的Loss,其特性在于可以較好地保留ground truth的特征。可以在即便不使用GAN網絡的情況下,較好地完成圖像風格轉換等任務,而對于生成的圖像,大多時候也是很難判斷真假的。如下圖所示,Contextual Loss可以有效地完成多種圖像風格轉換任務。
Contextual Loss對于多個圖像風格轉換任務都是有效的非對齊數據可以通過下圖來說明,簡言之,對于對齊數據而言,source和target兩幅圖像在相對應的像素點上,有相同的含義,即,都是背景、都是圖片中的一個人....非對齊數據則有更多種可能。
非對齊數據3.Methods
為了能適應非對齊數據,那么該Loss需要通過特征之間的相似度來衡量。Contextual Loss通過特征之間的余弦相似度確定特征之間的差距。
兩個特征之間的相似度圖示如上圖所示,不同特征之間的相似度可通過其余弦距離來間接反映,當其余弦距離較小時,可認為兩者是相似的,相反,認為其不相似。因此,兩個特征是否相似的問題就逐步轉化為了最小化特征圖之間的余弦相似度問題。
從數學角度分析,兩個特征有著自己獨特的分布,當兩者趨于相似時,兩者的分布也趨于一致,此時,兩個特征之間的相對熵(KL散度)將會趨近于一個極小值。不妨將兩個特征的分布表示為
和 ,其KL散度可表示為:進一步,
對上式進行進一步化簡就可作為最終的Loss使用了。重要就是對
進行求解,文中假設了特征的采樣點是足夠大的,可以將其認為是一個delta函數(沖激函數),近似為為了簡單,將
表示為 ,Loss函數就可以進一步簡化為其實,
就是最重要的需要求解出的相似度。關于
的計算,文章中給出了詳細的計算公式,在此不進行贅述。簡單來說,就是計算每個特征(channel維度)與其他特征之間的預先相似度,特征源自VGG中的某一層或幾層。實現方式詳見源碼。Reference
[1] The Contextual Loss for Image Transformation with Non-Aligned Data
[2] Maintaining Natural Image Statistics with the Contextual Loss
總結
以上是生活随笔為你收集整理的图像风格迁移_【论文解读】图像风格迁移中的Contextual Loss的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 全球地区资料json 含中英文 经纬度_
- 下一篇: python字典的特点是什么_Pytho