先來看下效果:
上圖是小編在甘南合作的米拉日巴佛閣外面拍下的一張照片,采用風(fēng)格遷移技術(shù)后的效果為:
一些其它效果圖:
下面進(jìn)入正題。
近年來爵政,由深度學(xué)習(xí)所引領(lǐng)的人工智能(AI)技術(shù)浪潮仅讽,開始越來越廣泛地應(yīng)用到生活各個(gè)領(lǐng)域。這其中钾挟,人工智能與藝術(shù)的交叉碰撞洁灵,在相關(guān)技術(shù)領(lǐng)域和藝術(shù)領(lǐng)域引起了高度關(guān)注。就在上個(gè)月掺出,由電腦生成的藝術(shù)品在佳士得(Christie’s)的拍賣價(jià)竟高達(dá)43.25萬(wàn)美元徽千,證明人工智能不僅可以具有創(chuàng)造性,還可以創(chuàng)作出世界級(jí)的藝術(shù)品蛛砰。
早些時(shí)候罐栈,有些人堅(jiān)信藝術(shù)的創(chuàng)造力是人工智能無法替代的,藝術(shù)將是人類最后一片自留地泥畅!這不荠诬,沒過多久,這片唯一的自留地也逐漸被人工智能所取代位仁。
在這各種神奇的背后柑贞,最核心的就是基于深度學(xué)習(xí)的風(fēng)格遷移(style transfer)技術(shù)。我將在這篇博客帶領(lǐng)大家學(xué)習(xí)如何使用Python來快速實(shí)現(xiàn)圖片的風(fēng)格遷移聂抢。閱讀完本博客后钧嘶,相信你也能夠創(chuàng)造出漂亮的藝術(shù)品。
1. 什么是圖片的風(fēng)格遷移琳疏?
所謂圖片風(fēng)格遷移,是指利用程序算法學(xué)習(xí)著名畫作的風(fēng)格书幕,然后再把這種風(fēng)格應(yīng)用到另外一張圖片上的技術(shù)新荤。
舉個(gè)例子,見上圖台汇。左邊是我們的原始圖片(也稱內(nèi)容圖像):小編在蘇州甪直古鎮(zhèn)的一座小橋上拍下的一張照片苛骨。
中間是我們的風(fēng)格圖片:挪威表現(xiàn)派畫家愛德華·蒙克的代表作《吶喊》(The Scream)。
右邊是將愛德華·蒙克的《吶喊》的風(fēng)格應(yīng)用于原始圖片后生成的風(fēng)格化結(jié)果圖苟呐。仔細(xì)觀察痒芝,圖片是如何保留了流水、房屋牵素、房屋在水中的倒影严衬,甚至遠(yuǎn)處樹木的內(nèi)容,但卻運(yùn)用了《吶喊》的風(fēng)格两波,就好像愛德華·蒙克在我們的景色中運(yùn)用了他高超的繪畫技巧一樣瞳步!
問題是闷哆,我們應(yīng)該定義一個(gè)什么樣的神經(jīng)網(wǎng)絡(luò)來執(zhí)行圖片的風(fēng)格遷移腰奋?
這可能嗎?
答案是:可以的抱怔。我將在下一節(jié)簡(jiǎn)單討論如何基于神經(jīng)網(wǎng)絡(luò)來實(shí)現(xiàn)圖片風(fēng)格的遷移劣坊。
2. 基本原理
Gatys等人在2015年發(fā)表了第一篇基于深度學(xué)習(xí)的風(fēng)格遷移算法文章,原文鏈接為https://arxiv.org/abs/1508.06576屈留,隨后文章收錄于2016年的CVPR頂會(huì)局冰。
有趣的是,他們提出了一種完全不需要新網(wǎng)絡(luò)架構(gòu)的風(fēng)格遷移算法灌危,其使用的網(wǎng)絡(luò)構(gòu)架是在前人的VGG19基礎(chǔ)上稍加改造而成的康二,而且網(wǎng)絡(luò)參數(shù)也使用預(yù)訓(xùn)練(通常在ImageNet上)網(wǎng)絡(luò)的參數(shù)。我們來看下它的原理:
我們知道,卷積神經(jīng)網(wǎng)絡(luò)(CNN)具有很強(qiáng)的圖像特征(feature/representation)提取能力味混,如上圖所示产雹。
對(duì)于內(nèi)容圖片,深層網(wǎng)絡(luò)(d和e)提取的是高維特征翁锡,同時(shí)也丟棄了細(xì)節(jié)信息蔓挖;淺層網(wǎng)絡(luò)(a, b和c)提取的是低維特征馆衔,圖片的細(xì)節(jié)大多都保留下來了瘟判。
對(duì)于風(fēng)格圖片,通過包含多層的特征相關(guān)性(Gram矩陣)梨熙,可獲得多尺度圖像風(fēng)格的重構(gòu)刀诬,捕獲其紋理信息。這樣構(gòu)建的網(wǎng)絡(luò)可以忽略圖像的具體細(xì)節(jié)质欲,保留風(fēng)格糠馆。
為了將內(nèi)容圖片和風(fēng)格圖片融合在一起(見下圖),我們應(yīng)該使風(fēng)格化結(jié)果圖(初始為一張白噪聲圖片)的特征同時(shí)與內(nèi)容圖片和風(fēng)格圖片的特征之間的距離最小化又碌,最終獲取我們所需的風(fēng)格化結(jié)果圖。
因此生成目標(biāo)圖片的損失函數(shù)可定義為:
其中α和β分別是內(nèi)容圖片和風(fēng)格圖片的特征所占的權(quán)重教馆,通過最小化這個(gè)損失函數(shù)就可以獲得我們想要的結(jié)果。來看個(gè)動(dòng)態(tài)示意圖:
值得注意的是,這里優(yōu)化的參數(shù)不再是網(wǎng)絡(luò)的權(quán)重ω和偏差b镀迂,而是初始輸入的一張白噪聲圖片。
雖然上述方法可產(chǎn)生非常漂亮的風(fēng)格遷移效果窟赏,但是速度很慢。
2016年涯穷,Johnson等人基于Gatys等人的工作,提出了一種速度可提高三個(gè)數(shù)量級(jí)的風(fēng)格遷移算法作煌。雖然算法的速度很快赚瘦,但最大的缺點(diǎn)是不能像Gatys等人那樣隨意選擇你的風(fēng)格圖片。針對(duì)每張風(fēng)格圖片起意,你都需要訓(xùn)練一個(gè)網(wǎng)絡(luò)來重現(xiàn)這個(gè)風(fēng)格。一旦網(wǎng)絡(luò)模型訓(xùn)練好之后悲酷,你就可將它應(yīng)用于你想要的任何內(nèi)容圖片了亲善。
這篇博客我們將使用Johnson等人的方法,其算法實(shí)現(xiàn)和預(yù)訓(xùn)練模型可參考https://github.com/jcjohnson/fast-neural-style逗爹。
3. 基于OpenCV的快速實(shí)現(xiàn)
下面利用OpenCV來快速實(shí)現(xiàn)圖片的風(fēng)格遷移,我將其封裝成一個(gè)叫style_transfer()的函數(shù),其使用說明可參考函數(shù)內(nèi)部的注釋于购。目前只有11個(gè)預(yù)訓(xùn)練模型可用
來測(cè)試一下:
從運(yùn)行結(jié)果可知凭戴,在CPU上炕矮,一張圖片的風(fēng)格遷移所花的時(shí)間大概也就幾秒者冤。如果使用GPU档痪,完全可以實(shí)時(shí)對(duì)視頻/攝像頭進(jìn)行風(fēng)格遷移處理。
4. 目前的相關(guān)進(jìn)展
自Gatys等人第一次(2015年)實(shí)現(xiàn)基于深度學(xué)習(xí)的風(fēng)格遷移以來愿汰,風(fēng)格遷移技術(shù)仍一直在發(fā)展乐纸,如今在速度和質(zhì)量上都有了很大提高。目前的一些進(jìn)展可以通過下面的鏈接來了解:
- https://github.com/jcjohnson/fast-neural-style
- https://github.com/DmitryUlyanov/texture_nets
- https://github.com/luanfujun/deep-painterly-harmonization
- https://junyanz.github.io/CycleGAN/
他們的一些作品:
- 風(fēng)格遷移
2. 外來圖片的融合
3. 圖片季節(jié)的變換
4. 圖片背景的虛化
5. 角色互換
以上就是本文的全部?jī)?nèi)容对碌,希望對(duì)大家的學(xué)習(xí)有所幫助蒿偎。如果覺得文章不錯(cuò),動(dòng)手轉(zhuǎn)發(fā)支持一下哦诉位!