孪生网络图像相似度_图像相似度比对
圖像相似度比對這個問題,在傳統算法中常常轉化為sift特征點比對的方法去做,主要是sift算法對圖像的光照、旋轉、位移等等具有比較強的魯棒性,但是整體精度沒有特別高。隨著深度學習技術的發展,目前對這個問題的解應該更加完美。所以最進在試圖探究這個更加完美的解。
直觀思路有2條:一條是利用現成的pretrain_model計算圖像的高維特征向量,然后對特征向量,計算余玄距離;另一條是針對特定場景數據,建立圖像對的數據集,然后構建深度模型,直接學習相似度。
先說下答案:兩者效果整體上差不多,但各有優缺點。pretain_model余玄距離方式:優點很明顯,不用準備打標數據集訓練,直接預測,卡個閾值就能用,而且非常通用,適用幾乎所有數據,缺點是準確率稍微低些(但實測對于高召回、低準確的應用場景基本夠用了);針對特定場景數據訓練方式:優點是可以針對特定場景數據集調優,精度可以達到我們想要的精度;缺點是耗時耗力、只針對特定場景、通用性差。
下面簡單說下技術方案。pretainmodel余玄距離方式基本不用說了,網上下載下pretrain_model,寫個腳本預測下就可以了。有個很好的github工程:https://github.com/cameronfabbri/Compute-Features,下載下來就能用,很方便,可以快捷驗證。我們重點說下針對特定場景數據訓練方式。
在利用基于深度學習進行相似度比對時,我重點參考了這篇paper:
Learning to Compare Image Patches via Convolutional Neural Networks?arxiv.org文中有多種實驗方案,歸納起來就2種:一種是對于圖像對,用2個cnn分支分別抽取特征,然后concate起來,用全連接組織相似度判別器(其實就是分類器,相似或者不相似);另一種是只用1個cnn分支,將圖像對組織成一幅2倍于輸入圖像通道數的“圖像”,作為cnn網絡的輸入,輸出端也是用全連接組織相似度判別器,得到相似度值。可分別用下面兩張圖表達這個意思:
雙分支單圖通道結構單分支雙圖通道結構文中重點實驗了3種思路的網絡結構,我也一一復現了下,效果最好的是2ch-2stream結構,其次是2ch-deep結構,最后是2ch結構。作者放出了每種結構的具體設計,分別如下:
(i)2ch-2stream consists of two branches C(95,5,1)-ReLU-P(2,2)-C(96,3,1)-ReLU-P(2,2)-C(192,3,1)-ReLU-C(192,3,1)-ReLU, one for cen- tral and one for surround parts, followed by F(768)-ReLU-F(1)
(ii) 2ch-deep = C(96,4,3)-Stack(96)-P(2,2)-Stack(192)-F(1), where Stack(n) = C(n, 3, 1)-ReLU-C(n, 3, 1)-ReLU-C(n, 3, 1)-ReLU.
(iii) 2ch = C(96, 7, 3)-ReLU-P(2, 2)-C(192, 5, 1)-ReLU- P(2,2)-C(256,3,1)-ReLU-F(256)-ReLU-F(1)
其中,效果最好的是2ch-2stream結構圖如下,一目了然,非常好理解:
說說我在調優過程中的優化點:
1)圖像對訓練集的建立。首先準備1w左右的數據(里面可能有少量相似樣本,占比不到0.1)。相異樣本就是每次fead數據時從這1w數據中隨機抽取2張;相同樣本是從中隨機抽取1張,以及用這1張圖片隨機增強的圖片。
2)文中用的公共數據集適合用64*64的輸入,而我用的數據尺寸直接resize到64*64,信息損失會比較大。我統計了數據集所有圖像的平均尺寸,得到適合的尺寸為:長=64,寬=256.
3) 自建了一個具有代表性的驗證集。一一實驗2ch/2ch-deep/2ch-2stream三種結構發現,在驗證集上效果恰恰與文中所述結論相反。判斷是過擬合驗證了。在全連接的地方接了dropout, 系數設成0.9。由于每次訓練是隨機樣本對,隨機1個epoch應該是1w1w。所以訓練久點,泛化要好些,但不能過長。迭代3w輪,batch_size=128。
最后,說下可能的優化點:
1)這篇文章發表在2015年,當時各種神經網絡奇技淫巧,都沒出來。所以替換掉中間的特征抽取網絡,效果肯定能提升。比如加入resnet-block。
2)加上batch_normal,做正則。
3) 還沒有實驗文中的spp,加上估計有提升,因為保證了分辨率。
總結
以上是生活随笔為你收集整理的孪生网络图像相似度_图像相似度比对的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java开发指南!mysql修改表字段长
- 下一篇: STM32 LED灯的另一种写法