傳統方法在圖像檢索技術上一直表現平平。比如傳統方法常用的SIFT特徵,它對一定程度內的縮放、平移、旋轉、視角改變、亮度調整等畸變,都具有不變性,是當時最重要的圖像特徵提取方法之一。然而SIFT這類演算法提取的特徵還是有侷限性的,在ImageNet?ILSVRC比賽的最好結果的錯誤率也有26%以上,而且常年難以產生突破。而圖像檢索的發展目標是希望模型又快又準,因此興起了基於CNN的方法,從原來AlexNet、VGGnet,到體積小一點的Inception、Resnet系列,再到DenseNet系列無不體現出了這一趨勢。和傳統方法一樣,CNN方法也是對圖片提取特徵,比如CNN網路中的一個feature map就可以看做是一個類似SIFT的向量。

計算機視覺比賽ILSVRC(ImageNet Large Scale Visual Recognition Competition)使用的數據都來自ImageNet,該項目於2007年由斯坦福大學華人教授李飛飛創辦。ImageNet擁有1500萬張標註過的高清圖片,總共擁有22000類,其中約有100萬張標註了圖片中主要物體的定位邊框。每年度的ILSVRC比賽數據集中大概擁有120萬張圖片,以及1000類的標註,是ImageNet全部數據的一個子集。比賽一般採用top-5和top-1分類錯誤率作為模型性能的評測指標。

和SIFT等演算法類似,CNN訓練的模型同樣對縮放、平移、旋轉等畸變具有不變性,有著很強的泛化性。CNN的最大特點在於卷積的權值共享結構,可以大幅減少神經網路的參數量,防止過擬合的同時又降低了神經網路模型的複雜度。

一、AlexNet

論文:ImageNet Classification with Deep Convolutional Neural Networks1[1]

AlexNet是2012年ImageNet競賽冠軍獲得者Hinton和他的學生Alex Krizhevsky設計的。也是在那年之後,更多的更深的神經網路被提出,比如優秀的vgg,GoogleLeNet。其官方提供的數據模型,準確率達到57.1%,這項對於傳統的機器學習分類演算法而言,已經相當的出色。

早些的時候,為了打破網路對稱性和提高學習能力,傳統的網路都使用了隨機稀疏連接。但是,計算機軟硬體對非均勻稀疏數據的計算效率很差,所以在AlexNet中又重新啟用了全連接層,目的是為了更好地優化並行運算。

AlexNet包含了6億3000萬個連接,6000萬個參數和65萬個神經元,擁有5個卷積層,其中3個卷積層後面連接了最大池化層,最後還有3個全連接層,圖中可以看到,AlexNet還用了11×11和5×5的大卷積核,具體的網路參數可以參考這裡:blog.csdn.net/guoyunfei,網路結構如下圖所示:

圖1 AlexNet網路結構

二、VGG(Visual Geometry Group)

論文:Very deep convolutional networks for large-scale image recognition[2]

圖片的預處理就是每一個像素減去了均值,算是比較簡單的處理。然後縮放圖像最小邊到256或者384,然後裁剪得到輸入數據是224*224進行訓練。網路有5個最大池化層,整體使用的卷積核都比較小(3x3),3x3是可以表示「左右」、「上下」、「中心」這些模式的最小單元了,VGG16的網路縮略圖如下所示:

圖2 VGG16網路結構圖

VGG是最早利用2個3×3卷積核的組合代替1個5×5卷積核的網路,使用多個較小卷積核代替一個較大的卷積核,一方面可以減少參數,另一方面作者認為相當於是進行了更多的非線性映射,可以增加網路的擬合/表達能力。還有比較特殊的1x1的卷積核(Inception-v1也有這個東西),可看做是空間的線性映射。前面幾層是卷積層的堆疊,後面幾層是全連接層,最後是softmax層。所有隱層的激活單元都是ReLU,論文中介紹好幾個網路結構,只有其中一個應用了局部響應歸一化層(Local Response Normalisation)。

圖3 A-E的VGG網路結構對比

上圖列出了6種VGG網路結構圖,其中VGG16和VGG19較為常見,也是性能最好的兩個網路結構,下面是對A-E的網路性能進行分析:

A與A-LRN比較:A-LRN結果沒有A好,說明LRN作用不大;

A與B, C, D, E比較,A是這當中layer最少的,相比之下A效果不如B,C,D,E,說明Layer越深越好;B與C比較:增加1x1filter,增加了額外的非線性提升效果;

C與D比較:3x3 的filter(結構D)比1x1(結構C)的效果好。

總結了下VGG網路的結構,可以發現以下趨勢:

①可以看到VGG網路中共有5個池化層,所以可以把卷積部分視為5個部分,和AlexNet一樣,只不過每一個部分他用了不止一層卷積層;

②所有卷積層都是同樣大小的filter!尺寸3x3,卷積步長Stirde = 1,填充Padding = 1; ③卷積層變多了。結構E有16層卷積層,加上全連接層共19層。這也是對深度學習繼續往深處走的一個推動。因為深度神經網路的參數特別多(可以達到上億,目前已經可以支持到萬億參數)。參數多,表示模型的搜索空間就越大,必須有足夠的數據才能更好地刻畫出模型在空間上的分佈。

圖4 VGG網路性能比較

三、Incepetion V1

論文:Going deeper with convolutions[3]

ILSVRC 2014 取得了最好的成績的 GoogLeNet,及其核心結構是Inception,傳統的網路中,計算機軟硬體對非均勻稀疏數據的計算效率很差,故AlexNet又重新啟用了全連接層,目的是為了更好地優化並行運算。所以,現在考慮有沒有一種既能保持網路結構的稀疏性,又能利用密集矩陣的高計算性能的方法。大量的文獻表明可以將稀疏矩陣聚類為較為密集的子矩陣來提高計算性能,據此論文提出了名為Inception 的結構來實現此目的。

Incepetion V1總共有22層layers,只有500萬的參數量,僅為AlexNet參數量(6000萬)的1/12,卻可以達到遠勝於AlexNet的準確率,可以說是非常優秀並且非常實用的模型。

Incepetion V1有一個重要的特點:每層使用多個卷積核。傳統的層疊式網路,基本上都是一個個卷積層的堆疊,每層只用一個尺寸的卷積核,例如VGG結構中使用了大量的3×3卷積層。事實上,同一層feature map可以分別使用多個不同尺寸的卷積核,以獲得不同尺度的特徵,再把這些特徵結合起來,得到的特徵往往比使用單一卷積核的要好,谷歌的GoogleNet,或者說Inception系列的網路,就使用了多個卷積核的結構:

圖5 Incepetion V1的多尺度卷積層

如果僅僅引入多個尺寸的卷積核,會帶來大量的額外的參數,受到Network In Network中1×1卷積核的啟發,為瞭解決這個問題,他們往Inception結構中加入了一些1×1的卷積核,如圖所示:

圖6 Incepetion V1引入1×1卷積核

1×1的卷積核能降低計算量,如下圖所示,左圖表示引入1×1的卷積核之前的網路,其參數量為256×3×3×256=589824,右圖表示引入1×1的卷積核之後的網路,其參數量為256×1×1×64+64×3×3×256+64×1×1×256=69632,參數量幾乎減少了一個數量級。1×1卷積核也被認為是影響深遠的操作,往後大型的網路為了降低參數量都會應用上1×1卷積核,引入1×1的卷積核能達到降維和升維的目的。

圖7 引入1×1卷積核前後對比

四、Incepetion V2

論文:Batch Normalization:Accelerating Deep Network Training by Reducing Internal Covariate Shift

下面的準則來源於大量的實驗,因此包含一定的推測,但實際證明基本都是有效的:

1 . 避免表達瓶頸,特別是在網路靠前的地方。 信息流前向傳播過程中顯然不能經過高度壓縮的層,即表達瓶頸。從input到output,feature map基本都會逐漸變小,但是一下子就變得很小顯然不合適。 另外輸出的維度channel,一般來說會逐漸增多,否則網路會很難訓練。(特徵維度並不代表信息的多少,只是作為一種估計的手段)

Inception V2 學習了 VGG 用兩個3×3的卷積代替一個5×5的大卷積,在降低參數的同時建立了更多的非線性變換,使得 CNN 對特徵的學習能力更強:

圖8 替換5×5的卷積核

另外Inception V2還提出了著名的 Batch Normalization(簡稱BN)方法。BN 是一個非常有效的正則化方法,可以讓大型卷積網路的訓練速度加快很多倍,同時收斂後的分類準確率也可以得到大幅提高。BN 在用於神經網路某層時,會對每一個 mini-batch 數據的內部進行標準化處理,使輸出規範化到 N(0,1) 的正態分佈,減少了內部神經元分佈改變的影響。

其相對於傳統神經網路的差別是:傳統神經網路只是在將樣本輸入層之前對樣本進行標準化處理(減均值,除標準差),以降低樣本間的差異性。BN是在此基礎上,不僅僅只對輸入進行標準化,還對每個隱藏層的輸入進行標準化。

BN 的論文指出,傳統的深度神經網路在訓練時,每一層的輸入的分佈都在變化,導致訓練變得困難,我們只能使用一個很小的學習速率解決這個問題。而對每一層使用 BN 之後,我們就可以有效地解決這個問題,學習速率可以增大很多倍,達到之前的準確率所需要的迭代次數只有之前的1/14,訓練時間大大縮短。而達到之前的準確率後,可以繼續訓練,並最終取得遠超於 Inception V1 模型的性能: top-5 錯誤率 4.8%,遠低於Inception V1的6.7%,已經優於人眼水平。因為 BN 某種意義上還起到了正則化的作用,所以可以減少或者取消 DropoutLRN,簡化網路結構。

五、Incepetion V3

論文:Rethinking the Inception Architecture for Computer Vision[5]

一是引入了 Factorization into small convolutions 的思想,將一個較大的二維卷積拆成兩個較小的一維卷積,比如將7x7卷積拆成1x7卷積和7x1卷積,或者將3x3卷積拆成1x3卷積和3x1卷積,另外也使用了將5x5 用兩個 3x3 卷積替換,7x7 用三個 3x3 卷積替換,如下圖所示。一方面節約了大量參數,加速運算並減輕了過擬合,同時增加了一層非線性擴展模型表達能力。論文中指出,這種非對稱的卷積結構拆分,其結果比對稱地拆為幾個相同的小卷積核效果更明顯,可以處理更多、更豐富的空間特徵,增加特徵多樣性。

另一方面,Inception V3 優化了 Inception Module 的結構,網路輸入從224x224變為了299x299,現在 Inception Module 有35×35、17×17和8×8三種不同結構。這些 Inception Module 只在網路的後部出現,前部還是普通的卷積層。並且 Inception V3 除了在 Inception Module 中使用分支,還在分支中使用了分支(8×8的結構中),可以說是Network In Network In Network。最終取得 top-5 錯誤率 3.5%的效果

圖9 使用一維卷積核代替二維卷積核

圖10 使用1×3代替3×3卷積核

六、Incepetion V4

論文:Inception v4-Inception-ResNet and the Impact of Residual Connections on Learning[6]

Inception V4相比V3主要是結合了微軟的 ResNet,將錯誤率進一步減少到 3.08%。V4研究了Inception模塊結合Residual Connection能不能有改進,發現ResNet的結構可以極大地加速訓練,同時性能也有提升,得到一個Inception-ResNet v2網路,同時還設計了一個更深更優化的Inception V4模型,能達到與Inception-ResNet v2相媲美的性能,inception V4總體的網路結構為:

圖11 Inception v4總體結構和Stem部分

其他部分的結構如下:

圖12 Inception A

圖13 Inception B

圖14 Inception C

圖15 Reduction A

圖16 Reduction B

同時作者在該篇論文中還提出了Inception-ResNet-v1和Inception-ResNet-v2。Inception-V4是純粹的Inception變體,沒有剩餘連接,具有與Inception-ResNet-v2大致相同的識別性能。幾種網路在Single crop - single下的識別結果為:

圖17 Inception-V4性能對比

七、ResNet

論文:Deep residual learning for image recognition[7]

如果說 googlLeNet、AlexNet、VGG 奠定了經典神經網路的基礎,Inception 和ResNet 則展示了神經網路的新範式,在這兩個範式的基礎上,發展創新並相互借鑒,有了 Inception 流派的 Inception v2 到 v4、Inception-ResNet v1 和 v2,以及 ResNet 流派的DenseNet等。

ResNet的輸入是在圖片上隨機裁剪224×224的像素塊,網路中沒有採用dropout。

圖18 Residual網路模型

隨著網路的加深,出現了訓練集準確率下降的現象,我們可以確定這不是由於Overfit過擬合造成的(過擬合的情況訓練集應該準確率很高);所以作者針對這個問題提出了一種全新的網路,叫深度殘差網路,它允許網路儘可能地加深,其中引入了全新的結構如上圖所示。

其中ResNet提出了兩種mapping:一種是identity mapping(恆等映射),指的就是上圖中彎彎的曲線,另一種residual mapping,指的就是除了曲線外的那部分,所以最後的輸出是 y=F(x)+x,identity mapping顧名思義,就是指本身,也就是公式中的x,而residual mapping指的是「差」,也就是y?x,所以殘差指的就是F(x)部分。 如果網路已經到達最優,繼續加深網路,residual mapping將被push為0,只剩下identity mapping,這樣理論上網路一直處於最優狀態了,網路的性能也就不會隨著深度增加而降低了,但實際上,identify mapping一般不是最優的。

這其中要注意一個問題,就是在y=F(x)+x的時候要保證F(x)和x的維度相同,若他們的維度不同,就需要對x乘一個對應的權重,即:y=F(x)+Ws*x,以此來保證F(x)和x具有相同的維度。用來學習殘差的網路層數應當大於1,否則退化為線性。文章實驗了layers = 2或3,更多的層也是可行的。

ResNet在運算效率的準確率方面都有所提升,比如ResNet34的運算量只有VGG19的18%,VGG19需要進行196億次浮點運算,而ResNet34隻需要進行36億次浮點運算,效率大大提升,下圖從左到右依次為VGG19、plain-networks34和ResNet34的結構圖:

圖19 VGG19、plain-networks34和ResNet34結構圖

對於plain-networks,隨著網路層數的加深,錯誤率反而會上升,因為增加深度會帶來網路退化問題,使訓練集上的準確率飽和甚至下降,並且深層網路容易產生梯度消失或爆炸,而加了identity的網路就不會存在這樣的問題,因為殘差網路更容易優化,能夠通過單純地增加網路深度,來提高網路性能。

為什麼網路的加深很重要呢?因為CNN能夠提取low/mid/high-level的特徵,網路的層數越多,意味著能夠提取到不同level的特徵越豐富。並且,越深的網路提取的特徵越抽象,越具有語義信息。

八、DenseNet

論文:Densely Connected Convolutional Networks[8]

DenseNet的思想啟發來源:

DenseNet 的想法很大程度上源於作者2016年發表在 ECCV 上的一個叫做隨機深度網路(Deep networks with stochastic depth)工作。當時作者提出了一種類似於 Dropout 的方法來改進ResNet。發現在訓練過程中的每一步都隨機地扔掉(drop)一些層,可以顯著的提高 ResNet 的泛化性能。這個方法的成功帶來以下兩點啟發:

1)首先,它說明瞭神經網路其實並不一定要是一個遞進層級結構,也就是說網路中的某一層可以不僅僅依賴於緊鄰的上一層的特徵,還可以依賴於更前面層學習的特徵。想像一下在隨機深度網路中,當第 l 層被扔掉之後,第 L+1 層就被直接連到了第 L-1 層;當第 2 到了第 L 層都被扔掉之後,第 L+1 層就直接用到了第 1 層的特徵。因此,隨機深度網路其實可以看成一個具有隨機密集連接的 DenseNet。

2)其次,在訓練的過程中隨機扔掉很多層也不會破壞演算法的收斂,說明瞭 ResNet 具有比較明顯的冗餘性,網路中的每一層都只提取了很少的特徵(即所謂的殘差)。實際上,將訓練好的 ResNet 隨機的去掉幾層,對網路的預測結果也不會產生太大的影響。既然每一層學習的特徵這麼少,能不能降低它的計算量來減小冗餘呢?

DenseNet 的設計正是基於以上兩點觀察。讓網路中的每一層都直接與其前面層相連,實現特徵的重複利用;同時把網路的每一層設計得特別窄,即只學習非常少的特徵圖(最極端情況就是每一層只學習一個特徵圖),達到降低冗餘性的目的。這兩點也是 DenseNet 與其他網路最主要的不同。需要強調的是,第一點是第二點的前提,沒有密集連接,就不可能把網路設計得太窄,否則訓練會出現欠擬合現象,即使 ResNet 也是如此。

圖20 Dense Block模擬圖

上圖是一個詳細的Dense Block的模擬,其中層數為5,即具有5個BN+Relu+Conv(3*3)這樣的layer,網路增長率k為4,簡單的說就是每一個layer輸出的feature map的維度為k。即:第L層網路的輸入為k × (L- 1) + k0 ,這裡的k0為原始輸入的通道數,然後把k × (L- 1) + k0降維為k,再把這個k加上前面所有的連接作為L+1層的輸入,即第L+1層網路的輸入為k× L + k0。由於DenseNet的每一個Dense Block模塊都利用到了該模塊中前面所有層的信息,即每一個layer都和前面的layer有highway的稠密連接。假設一個具有L層的網路,那麼highway稠密連接數目為L*(L+1)/2。和Resnet不同的是,這裡的連接方式得到的feature map做的是concat操作,而resnet中做的是elementwise操作。

現在回到論文上,作者在論文中提出的DenseNet的網路結構為:

1)三個block,每一個block具有相等個數的layers,如下圖所示;

2)所有卷積層都使用3×3的卷積核;

3)用zeros-padding和2×2的average pooling來調整feature map的大小使之固定到同一尺寸;

4)最後一個block的輸出後面接一個全局average pooling和一個softmax 分類器;5)feature map 的尺寸在三個block裡面分別為32× 32、16×16、8×8;6)網路增長率k和block裡面的layers層數有兩種方案:k = 12,L=40, 以及k = 24,L=100。

圖21 DenseNet的三個block

DenseNet在識別率上的表現也非常不錯,在同一識別率的情況下,DenseNet的參數複雜度約為ResNet的一半。

圖22 DenseNet和ResNet的參數複雜度對比

DenseNet計算量小的原因:DenseNet和ResNet相比的一個優點是設置很小的k值,使得網路更窄從而參數更少。在 dense block中每個卷積層的輸出feature map的數量k都很小(小於100),而不是像其他網路一樣動不動就幾百上千的寬度。另外論文還觀察到這種denseblock有正則化的效果,因此對於過擬合有一定的抑制作用,可能是因為網路通道更窄使得參數減少了,所以過擬合現象減輕。

九、SENet

論文:Squeeze-and-Excitation Networks[9]

SENet是基於特徵通道之間的關係提出的,下圖是SENet的Block單元,圖中的Ftr是傳統的卷積結構,X和U是Ftr的輸入和輸出,這些都是以往結構中已存在的。SENet增加的部分是U後的結構:對U先做一個Global Average Pooling(稱為Squeeze過程),輸出是一個1x1xC的數據,再經過兩級全連接(稱為Excitation過程),最後用sigmoid把輸出限制到[0,1]的範圍,把這個值作為scale再乘到U的C個通道上,作為下一級的輸入數據。這種結構的原理是想通過控制scale的大小,把重要的特徵增強,不重要的特徵減弱,從而讓提取的特徵指向性更強。

圖23 SENet的Squeeze-Excitation block

下圖是把SENet模型分別用於Inception網路和ResNet網路,下圖左邊部分是原始網路,右邊部分是加了SENet之後的網路,分別變成SE-Inception和SE-ResNet。網路中的r是壓縮參數,先通過第一個全連接層把1x1xC的數據壓縮為1x1xC/r,再通過第二個全連接層把數據擴展到1x1xC,

圖24 SE-Inception

圖25 SE-ResNet

十、netVLAD

相對於傳統的人工設計特徵,CNN已經在圖像特徵提取上顯示出了強大的功力。在圖像檢索問題中,目前有基於全局和基於局部兩種卷積神經網路特徵表示方法。基於全局的方法直接使用卷積神經網路提取整幅圖像的特徵,作為最終的圖像特徵。但是因為卷積神經網路主要對全局空間信息進行編碼,導致所得特徵缺乏對圖像的尺度、旋轉、平移等幾何變換和空間佈局變化的不變性,限制了其對於高度易變圖像檢索的魯棒性。對於基於局部的方法,使用卷積神經網路提取圖像局部區域的特徵(這裡的局部區域特徵好比經典方法的SIFT特徵),然後聚合這些區域特徵生成最終的圖像特徵。雖然這些方法考慮到了圖像的局部信息,但仍有一些缺陷。例如使用滑動窗口來得到圖像區域時,由於沒有考慮到圖像的顏色、紋理、邊緣等視覺內容,會產生大量無語義意義的區域,為之後的聚合過程帶來冗餘和雜訊信息。另外,區域特徵融合通常所使用的最大池化演算法,因只保留了特徵的最大響應而沒有考慮特徵間的關聯,丟失大量信息,降低了所得的最終圖像特徵的區分性。

因此有學者提出netVLAD的方法。首先去掉CNN的最後一層,把它作為描述子,輸出是 H×W×D 的向量,可以將其看作一個D維的描述子,總共有 H×W 個。相當於在整個圖像上提取H×W 個D維描述子,然後對這H×W 個D維的描述子進行VLAD聚類,可以看做在CNN網路後面直接接一個netVLAD網路,如下圖所示:

圖26 CNN接netVLAD網路

還有學者提出基於對象的方法來解決以上問題。在生成圖像區域時,使用基於內容的無監督對象生成方法,即通過圖像顏色、紋理、邊緣等視覺信息以聚類的方式來生成圖像區域。常用方法有Selective search,如下圖所示,Selective search在一張圖片中提取1000-10000個bounding box,使之儘可能覆蓋所有的物體,試驗也證明,它的覆蓋率能達到96%以上,足以提取豐富的局部區域特徵。其特徵描述也具有更高的區分性,同時基於對象特徵進行融合,所得最終特徵對場景中對象的空間佈局變化也具有很好的魯棒性。在聚合特徵的過程時,採用上篇提到的VLAD演算法,先將圖像的局部區域特徵進行聚類,然後統計一幅圖像中所有區域特徵與其相近聚類中心的累積殘差來表示最終的圖像特徵。相對於最大池化演算法,該方法考慮了區域特徵間關聯的同時對圖像的局部信息有更細緻的刻畫,使得得到的最終圖像特徵對各類圖像變換具有更高魯棒性。

圖27 Selective search示意圖

十一、Loss函數優化

在傳統的分類網路中,一般是對大類如貓、狗、鳥等類別進行分類,但其對於個體級別的細粒度識別上略顯不足,而tripletloss和contrastive loss等演算法就更注重於高細粒度同類樣本和不同樣本之間的損失計算。

(一)triplet loss

triplet loss具有以下優秀屬性:端到端、簡單直接、自帶聚類屬性、特徵高度嵌入,triplet loss的具體操作步驟為:

首先從數據集N中隨機取一個樣本,記為 x_{a} ,然後再取一個同類樣本Positive記為 x_{p} ,和一個不同類樣本Negative記為 x_{n}x_{a}x_{a}x_{n}就構成了一個三元組,我們把三個樣本的特徵分別記為: f(x_{i}^{a}),f(x_{i}^{p})f(x_{i}^{n}) 。triplet loss的目的就是通過學習使x_{a}x_{p} 特徵之間的距離儘可能小,使x_{a}x_{n}特徵之間的距離儘可能大,並且設置一個閾值t,使得x_{a}x_{p}距離和x_{a}x_{n}距離的差值大於該閾值,即:

對應的損失函數為:

損失函數的含義為:當x_{a}x_{n}之間的距離 小於 x_{a}x_{p}之間的距離加t時,會產生大於0的loss,當x_{a}x_{n}之間的距離大於x_{a}x_{p}之間的距離加t時,上式中括弧內的值小於0,loss按0計算。

訓練的額過程可以用下圖表示:

圖28 triplet loss訓練示意圖

(二)Contrastive Loss

contrastive loss的表達式如下:

其中 d=||a_{n}-b_{n}||_{2} ,代表兩個樣本特徵的歐氏距離,y為兩個樣本是否匹配的標籤,y=1代表兩個樣本相匹配,y=0則代表不匹配,margin為設定的閾值。觀察可發現,當樣本匹配時y=1,loss變為 frac{1}{2N} sum_{n=1}^{N}{d^{2}} ,此時若d比較大說明模型不好,因此loss也會相應地變大。當樣本不匹配時y=0,loss變為frac{1}{2N}sum_{n=1}^{N}{(margin-d,0)^{2}},此時若d反而小,也說明模型不好,loss會相應地變大。

十二、特徵的哈希變換-CNNH[10]

由於各分類網路直接輸出的output特徵維度比較高並且都是浮點數,所以該類特徵會佔用比較大的存儲空間,特別是對於海量圖搜的問題,存儲這麼多的圖片特徵就顯得更為費勁,而且讀取這些特徵並進行特徵間距離計算的效率會非常低,所以精簡分類網路的output特徵就顯得尤為重要,因此有學者提出了圖片特徵的哈希變換。

哈希學習憑藉著檢索速度快和存儲成本低的優點,己經成為圖像檢索領域最受歡迎和有效的技術之一。但是現有的大部分哈希學習方法都是基於手工提取特徵,手工提取特徵不一定適用於哈希編碼學習,所以有學者提出了深度學習的哈希方法CNNH。

首先對於給定的n張圖片 I =(I_{1},I_{2},...,I_{n}) ,定義他們的相似矩陣為 s_{ij} ,如果 I_{i}

I_{j} 相似,則s_{ij}的值為1,若他們不相似,則s_{ij}的值為-1。接下來定義一個n行q列的二進位矩陣H,矩陣的第k行 H_{k} 表示圖片 I_{k} 的二進位特徵編碼,H_{k} in ( -1,1)^{q} 。圖片I的哈希碼通過學習得到,在學習中使得下列loss取得最小值:

在得到圖片的哈希碼後通過測量特徵之間的漢明距離比較圖片相似度。

參考文獻

  1. Krizhevsky A, Sutskever I, Hinton G E. ImageNet classification with deep convolutional neural networks[C]// International Conference on Neural Information Processing Systems. Curran Associates Inc. 2012:1097-1105.
  2. Simonyan K, Zisserman A. Very Deep Convolutional Networks for Large-Scale Image Recognition[J]. Computer Science, 2014.
  3. Szegedy C, Liu W, Jia Y, et al. Going deeper with convolutions[J]. 2014:1-9.
  4. Szegedy C, Ioffe S, Vanhoucke V, et al. Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning[J]. 2016.
  5. Szegedy C, Vanhoucke V, Ioffe S, et al. Rethinking the Inception Architecture for Computer Vision[J]. 2015:2818-2826.
  6. Szegedy C, Ioffe S, Vanhoucke V, et al. Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning[J]. 2016.
  7. He K, Zhang X, Ren S, et al. Deep Residual Learning for Image Recognition[J]. 2015:770-778.
  8. Huang G, Liu Z, Laurens V D M, et al. Densely Connected Convolutional Networks[J]. 2016:2261-2269.
  9. Hu J, Shen L, Sun G. Squeeze-and-Excitation Networks[J]. 2017.
  10. Xia R, Pan Y, Lai H, et al. Supervised hashing for image retrieval via image representation learning[C]// AAAI Conference on Artificial Intelligence. 2014.

推薦閱讀

[1]機器學習-波瀾壯闊40年【獲取碼】SIGAI0413.

[2]學好機器學習需要哪些數學知識?【獲取碼】SIGAI0417.

[3] 人臉識別演算法演化史【獲取碼】SIGAI0420.

[4]基於深度學習的目標檢測演算法綜述 【獲取碼】SIGAI0424.

[5]卷積神經網路為什麼能夠稱霸計算機視覺領域?【獲取碼】SIGAI0426.

[6] 用一張圖理解SVM的脈絡【獲取碼】SIGAI0428.

[7] 人臉檢測演算法綜述【獲取碼】SIGAI0503.

[8] 理解神經網路的激活函數 【獲取碼】SIGAI2018.5.5.

[9] 深度卷積神經網路演化歷史及結構改進脈絡-40頁長文全面解讀【獲取碼】SIGAI0508.

[10] 理解梯度下降法【獲取碼】SIGAI0511.

[11] 循環神經網路綜述—語音識別與自然語言處理的利器【獲取碼】SIGAI0515

[12] 理解凸優化 【獲取碼】 SIGAI0518

[13] 【實驗】理解SVM的核函數和參數 【獲取碼】SIGAI0522

[14]【SIGAI綜述】行人檢測演算法 【獲取碼】SIGAI0525

[15] 機器學習在自動駕駛中的應用—以百度阿波羅平臺為例(上)【獲取碼】SIGAI0529

[16]理解牛頓法【獲取碼】SIGAI0531

[17] 【羣話題精華】5月集錦—機器學習和深度學習中一些值得思考的問題【獲取碼】SIGAI 0601

[18] 大話Adaboost演算法 【獲取碼】SIGAI0602

[19] FlowNet到FlowNet2.0:基於卷積神經網路的光流預測演算法【獲取碼】SIGAI0604

[20] 理解主成分分析(PCA)【獲取碼】SIGAI0606

[21] 人體骨骼關鍵點檢測綜述 【獲取碼】SIGAI0608

[22]理解決策樹 【獲取碼】SIGAI0611

[23] 用一句話總結常用的機器學習演算法【獲取碼】SIGAI0611

[24] 目標檢測演算法之YOLO 【獲取碼】SIGAI0615

[25] 理解過擬合 【獲取碼】SIGAI0618

[26]理解計算:從√2到AlphaGo ——第1季 從√2談起 【獲取碼】SIGAI0620

[27] 場景文本檢測——CTPN演算法介紹 【獲取碼】SIGAI0622

[28] 卷積神經網路的壓縮和加速 【獲取碼】SIGAI0625

[29] k近鄰演算法 【獲取碼】SIGAI0627

[30]自然場景文本檢測識別技術綜述 【獲取碼】SIGAI0627

[31] 理解計算:從√2到AlphaGo ——第2季 神經計算的歷史背景 【獲取碼】SIGAI0704

[32] 機器學習演算法地圖【獲取碼】SIGAI0706

[33] 反向傳播演算法推導-全連接神經網路【獲取碼】SIGAI0709

[34] 生成式對抗網路模型綜述【獲取碼】SIGAI0709.

[35]怎樣成為一名優秀的演算法工程師【獲取碼】SIGAI0711.

[36] 理解計算:從根號2到AlphaGo——第三季 神經網路的數學模型【獲取碼】SIGAI0716

[37]【技術短文】人臉檢測演算法之S3FD 【獲取碼】SIGAI0716

[38] 基於深度負相關學習的人羣計數方法【獲取碼】SIGAI0718

[39] 流形學習概述【獲取碼】SIGAI0723

[40] 關於感受野的總結 【獲取碼】SIGAI0723

[41] 隨機森林概述 【獲取碼】SIGAI0725

[42] 基於內容的圖像檢索技術綜述——傳統經典方法【獲取碼】SIGAI0727

[43] 神經網路的激活函數總結【獲取碼】SIGAI0730

[44] 機器學習和深度學習中值得弄清楚的一些問題【獲取碼】SIGAI0802

[45] 基於深度神經網路的自動問答系統概述【獲取碼】SIGAI0803

[46] 反向傳播演算法推導——卷積神經網路 【獲取碼】SIGAI0806

[47] 機器學習與深度學習核心知識點總結 寫在校園招聘即將開始時 【獲取 碼】SIGAI0808

[48] 理解Spatial Transformer Networks【獲取碼】SIGAI0810

[49]AI時代大點兵-國內外知名AI公司2018年最新盤點【獲取碼】SIGAI0813

[50] 理解計算:從√2到AlphaGo ——第2季 神經計算的歷史背景 【獲取碼】SIGAI0815

[51] 基於內容的圖像檢索技術綜述--CNN方法 【獲取碼】SIGAI0817

[52]文本表示簡介 【獲取碼】SIGAI0820

[53]機器學習中的最優化演算法總結【獲取碼】SIGAI0822

[54]【AI就業面面觀】如何選擇適合自己的舞臺?【獲取碼】SIGAI0823

[55]濃縮就是精華-SIGAI機器學習藍寶書【獲取碼】SIGAI0824

[56]DenseNet詳解【獲取碼】SIGAI0827

原創聲明:本文為 SIGAI 原創文章,僅供個人學習使用,未經允許,不能用於商業目的


推薦閱讀:
相關文章