標籤:
源地址:http://grunt1223.iteye.com/blog/828192
一、引言
多媒體識別是資訊檢索中難度較高且需求日益旺盛的一個問題。以映像為例,按照映像檢索中使用的資訊區分,映像可以分為兩類:基於文本的映像檢索和基於內容識別的映像檢索(CBIR:Content Based Image Retrieval)。基於文本的映像檢索完全不分析和利用映像本身的內容,其檢索品質完全依賴於與映像關聯的文字資訊與映像內容的相關性,因此有必要引入基於內容的映像檢索。本為主要討論後者。
在電腦視覺中,映像內容通常用映像特徵進行描述。事實上,基於電腦視覺的映像檢索也可以分為類似文本搜尋引擎的三個步驟:提取特徵、建索引build以及查詢。本文也按照這三步來分別闡述。
二、映像特徵的提取
目前互連網上的Image Recognition可以歸結為兩類問題,其一是“近重複檢索”,主要是針對同一源圖經過不同形變(包括光照、浮水印、縮放、局部缺失替換等)的檢索,或是針對大體類似的物件進行識別,主要應用在著作權保護、違禁識別、圖片去重以及基本的相似檢索等等;其二是“局部檢索”,指的是兩張圖片中只要有部分物件重複,即可匹配到,比如我們可以想象,不同offer的模特不一樣,但只要她們都跨了同一款LV包,就可以認為是相似映像,即實現真正意義上的映像檢索。
與此相對應的,映像特徵也可以分成兩類:全域特徵與局部特徵。大部分映像簽名演算法都是利用映像的全域特徵來描述一幅映像的內容,例如,顏色長條圖、色彩分布、形狀或者邊緣資訊等等,用一個字串或是數組來作為一幅映像的hash值。
總的來說,全域特徵是對映像內容高度抽象的概括,只回答了“映像是什麼”,而大多數場合以使用者的視角來看,更希望回答“映像有什麼”。例如,使用者在檢索映像時,經常更加關心的是映像中的情境、物體或者特定的任務,單單一個全域特徵無法區分些資訊,因此引入了局部特徵。其中最為著名的就是“基於尺度不變特徵變換的映像檢索”,Scale Invariant Feature Transform,也就是大名鼎鼎的SIFT。其基本思想是將映像打散為許多高維特徵點,因此將互連網上的圖片已視覺詞庫的形式加以儲存。由於SIFT特徵在描述向量時不受尺度變換和旋轉的影響,對映像噪音、仿射變形、光照變化以及三維視角皆不敏感,因此具有極強的區分度,被廣泛應用於物體識別、視頻追蹤、情境識別、映像檢索等問題。
為簡單起見,本文主要討論基於全域特徵的映像相似檢索技術,而局部特徵可以在此基礎上自行加以擴充。
MPEG(即Moving Picture Experts Group運動映像專家小組)是個國際標準,即所謂ISO11172。準確說來, MPEG-7 並不是一種壓縮編碼方法,而是一個多媒體內容描述介面。繼 MPEG-4 之後,要解決的矛盾就是對日漸龐大的映像、聲音資訊的管理和迅速搜尋。MPEG7就是針對這個矛盾的解決方案。MPEG-7 力求能夠快速且有效地搜尋出使用者所需的不同類型的多媒體影像資料,比如在影像資料中搜尋有長江三峽鏡頭的片段。預計這個方案於2001年初最終完成並公布。雖然沒有實現代碼,MPEG-7公布了一些映像描述介面,制定了一些諸如顏色分布、紋理、邊緣、主體顏色的標準。這裡主要介紹一下後邊使用到的邊緣長條圖描述演算法的原理。計算邊緣長條圖的主要步驟如下:
- 首先將一個原始映像平均分割為4×4 共16 個子映像,之後的處理都是對每一個子映像局部邊緣的長條圖進行計算。每個局部的邊緣長條圖使用五個5邊緣運算元進行處理。最終得到80維向量,用於唯一標識這張圖片。
- 把每個子映像分割成為一系列映像塊, 這些映像塊的,面積隨著映像面積的變化而變化。其中每個子映像的映像數目是固定的,可參考圖一。
- 計算並統計每個映像塊的五種邊緣類型( 水平、垂直、45°、135°和無方向) ,此為MPEG-7推薦的五種邊緣檢測運算元,最終得到五個邊緣方向的最大值。
- 對得到的邊緣長條圖的值進行歸一化和量化。考慮到人眼視覺的非均勻性,將歸一化以後的80 個直方條的值進行非線性量化, 每個直方條使用固定長度的3位進行編碼(即量化範圍為0~8),總共用240個bit來表示邊緣長條圖。
- 考慮兩個邊緣長條圖描述符, 通過計算長條圖間的歐幾裡德距離得到兩個紋理映像的相似性,十分直觀的,距離為0說明兩幅圖片的邊緣紋理完全相同,距離越大說明相似性越小。
三、映像特徵索引的build與基於映像的query
在海量(百萬以上)的映像特徵中,尋找亞線性時間複雜度的匹配演算法是十分有挑戰的,特別的,由於是近似檢索,我們需要的是數字上的非精確匹配,讓我們看一下能想到的方法:
- 線性掃描:即對整個樣本向量集合進行窮舉式的順序掃描,分別計算其與query映像的歐式距離,然後排序輸出。準確度100%但過高的時間複雜度導致其實用性極差
- 基於樹結構的索引:比如sift作者推薦的KD-tree,SR-tree等。但由於“維度災難(curse of dimensionality)”的存在,當向量維度大於10到20之後,基於樹結構的索引需要掃描整個向量集合的絕大部分,加上演算法本身的開銷,其效果甚至要差於上述的蠻力尋找。
- 聚類:摒棄了樹型結構建立索引之後,許多研究人員繼而使用基於Kmeans聚類(層級聚類)的向量量化方法,其本質是將向量映射為標量,取得了一定的成功。但是,該方法的時間複雜度與映像的數量息息相關,當規模擴大時,biuld與query的時間開銷仍然無法達到線上使用的地步。
- 基於散列表的索引:與上類似,其本質也是將向量轉化為標量進行匹配。散列表的主要好處有兩點,一是query時間與資料結構的大小無關,基本上是O(1)的時間複雜度;二是增量build較其它方法更為方便。當然,直接將映像特徵存放在散列表中,或者放在資料庫的某一個欄位中,只能進行精確匹配,只能返回一模一樣的圖片,對於映像檢索來說,其價值點幾乎為零;因此單純的散列表技術還是無法滿足我們的需求。
- 常用的hash函數(crc、md5等),本質上都是基於密碼學的脆弱雜湊函數,其特點是輸入只要有略微不同,產生的結果應該儘可能大的變化。本文採用的局部敏感雜湊(Locality Sensitive Hashing, LSH)方法,在向量匹配方面與索引方面都要比傳統的樹結構和聚類演算法快上好幾個數量級,支援非精確尋找,在我看來,是目前所知最適用於多媒體檢索的演算法。
LSH主要是用來解決多維向量的K近鄰(K Nearst Neighgor)問題,即尋找某一多維向量間的K個最相似的向量。這是一種機率演算法,其原理類似於bloom filter,存在一定的false positive,但換來的是檢索效率的飛躍提升。
LSH的主要原理是:建立L個散列表來存放索引,每一個散列表Ti包含M個存放資料的桶,另外提供兩套函數族Gi與Hi與之相關聯。局部敏感雜湊演算法在機率意義上將相近的向量映射到相同的桶當中去,利用該特質可以對映像特徵進行非精確匹配。為了最大限度的避免機率上的失誤,採用多個hash函數映射到不同的hash表中去,分散誤差,二所示。
利用LSH為映像特徵建立索引的具體流程如下:
- 將向量p標識轉化為Hamming空間中的二進位向量(每一維僅為1或0),設某一維的向量值為x,最大值為c,則表示為連續的x個1緊跟c-x個0的c維二進位向量。因此該向量在原始空間的距離與其Hamming距離一致。
- 將散列函數G作用在前面所產生的結果上,G的定義為,選取目標向量的K維二進位向量進行拼接。可以看出,目標向量之間相似性越大,其產生的hash值相等的機率越大。這是達到非精確檢索的關鍵一環。
- 基於2產生的結果,再用常規的雜湊函數(md5)進行二次雜湊將二次雜湊得到的結果存放到一張雜湊表的一個桶裡,再使用下一個函數進行計算,周而復始。正如我們前面所說的那樣,採用了多個hash函數來減少相似檢索的誤差。這樣,相似的映像就被放到同一個桶裡,而不同的映像則被放到另外的桶裡了,三所示。
- query映像時,計算其特徵值,並從前面建立的多個表中查詢出結果,拼接在一起,四所示。
- 針對上一步返回的近似映像,分別計算其歐式距離,排序,進一步去除極小機率上的false positive。
局部敏感雜湊將多維近似檢索的時間複雜度進一步降低到亞線性層級,同時,合理選擇雜湊函數的個數與種類又可以使檢索的準確率和召回率達到平衡。
四、實驗結果
為驗證MPEG-7邊緣長條圖配合局部敏感雜湊演算法的結果,本文使用了隱網項目中的違禁資料庫進行測試。測試環境為公司的Dell PC,測試條件如下所示:
樣本庫數量:14085
樣本類別:國家安全類、文化傳媒類、限售、藥物器械
持久化index檔案容量:3.07MB
從圖片build時間:406ms
從索引檔案build時間:15min
query時間:0ms
測試效果範例:
輸入的待檢索圖片:
Query得到相似圖片結果:
五、後續工作
1、sift特徵的引入,局部映像檢索的實現
2、lsh演算法,參數的自動最佳化
3、百萬級資料測試
4、不同情境、類別下策略的分析
互連網相似Image Recognition檢索引擎 —— 基於映像簽名的方式