用深度學習魔法爲你的照片轉換風格(附源碼)

——深度學習在藝術方面的進展

作者:George Seif
翻譯:瘋狂的技術宅
原文:https://towardsdatascience.co...
未經允許嚴禁轉載

圖像背景中的風格轉移是指將一個圖像的“風格”轉移到另一個圖像的過程,同時保持第二圖像中的“內容”。

例如,最上邊的照片是“內容”圖像。我們要將中間照片中的“風格”(“風格”圖像)應用於內容圖像。也就是說我們希望把中間的圖像中大都市的夜晚氛圍反映在最終圖像上,得到的結果是最下邊的照片!

clipboard.png

clipboard.png

clipboard.png

這項技術源自的原始研究論文https://arxiv.org/pdf/1703.07...

Adobe 的一項最具開創性的研究就來自於此。他們稱之爲深度照片風格轉移(DPST)

如何轉換照片的風格

爲了正確執行從一張照片到另一張照片的樣式轉換,Adobe 團隊制定了他們的 DPST 的目標:“將參考的風格轉移到輸入的圖片上,同時保持結果的真實感

這裏的關鍵部分是保持輸出的“真實感”屬性。對於上面的內容照片,我們不希望任何建築物發生任何變化。只是希望它看起來像是在夜間拍攝的同一位置的照片。

在該研究發表之前,也出現了許多風格轉移算法,但是這些算法扭曲了原始圖像的內容。在當時的 Neural Style Transfer 技術的輸出結果中,常見的問題就是直線變成了波浪線並且改變了物體的形狀。

這是完全可以接受的。許多算法都是爲藝術風格轉移而設計的,所以往往會存在一些失真!

clipboard.png

失真的風格轉移圖像 (來源:https://github.com/yusuketomo...

但是當前的目標是創建依然逼真的圖像 —— 就好像它們是由真實世界的相機拍攝的一樣。

作者爲實現這一點主要做了兩件事情:(1)損失函數中的照片寫實正則化項(2)內容圖像的語義分割,用於指導

照片寫實正則化

設想一下應該怎樣在圖像中直觀地保持照片的寫實。我們希望原始圖像的線條和形狀保持不變。顏色和燈光可能會改變,但是一個人應該看起來還像一個人,樹還是樹,狗仍然像狗等。

基於這種直觀的想法,作者實現的正則化約束迫使像素從輸入到輸出的轉換在顏色空間中是局部仿射的。根據定義,仿射變換在將輸入映射到輸出時必須保持點、直線和平面的形狀不變。

有了這個限制,直線永遠不會產生波動,我們的輸出中不會出現任何奇怪的形狀變化!

分段指導

除了保證圖像不失真外,我們還希望能夠確保樣式圖像中各種“事物”的樣式是被正確轉移的。

想象一下,如果你的風格圖像顯示出美麗的橙色日落,就像下面這張照片一樣:

clipboard.png

來源:https://pixabay.com/illustrat...

圖像的大部分是紅橙色的,如果將這個風格轉移到城市的照片上,那麼所有的建築都會變紅!這可不是我們想要的 —— 更真實的轉移應該是使大多數建築物非常暗(接近黑色),只有天空纔會有日落和水的顏色。

深度圖像風格轉換算法使用應用於內容圖像的語義分割的結果來引導風格轉移。當算法能夠準確地知道哪些像素屬於前景和背景時,可以更真實地轉換風格。天空的像素將始終轉移到天空像素,背景像素會轉移到背景像素等等。

轉換風格的代碼

你可以從GitHub下載 Photo Realistic Style Transfer 的存儲庫:

git clone https://github.com/GeorgeSeif/DeepPhotoStyle_pytorch.git

它運行所需的只是 Pytorch 的最新版本。下載完成後,進入文件夾並使用下載腳本下載語義分段模型:

cd DeepPhotoStyle_pytorch
sh download_seg_model.sh

現在可以運行代碼了!

下載樣式圖像和內容圖像 —— 你可以選擇任何圖像!根據我的經驗,城市和風景往往效果最佳。最後像這樣運行代碼:

python main.py --style_image path_style_image --content_image path_content_image

該算法將迭代地改進樣式傳遞結果,因此你等待得實踐越久效果就越好!默認情況下它被設置爲迭代 3000 次,但如果你覺得更多的迭代次數能夠改善結果,可以增加該數字。

試着親自去運行代碼,這非常有趣!


歡迎掃碼關注公衆號:硬核智能

clipboard.png

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