丁香五月天婷婷久久婷婷色综合91|国产传媒自偷自拍|久久影院亚洲精品|国产欧美VA天堂国产美女自慰视屏|免费黄色av网站|婷婷丁香五月激情四射|日韩AV一区二区中文字幕在线观看|亚洲欧美日本性爱|日日噜噜噜夜夜噜噜噜|中文Av日韩一区二区

您正在使用IE低版瀏覽器,為了您的雷峰網(wǎng)賬號(hào)安全和更好的產(chǎn)品體驗(yàn),強(qiáng)烈建議使用更快更安全的瀏覽器
此為臨時(shí)鏈接,僅用于文章預(yù)覽,將在時(shí)失效
人工智能 正文
發(fā)私信給何之源
發(fā)送

0

深度學(xué)習(xí)實(shí)踐:如何使用Tensorflow實(shí)現(xiàn)快速風(fēng)格遷移?

本文作者: 何之源 2017-01-13 10:58
導(dǎo)語:風(fēng)格遷移(Style Transfer)是深度學(xué)習(xí)眾多應(yīng)用中非常有趣的一種。

雷鋒網(wǎng)注:本文作者何之源,復(fù)旦大學(xué)計(jì)算機(jī)科學(xué)碩士在讀,研究人工智能計(jì)算機(jī)視覺方向。本文由雷鋒網(wǎng)編輯整理自作者知乎專欄,獲授權(quán)發(fā)布。

一、風(fēng)格遷移簡(jiǎn)介

風(fēng)格遷移(Style Transfer)是深度學(xué)習(xí)眾多應(yīng)用中非常有趣的一種,如圖,我們可以使用這種方法把一張圖片的風(fēng)格“遷移”到另一張圖片上:

深度學(xué)習(xí)實(shí)踐:如何使用Tensorflow實(shí)現(xiàn)快速風(fēng)格遷移?

然而,原始的風(fēng)格遷移(點(diǎn)擊查看論文)的速度是非常慢的。在GPU上,生成一張圖片都需要10分鐘左右,而如果只使用CPU而不使用GPU運(yùn)行程序,甚至需要幾個(gè)小時(shí)。這個(gè)時(shí)間還會(huì)隨著圖片尺寸的增大而迅速增大。

這其中的原因在于,在原始的風(fēng)格遷移過程中,把生成圖片的過程當(dāng)做一個(gè)“訓(xùn)練”的過程。每生成一張圖片,都相當(dāng)于要訓(xùn)練一次模型,這中間可能會(huì)迭代幾百幾千次。如果你了解過一點(diǎn)機(jī)器學(xué)習(xí)的知識(shí),就會(huì)知道,從頭訓(xùn)練一個(gè)模型要比執(zhí)行一個(gè)已經(jīng)訓(xùn)練好的模型要費(fèi)時(shí)太多。而這也正是原始的風(fēng)格遷移速度緩慢的原因。

二、快速風(fēng)格遷移簡(jiǎn)介

那有沒有一種方法,可以不把生成圖片當(dāng)做一個(gè)“訓(xùn)練”的過程,而當(dāng)成一個(gè)“執(zhí)行”的過程呢?答案是肯定的??煽纯焖亠L(fēng)格遷移(fast neural style transfer):Perceptual Losses for Real-Time Style Transfer and Super-Resolution

快速風(fēng)格遷移的網(wǎng)絡(luò)結(jié)構(gòu)包含兩個(gè)部分。一個(gè)是“生成網(wǎng)絡(luò)”(原文中為Transformation Network),一個(gè)是“損失網(wǎng)絡(luò)”(Loss Network)。生成網(wǎng)絡(luò)接收一個(gè)圖片當(dāng)做輸入,然后輸出也是一張圖片(即風(fēng)格遷移后的結(jié)果)。如下圖,左側(cè)是生成網(wǎng)絡(luò),右側(cè)為損失網(wǎng)絡(luò):

深度學(xué)習(xí)實(shí)踐:如何使用Tensorflow實(shí)現(xiàn)快速風(fēng)格遷移?

訓(xùn)練階段:首先選定一張風(fēng)格圖片。訓(xùn)練的目標(biāo)是讓生成網(wǎng)絡(luò)可以有效生成圖片。目標(biāo)由損失網(wǎng)絡(luò)定義。

執(zhí)行階段:給定一張圖片,將其輸入生成網(wǎng)絡(luò),輸出這張圖片風(fēng)格遷移后的結(jié)果。

我們可以發(fā)現(xiàn),在模型的“執(zhí)行”階段我們就可以完成風(fēng)格圖片的生成。因此生成一張圖片的速度非常塊,在GPU上一般小于1秒,在CPU上運(yùn)行也只需要幾秒的時(shí)間。

三、快速風(fēng)格遷移的Tensorflow實(shí)現(xiàn)

話不多說,直接上我的代碼的Github地址(點(diǎn)擊可看)

還有變換效果如下。

原始圖片:

深度學(xué)習(xí)實(shí)踐:如何使用Tensorflow實(shí)現(xiàn)快速風(fēng)格遷移?

風(fēng)格遷移后的圖片:

深度學(xué)習(xí)實(shí)踐:如何使用Tensorflow實(shí)現(xiàn)快速風(fēng)格遷移?

深度學(xué)習(xí)實(shí)踐:如何使用Tensorflow實(shí)現(xiàn)快速風(fēng)格遷移?

深度學(xué)習(xí)實(shí)踐:如何使用Tensorflow實(shí)現(xiàn)快速風(fēng)格遷移?

深度學(xué)習(xí)實(shí)踐:如何使用Tensorflow實(shí)現(xiàn)快速風(fēng)格遷移?

以上圖片在GPU(Titan Black)下生成約需要0.8s,CPU(i7-6850K)下生成用時(shí)約2.9s。

關(guān)于快速風(fēng)格遷移,其實(shí)之前在Github上已經(jīng)有了Tensorflow的兩個(gè)實(shí)現(xiàn):

但是第一個(gè)項(xiàng)目只提供了幾個(gè)訓(xùn)練好的模型,沒有提供訓(xùn)練的代碼,也沒有提供具體的網(wǎng)絡(luò)結(jié)構(gòu)。所以實(shí)際用處不大。

而第二個(gè)模型做了完整的實(shí)現(xiàn),可以進(jìn)行模型的訓(xùn)練,但是訓(xùn)練出來的效果不是很好,在作者自己的博客中,給出了一個(gè)范例,可以看到生成的圖片有很多噪聲點(diǎn):

深度學(xué)習(xí)實(shí)踐:如何使用Tensorflow實(shí)現(xiàn)快速風(fēng)格遷移?

我的項(xiàng)目就是在OlavHN/fast-neural-style的基礎(chǔ)上做了很多修改和調(diào)整。

四、一些實(shí)現(xiàn)細(xì)節(jié)

1、與Tensorflow Slim結(jié)合

在原來的實(shí)現(xiàn)中,作者使用了VGG19模型當(dāng)做損失網(wǎng)絡(luò)。而在原始的論文中,使用的是VGG16。為了保持一致性,我使用了Tensorflow Slim對(duì)損失網(wǎng)絡(luò)重新進(jìn)行了包裝。

Slim是Tensorflow的一個(gè)擴(kuò)展庫,提供了很多與圖像分類有關(guān)的函數(shù),已經(jīng)很多已經(jīng)訓(xùn)練好的模型(如VGG、Inception系列以及ResNet系列)。

下圖是Slim支持的模型:

深度學(xué)習(xí)實(shí)踐:如何使用Tensorflow實(shí)現(xiàn)快速風(fēng)格遷移?

使用Slim替換掉原先的網(wǎng)絡(luò)之后,在損失函數(shù)中,我們不僅可以使用VGG16,也可以方便地使用VGG19、ResNet等其他網(wǎng)絡(luò)結(jié)構(gòu)。具體的實(shí)現(xiàn)請(qǐng)參考源碼。

2、改進(jìn)轉(zhuǎn)置卷積的兩個(gè)Trick

原先我們需要使用網(wǎng)絡(luò)生成圖像的時(shí)候,一般都是采用轉(zhuǎn)置卷積直接對(duì)圖像進(jìn)行上采樣。

這篇文章指出了轉(zhuǎn)置卷積的一些問題,認(rèn)為轉(zhuǎn)置卷積由于不合理的重合,使得生成的圖片總是有“棋盤狀的噪聲點(diǎn)”,它提出使用先將圖片放大,再做卷積的方式來代替轉(zhuǎn)置卷積做上采樣,可以提高生成圖片的質(zhì)量,下圖為兩種方法的對(duì)比:

深度學(xué)習(xí)實(shí)踐:如何使用Tensorflow實(shí)現(xiàn)快速風(fēng)格遷移?

對(duì)應(yīng)的Tensorflow的實(shí)現(xiàn):

深度學(xué)習(xí)實(shí)踐:如何使用Tensorflow實(shí)現(xiàn)快速風(fēng)格遷移?

以上為第一個(gè)Trick。

第二個(gè)Trick是文章 Instance Normalization: The Missing Ingredient for Fast Stylization 中提到的,用 Instance Normalization來代替通常的Batch Normalization,可以改善風(fēng)格遷移的質(zhì)量。

3、注意使用Optimizer和Saver

這是關(guān)于Tensorflow實(shí)現(xiàn)的一個(gè)小細(xì)節(jié)。

在Tensorflow中,Optimizer和Saver是默認(rèn)去訓(xùn)練、保存模型中的所有變量的。但在這個(gè)項(xiàng)目中,整個(gè)網(wǎng)絡(luò)分為生成網(wǎng)絡(luò)和損失網(wǎng)絡(luò)兩部分。我們的目標(biāo)是訓(xùn)練好生成網(wǎng)絡(luò),因此只需要去訓(xùn)練、保存生成網(wǎng)絡(luò)中的變量。在構(gòu)造Optimizer和Saver的時(shí)候,要注意只傳入生成網(wǎng)絡(luò)中的變量。

找出需要訓(xùn)練的變量,傳遞給Optimizer:

深度學(xué)習(xí)實(shí)踐:如何使用Tensorflow實(shí)現(xiàn)快速風(fēng)格遷移?

五、總結(jié)

總之是做了一個(gè)還算挺有趣的項(xiàng)目。代碼不是特別多,如果只是用訓(xùn)練好的模型生成圖片的話,使用CPU也可以在幾秒內(nèi)運(yùn)行出結(jié)果,不需要去搭建GPU環(huán)境。建議有興趣的同學(xué)可以自己玩一下。

關(guān)于訓(xùn)練,其實(shí)也有一段比較坎(dan)坷(teng)的調(diào)參經(jīng)歷,下次有時(shí)間再分享一下,今天就先寫到這兒。謝謝大家!

雷峰網(wǎng)特約稿件,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。

深度學(xué)習(xí)實(shí)踐:如何使用Tensorflow實(shí)現(xiàn)快速風(fēng)格遷移?

分享:
相關(guān)文章

專欄作者

復(fù)旦大學(xué)計(jì)算機(jī)科學(xué)碩士,方向?yàn)槿斯ぶ悄埽?jì)算機(jī)視覺。
當(dāng)月熱門文章
最新文章
請(qǐng)?zhí)顚懮暾?qǐng)人資料
姓名
電話
郵箱
微信號(hào)
作品鏈接
個(gè)人簡(jiǎn)介
為了您的賬戶安全,請(qǐng)驗(yàn)證郵箱
您的郵箱還未驗(yàn)證,完成可獲20積分喲!
請(qǐng)驗(yàn)證您的郵箱
立即驗(yàn)證
完善賬號(hào)信息
您的賬號(hào)已經(jīng)綁定,現(xiàn)在您可以設(shè)置密碼以方便用郵箱登錄
立即設(shè)置 以后再說