移動端影象相似度演算法選型
概述
電商場景中,賣家為獲取流量,常常出現重複鋪貨現象,當用戶釋出上傳影象或視訊時,在客戶端進行影象特徵提取和指紋生成,再將其上傳至雲端指紋庫對比後,找出相似圖片,杜絕重複鋪貨造成的計算及儲存資源浪費。
該方法基於影象相似度計算,可廣泛應用於安全、版權保護、電商等領域。
摘要
端上的影象相似度計算與傳統影象相似度計算相比,對計算複雜度及檢索效率有更高的要求。本文通過設計實驗,對比三類影象相似度計算方法:感知雜湊演算法、基於區域性不變性的影象相似度匹配演算法以及基於卷積神經網路的影象相似度演算法,權衡其在計算複雜度及檢索效率方面的優劣,最終選取 Hessian Affine進行特徵提取,SIFT特徵描述生成指紋,作為端上的影象相似度計算模型。
關鍵詞:影象相似度計算、特徵提取、計算複雜度、檢索效率
影象相似度計算在當前的雲端計算處理方式,會將客戶端資料上傳至雲端,進行影象、視訊檢索相似度計算等一系列複雜邏輯處理後將結果反饋給終端,雖然在計算能力上雲端優勢明顯,但該方式同時存在嚴重的儲存、計算資源及流量的浪費且無法滿足實時性要求。
隨著手機計算能力的提升,一種顯而易見的方式是將部分資料在客戶端進行處理後,再將有價值的資料上傳雲端儲存及進一步處理。對於電商場景中的重複鋪貨現象,可在使用者釋出上傳影象、視訊時,在客戶端進行影象相似度計算,做到實時反饋,對於重複影象及視訊不進行雲端儲存,避免了儲存及計算資源的浪費。
影象檢索演算法的基本步驟包括特徵提取、指紋生成和相似度匹配。業界常用的影象相似度計算方法大致分為三類,傳統的感知雜湊演算法、基於區域性不變性的影象相似度匹配演算法以及利用深度學習演算法進行的影象相似度計算方法。
1.傳統的hash演算法
自2011年百度藉助TinEye釋出百度識圖後不久,google釋出了類似的以圖搜圖圖片搜尋服務,“感知雜湊演算法”在影象搜尋過程中發揮了重要作用。大致流程如下:
1.1感知雜湊演算法理論簡介:
1.1.1均值hash:
通過對原始影象進行壓縮(8*8)和灰度處理後計算壓縮後的影象畫素均值,用8*8影象的64個畫素與均值對比,大於均值為1,小於均值為0,得到得64位二進位制編碼即為原影象的ahash值。演算法速度快,但精確度較低。
1.1.2差異hash:
與均值hash相比,差異hash同樣要進行影象壓縮和灰度處理,然後用每行的前一個畫素與後一個畫素對比,大於為1,小於為0,來生成指紋資訊。演算法精確度較高,速度較快。
1.1.3感知hash:
通過對原始影象進行壓縮(32*32)和灰度處理後計算壓縮,對其進行離散餘弦變換後,用32*32影象的前8*8畫素計算均值,8*8畫素值大於均值為1,小於均值為0,得到64位指紋資訊為原始影象的phash值。演算法精準度較高,速度較差。
根據以上三種演算法可計算出兩張影象響應的hash值,利用兩張影象hash值得漢明距離,可判別出其相似程度,其中漢明距離越大,相似度越低,漢明距離越小,相似度越高。
1.2各個演算法之間的抗干擾能力對比
從視訊內容中選取兩組測試集,通過設計抗干擾能力實驗,對三種經典感知雜湊演算法進行對比。
測試集1:
結果對比
測試集2
結果對比
通過實驗結果發現Hash在影象相似度計算上,準確度較低,無法滿足實際業務需求。
2.利用卷積神經網路計算圖片相似度
2.1 端到端的方式
利用卷積神經網路計算相似度時,一種方法是直接採用端到端的方式,利用卷積層提取兩張圖片的特徵,再用全連線層輸出兩張圖片的“匹配度”。可參考[1] 2015年CVPR文章: 《Learningto Compare Image Patches via ConvolutionalNeural Networks》,相關中文解釋可參考[2] :http://blog.csdn.net/hjimce/article/details/50098483
該方法對於少量影象相似度計算優勢明顯,但不適用於從大量影象中進行相似度匹配的場景,如視訊檢索。通常,視訊檢索大致步驟如下:
假設視訊庫中的存量視訊有1萬個,每個視訊抽取10張圖片,則幀庫有10萬張圖片,一次視訊查詢需要的比對次數為:10 x 100000 = 100萬次。
因此,儘管該方法對於影象相似度計算有較高的準確性,但在進行視訊檢索時計算量過大。
2.2 提取中間產物方式
由於卷積操作的本質即為特徵提取,卷積層輸出的矩陣天然代表各種特徵,
通過對兩張圖片的特徵矩陣進行相減,計算差值平方和(或者其他方式)得到的數值作為兩張圖片的相似度判斷依據,即為利用卷積神經網路進行影象相似度計算的第二種方式。
利用預訓練好的VGG16模型來做測試,網路結構如下(不帶全連線層):
以block5_pool 輸出的結果做為目標產物(也可以用其它層),可以看到這一層輸出的是形狀為(7,7,512) 的矩陣,我們先用一組圖片(來源網路)做測試,來驗證輸出的結果是否大致符合預期:
以上六張測試圖片分別為:原圖、加少量文字、修改少量底部、底部裁剪、修改底部一半、完全不同的另一張圖片。
對每張圖片用卷積模型計算得到7x7x512 形狀的陣列後,分別計算第一張圖片與後面五張圖片的特徵陣列差值的平方和,並將結果歸一化處理以方便觀察,結果如下:
Diff 1 - 2: 2
Diff 1 - 3: 128
Diff 1 - 4: 182
Diff 1 - 5: 226
Diff 1 - 6: 377
從觀測結果中可以看出,第一張圖片與其後的圖片差異越來越大的。並且2和377 這兩個值代表非常相似和完全不同的圖片,具有一定辨識度。
進一步設計實驗,用視訊測試裁剪、加字幕、亮度調整、旋轉、以及完全不一樣的另一個視訊等抗干擾能力。
針對視訊的diff計算方式為:每個視訊每隔1秒抽一幀圖片,迴圈比對兩個視訊每個對應位置的圖片幀,計算差異值,最後除以幀數得到平均差異。對於兩個幀數不一致的情況,以較少幀為準,多出來的幀不處理。圖片間的差異值計算方式同上,結果如下:
Diff 0 - 1: 6
Diff 0 - 2: 4
Diff 0 - 3: 2
Diff 0 - 4: 22
Diff 0 - 5: 26
從實驗結果可以看出,對於裁剪、字幕、亮度調整的情況,差異值都在同一個數量級上,明顯小於不同視訊的情況,但是對於旋轉的情況,該方法無效。
3.基於區域性不變特徵的相似度匹配演算法
除了基於雜湊和基於卷積神經網路的相似度匹配演算法外,區域性特徵檢測演算法在相似度計算、影象檢索、物體識別等領域具有重要意義。相對於畫素級的全域性特徵,區域性特徵在描述影象特徵時更加靈活,其中SIFT(Scale-invariant feature transform)是比較常用的,具有較好的尺度不變性,即使改變旋轉角度或者拍攝角度,仍然能夠得到較好的檢測效果。
3.1抗干擾能力測試
用opencv+python,對測試圖片提取SIFT特徵:
進一步測試同樣的裁剪、旋轉等情況的特徵點匹配情況:
裁剪:
字幕+改變大小:
亮度調整:
旋轉90度:
不同視訊:
從測試結果上看,SIFT做特徵檢測具有良好的抗干擾能力。
3.2 檢索效率測試
初步確定採用區域性不變特徵來做特徵提取後,需要做進一步的測試:搭建測試集,構建特徵提取、檢索系統,以測試準確率、召回率等指標。通過參考2017 年Araujo 和 BerndGirod的論文:《Large-Scale Video Retrieval Using ImageQueries》,基於其工程進行測試。
資料集準備:
1.圖片庫:取線上1000個視訊,對每個視訊每隔1秒抽一張視訊幀圖片,作為總圖片庫。
2.待查詢圖片:定義7種圖片變換方式:旋轉、拉伸、調整亮度、裁剪、加字幕、無處理,每種變換生成100個樣本。每個樣本的生成方式為:從1000個視訊裡隨機選取一個視訊,並從所有圖片幀裡隨機取一幀。這樣總共得到700個待查詢圖片。
區域性特徵提取包含兩部分內容:特徵點檢測和特徵點描述。
3.2.1 SIFT特徵提取+SIFT描述子
對所有的庫存圖片以及待查詢圖片用SIFT提取特徵,並利用特徵從檢索庫裡檢索700個測試樣本,計算召回率和準確率如下:
結果顯示準確率較低,通過觀察錯誤結果發現,部分圖片提取到的特徵數目較少,甚至只有個位數,而正常圖片能達到幾百到上千個特徵點,特徵點缺失會導致檢索時易匹配到錯誤的樣本。通過設定“最低樣本數”限制,當樣本數大於閾值時,認為其查詢結果“可信”。
經測試,將“最低樣本數”閾值定為30,並加入“排除率”指標,表示未達到最低樣本數,該查詢記錄不可信。將特徵數太少的樣本排除後,再次測試結果如下:
結果顯示在增加了“最低樣本數”和“排除率”指標後,準確率大幅度提升,但仍有20% 左右的排除率,即有五分之一的查詢是沒有返回可信結果的。
3.2.2 Hessian Affine特徵提取+SIFT描述子
為進一步提升準確率,參考[4]工程描述,將SIFT特徵點檢測換成Hessian-Affine特徵檢測會有更好的效果,即先用Hessian-Affine檢測特徵點,後用SIFT描述子描述特徵。換用Hessian-Affine後,測試結果如下;
結果顯示,召回率和準確率均有所提升,且排除率降至4%。
4. 結論
通過設計實驗測試結果發現,基於區域性不變特徵做相似度計算具有良好的抗干擾能力,準確度優於傳統感知雜湊演算法,對旋轉不變性的支援優於卷積神經網路。最終權衡計算複雜度和檢索效率,在端上選取Hessian-Affine做特徵點檢測,SIFT做描述子的方式進行影象相似度計算。
5. 趨勢展望
儘管基於區域性特徵不變性的影象相似度計算在抗干擾能力及計算複雜度上佔優,但僅能表達影象淺層特性,而卷積神經網路具有多層次語義表達能力,不同層所提取的影象特徵具有不同含義,低層次表達角點特徵,中間層聚合角點特徵表達物體部件,高層進一步表達整個物體,選擇不同卷積層會提取出不同層次的特徵。在計算複雜度及檢索效率高要求的客戶端將區域性特徵提取與卷積神經網路相結合互相彌補不足,突出優勢,可能會帶來更好的效果,未來將進一步探索。
參考文獻:
[1] 2015 CVPR《Learning to Compare Image Patches viaConvolutionalNeural Networks》
[2] http://blog.csdn.net/hjimce/article/details/50098483
[3] Araujo, A. and Girod, B 《Large-Scale Video Retrieval Using ImageQueries》2017
[4] https://github.com/andrefaraujo/videosearch.
ofollow,noindex">閒魚技術
加入閒魚,一起玩些酷的。(阿里巴巴集團閒魚官方技術號,歡迎同道者技術交流。) 簡歷投遞:[email protected]
理論 CNN 雜湊演算法 影象壓縮 深度學習 物體識別
相關資料
Neural Network
(人工)神經網路是一種起源於 20 世紀 50 年代的監督式機器學習模型,那時候研究者構想了「感知器(perceptron)」的想法。這一領域的研究者通常被稱為「聯結主義者(Connectionist)」,因為這種模型模擬了人腦的功能。神經網路模型通常是通過反向傳播演算法應用梯度下降訓練的。目前神經網路有兩大主要型別,它們都是前饋神經網路:卷積神經網路(CNN)和迴圈神經網路(RNN),其中 RNN 又包含長短期記憶(LSTM)、門控迴圈單元(GRU)等等。深度學習是一種主要應用於神經網路幫助其取得更好結果的技術。儘管神經網路主要用於監督學習,但也有一些為無監督學習設計的變體,比如自動編碼器和生成對抗網路(GAN)。
來源:機器之心
Convolutional neural network
卷積神經網路(Convolutional Neural Network, CNN)是一種前饋神經網路,它的人工神經元可以響應一部分覆蓋範圍內的周圍單元,對於大型影象處理有出色表現。卷積神經網路由一個或多個卷積層和頂端的全連通層(對應經典的神經網路)組成,同時也包括關聯權重和池化層(pooling layer)。這一結構使得卷積神經網路能夠利用輸入資料的二維結構。與其他深度學習結構相比,卷積神經網路在影象和語音識別方面能夠給出更好的結果。這一模型也可以使用反向傳播演算法進行訓練。相比較其他深度、前饋神經網路,卷積神經網路需要考量的引數更少,使之成為一種頗具吸引力的深度學習結構。 卷積網路是一種專門用於處理具有已知的、網格狀拓撲的資料的神經網路。例如時間序列資料,它可以被認為是以一定時間間隔取樣的一維網格,又如影象資料,其可以被認為是二維畫素網格。
來源:Goodfellow, I.; Bengio Y.; Courville A. (2016). Deep Learning. MIT Press. 維基百科
Logic
人工智慧領域用邏輯來理解智慧推理問題;它可以提供用於分析程式語言的技術,也可用作分析、表徵知識或程式設計的工具。目前人們常用的邏輯分支有命題邏輯(Propositional Logic )以及一階邏輯(FOL)等謂詞邏輯。
來源:機器之心
Image compression
影象壓縮是資料壓縮技術在數字影象上的應用,目的是減少影象資料中的冗餘資訊,從而用更加高效的格式儲存和傳輸資料。影象壓縮可以是有損資料壓縮也可以是無損資料壓縮。
來源: 維基百科
object recognition
計算機視覺領域的一個分支,研究物體的識別任務
Deep learning
深度學習(deep learning)是機器學習的分支,是一種試圖使用包含複雜結構或由多重非線性變換構成的多個處理層對資料進行高層抽象的演算法。 深度學習是機器學習中一種基於對資料進行表徵學習的演算法,至今已有數種深度學習框架,如卷積神經網路和深度置信網路和遞迴神經網路等已被應用在計算機視覺、語音識別、自然語言處理、音訊識別與生物資訊學等領域並獲取了極好的效果。
來源: LeCun, Y., Bengio, Y., & Hinton, G. (2015). Deep learning. nature, 521(7553), 436.
Discrete cosine transform,
離散餘弦變換(英語:discrete cosine transform, DCT)是與傅立葉變換相關的一種變換,類似於離散傅立葉變換,但是隻使用實數。離散餘弦變換相當於一個長度大概是它兩倍的離散傅立葉變換,這個離散傅立葉變換是對一個實偶函式進行的(因為一個實偶函式的傅立葉變換仍然是一個實偶函式),在有些變形裡面需要將輸入或者輸出的位置移動半個單位(DCT有8種標準型別,其中4種是常見的)。
來源: 維基百科
Accuracy
分類模型的正確預測所佔的比例。在多類別分類中,準確率的定義為:正確的預測數/樣本總數。 在二元分類中,準確率的定義為:(真正例數+真負例數)/樣本總數
來源: sary?hl=zh-cn" target="_blank" rel="nofollow,noindex">Google ML Glossary
Cloud Computing
雲端計算(英語:cloud computing),是一種基於網際網路的計算方式,通過這種方式,共享的軟硬體資源和資訊可以按需求提供給計算機各種終端和其他裝置。
來源: Cloud Computing