回復(fù)評(píng)論獲得深度強(qiáng)化學(xué)習(xí)教學(xué)視頻優(yōu)質(zhì)資源。
此教程也是博主的自我探索,適合數(shù)學(xué)基礎(chǔ)不錯(cuò)(至少學(xué)過(guò)隨機(jī)過(guò)程而且給學(xué)明白了拿B以上),編程的話至少熟練一種語(yǔ)言(sql不算哦),比如EECS還有各種工學(xué)院的同學(xué)我覺(jué)得沒(méi)問(wèn)題的啦。
如果不熟悉深度學(xué)習(xí)概念,請(qǐng)左轉(zhuǎn)http://blog.csdn.net/TS1130/article/details/53244576 (原博在作業(yè)部落上) 花幾個(gè)小時(shí)看看你就明白了。
另外聲明~ 21小時(shí)只是說(shuō)上手,就像你會(huì)玩一款新游戲,但是并不是說(shuō)你就是游戲?qū)<?,可以代打或者可以參加?zhàn)隊(duì)參加國(guó)際比賽了不是這個(gè)意思~
開(kāi)源項(xiàng)目清單之繪畫(huà)領(lǐng)域
1)大家很喜歡的Prisma系列 , 使用的Neural Style
GitHub地址如下:
?(Pytorch)
?(Tensorflow)
論文在此A Neural Algorithm of Artistic Styleby Leon A. Gatys, Alexander S. Ecker, and Matthias Bethge.
覺(jué)得paper和源碼懶得看看不懂的,請(qǐng)?jiān)u論回復(fù)“Prisma” , 我可以私信分享我收藏的教程(當(dāng)然不是我教的)
這里簡(jiǎn)單講講理論和代碼,以tensorflow版本的代碼為例子
Neural style的任務(wù)就是,我們有圖A,圖B。圖A比如是一幅油畫(huà)或者動(dòng)畫(huà)片的圖,圖B是我們的游客照,我們要把生成圖C,C里面內(nèi)容還是游客照,風(fēng)格就是油畫(huà)或者動(dòng)畫(huà)片了。是不是很酷!這樣我們就獲得了油畫(huà)版本或者動(dòng)畫(huà)片版本的旅游照片了
圖C繼承了圖A的風(fēng)格(style),繼承了圖B的內(nèi)容(content)
(While the global arrangement of the original photograph is preserved,the colors and local structures that compose the global scenery are provided by the artwork.)
這個(gè)需要如何數(shù)學(xué)表達(dá)和計(jì)算呢。
1)模型的loss function
我們給一個(gè)style loss function去幫助學(xué)習(xí)圖A的風(fēng)格,讓圖C和圖A的style loss盡可能的小
同時(shí)有一個(gè)content loss function幫助學(xué)習(xí)圖B的內(nèi)容,讓圖C和圖B的content loss同時(shí)也盡可能的小。
我們就在取其中的折中。當(dāng)然,我們也可以自己設(shè)定多一些style loss還是多一些content loss
content loss是內(nèi)容差異,所以用過(guò)了一層卷積之后的每個(gè)feature map, 對(duì)于特定的feature map, 算出 B和C之間每個(gè)像素差值平方和就可以了。
L(p,x,l)
x是生成的圖像C,p是內(nèi)容圖像B
C經(jīng)過(guò)第一層卷積比如產(chǎn)生了五個(gè)feature map, 我們叫他們 1C1, 1C2, 1C3, 1C4, 1C5.第一個(gè)1表示經(jīng)過(guò)的是第一層卷積,C表示是圖C產(chǎn)生的,12345是他們的編號(hào)。
對(duì)象的圖B經(jīng)過(guò)第一層卷積有五個(gè)feature map, 1B1,1B2,1B3,1B4,1B5(因?yàn)槲覀兗僭O(shè)有五個(gè)filter)
這一層比如feature map 都是2*2的,那我們對(duì)位給feature map相減了以后求平方和
比如1C1是[1,2; 4,8] 1B1是[3,9;8,0] 那么他們對(duì)位減求平方和就是(1-0)^2+(2-9)^2+(4-8)^2+(8-0)^2
在論文里面為了減少計(jì)算,應(yīng)該是把1C1這些矩陣都flatten了,就是說(shuō)本來(lái)是2*2的矩陣,這里搞成4個(gè)數(shù)字組成的一個(gè)維度。反正也不影響計(jì)算。
相當(dāng)于搞了一個(gè)結(jié)構(gòu)叫1C。1C1是它的第一行。
所以1C的行數(shù)是feature map的個(gè)數(shù),列數(shù)是一個(gè)feature map有多少個(gè)像素。
我們直接求 每個(gè)層的 ?0.5*(C(l)-B(l))^2 然后加起來(lái)就是content loss
例如
Style loss是風(fēng)格差異,算的是卷積之后的每個(gè)feature map, 例如有n個(gè)feature map, 越抽象那風(fēng)格差異應(yīng)該就越小了
剛說(shuō)了 1C 是生成圖像C第一層的feature map的一個(gè)排布,每一行是一個(gè)feature map,每一列是一個(gè)feature map不同的維度(像素)
style loss怎么計(jì)算? 它很巧妙的計(jì)算的是, 對(duì)于一個(gè)特定圖像,比如生成圖像C,計(jì)算對(duì)于它特定的兩兩feature map之間的correlation
比如feature map 1 ,(也就是1C1) 和feature map 2 (1C2), 他們的值不是說(shuō)好的 [1 4 2 8] 和 [ 3 9 8 0] 。這次我們不算他們的差值平方和,我們把他乘起來(lái)再相加。
也即是生成圖像C第一層的feature map1和2的correlation是 1*3+4*9+2*8+8*0
我們叫這個(gè)值叫G12
同樣也對(duì)圖片A做這個(gè)操作,結(jié)果叫A12
對(duì)所有的feature map都這樣做,得到一個(gè)gram matrix
(G12-A12)^2+(G23-A23)^2 + ........
然后再做一些normalize處理就好了。 文章中的build是為了求導(dǎo)方便
這個(gè)神奇的loss function為什么管用。。我查了一下
在線性代數(shù)中,內(nèi)積空間中一族向量
格拉姆矩陣(Gramian matrix 或 Gram matrix, Gramian)是內(nèi)積的對(duì)稱矩陣,其元素由 Gij= (vi| vj)給出。
一個(gè)重要的應(yīng)用是計(jì)算線性無(wú)關(guān):一族向量線性無(wú)關(guān)當(dāng)且僅當(dāng)格拉姆行列式(格拉姆矩陣的行列式)不等于零。
本文的 style transfer 思路很簡(jiǎn)單:在圖像內(nèi)容附近通過(guò)白噪聲初始化一個(gè)輸出的結(jié)果,然后通過(guò)網(wǎng)絡(luò)對(duì)這個(gè)結(jié)果進(jìn)行風(fēng)格和內(nèi)容兩方面的約束進(jìn)行修正。而在風(fēng)格的表示中采用的是Gram Matrix。
我是這樣理解為什么用Gram 矩陣的:度量各個(gè)維度自己的特性以及各個(gè)維度之間的關(guān)系。
style transfer 當(dāng)中,什么是風(fēng)格,存在自己特性的才叫做風(fēng)格。因此如何去度量這個(gè)自己的特性勒,自己的特點(diǎn)越突出,別人的越不突出最好。因此論文當(dāng)中這樣去做:
這樣我們知道:當(dāng)同一個(gè)維度上面的值相乘的時(shí)候原來(lái)越小酒變得更小,原來(lái)越大就變得越大;二不同維度上的關(guān)系也在相乘的表達(dá)當(dāng)中表示出來(lái)。
因此,最終能夠在保證內(nèi)容的情況下,進(jìn)行風(fēng)格的傳輸。
內(nèi)積之后得到的多尺度矩陣中,對(duì)角線元素提供了不同特征圖(a1,a2 ... ,an)各自的信息,其余元素提供了不同特征圖之間的相關(guān)信息。
于是,在一個(gè)Gram矩陣中,既能體現(xiàn)出有哪些特征,又能體現(xiàn)出不同特征間的緊密程度。論文中作者把這個(gè)定義為風(fēng)格。
------------------------------------
2)深度學(xué)習(xí)中的特征
我們要怎么設(shè)計(jì)讓模型去發(fā)現(xiàn),風(fēng)格和內(nèi)容特征呢。
其實(shí)原論文的第一部分就是在講,怎么從圖像中用CNN抽取出來(lái)風(fēng)格或者內(nèi)容特征。 (style representation & content representation)
內(nèi)容特征
他們的想法是,對(duì)于內(nèi)容,內(nèi)容的意思就是說(shuō),隨著卷積層的深入,一些像素丟失掉了,但是大的形狀還是okay得
在CNN中,輸入圖像用一組已經(jīng)過(guò)濾的圖像集合來(lái)表征(就是feature map)。隨著filter越來(lái)越多,層次越來(lái)越深,feature map也越來(lái)越小。這里是用反卷積實(shí)現(xiàn)的特征可視化,通過(guò)每一特定層得到的response(也就是feature map)來(lái)重構(gòu)輸入圖像。文中用了原VGG網(wǎng)絡(luò)的‘conv1 1’ (a), ‘conv2 1’ (b), ‘conv3 1’ (c), ‘conv4 1’ (d) and ‘conv5 1’ (e) 來(lái)重構(gòu)。abc基本是復(fù)現(xiàn)了原有像素,d,e抽象能力比較好,有像素的丟失但是全局排布信息依然保存下來(lái)。所以用d和e作為內(nèi)容表示.?
風(fēng)格特征
對(duì)于風(fēng)格,就是,細(xì)化放大來(lái)看,圖片的紋理更加具有某種獨(dú)特的特征了。這里借鑒了CNN發(fā)現(xiàn)紋理特征的一篇文章,文章在這里也很有意思。
和內(nèi)容特征不同的是,風(fēng)格特征可以包括多層神經(jīng)網(wǎng)絡(luò)。而內(nèi)容特征是,比如從第一層提取的內(nèi)容特征,第二層提取的,層level是一個(gè)自變量。
而風(fēng)格特征可以是,一層的風(fēng)格特征,兩層(第一層,第二層)的風(fēng)格特征,五層(第一層到第五層)的風(fēng)格特征。
為什么會(huì)有這個(gè)區(qū)別呢?
因?yàn)閮?nèi)容是全局的。風(fēng)格可以是局部的。在文中,內(nèi)容代表的是global arrangement,風(fēng)格是local textual feature & color. 這個(gè)local可以是一小塊。也可以是一大塊。
(we use a feature space originally designed to capture texture information. This feature space is built on top of the filter responses in each layer of the network. It consists of the correlations between the different filter responses over the spatial extent of the feature maps . By including the feature correlations of multiple layers, we obtain a stationary, multi-scale representation of the input image, which captures its texture information but not the global arrangement)
風(fēng)格可以被一小部分的低層的神經(jīng)元代表,只是說(shuō)視覺(jué)感受不一樣,但是還是有代表性的。但是匹配高層神經(jīng)元代表的風(fēng)格特征的時(shí)候,局部圖形結(jié)構(gòu)的匹配就得做的規(guī)模更大一些,這樣視覺(jué)感受更加平穩(wěn)也更連續(xù)。
淺層,淺層+深層
但是內(nèi)容,如果是我們之前說(shuō)的第一層,第二層抽出來(lái)的內(nèi)容特征,和原圖差別不大,沒(méi)啥利用價(jià)值。
同樣文中也做了風(fēng)格特征的重構(gòu)(style reconstruction)。從風(fēng)格特征出發(fā)的重構(gòu)產(chǎn)生了輸入圖片的紋理版本, 它get到了顏色和局部結(jié)構(gòu)。重點(diǎn)來(lái)了。取自輸入圖像的局部圖像結(jié)構(gòu)的復(fù)雜度和大小, 是不是隨著卷積神經(jīng)網(wǎng)絡(luò)的深度增加,變得越來(lái)越復(fù)雜!是的!這件事情反過(guò)來(lái)可以用引發(fā)卷積神經(jīng)網(wǎng)絡(luò)靈感的局部感受野理論來(lái)解釋。感受野的大小和特征復(fù)雜度增加了,局部圖像結(jié)構(gòu)的復(fù)雜度和大小也就增加了。
(We find that the local image structures captured by the style representation increase in size and complexity when including style features from higher layers of the network. This can be explained by the increasing receptive field sizes and feature complexity along the network’s processing hierarchy.)
所以我們使用 multi-scale representation as style representation.
文章的意思其實(shí)是,每張圖片都有“風(fēng)格”和“內(nèi)容”,而這兩個(gè)方面的特征是可以通過(guò)數(shù)學(xué)方法分離出來(lái)的。他使用了一個(gè)預(yù)訓(xùn)練的VGG來(lái)分離和抽取這些特征。
3)我們?cè)趺慈プ鲇?xùn)練的
固定權(quán)重W和b, 調(diào)整x
求loss function對(duì)x的偏導(dǎo)
VGG 用來(lái)抽特征,需要用W和b,用來(lái)做圖像的表達(dá)(representation)
同時(shí)文章中還用了reconstruction 就是利用反卷積,對(duì)神經(jīng)網(wǎng)絡(luò)自動(dòng)發(fā)現(xiàn)特征的過(guò)程進(jìn)行的可視化,看每層都發(fā)現(xiàn)了些什么特征長(zhǎng)啥樣子。這個(gè)之前我提到過(guò)。論文在此。以后會(huì)詳細(xì)分析。
a. 一個(gè)給定的輸入圖像被編碼到預(yù)訓(xùn)練好的CNN的每一層中。然后我們固定權(quán)值(因?yàn)閂GG是已經(jīng)訓(xùn)練好的?。└淖兾乙婚_(kāi)始隨機(jī)生成的x直到它在某些層產(chǎn)生的response和圖像B(內(nèi)容圖像) 是一樣的。
b. 在每一層的CNN response之上,我們?cè)僭祜L(fēng)格表示特征。它計(jì)算的是不同濾波器之間的correlation. 為了產(chǎn)生一個(gè)紋理來(lái)匹配咱已經(jīng)弄好的風(fēng)格重構(gòu)的風(fēng)格,我們用從白噪聲開(kāi)始的梯度下降法找到一個(gè)匹配風(fēng)格圖像A的風(fēng)格的另外一個(gè)圖像
where wl are weighting factors of the contribution of each layer to the total loss (see below for specific values of wl in our results). The derivative of El with respect to the activations in layer
l can be computed analytically
五個(gè)風(fēng)格重構(gòu)由這五組風(fēng)格表示生成 ‘conv1 1’ (a), ‘conv1 1’ and ‘conv2 1’(b), ‘conv1 1’, ‘conv2 1’ and ‘conv3 1’ (c), ‘conv1 1’, ‘conv2 1’, ‘conv3 1’ and ‘conv4 1’ (d), ‘conv1 1’, ‘conv2 1’, ‘conv3 1’, ‘conv4 1’ and ‘conv5 1’ (e).
c.To generate the images that mix the content of a photograph with the style of a painting ?we jointly minimise the distance of a white noise image from the content representation of the photograph in one layer of the network and the style representation of the painting in a number of layers of the CNN.
For the images shown in Fig 2 we matched the content representation on layer ‘conv4 2’ and the style representations on layers ‘conv1 1’, ‘conv2 1’, ‘conv3 1’, ‘conv4 1’ and ‘conv5 1’ (wl =1/5 in those layers, wl = 0 in all other layers) .
2)Neural Doodle
https://github.com/alexjc/neural-doodle
3) Image? Analogies
圖像融合,和prisma有點(diǎn)像可以比較一下
awentzonline/image-analogies
4) Colornet
上色
Demo:Automatic Image Colorization?白黒畫(huà)像の自動(dòng)色付け
Paper:http://hi.cs.waseda.ac.jp/~iizuka/projects/colorization/data/colorization_sig2016.pdf
Code:satoshiiizuka/siggraph2016_colorization
Demo:https://deepart.io/
Paper:http://www.cv-foundation.org/openaccess/content_cvpr_2016/papers/Gatys_Image_Style_Transfer_CVPR_2016_paper.pdf
Let there be color?
https://github.com/satoshiiizuka/siggraph2016_colorization (Lua)
設(shè)想作業(yè):可不可以根據(jù)衣服實(shí)物圖生成設(shè)計(jì)圖,根據(jù)設(shè)計(jì)圖(手繪)生成實(shí)物圖呢
5) srez:通過(guò)深度學(xué)習(xí)極大提高模糊圖片的分辨率
https://github.com/david-gpu/srez
二、實(shí)現(xiàn)過(guò)程記錄
1. Pytorch 安裝
http://torch.ch/docs/getting-started.html
博主使用的是mac OS, El Captain。安裝過(guò)程中碰到一些問(wèn)題,多command line 了幾次。最后提示
Not updating your shell profile.
You might want to
add the following lines to your shell profile:
. /Users/felicia/torch/install/bin/torch-activate
不過(guò)最后發(fā)現(xiàn) 弄了
source ~/.profile
一開(kāi)始不行,反復(fù)了幾下就Okay了。
一開(kāi)始查了一些網(wǎng)上修復(fù)辦法,都沒(méi)有直接起到作用。不過(guò)也不知道有沒(méi)有間接的幫助。其實(shí)如果再不行的話我打算在Mac上安裝ubutun, 據(jù)說(shuō)安裝成功率100%
三、跑下開(kāi)源項(xiàng)目
四、論文講解