深度学习(十六)基于2-channel network的图片相似度判别-CVPR 2015
基于2-channel ?network的圖片相似度判別
原文地址:http://blog.csdn.net/hjimce/article/details/50098483
作者:hjimce
一、相關(guān)理論
? ? ?本篇博文主要講解2015年CVPR的一篇關(guān)于圖像相似度計算的文章:《Learning to Compare Image Patches via Convolutional Neural Networks》,本篇文章對經(jīng)典的算法Siamese?Networks 做了改進。學習這篇paper的算法,需要熟悉Siamese?Networks(經(jīng)典老文獻《Signature Verification Using a Siamese Time Delay Neural Network》)、以及大神何凱明提出來的空間金字塔池化(2015年CVPR 文獻《Spatial Pyramid Pooling in Deep ConvolutionalNetworks for Visual Recognition》),因為文獻基本上是在?Siamese?Networks的基礎上做修改,然后也要借助于空間金字塔池化實現(xiàn)不同大小圖片的輸入網(wǎng)絡。
網(wǎng)絡總結(jié)構(gòu)
? ? ? ?如上圖所示,我們的目的是比較兩幅圖片是否相似,或者說相似度是多少,因此我們構(gòu)建的卷積神經(jīng)網(wǎng)絡模型的輸入就是:兩幅圖片,然后網(wǎng)絡的輸出是一個相似度數(shù)值。其實我覺得,用“計算相似度”這個詞有點不合適,我覺得應該翻譯為匹配程度。因為文獻所采用的訓練數(shù)據(jù)中,如果兩張圖片匹配,輸出值標注為y=1,如果兩張圖片不匹配,那么訓練數(shù)據(jù)標注為y=-1,也就是說,這個訓練數(shù)據(jù)的標注方法,根本就不是一個相似度數(shù)值,而是一個是否匹配的數(shù)值。我們打個比方,有三樣物體:鋼筆、鉛筆、書包,那么在訓練數(shù)據(jù)中,就把鋼筆和鉛筆標注為y=1,而不是用一個相似度數(shù)值來衡量,比我鋼筆和鉛筆的相似度我們把它標注為y=0.9……,所以說用于用相似度這個詞有點不合理,即使我們最后計算出來的值是一個-1~1之間的數(shù)……
paper主要創(chuàng)新點:在創(chuàng)新點方面,我覺得主要是把Siamese 網(wǎng)絡的雙分支,合在一起,從而提高了精度,如下圖所示
Siamese 網(wǎng)絡
paper算法2-channel 網(wǎng)絡
先在這里解釋下為什么作者要把它稱之為:2-channel?networks。理解了2-channel這個詞,有助于我們后面理解算法。從上面Siamese?網(wǎng)絡,我們可以看到這個網(wǎng)絡有兩個分支組成,因為我們是要比較兩張圖片patch1、patch2的相似度,所以Siamese?網(wǎng)絡的大體思路,就是讓patch1、patch2分別經(jīng)過網(wǎng)絡,進行提取特征向量,然后在最后一層對兩個兩個特征向量做一個相似度損失函數(shù),進行網(wǎng)絡訓練,這個后面在給進行比較詳細的講解,總的來說Siamese?對于兩張圖片patch1、patch2的特征提取過程是相互獨立的,我們也可以把Siamese?網(wǎng)絡稱之為“2-branches?networks”。那么paper所提出的算法:2-channel?networks?又是什么意思呢?本來patch1、patch2是兩張單通道灰度圖像、它們各不相干,于是作者的想法就是把patch1、patch2合在一起,把這兩張圖片,看成是一張雙通道的圖像。也就是把兩個(1,64,64)單通道的數(shù)據(jù),放在一起,成為了(2,64,64)的雙通道矩陣,然后把這個矩陣數(shù)據(jù)作為網(wǎng)絡的輸入,這就是所謂的:2-channel。
? ? ? OK,這就是文獻的主要創(chuàng)新點,懂得了這個,后面看paper就容易多了,可以說已經(jīng)把paper的總思路領(lǐng)悟了一半了,是不是感覺貌似很簡單的樣子。
二、Siamese網(wǎng)絡相關(guān)理論
本部分是為了了解經(jīng)典的Siamese網(wǎng)絡,如果已經(jīng)知道Siamese網(wǎng)絡的結(jié)構(gòu)的,請?zhí)^這一部分。
1、《Learning a similarity?metric discriminatively, with application to face verification》
Siamese網(wǎng)絡:這個是一個曾經(jīng)用于簽字認證識別的網(wǎng)絡,也就是我們平時說筆跡識別。這個算法可以用于判斷簽名筆跡,n年前的一個算法。算法的原理利用神經(jīng)網(wǎng)絡提取描述算子,得到特征向量,然后利用兩個圖片的特征向量判斷相似度,這個有點像sift,只不過是利用CNN進行提取特征,并且用特征向量進行構(gòu)造損失函數(shù),進行網(wǎng)絡訓練。下面引用2005年CVPR上的一篇文獻《Learning a similarity?metric discriminatively, with application to face verification》,進行簡單講解,這篇paper主要是利用Siamese網(wǎng)絡做人臉相似度判別,可以用于人臉識別哦,因為我覺得這篇文獻的網(wǎng)絡結(jié)構(gòu)圖畫的比較漂亮,比較容易看懂,所以就用這一篇文章,簡單講解Siamese網(wǎng)絡的思想。其網(wǎng)絡如下圖所示,有兩個分支分別輸入圖片x1、x2(須知:這兩個分支其實是相同的,同一個cnn模型,同樣的參數(shù),文獻只是為了方便閱讀,所以才畫成兩個分支,因為他們采用的是權(quán)重共享),包含卷積、池化等相關(guān)運算。雙分支有點難理解,我們還是用單分支來理解吧,說的簡單一點把,siamese 網(wǎng)絡分成前半部分、后半部分。前半部分用于特征提取,我們可以讓兩張圖片,分別輸入我們這個網(wǎng)絡的前半部分,然后分別得到一個輸出特征向量Gw(x1)、Gw(x2),接著我們構(gòu)造兩個特征向量距離度量,作為兩張圖片的相似度計算函數(shù)(如公式1所示)。
Siamese網(wǎng)絡?
如上圖所示,我們要判斷圖片X1和X2是否相似,于是我們構(gòu)建了一個網(wǎng)絡映射函數(shù)Gw(x),然后把x1、x2分別作為參數(shù)自變量,我們可以得到Gw(x1)、Gw(x2),也就是得到用于評價X1、X2是否相似的特征向量。然后我們的目的就是要使得函數(shù):
?
然后利用這個損失函數(shù),對網(wǎng)絡進行訓練,就可以判別兩張人臉的相似度了。上面過程中網(wǎng)絡的兩個分支所用的是同一個函數(shù),也就是權(quán)值、網(wǎng)絡結(jié)構(gòu)是同一個,我們完全可以把Gw(x)看成是一個特征提取器,因此siamese?network網(wǎng)絡其實就是一個提取一直圖片的特征算子的過程,然后再網(wǎng)絡的最后一層,是用于定義了特征向量間相似度的損失函數(shù)。
2、Siamese網(wǎng)絡
OK,我們回到本篇博文的主題,下面是paper所用的Siamese網(wǎng)絡(shared ?weights)。在網(wǎng)絡的最后頂層,由線性全連接和ReLU激活函數(shù),構(gòu)成輸出層。在paper中,采用的最后是包含兩個全連接層,每個隱層包含512個神經(jīng)元。
除了Siamese網(wǎng)絡,文獻還提了另外一種Pseudo-siamese網(wǎng)絡,這個網(wǎng)絡與siamese?network網(wǎng)絡最大的區(qū)別在于兩個分支是權(quán)值不共享的,是真正的雙分支網(wǎng)絡模型。Pseudo-siamese在網(wǎng)絡的兩個分支上,每個分支是不同的映射函數(shù),也就是說它們提取特征的結(jié)構(gòu)是不一樣的,左右兩個分支,有不同的權(quán)值、或者不同的網(wǎng)絡層數(shù)等,兩個函數(shù)互不相關(guān),只是在最后的全連接層,將他們連接在一起了。這個網(wǎng)絡相當于訓練參數(shù)比Siamese網(wǎng)絡的訓練參數(shù)多了將近一倍,當然它比Siamese網(wǎng)絡更加靈活。
其實到了這里,我們提到了原始的Siamese、以及Pseudo-siamese,都只是為了襯托后面作者所提出的算法:2-channel networks,因為最后我們要做算法精度對比,所以作者就啰嗦了這么多。這一部分我覺得啰嗦的太多反而會亂掉,所以還是不細講,以為這個不是重點。下面要講解的2-channel 網(wǎng)絡才是paper的主要創(chuàng)新點,所以才是我們需要好好細讀的部分。因為paper的講解方法,是根據(jù)一步一步改進網(wǎng)絡的,所以我就根據(jù)文獻的思路進行講解,以siamese?network為基礎:paper首先提出了把siamese 改成2-channel ,這個是第一次對算法的進化,提高了精度。接著提出Central-surround?two-stream?network,這個算法只是在網(wǎng)絡的輸入上做了改變,沒有改變網(wǎng)絡的結(jié)構(gòu),可以與2-channel、siamese 結(jié)合在一起,提高精度
三、第一次進化,從siamese 到2-channel (創(chuàng)新點1)
網(wǎng)絡總體結(jié)構(gòu),2-channel:與前面講的Siamese網(wǎng)絡、Pseudo-siamese網(wǎng)絡本質(zhì)上每個分支就相當于一個特征提取的過程,然后最后一層就相當計算特征向量相似度的函數(shù)一樣。于是接著作者提出了2-channel網(wǎng)絡結(jié)構(gòu),跳過了分支的顯式的特征提取過程,而是直接學習相似度評價函數(shù)。雙通道網(wǎng)絡結(jié)構(gòu),就相當于把輸入的兩張灰度圖片看成是一張雙通道的圖片一樣。
?
這樣算法的最后一層直接是全連接層,輸出神經(jīng)元個數(shù)直接為1,直接表示兩張圖片的相似度。直接用雙通道圖片進行訓練會比較快,比較方便,當然CNN,如果輸入的是雙通道圖片,也就是相當于網(wǎng)絡的輸入的是2個feature?map,經(jīng)過第一層的卷積后網(wǎng),兩張圖片的像素就進行了相關(guān)的加權(quán)組合并映射,這也就是說,用2-channel的方法,經(jīng)過了第一次的卷積后,兩張輸入圖片就不分你我了。而Siamese網(wǎng)絡是到了最后全連接的時候,兩張圖片的相關(guān)神經(jīng)元才聯(lián)系在一起,這就是2-channel 與Siamese給我感覺最大的區(qū)別。這個作者后面通過試驗,驗證了從第一層開始,就把兩張圖片關(guān)聯(lián)在一起的好處,作者的原話:This?is?something?that?indicates?that?it?is?important?to?jointly?use?information?from?both?
patches?right?from?the?first?layer?of?the?network.
這邊順便提一下文獻的一個網(wǎng)絡架構(gòu)細節(jié),卷積核大小:Paper所有的卷積核大小都是采用3*3的,因為在《Very?Deep?Convolutional?Networks?for?Large-Scale?Image?Recognition》文獻中提到,對于小的卷積核來說,比大尺寸的卷積核有更多的非線性,效果更牛逼,總之就是以后遇到CNN,建議用卷積核比較小的,好處多多。
四、第二次進化,結(jié)合Central-surround?two-stream?network(創(chuàng)新點2)
這個創(chuàng)新點,需要對上面的網(wǎng)絡結(jié)構(gòu)稍作修改。假設我們輸入的是大小為64*64的一張圖片,那么Central-surround?two-stream?network的意思就是把圖片64*64的圖片,處理成兩張32*32圖片,然后再輸入網(wǎng)絡,那么這兩張32*32的圖片是怎么計算得到的?這就是Central-surround方法,也就是第一張圖片是通過以圖片中心,進行裁剪出32*32的圖片,也就是下圖的淺藍色區(qū)域的圖片。
?
那么第二張圖片是怎么計算的:這張圖片是直接通過對整張圖片下采樣的方法得到的,也就是說直接把64*64的圖片進行下采樣得到32*32的圖片。那么作者為什么要把一張64*64的圖片,拆分成兩張32*32的圖片。其實這個就像多尺度一樣,在圖片處理領(lǐng)域經(jīng)常采用多分辨率、多尺度,比如什么sift、還有什么高斯金字塔什么的,總之作者說了,多分辨率可以提高兩張圖片的match效果。這個Central-surround?two-stream?network可以和上面提到的2-channel、Siamese結(jié)合在一起,提高精度。下面就是Siamese和Central-surround?two-stream?network結(jié)合在一起的網(wǎng)絡結(jié)構(gòu):
?
上面是Siamese網(wǎng)絡模型,利用Central-surround?two-stream?network構(gòu)建新的網(wǎng)絡模型,就是在網(wǎng)絡輸入部分,把輸入圖片改成多尺度輸入。
五、第三次進化,結(jié)合空間金字塔池化SPP
? ? ?空間金字塔池化采樣:這個又稱之為SPP(Spatial?pyramid?pooling)池化,這個又什么用呢?這個跟上面的有點類似,這個其實就類似于多圖片多尺度處理,因為知道,現(xiàn)有的卷積神經(jīng)網(wǎng)絡中,輸入層的圖片的大小一般都是固定的,這也是我之前所理解的一個神經(jīng)網(wǎng)絡。直到知道SPP,感覺視覺又開闊了許多,菜鳥又長見識了。我們知道現(xiàn)在的很多算法中,講到的訓練數(shù)據(jù)圖片的大小,都是什么32*32,96*96,227*227等大小,也就是說訓練數(shù)據(jù)必須歸一化到同樣的大小,那么假設我的訓練數(shù)據(jù)是各種各樣的圖片大小呢?我是否一定要把它裁剪成全部一樣大小的圖片才可以進入卷積神經(jīng)網(wǎng)絡訓練呢?這就是SPP算法所要解決的問題,訓練數(shù)據(jù)圖片不需要歸一化,而且江湖傳說,效果比傳統(tǒng)的方法的效果還好。下面是Siamese和SPP結(jié)合在一起的網(wǎng)絡結(jié)構(gòu):
? ? ??
就是在全連接層的前面加了個SPP層。
? ? ?關(guān)于SPP池化方法,大牛何凱明發(fā)表了好幾篇文章《Spatial?Pyramid?Pooling?in?Deep?Convolutional?Networks?for?Visual?Recognition》、《Spatial?Pyramid?Pooling?in?Deep?Convolutional?Networks?for?Visual?Recognition》,SSP的相關(guān)實現(xiàn)以后再進行講解,一篇博文一口氣如果講的太多,看著也會覺得累。
總之這一步是為了使得網(wǎng)絡可以輸入各種大小的圖片,提高網(wǎng)絡的實用性,魯棒性等。
OK,經(jīng)過上面的三次進化,網(wǎng)絡最后的結(jié)構(gòu),也就是精度最高,paper最后的算法就是:2-channel+Central-surround?two-stream+SPP 的網(wǎng)絡結(jié)構(gòu),因為文獻沒有把這個網(wǎng)絡的結(jié)構(gòu)圖畫出來,我也懶得畫,所以不能給大家提供最后的網(wǎng)絡結(jié)構(gòu)圖。
六、網(wǎng)絡訓練
首先paper采用了如下?lián)p失函數(shù):
?
公式第一部分就是正則項,采用L2正則項。第二部分誤差損失部分是網(wǎng)絡第i對訓練圖片的輸出神經(jīng)元,然后yi的取值是-1或1,當輸入圖片是matching的時候,為1,當non-matching的時候是-1。
參數(shù)訓練更新方法采用ASGD,其學習率恒為1.0,動量參數(shù)選擇0.9,然后權(quán)重衰減大小選擇:
?
訓練的min-batch大小選擇128。權(quán)重采用隨機初始化方法。
OK,上面是一些網(wǎng)絡參數(shù)設置。接著就是數(shù)據(jù)處理部分了,一般就是數(shù)據(jù)擴充,也就是給圖片加上旋轉(zhuǎn)、鏡像、等操作。Paper采用的數(shù)據(jù)擴充,包含水平翻轉(zhuǎn)、垂直翻轉(zhuǎn)、還有就是旋轉(zhuǎn),包含90、180、270角度的旋轉(zhuǎn)。訓練迭代終止的方法不是采用什么early stop,而是啟動讓電腦跑個幾天的時間,等到閑的時候,回來看結(jié)果,做對比(ps:這個有點low)。如果你是剛?cè)腴TCNN的,還沒聽過數(shù)據(jù)擴充,可以看看:http://blog.csdn.net/tanhongguang1/article/details/46279991。Paper也是采用了訓練過程中,隨機數(shù)據(jù)的擴充的方法。
參考文獻:
1、《Learning to Compare Image Patches via Convolutional Neural Networks》
2、《Discriminative Learning of Local Image Descriptors》
3、《signature verification using a siamese time delay neural network_bromley》
4、《Learning visual similarity for product design with convolutional neural networks》
5、《Learning a similarity?metric discriminatively, with application to face verification》
**********************作者:hjimce ? 時間:2015.10.25 ?聯(lián)系QQ:1393852684 ? 地址:http://blog.csdn.net/hjimce? ?原創(chuàng)文章,版權(quán)所有,轉(zhuǎn)載請保留本行信息(不允許刪除)********************
《新程序員》:云原生和全面數(shù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的深度学习(十六)基于2-channel network的图片相似度判别-CVPR 2015的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深度学习(十四)基于CNN的性别、年龄识
- 下一篇: 深度学习(十八)基于R-CNN的物体检测