當前位置:
首頁 > 科技 > 實時風格遷移原來這麼酷!用PyTorch分分鐘搞定

實時風格遷移原來這麼酷!用PyTorch分分鐘搞定

GIF/1.7M

原文來源:medium

作者:CeShine Lee

「機器人圈」編譯:嗯~阿童木呀

在這篇文章中,我將結合自身經驗,簡要講解如何用Pytorch編寫並訓練實時風格遷移模型。而這項研究主要是以Abhishek Kadian的實現為基礎的,其運行效果非常完美。而我已經對它做了一些修改,一方面是為了讓它變得更加有趣,另一方面是想讓它能夠更加適用於 Pytorch的運行環境。

該模型使用的是《基於感知損失的實時風格遷移和超解析度》以及實例歸一化(Instance Normalization)(未實施超解析度)所描述那種方法。

下面就是我所添加到該模型實現中的三個主要部分:

1.使用官方預訓練的VGG模型。

2.在訓練期間輸入中級訓練結果。

3.添加論文中所描述的總變差正則化(Total Variation Regularization)。

使用官方預訓練的VGG模型

論文《基於感知損失的實時風格遷移和超解析度》中的模型架構

首先,我們需要快速瀏覽一下該模型架構。可以說該論文的主要貢獻在於,它提出將生成的圖像反饋到預先訓練的圖像分類模型,並從一些中間層中提取輸出以計算損耗,便將會產生和Gatys等人所得到的類似的結果,但這明顯具有更少的計算資源。因此,該結構的第一部分是 「圖像變換網」(Image Transform Net),它可以從輸入圖像中生成新的圖像。而第二部分只是一個「損失網路」,即前饋部分。而損失網路的權重是固定的,在訓練過程中不會更新。

Abhishek的實現使用的是具有BGR信道順序和中心信道偏移量為[-103.939,-116.779,-123.680](它似乎也是論文中所描述使用的一種方法)的傳統VGG模型。官方pytorch預訓練模型使用的是一個統一格式:

所有預訓練的模型都希望以相同的方式對輸入圖像進行歸一化,即,預先形成小批量的3通道RGB圖像(形式為3 x H x W),其中,H和W的預期值至少為224。圖像必須載入到[0,1]的範圍內,然後使用mean = [0.485, 0.456, 0.406]和std = [0.229, 0.224, 0.225]進行規範化。

以下是從官方預訓練的模型中提取輸出的代碼:

啟動:

除非明確指定,否則VGG模型中沒有批量歸一化(batch normalization)。所以,相較於之前的實現,該激活函數的值有很大的不同。一般來說,你需要放大風格損失(格拉姆矩陣)(gram matrix),因為大多數激活函數值小於1,而使用點積會使其更小。

在訓練期間中級結果的輸出

中級階段,第75200個訓練樣本

當調整內容權重與風格權重比時,將會帶來很大的幫助。你可以在訓練期間停止訓練,重新調整參數,而不必等待4個小時當完成訓練之後才開始調整。

按照本文所述添加總變差正則化

該論文在實驗部分提到了這一點——總變差正則化,但是似乎Abhishek沒有實現這一目標:

輸出圖像是通過一種強度範圍在1×10e^-6和1×10^e-4之間的總變差正則化進行正則化的, 這是由對每一種風格目標進行交叉驗證選擇得來的。

維基百科:二維信號圖像的總變差正則化公式

其實這是很容易實現的:

Pytorch autograd將為你處理反向傳播(backward propagation)。在實際上,我還沒有找到該如何以一種較為恰當的方式來調整正則化的權重。到目前為止,我使用的權重似乎在輸出圖像上並沒有太大差異。

訓練結果

該模型使用的是Microsoft COCO數據集進行訓練的。圖像的大小重新調整為256 x 256,網路在大約2個時期內進行訓練,批量大小為4(與論文所述相同)。使用GTX1070進行訓練的時間約為4至4.5小時,與論文報告中所述的用時大致相當。基於我那稍顯粗略的實驗來說,其中大量的時間用來對輸入圖像進行規範化處理。如果我們使用原始的VGG模型(未經測試),訓練可能會進行得更快。在一些手動調整之後,內容權重vs風格比通常設置為1:10e^3?10e^5。

一個示例模型

因為網路是完全卷積的,你可以在測試時間內為網路提供比256 x 256更大或更小的圖像。 與此同時,為了該模型更為有趣,我用scikit-video和ffmpeg寫了一些腳本來轉換動畫GIF和視頻

在模型中使用的一些其他風格的圖像

GIF/1.2M

一隻馬賽克風格的貓在打字

經驗總結

2.記住要使用model.train()和model.eval()。它只對包含dropout或批量歸一化層的模型有影響,但這是一個你應該保持的好習慣。如果你之前用的是Keras,就更容易忘記這一點了。

可能的改進和未來工作規劃

1.網路有時會在開放區域產生一些奇怪的補丁。我們不知道它是從哪裡來的以及該如何修復。

2.也許給relu12、relu22、relu33、relu43輸出配置不同的權重會帶來更好的結果。

3.嘗試使用不同的預訓練網路作為損失網路。

4.嘗試實現超解析度(Super-Resolution)

5.將結果與CycleGAN進行比較。我嘗試使用CycleGAN,但訓練時間過於漫長,沒有耐心等待,從而中止運行。應該再試一次。

6.規範化生成視頻時連續幀之間的變化。這應該有助於減少播放過程中的閃爍。當然,這只是我道聽途說得來的技術方法,但不知道該如何實現。

一個奇怪補丁的示例圖片

代碼資源

點擊Github repo可獲得代碼資源,另外,關於代碼的主要部分,存在於Jupyter notebooks中,點擊鏈接可查看詳情:style-transfer.ipynb 和 Video.ipynb。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 機器人圈 的精彩文章:

Salesforce AI最新研究,如何情境化詞向量進行翻譯
如何使用深度神經網路進行圖像分類?其中用到的技術哪些?
對抗樣本到底會不會對無人駕駛目標檢測產生干擾?又有人質疑了!
AI變革傳統行業,為何人工智慧需要找到應用場景?
目標識別很難?對於Google卷積神經網路不過是小case

TAG:機器人圈 |

您可能感興趣

iPhone X風格的Apple Watch 你一定忍不住想買一塊
機能風格再迎新品!這雙 Nike Air VaporMax Utility 下周發售
Virgil Abloh設計風格再出現!這雙Nike Air VaporMax制勝細節怎麼能錯過!
Virgil Abloh設計風格再出現!這雙Nike Air VaporMax制勝細節怎麼能錯過?!
走下T台後的時尚新寵,看超模Kaia Gerber最真實的Off-Duty風格!
iPhoneX se或回歸4S風格?牛人已在iPhoneX身上實現
Low Poly 低多邊形風格!
Nvidia 圖片風格轉換工具——FastPhotoStyle
Surface Pro 6設計風格大變 終於能有Type-C介面了?
風格 | Spencer Phipps 時裝如何可持續?
極簡解構風格!adidas Y-3 Ayero White 現已發售
符合 Python 風格的對象
Art Deco風格珠寶,原來這麼美!
Alexa Chung延續自我風格——打造實用品牌
扎染風格!Kyrie 4 「All-Star」 實物釋出!
當你還在嘲笑Louis Vuitton、Gucci狗年限定系列丑的時候,別人已經在研究用這種風格做爆款了
潑墨風格Pharrell Hu NMD突襲曝光!這也太美了吧!
除了現在大火的Balenciaga姥爺鞋,Gucci小白鞋,yeezy。最能hold住各種風格的還是converse
Nike Air VaporMax 氣墊跑鞋持續變裝「FK Utility」開啟機能風格
Deep Learning-風格遷移