日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > pytorch >内容正文

pytorch

深度学习(十六)基于2-channel network的图片相似度判别-CVPR 2015

發布時間:2025/3/21 pytorch 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 深度学习(十六)基于2-channel network的图片相似度判别-CVPR 2015 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

基于2-channel ?network的圖片相似度判別

原文地址:http://blog.csdn.net/hjimce/article/details/50098483

作者:hjimce

一、相關理論

? ? ?本篇博文主要講解2015年CVPR的一篇關于圖像相似度計算的文章:《Learning to Compare Image Patches via Convolutional Neural Networks》,本篇文章對經典的算法Siamese?Networks 做了改進。學習這篇paper的算法,需要熟悉Siamese?Networks(經典老文獻《Signature Verification Using a Siamese Time Delay Neural Network》)、以及大神何凱明提出來的空間金字塔池化(2015年CVPR 文獻《Spatial Pyramid Pooling in Deep ConvolutionalNetworks for Visual Recognition》),因為文獻基本上是在?Siamese?Networks的基礎上做修改,然后也要借助于空間金字塔池化實現不同大小圖片的輸入網絡。


網絡總結構

? ? ? ?如上圖所示,我們的目的是比較兩幅圖片是否相似,或者說相似度是多少,因此我們構建的卷積神經網絡模型的輸入就是:兩幅圖片,然后網絡的輸出是一個相似度數值。其實我覺得,用“計算相似度”這個詞有點不合適,我覺得應該翻譯為匹配程度。因為文獻所采用的訓練數據中,如果兩張圖片匹配,輸出值標注為y=1,如果兩張圖片不匹配,那么訓練數據標注為y=-1,也就是說,這個訓練數據的標注方法,根本就不是一個相似度數值,而是一個是否匹配的數值。我們打個比方,有三樣物體:鋼筆、鉛筆、書包,那么在訓練數據中,就把鋼筆和鉛筆標注為y=1,而不是用一個相似度數值來衡量,比我鋼筆和鉛筆的相似度我們把它標注為y=0.9……,所以說用于用相似度這個詞有點不合理,即使我們最后計算出來的值是一個-1~1之間的數……

paper主要創新點:在創新點方面,我覺得主要是把Siamese 網絡的雙分支,合在一起,從而提高了精度,如下圖所示

Siamese 網絡


paper算法2-channel 網絡

先在這里解釋下為什么作者要把它稱之為:2-channel?networks。理解了2-channel這個詞,有助于我們后面理解算法。從上面Siamese?網絡,我們可以看到這個網絡有兩個分支組成,因為我們是要比較兩張圖片patch1、patch2的相似度,所以Siamese?網絡的大體思路,就是讓patch1、patch2分別經過網絡,進行提取特征向量,然后在最后一層對兩個兩個特征向量做一個相似度損失函數,進行網絡訓練,這個后面在給進行比較詳細的講解,總的來說Siamese?對于兩張圖片patch1、patch2的特征提取過程是相互獨立的,我們也可以把Siamese?網絡稱之為“2-branches?networks”。那么paper所提出的算法:2-channel?networks?又是什么意思呢?本來patch1、patch2是兩張單通道灰度圖像、它們各不相干,于是作者的想法就是把patch1、patch2合在一起,把這兩張圖片,看成是一張雙通道的圖像。也就是把兩個(1,64,64)單通道的數據,放在一起,成為了(2,64,64)的雙通道矩陣,然后把這個矩陣數據作為網絡的輸入,這就是所謂的:2-channel。

? ? ? OK,這就是文獻的主要創新點,懂得了這個,后面看paper就容易多了,可以說已經把paper的總思路領悟了一半了,是不是感覺貌似很簡單的樣子。

二、Siamese網絡相關理論

本部分是為了了解經典的Siamese網絡,如果已經知道Siamese網絡的結構的,請跳過這一部分。

1、《Learning a similarity?metric discriminatively, with application to face verification》

Siamese網絡:這個是一個曾經用于簽字認證識別的網絡,也就是我們平時說筆跡識別。這個算法可以用于判斷簽名筆跡,n年前的一個算法。算法的原理利用神經網絡提取描述算子,得到特征向量,然后利用兩個圖片的特征向量判斷相似度,這個有點像sift,只不過是利用CNN進行提取特征,并且用特征向量進行構造損失函數,進行網絡訓練。下面引用2005年CVPR上的一篇文獻《Learning a similarity?metric discriminatively, with application to face verification》,進行簡單講解,這篇paper主要是利用Siamese網絡做人臉相似度判別,可以用于人臉識別哦,因為我覺得這篇文獻的網絡結構圖畫的比較漂亮,比較容易看懂,所以就用這一篇文章,簡單講解Siamese網絡的思想。其網絡如下圖所示,有兩個分支分別輸入圖片x1、x2(須知:這兩個分支其實是相同的,同一個cnn模型,同樣的參數,文獻只是為了方便閱讀,所以才畫成兩個分支,因為他們采用的是權重共享),包含卷積、池化等相關運算。雙分支有點難理解,我們還是用單分支來理解吧,說的簡單一點把,siamese 網絡分成前半部分、后半部分。前半部分用于特征提取,我們可以讓兩張圖片,分別輸入我們這個網絡的前半部分,然后分別得到一個輸出特征向量Gw(x1)、Gw(x2),接著我們構造兩個特征向量距離度量,作為兩張圖片的相似度計算函數(如公式1所示)。


Siamese網絡?

如上圖所示,我們要判斷圖片X1和X2是否相似,于是我們構建了一個網絡映射函數Gw(x),然后把x1、x2分別作為參數自變量,我們可以得到Gw(x1)、Gw(x2),也就是得到用于評價X1、X2是否相似的特征向量。然后我們的目的就是要使得函數:

?

然后利用這個損失函數,對網絡進行訓練,就可以判別兩張人臉的相似度了。上面過程中網絡的兩個分支所用的是同一個函數,也就是權值、網絡結構是同一個,我們完全可以把Gw(x)看成是一個特征提取器,因此siamese?network網絡其實就是一個提取一直圖片的特征算子的過程,然后再網絡的最后一層,是用于定義了特征向量間相似度的損失函數。

2、Siamese網絡

OK,我們回到本篇博文的主題,下面是paper所用的Siamese網絡(shared ?weights)。在網絡的最后頂層,由線性全連接和ReLU激活函數,構成輸出層。在paper中,采用的最后是包含兩個全連接層,每個隱層包含512個神經元。



除了Siamese網絡,文獻還提了另外一種Pseudo-siamese網絡,這個網絡與siamese?network網絡最大的區別在于兩個分支是權值不共享的,是真正的雙分支網絡模型。Pseudo-siamese在網絡的兩個分支上,每個分支是不同的映射函數,也就是說它們提取特征的結構是不一樣的,左右兩個分支,有不同的權值、或者不同的網絡層數等,兩個函數互不相關,只是在最后的全連接層,將他們連接在一起了。這個網絡相當于訓練參數比Siamese網絡的訓練參數多了將近一倍,當然它比Siamese網絡更加靈活。

其實到了這里,我們提到了原始的Siamese、以及Pseudo-siamese,都只是為了襯托后面作者所提出的算法:2-channel networks,因為最后我們要做算法精度對比,所以作者就啰嗦了這么多。這一部分我覺得啰嗦的太多反而會亂掉,所以還是不細講,以為這個不是重點。下面要講解的2-channel 網絡才是paper的主要創新點,所以才是我們需要好好細讀的部分。因為paper的講解方法,是根據一步一步改進網絡的,所以我就根據文獻的思路進行講解,以siamese?network為基礎:paper首先提出了把siamese 改成2-channel ,這個是第一次對算法的進化,提高了精度。接著提出Central-surround?two-stream?network,這個算法只是在網絡的輸入上做了改變,沒有改變網絡的結構,可以與2-channel、siamese 結合在一起,提高精度

三、第一次進化,從siamese 到2-channel (創新點1)

網絡總體結構,2-channel:與前面講的Siamese網絡、Pseudo-siamese網絡本質上每個分支就相當于一個特征提取的過程,然后最后一層就相當計算特征向量相似度的函數一樣。于是接著作者提出了2-channel網絡結構,跳過了分支的顯式的特征提取過程,而是直接學習相似度評價函數。雙通道網絡結構,就相當于把輸入的兩張灰度圖片看成是一張雙通道的圖片一樣。

?

這樣算法的最后一層直接是全連接層,輸出神經元個數直接為1,直接表示兩張圖片的相似度。直接用雙通道圖片進行訓練會比較快,比較方便,當然CNN,如果輸入的是雙通道圖片,也就是相當于網絡的輸入的是2個feature?map,經過第一層的卷積后網,兩張圖片的像素就進行了相關的加權組合并映射,這也就是說,用2-channel的方法,經過了第一次的卷積后,兩張輸入圖片就不分你我了。而Siamese網絡是到了最后全連接的時候,兩張圖片的相關神經元才聯系在一起,這就是2-channel 與Siamese給我感覺最大的區別。這個作者后面通過試驗,驗證了從第一層開始,就把兩張圖片關聯在一起的好處,作者的原話:This?is?something?that?indicates?that?it?is?important?to?jointly?use?information?from?both?

patches?right?from?the?first?layer?of?the?network.

這邊順便提一下文獻的一個網絡架構細節,卷積核大小:Paper所有的卷積核大小都是采用3*3的,因為在《Very?Deep?Convolutional?Networks?for?Large-Scale?Image?Recognition》文獻中提到,對于小的卷積核來說,比大尺寸的卷積核有更多的非線性,效果更牛逼,總之就是以后遇到CNN,建議用卷積核比較小的,好處多多。

四、第二次進化,結合Central-surround?two-stream?network(創新點2)

這個創新點,需要對上面的網絡結構稍作修改。假設我們輸入的是大小為64*64的一張圖片,那么Central-surround?two-stream?network的意思就是把圖片64*64的圖片,處理成兩張32*32圖片,然后再輸入網絡,那么這兩張32*32的圖片是怎么計算得到的?這就是Central-surround方法,也就是第一張圖片是通過以圖片中心,進行裁剪出32*32的圖片,也就是下圖的淺藍色區域的圖片。

?

那么第二張圖片是怎么計算的:這張圖片是直接通過對整張圖片下采樣的方法得到的,也就是說直接把64*64的圖片進行下采樣得到32*32的圖片。那么作者為什么要把一張64*64的圖片,拆分成兩張32*32的圖片。其實這個就像多尺度一樣,在圖片處理領域經常采用多分辨率、多尺度,比如什么sift、還有什么高斯金字塔什么的,總之作者說了,多分辨率可以提高兩張圖片的match效果。這個Central-surround?two-stream?network可以和上面提到的2-channel、Siamese結合在一起,提高精度。下面就是Siamese和Central-surround?two-stream?network結合在一起的網絡結構:

?

上面是Siamese網絡模型,利用Central-surround?two-stream?network構建新的網絡模型,就是在網絡輸入部分,把輸入圖片改成多尺度輸入。

五、第三次進化,結合空間金字塔池化SPP

? ? ?空間金字塔池化采樣:這個又稱之為SPP(Spatial?pyramid?pooling)池化,這個又什么用呢?這個跟上面的有點類似,這個其實就類似于多圖片多尺度處理,因為知道,現有的卷積神經網絡中,輸入層的圖片的大小一般都是固定的,這也是我之前所理解的一個神經網絡。直到知道SPP,感覺視覺又開闊了許多,菜鳥又長見識了。我們知道現在的很多算法中,講到的訓練數據圖片的大小,都是什么32*32,96*96,227*227等大小,也就是說訓練數據必須歸一化到同樣的大小,那么假設我的訓練數據是各種各樣的圖片大小呢?我是否一定要把它裁剪成全部一樣大小的圖片才可以進入卷積神經網絡訓練呢?這就是SPP算法所要解決的問題,訓練數據圖片不需要歸一化,而且江湖傳說,效果比傳統的方法的效果還好。下面是Siamese和SPP結合在一起的網絡結構:

? ? ??

就是在全連接層的前面加了個SPP層。

? ? ?關于SPP池化方法,大牛何凱明發表了好幾篇文章《Spatial?Pyramid?Pooling?in?Deep?Convolutional?Networks?for?Visual?Recognition》、《Spatial?Pyramid?Pooling?in?Deep?Convolutional?Networks?for?Visual?Recognition》,SSP的相關實現以后再進行講解,一篇博文一口氣如果講的太多,看著也會覺得累。

總之這一步是為了使得網絡可以輸入各種大小的圖片,提高網絡的實用性,魯棒性等。

OK,經過上面的三次進化,網絡最后的結構,也就是精度最高,paper最后的算法就是:2-channel+Central-surround?two-stream+SPP 的網絡結構,因為文獻沒有把這個網絡的結構圖畫出來,我也懶得畫,所以不能給大家提供最后的網絡結構圖。

六、網絡訓練

首先paper采用了如下損失函數:

?

公式第一部分就是正則項,采用L2正則項。第二部分誤差損失部分是網絡第i對訓練圖片的輸出神經元,然后yi的取值是-1或1,當輸入圖片是matching的時候,為1,當non-matching的時候是-1。

參數訓練更新方法采用ASGD,其學習率恒為1.0,動量參數選擇0.9,然后權重衰減大小選擇:

?

訓練的min-batch大小選擇128。權重采用隨機初始化方法。

OK,上面是一些網絡參數設置。接著就是數據處理部分了,一般就是數據擴充,也就是給圖片加上旋轉、鏡像、等操作。Paper采用的數據擴充,包含水平翻轉、垂直翻轉、還有就是旋轉,包含90、180、270角度的旋轉。訓練迭代終止的方法不是采用什么early stop,而是啟動讓電腦跑個幾天的時間,等到閑的時候,回來看結果,做對比(ps:這個有點low)。如果你是剛入門CNN的,還沒聽過數據擴充,可以看看:http://blog.csdn.net/tanhongguang1/article/details/46279991。Paper也是采用了訓練過程中,隨機數據的擴充的方法。

參考文獻:

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 ?聯系QQ:1393852684 ? 地址:http://blog.csdn.net/hjimce? ?原創文章,版權所有,轉載請保留本行信息(不允許刪除)********************

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的深度学习(十六)基于2-channel network的图片相似度判别-CVPR 2015的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。