摘要:但圖像翻譯的意思是圖像與圖像之間以不同形式的轉換。判別網絡用損失函數和重建的圖像很模糊,也就是說和并不能很好的恢復圖像的高頻部分圖像中的邊緣等,但能較好地恢復圖像的低頻部分圖像中的色塊。高頻分量主要是對圖像邊緣和輪廓的度量。
1.介紹
圖像處理、計算機圖形學和計算機視覺中的許多問題都可以被視為將輸入圖像“翻譯”成相應的輸出圖像。 “翻譯”常用于語言之間的翻譯,比如中文和英文的之間的翻譯。但圖像翻譯的意思是圖像與圖像之間以不同形式的轉換。比如:一個圖像場景可以以RGB圖像、梯度場、邊緣映射、語義標簽映射等形式呈現,其效果如下圖。
傳統圖像轉換過程中都是針對具體問題采用特定算法去解決;而這些過程的本質都是根據像素點(輸入信息)對像素點做出預測(predict from pixels to pixels),Pix2pix的目標就是建立一個通用的架構去解決以上所有的圖像翻譯問題,使得我們不必要為每個功能都重新設計一個損失函數。
2. 核心思想 2.1 圖像建模的結構化損失圖像到圖像的翻譯問題通常是根據像素分類或回歸來解決的。這些公式將輸出空間視為“非結構化”,即在給定輸入圖像的情況下,每個輸出像素被視為與所有其他像素有條件地獨立。而cGANs( conditional-GAN)的不同之處在于學習結構化損失,并且理論上可以懲罰輸出和目標之間的任何可能結構。
2.2 cGAN在此之前,許多研究者使用 GAN 在修復、未來狀態預測、用戶約束引導的圖像處理、風格遷移和超分辨率方面取得了令人矚目的成果,但每種方法都是針對特定應用而定制的。Pix2pix框架不同之處在于沒有特定應用。它在生成器和判別器的幾種架構選擇中也與先前的工作不同。對于生成器,我們使用基于“U-Net”的架構;對于鑒別器,我們使用卷積“PatchGAN”分類器,其僅在image patches(圖片小塊)的尺度上懲罰結構。
Pix2pix 是借鑒了 cGAN 的思想。cGAN 在輸入 G 網絡的時候不光會輸入噪音,還會輸入一個條件(condition),G 網絡生成的 fake images 會受到具體的 condition 的影響。那么如果把一副圖像作為 condition,則生成的 fake images ?就與這個 condition images 有對應關系,從而實現了一個 Image-to-Image Translation ?的過程。Pixpix 原理圖如下:
Pix2pix 的網絡結構如上圖所示,生成器 G 用到的是 U-Net 結構,輸入的輪廓圖x編碼再解碼成真實圖片,判別器 D 用到的是作者自己提出來的條件判別器 PatchGAN ,判別器 D 的作用是在輪廓圖?x的條件下,對于生成的圖片G(x)判斷為假,對于真實圖片判斷為真。
2.3 cGAN 與 Pix2pix 對比 2.4 損失函數一般的 cGANs 的目標函數如下:
$L_{cGAN}(G, D) =E_{x,y}[log D(x, y)]+E_{x,z}[log(1 ? D(x, G(x, z))]$
其中 G 試圖最小化目標而 D 則試圖最大化目標,即:$ m G^? =arg; min_G; max_D ;L_{cGAN}(G, D)$
為了做對比,同時再去訓練一個普通的 GAN ,即只讓 D 判斷是否為真實圖像。
$ m L_{cGAN}(G, D) = E_y[log D(y)]+ E_{x,z}[log(1 ? D(G(x, z))]$
對于圖像翻譯任務而言,G 的輸入和輸出之間其實共享了很多信息,比如圖像上色任務、輸入和輸出之間就共享了邊信息。因而為了保證輸入圖像和輸出圖像之間的相似度、還加入了 L1 Loss:
$ m L_{L1}(G) = E_{x,y,z}[||y ? G(x, z)||_1] $
即生成的 fake images 與 真實的 real images 之間的 L1 距離,(imgB"?和imgB)保證了輸入和輸出圖像的相似度。
最終的損失函數:
$ m G^? = arg;underset{G}{min};underset{D}{max}; L_{cGAN}(G, D) + λL_{L1}(G)$
3.網絡架構(網絡體系結構)生成器和判別器都使用模塊?convolution-BatchNorm-ReLu
3.1 生成網絡G圖像到圖像翻譯問題的一個定義特征是它們將高分辨率輸入網格映射到高分辨率輸出網格。 另外,對于我們考慮的問題,輸入和輸出的表面外觀不同,但兩者應該共享一些信息。 因此,輸入中的結構與輸出中的結構大致對齊。 我們圍繞這些考慮設計了生成器架構。
U-Net 結構基于 Encoder-Decoder 模型,而 Encoder 和 Decoder 是對稱結構。 U-Net 的不同之處是將第 i 層和第 n-i 層連接起來,其中 n 是層的總數,這種連接方式稱為跳過連接(skip connections)。第 i 層和第 n-i 層的圖像大小是一致的,可以認為他們承載著類似的信息 。
3.2 判別網絡 D用損失函數 L1 和 L2 重建的圖像很模糊,也就是說L1和L2并不能很好的恢復圖像的高頻部分(圖像中的邊緣等),但能較好地恢復圖像的低頻部分(圖像中的色塊)。
圖像的高低頻是對圖像各個位置之間強度變化的一種度量方法,低頻分量:主要對整副圖像的強度的綜合度量。高頻分量:主要是對圖像邊緣和輪廓的度量。如果一副圖像的各個位置的強度大小相等,則圖像只存在低頻分量,從圖像的頻譜圖上看,只有一個主峰,且位于頻率為零的位置。如果一副圖像的各個位置的強度變化劇烈,則圖像不僅存在低頻分量,同時也存在多種高頻分量,從圖像的頻譜上看,不僅有一個主峰,同時也存在多個旁峰。
為了能更好得對圖像的局部做判斷,Pix2pix 判別網絡采用 patchGAN 結構,也就是說把圖像等分成多個固定大小的 Patch,分別判斷每個Patch的真假,最后再取平均值作為 D 最后的輸出。這樣做的好處:
D ?的輸入變小,計算量小,訓練速度快。
因為 G 本身是全卷積的,對圖像尺度沒有限制。而D如果是按照Patch去處理圖像,也對圖像大小沒有限制。就會讓整個 Pix2pix 框架對圖像大小沒有限制,增大了框架的擴展性。
論文中將 PatchGAN 看成另一種形式的紋理損失或樣式損失。在具體實驗時,采用不同尺寸的 patch,發現 70x70 的尺寸比較合適。
3.3 優化和推理訓練使用的是標準的方法:交替訓練 D 和 G;并使用了 minibatch SGD 和 Adam 優化器。
在推理的時候,我們用訓練階段相同的方式來運行生成器。在測試階段使用 dropout 和 batch normalization,這里我們使用 test batch 的統計值而不是 train batch 的。
4.源碼解讀該部分主要是解讀論文源碼:https://github.com/junyanz/pytorch-CycleGAN-and-pix2pix?。
文件 train:
通用的訓練腳本,可以通過傳參指定訓練不同的模型和不同的數據集。
--model: e.g.,pix2pix,cyclegan,colorization
--dataset_mode: e.g.,aligned,unaligned,single,colorization)
文件test:
通用的測試腳本,通過傳參來加載模型?-- checkpoints_dir,保存輸出的結果?--results_dir。
4.1 文件夾data:該目錄中的文件包含數據的加載和處理以及用戶可制作自己的數據集。下面詳細說明data下的文件:
__init__.py:?實現包和train、test腳本之間的接口。train.py 和 test.py 根據給定的 opt 選項調包來創建數據集?from data import create_dataset和dataset = create_dataset(opt)
base_dataset.py:繼承了 torch 的 dataset 類和抽象基類,該文件還包括了一些常用的圖片轉換方法,方便后續子類使用。
image_folder.py:更改了官方pytorch的image folder的代碼,使得從當前目錄和子目錄都能加載圖片。
template_dataset.py:為制作自己數據集提供了模板和參考,里面注釋一些細節信息。
aligned_dataset.py?和?unaligned_dataset.py:區別在于前者從同一個文件夾中加載的是一對圖片 {A,B} ,后者是從兩個不同的文件夾下分別加載 {A},{B} 。
single_dataset.py:只加載指定路徑下的一張圖片。
colorization_dataset.py:加載一張 RGB 圖片并轉化成(L,ab)對在 Lab 彩色空間,pix2pix用來繪制彩色模型。
4.2 文件夾models:models 包含的模塊有:目標函數,優化器,網絡架構。下面詳細說明models下的文件:
__init__.py:?為了實現包和train、test腳本之間的接口。train.py?和?test.py?根據給定的 opt 選項調包來創建模型?from models import create_model?和?model = create_model(opt)。
base_model.py:?繼承了抽象類,也包括一些其他常用的函數:setup、test、update_learning_rate、save_networks、load_networks,在子類中會被使用。
template_model.py:?實現自己模型的一個模板,里面注釋了一些細節。
pix2pix_model.py:?實現了pix2pix 模型,模型訓練數據集--dataset_mode aligned,默認情況下--netG unet256 --netD basicdiscriminator (PatchGAN)。?--gan_mode vanillaGAN loss (標準交叉熵)。
colorization_model.py:繼承了pix2pix_model,模型所做的是:將黑白圖片映射為彩色圖片。-dataset_model colorization?dataset。默認情況下,colorization?dataset會自動設置--input_nc 1and--output_nc 2。
cycle_gan_model.py:來實現cyclegan模型。--dataset_mode unaligneddataset,--netG resnet_9blocksResNet generator,--netD basicdiscriminator (PatchGAN introduced by pix2pix),a least-square GANsobjective(--gan_mode lsgan?)
networks.py:包含生成器和判別器的網絡架構,normalization layers,初始化方法,優化器結構(learning rate policy)GAN的目標函數(vanilla,lsgan,wgangp)。
test_model.py:用來生成cyclegan的結果,該模型自動設置--dataset_mode single。
4.3 文件夾options:包含訓練模塊,測試模塊的設置TrainOptions和TestOptions都是?BaseOptions的子類。詳細說明options下的文件。
__init__.py:該文件起到讓python解釋器將options文件夾當做包來處理。
base_options.py:除了training,test都用到的option,還有一些helper 方法:parsing,printing,saving options。
train_options.py:訓練需要的options。
test_options.py:測試需要的options。
4.4 文件夾utils:主要包含一些有用的工具,如數據的可視化。詳細說明utils下的文件:
__init__.py:該文件起到讓python解釋器將utils文件夾當做包來處理。
get_data.py:用來下載數據集的腳本。
html.py:保存圖片寫成html。基于diminate中的DOM API。
image_pool.py:實現一個緩沖來存放之前生成的圖片。
visualizer.py:保存圖片,展示圖片。
utils.py:包含一些輔助函數:tensor2numpy轉換,mkdir診斷網絡梯度等。
5. 總結與展望 5.1 pix2pix的優缺點Pix2pix模型是?x到y之間的一對一映射**。也就說,pix2pix就是對ground truth的重建:輸入輪廓圖→經過Unet編碼解碼成對應的向量→解碼成真實圖。這種一對一映射的應用范圍十分有限,當我們輸入的數據與訓練集中的數據差距較大時,生成的結果很可能就沒有意義,這就要求我們的數據集中要盡量涵蓋各種類型。
本文將Pix2Pix論文中的所有要點都表述了出來,主要包括:
cGAN,輸入為圖像而不是隨機向量
U-Net,使用skip-connection來共享更多的信息
Pair輸入到D來保證映射
Patch-D來降低計算量提升效果
L1損失函數的加入來保證輸入和輸出之間的一致性
5.2 總結目前,您可以在 ?Mo?平臺的應用中心中找到?pix2pixGAN,可以體驗論文實驗部分圖像建筑標簽→照片( Architectural labels→photo),即將您繪制的建筑圖片草圖生成為你心目中的小屋?。您在學習的過程中,遇到困難或者發現我們的錯誤,可以隨時聯系我們。
通過本文,您應該初步了解Pix2pix模型的網絡結構和實現原理,以及關鍵部分代碼的初步實現。如果您對深度學習tensorflow比較了解,可以參考tensorflow版實現Pix2pix;如果您對pytorch框架比較熟悉,可以參考pytorch實現Pix2pix;如果您想更深入的學習了解starGAN原理,可以參考論文。
6.參考:1.論文:https://arxiv.org/pdf/1611.07004.pdf
2.Pix2pix官網:https://phillipi.github.io/pix2pix/
3.代碼PyTorch版本:https://github.com/phillipi/pix2pix
4.代碼tensorflow版本:https://github.com/yenchenlin/pix2pix-tensorflow
5.代碼tensorflow版本:https://github.com/affinelayer/pix2pix-tensorflow
6.知乎:https://zhuanlan.zhihu.com/p/38411618
7.知乎:https://zhuanlan.zhihu.com/p/55059359
8.博客:https://blog.csdn.net/qq_16137569/article/details/79950092
9.博客:https://blog.csdn.net/infinita_LV/article/details/85679195
10.博客:https://blog.csdn.net/weixin_36474809/article/details/89004841
關于我們Mo(網址:momodel.cn)是一個支持 Python 的人工智能在線建模平臺,能幫助你快速開發、訓練并部署模型。
Mo 人工智能俱樂部?是由網站的研發與產品設計團隊發起、致力于降低人工智能開發與使用門檻的俱樂部。團隊具備大數據處理分析、可視化與數據建模經驗,已承擔多領域智能項目,具備從底層到前端的全線設計開發能力。主要研究方向為大數據管理分析與人工智能技術,并以此來促進數據驅動的科學研究。
目前俱樂部每周六在杭州舉辦以機器學習為主題的線下技術沙龍活動,不定期進行論文分享與學術交流。希望能匯聚來自各行各業對人工智能感興趣的朋友,不斷交流共同成長,推動人工智能民主化、應用普及化。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/20076.html
摘要:但圖像翻譯的意思是圖像與圖像之間以不同形式的轉換。判別網絡用損失函數和重建的圖像很模糊,也就是說和并不能很好的恢復圖像的高頻部分圖像中的邊緣等,但能較好地恢復圖像的低頻部分圖像中的色塊。高頻分量主要是對圖像邊緣和輪廓的度量。 1.介紹 圖像處理、計算機圖形學和計算機視覺中的許多問題都可以被視為將輸入圖像翻譯成相應的輸出圖像。 翻譯常用于語言之間的翻譯,比如中文和英文的之間的翻譯。但圖像...
摘要:這篇就介紹利用生成式對抗網絡的兩個基本駕駛技能去除愛情動作片中的馬賽克給愛情動作片中的女孩穿衣服生成式模型上一篇用生成二維樣本的小例子中已經簡單介紹了,這篇再簡要回顧一下生成式模型,算是補全一個來龍去脈。 作為一名久經片場的老司機,早就想寫一些探討駕駛技術的文章。這篇就介紹利用生成式對抗網絡(GAN)的兩個基本駕駛技能:1) 去除(愛情)動作片中的馬賽克2) 給(愛情)動作片中的女孩穿(tu...
摘要:文本谷歌神經機器翻譯去年,谷歌宣布上線的新模型,并詳細介紹了所使用的網絡架構循環神經網絡。目前唇讀的準確度已經超過了人類。在該技術的發展過程中,谷歌還給出了新的,它包含了大量的復雜案例。谷歌收集該數據集的目的是教神經網絡畫畫。 1. 文本1.1 谷歌神經機器翻譯去年,谷歌宣布上線 Google Translate 的新模型,并詳細介紹了所使用的網絡架構——循環神經網絡(RNN)。關鍵結果:與...
閱讀 3005·2021-10-12 10:12
閱讀 3052·2021-09-22 16:04
閱讀 3287·2019-08-30 15:54
閱讀 2602·2019-08-29 16:59
閱讀 2902·2019-08-29 16:08
閱讀 868·2019-08-29 11:20
閱讀 3492·2019-08-28 18:08
閱讀 648·2019-08-26 13:43