pix2pixHD演算法筆記

2021-09-26 14:17:24 字數 3409 閱讀 7829

影象到影象的翻譯是gan的乙個重要應用,表示基於輸入影象生成指定的輸出影象的過程,比如有監督的pix2pix(參考部落格),無監督的cyclegan(參考部落格)等。而基於語義分割圖生成對應影象可以看做是影象到影象的翻譯中的乙個特例,如figure1(a)所示,其中左下角是語義分割圖,模型基於這張圖生成(a)這張看起來和實際影象差別不大的合成圖。這個研究方向主要有2個發展趨勢:1、生成的影象要盡可能接近真實影象;2、生成影象的解析度越來越大,也就是越來越往高畫質大圖發展。

這篇發表在cvpr2018的pix2pixhd在這兩個方面都有不錯的貢獻。pix2pixhd是在pix2pix演算法基礎上做了優化,pix2pix演算法合成影象的解析度在256 ×

\times

× 256左右,作者曾經嘗試直接用pix2pix演算法生成高解析度影象,但是發現訓練過程不穩定,效果也不好,因此才不斷優化得到pix2pixhd。pix2pixhd的訓練依然是有監督的,也就是需要pair對的資料。

這篇**除了能生成高畫質大圖外,還有基於演算法擴充套件實現的互動式體驗

1、例項級別的修改。使用者可以將修改後的語義分割圖輸入模型得到合成影象。比如我可以基於一張實際拍攝的影象先得到其語義分割圖,然後我可以手動修改這張語義分割圖,比如將其中的人去掉,或者將其中的樹變成房子,最後我再將修改後的語義分割圖作為生成器的輸入得到一張合成影象。比如figure1(b)就是將語義分割圖中的樹換成房子後得到的合成影象。

2、合成影象多樣化。基於同一張輸入影象能夠得到更加多樣的合成影象是目前影象合成領域的研究熱點。比如figure1(c)就是基於(a)中的語義分割圖得到的另一張合成影象,和(a)圖在車顏色、道路方面都不大一樣。

我們先來看看pix2pixhd在生成高質量的高畫質大圖方面做了哪些優化工作。整體來看,pix2pixhd在pix2pix的基礎上主要做了4個方面的改進:1、生成器從u-net公升級為多級生成器(coarse-to-fine generator)。2、判別器從patch gan公升級為多尺度判別器(multi-scale discriminator)。3、優化目標上增加了基於判別器特徵的匹配損失。4、增加例項級別的資訊。

首先,pix2pixhd的多級生成器如figure3所示,主要包含g1和g2兩部分,二者在結構上是類似的。g1表示全域性生成網路(global generator network),輸入和輸出大小是1024 ×

\times

× 512,g2表示區域性增強網路(local enhancer network),輸入和輸出大小是2048 ×

\times

× 1024。整體上可以看做是在乙個常規的生成器(g2)中嵌入了另乙個生成器(g1),g1最後輸出的特徵和g2中間輸出的特徵做特徵融合作為g2後半部分的輸入,主要目的是為了引入g1中學到的全域性結構特徵,這一點和pg-gan的思想很像,同時在訓練過程中也是先訓練解析度較小的g1,然後再一起訓練g1和g2。

其次,pix2pixhd的多尺度判別器設計,先基於真實影象和合成影象構建3層影象金字塔(比如2014

×1024

2014\times1024

2014×1

024,1024 ×

\times

× 512,512 ×

\times

× 256),針對每層影象分別訓練乙個判別器進行判別,這3個判別器的結構是一樣的,只不過處理的輸入尺寸不一樣。這一部分的設計是希望尺寸小的判別器促進影象整體方面的合成,尺寸大的判別器促進影象細節方面的合成,讀過pg-gan的同學應該能感受到這種思想。

然後是優化目標層面的,增加了基於判別器特徵的匹配損失,如下式所示。dk(i)表示判別器dk的第i層特徵。這一部分在生成器的中間特徵層面做限制,而不僅僅是最終的輸出影象,因此對於訓練過程的穩定有一定幫助。

最後是增加例項級別的資訊。我們知道語義分割圖和例項分割圖的最大差別在於後者區分相同類別的例項,比如一張圖中的2個人,在語義分割圖中會用同一種顏色來表示這2個人,而在例項分割圖中會用2種不同的顏色來表示這2個人。在pix2pixhd的生成器和判別器中同樣利用了例項級別的資訊,如figure4所示,(a)是語義分割圖,(b)是例項邊緣圖,基於(a)和(b)就可以區別不同例項。實現層面,原本生成器的輸入只是語義分割圖(a),而現在變成將語義分割圖(a)和例項邊緣圖(b)在通道維度上concat後才作為生成器的輸入;同理,原本判別器的輸入只是語義分割圖和真實影象或生成影象在通道維度上concat後的結果,而現在變成語義分割圖、例項邊緣圖和真實影象或生成影象在通道維度上concat後的結果。

增加例項資訊對影象合成效果有一定幫助,比如可以得到更加清晰的邊界,如圖figure5所示。

接下來看看基於pix2pixhd演算法擴充套件的互動式體驗

首先是例項級別的修改。這裡利用了前面介紹的例項級別的資訊,因此例項級別的修改就比較簡單。

其次是合成影象多樣化。許多影象合成演算法只能基於語義標籤得到單一的合成影象,雖然也有一些演算法可以得到多樣的輸出,但大多數是基於全域性進行的,而這篇**的不同點在於可以做例項級別的多樣輸出,比如車的不同顏色。實現層面先通過新增乙個encoder網路抽取影象特徵,然後對特徵做例項級別的均值池化操作,最後將這種池化後的特徵和生成器的原輸入組合成為新的輸入,從而實現例項級別影象多樣化,如figure6所示。

實驗結果:

基於演算法得到的合成影象做語義分割得到標籤圖,可以計算該標籤圖的指標,假如和基於真實影象做語義分割得到的標籤圖計算的指標接近,那就在一定程度上說明合成圖的質量較高,table1就是這樣的實驗結果對比。

pix2pixhd演算法在基於邊緣影象生成真實影象(edge2photo)任務上的泛化能力也很強,尤其是生成的人臉影象,如figure2所示。

pix2pixHD嘗試 安裝相關內容

源 環境配置 安裝cuda和pytorch 安裝dominate 安裝 公升級其他python包 需要公升級python的一些東西,比如pillow numpy。對應顯示卡的版本,cuda版本應該與之對應,否則會出現警告 found gpu0 geforce gtx 1660 super which...

深度學習 46 pix2pixHD

英偉達的pix2pixhd,能夠合成高畫質的2048 1024,簡直振奮人心。pix2pixhd是我之前介紹過的pix2pix的改進版本,使用多由粗到精的g網路和多尺度d網路 每個d網路都是用了pix2pix中同樣的patch技術 一開始用pix2pix嘗試合成更高解析度的,但發現效果不好,訓練也很...

pix2pix演算法筆記

pix2pix演算法的示意圖如圖figure2所示,在圖中以基於影象邊緣生成影象為例介紹pix2pix的工作流程。首先輸入影象用y表示,輸入影象的邊緣影象用x表示,pix2pix在訓練時需要成對的影象 x和y x作為生成器g的輸入 隨機雜訊z在圖中並未畫出,去掉z不會對生成效果有太大影響,但假如將x...