百度圖像檢索

轉載處:http://blog.sina.com.cn/s/blog_6ae183910101gily.html

昨天,百度上線了新的相似圖(similar image search)搜索,試了風景、人物、文字等不同類型query的效果,感覺效果非常贊。尤其對於人物搜索,返回的結果在顏色、以及姿態方面具有非常大的相似性。特別是在輸入某個pose的美女圖片時,會搜到一系列相近pose的美女圖片,真的是宅男之福啊。本着娛樂精神,貼一個搜索結果供大家yy


百度圖像搜索探祕


我們知道這個產品底層的技術是餘凱老師領導的百度多媒體圖像組做的,但是到底是如何做到的,我相信大家一定都非常好奇。在這裏,我按照自己的理解,講講我認爲其背後的具體技術方案,更希望能和大家進行更深入的討論,我們共同進步。


首先,百度識圖(shitu.baidu.com)輸入是一幅圖片(可以支持本地圖片上載以及圖片url),輸出是返回的相同/相似/相同人臉圖像。如果圖像中檢測到人臉(就是確定某一個位置是一個人臉而不是貓臉或其他),則會在結果頁有三個tab,分別是“全部”,“相似圖片”和“人臉搜索”,如下圖:

百度圖像搜索探祕

而如果query的圖片中沒有人臉,則只會有前兩個tab“全部”和“相似圖片”。


而實際上,底層的圖像相關的技術(content based)支持的是三個不同的功能,分別是相同圖片搜索(near duplicate search)、相似圖片搜索(similar image search)和人臉搜索(face search),而這三個功能對應的技術也有比較大的區別。從功能角度,“全部”tab裏面主要包含了兩部分功能,上面是相同圖片搜索(以及對應的圖片周圍的文本,把圖片看作是信息載體)以及下面的相似圖片搜索功能。


下面我會一一剖析一下相同圖片搜索(near duplicate search)、相似圖片搜索(similar image search)和人臉搜索(face search)這三個不同功能背後可能用到的技術。


對於圖片搜索而言,一種最直觀的思路就是對圖像進行表示(表示爲特徵),然後計算query圖像和庫中索引的所有圖像的特徵之間的相似度(或距離)度量,然後排序就可以得到搜索結果了。在早期的image retrieval學術中,大家一般這樣處理就夠了。但是,這樣做的問題是,只能處理數據規模小的數據庫(比如百萬量級以下),否則速度將十分難以接受。


爲了提高搜索速度,一個可以借鑑的思路來自於文字搜索。在文字搜索裏面,基本的框架是基於tf-idf表示以及倒排的索引結構來處理的。所謂tf是文章中的詞頻,idf是逆文檔頻率。如果將圖像和文章對應,visual word和詞(term)對應,則圖像也存在對應的tfidf。所以,真正實用的大規模圖像搜索系統一般都是採用類似文本搜索的框架,首先通過visual word表示爲視覺詞頻表示,或者採用某種hash的方法轉化爲binary code的方法來處理,提高搜索速度。這是最基本最核心的思路。


對於相同圖片搜索,做的最早的應該算tineye.com,國內搜狗和百度識圖都有這個功能,當然,之前我覺得做的最好的是image.google.com。這個技術主要目標是找到同一張圖像的不同變形版本(亮度變化、部分裁剪、加水印等),衡量其效果的一個重要因素就是抗擊上述變形大小的能力,此外,爲了能夠提供召回,所以索引量一定要非常大。這塊的應用,主要是用來找到同一張圖片的更高質量版本或者可以用來做圖片版權追蹤。


下面,來講講這裏面的基本框架。


百度圖像搜索探祕


其中,興趣點檢測和局部特徵描述有很多方法可以選擇,SIFT特徵是大家比較常用的特徵。將圖像表示爲很多興趣點上定義的sift特徵之後,離線訓練一個詞表(一般採用層次型kmean等方法,當然還有其他類似random projection的方法),總之,就是一個vector quantization,從而,能夠得到一幅圖像的關於詞的頻率統計(也可以看作是一種直方圖累積)。於是,後面的流程就可以借鑑文本里面用到的方法了。由於上述過程中,沒有考慮到興趣點的位置,因此,爲了過濾掉誤檢結果,一般在re-rank模塊,會採用基於興趣點位置約束的過濾方法過濾掉興趣點位置和query圖像不同的結果,當然,由於此時,返回的結果已經遠遠小於所有的索引量,因此可以採用運算複雜度更高的方法來進一步重新排列結果。


爲了,提高召回率,一個比較好的方法是採用query expansion的方法,採用query得到的結果中選擇相似度最高的幾項(相似度大於某個閾值),得到和query最相近的結果,然後將這些結果和query組合成爲新的query,重新到索引中搜素。一種簡單的方式是做feature級別的平均。這樣,可以得到更高的召回率。


當然,上述只是相同圖像檢測框架的綜述,具體的處理方式可能會不同,也可能採用一些特別的trick來提高響應速度和精度以及召回率。推薦閱讀參考文獻[1-3]


下面來接着聊相似圖搜索的技術方案。相似圖相對相同圖的難度更高,相似圖本身的定義就不是非常確定,目前,在百度推出相似圖之前,google的相似度檢測是做得比較好的。不過百度新推出的相似圖搜索確實非常驚豔。目前,大家所做的都是視覺上面的相似,而不是真正語義上的相似。


相同圖檢測可以算作是比較成熟的技術,而相似度搜索的方法則具有不確定性。下面,我猜測一下百度的方案。

首先,百度的相似圖檢測應該是基於全圖特徵的,和相同圖檢測不同的是,相似圖前面沒有采用興趣點檢測,而是直接將全圖分辨率歸一化之後,直接表示爲某種特徵(feature representation)。而這個特徵直接決定了後續搜索結果的優劣。由於一幅圖像就表示爲一個定長的feature,因此,沒辦法採用visual word的方法進行表示(或者說我不知道如何做)。爲了快速搜索,我猜測其後面應該是將這個特徵轉化爲hash序列,然後根據hash值將其映射到多個區間,只處理落在同一個區間的圖像,從而減少需要處理的索引量而提高了搜索速度。具體的,一種比較容易想到的方式是採用類似minhashLSH方法進行處理,將特徵表示爲K個獨立的hash,並根據hash結果映射到M個不同的區間上,然後只需要處理和輸入query落在某一個區間中的索引,這樣,可以大大降低搜索的運算量。這樣做的依據是,兩幅圖像之間的相似度,可以轉化爲minhash所度量的相似度,通過調整上述的hash函數數目,以及劃分的區間的數目,如果兩個圖片對應的minhash相似度大於某個閾值,則兩者必然會落在至少一個共同的區間中,從而保證了召回率。具體原理可以google simhash瞭解。


基於上述猜測,我畫了一個框圖:


百度圖像搜索探祕


由於上述處理過程中存在近似以及hash可能產生的碰撞,因此,在獲取到候選索引後,需要進一步採用re-rank的方法來重新排列結果。此時,由於待處理的數據量已經降低,因此,可以採用更原始的特徵表示來進行處理(當然,猜測這一步裏面也有很多trick,是決定效果的十分重要的因素)。


讓我們回頭來猜測相似圖搜索的全局表示。對於圖像的全局表示,有很多傳統方法,諸如顏色直方圖、紋理、邊緣、形狀等,但是,百度的相似圖搜索應該是採用了深度學習(deep learning)技術,原因呢?一個是因爲效果實在是非常贊,感覺傳統方法很難達到這樣的結果(原諒我作爲深度學習粉的腦殘程度吧),另外一個重要原因是餘凱老師自己承認了,哈哈。當然,在看到他承認之前,很多同學已經高度懷疑是用深度學習做的了。


那麼具體是用什麼方法實現的呢?我能明確的是:首先輸入一定是用了彩色圖像(不是灰度圖像),因爲一看結果就能看到顏色的相似性;其次,由於其對形狀出現的位置具有較好的魯棒性和位置相關性,因爲,在逐層抽特徵時,一方面,在全局上,用了圖像位置相關的結構,同時,在小局部,用了能提高局部魯棒性的pooling技術。當然,在相似圖片搜索中不存在類別概念,因此,可以推測其deep learning是採用了非監督(unsupervised learning)的方法得到的對圖像更抽象更具有區分度的表示。至於具體方案,我想是可以有不同選擇的。我們不妨猜測是用了深層cnn的結構吧。對上層的輸入和當前層鏈接時,抽取了重疊的很多區域來進行處理,局部小塊共用了權重,然後採用pooling逐層降低特徵的維度。當然,在頂層也可以採用其它DNN結構,這應該都是可行的。


對於相似圖搜索而言,如果只需要做到視覺的相似性(不考慮語義上的相似),如果你能搞定全局的表示問題,那麼後面的快速搜索應該可以用相對成熟的技術去搞定。而深度學習是進行全局表示的非常有前途的方法。當然,在具體實現中,一定有很多技巧和困難,做了的人才知道,我沒做過,只好yy一下。


好了,下面讓我們來看看人臉搜索。對於人臉搜索,百度推出的全網人臉搜索確實沒有先例,雖然還存在一些問題,但是,已經是非常牛的一個嘗試了。其實,人臉搜索和相似搜索在框架上,我認爲會非常相似。具體的也是分爲兩步,一步是表示,一步是快速搜索。對於人臉表示,具體需要幾步,第一步,採用人臉檢測找到圖像中人臉的數目和位置,當一幅圖像中存在多個人臉時,可以選擇最大的一張或者置信度最高的一張作爲query;第二步,採用人臉對齊(face alignment)來進行特徵點定位,得到眼睛中心和嘴巴中心以及臉頰等輪廓點位置;根據得到的特徵點位置(可以有很多不同選擇,一般採用眼睛中心點和嘴巴中心點),割取得到歸一化的人臉區域,然後,對人臉區域提取鑑別特徵,得到人臉的表示。下面給個簡單的示意圖。


百度圖像搜索探祕

關於人臉檢測、特徵點定位都具有比較成熟的算法,比如可以參考文獻[5][6]。而對於人臉表示,值得一提的是,按照餘凱老師在公開場合講的,百度也採用了具有深度結構(deep structure)的方法做的,也就是說也是應用了深度學習的方法做的。關於人臉識別領域的深度學習方法應用,我看到的一篇最好結果[4]是在LFW數據上4種特徵融合達到92%的結果,其實這個結果並不足夠好,比如最新的MSRA的工作單種特徵可以達到93%的結果[7]。而百度的方法屬於自創,在公開的文獻中是找不到參考的。不過,我認爲條條大路通羅馬,其它deep learning的框架也應該可以達到很好的效果,只是,還需要我們大家摸索一段時間。


在得到人臉的表示之後,下面要討論的是如何快速的搜索到人臉。和相似圖像搜索類似,人臉搜索得到的特徵,對於每個人臉都是定長的一個feature,容易想到的方法也是採用類似minhashlsh方法進行處理。由於,在query名人照片時,得到的返回結果中存在很多和輸入人臉差別較大的結果,所以我比較傾向於認爲在人臉搜索中也用了query expansion的方法來提高召回率。下面給出我心目中的人臉搜索處理流程圖:

百度圖像搜索探祕

同樣,在re-rank環節可以採用運算量較大的處理手段提高結果的精度。


好了,猜測時間結束。如果大家認爲我猜測的是錯誤的或者有更好的思路,請提出來討論,幫助我提高。


yy幾句。


我們看到,其一,在圖像搜索領域,以百度爲代表的國內工業界做到了非常高的水準,可以和世界上的最高水平進行pk(這句話我是認真比較過說的);其二,深度學習方法在圖像理解各個領域(人臉識別、OCR、以及相似圖搜索)的應用以及所取得了非常讚的結果;其三,在大規模圖像處理方面的方法,具有很多相通之處,比如文字搜索的方法可以對圖像搜索的方法有所啓發,進一步,可以對人臉搜索的方法進行啓發;其四,大規模圖像數據和深度學習給傳統的圖像理解帶來了新的思路和方法。


從技術角度,一方面,這個時期對於搞計算機視覺的人而言,這是個令人激動的時間點,大規模數據以及深度學習,使得很多原本進展緩慢的應用都取得了明顯的提高。而另外一方面,我們也需要看到基於智能圖像的應用還沒有非常成功的先例,即使是百度新推出的人臉搜索和相似圖像搜索,在應用上也沒有找到非常成功的應用。所以,革命尚未成功,做計算機視覺的各位同志還需要努力。


在應用方面,我覺得後面可以關注的幾個點包括:一個是關於移動方面的圖像應用,語音已經成爲移動的一個重要交互手段,圖像是否能搶得一點入口呢?另外一個是和硬件結合的智能圖像技術已經成爲非常重要的交互設備,由於有硬件傳感器/光源的幫助,在技術上可以做到相對成熟,能夠大規模產品化,這其中的代表包括kinectleap motion等,未來是否能出現和手機、智能電視結合更好的交互設備呢?


BTW: 裏面提到minHash相關的方法在大規模數據上面可能會存在問題,也許使用visual word+倒排就可以搞定人臉的索引問題,沒有驗證,僅供參考。


此外,關於相似圖搜索,考慮到其對於某些類別的結果非常的理想,猜測系統裏面存在一個物體識別模塊,其會輸出該幅圖像裏面包含某一個物體的可能性,比如共支持N類物體,則存在一個feature,第i維表示該圖像包含第i個類別物體的可能性,然後,在search時,用此feature來衡量兩幅圖像的相似性(語義級別,而非僅限於表觀級別,如此提高了常見類別的搜索效果)。


鑑於本人將於2013年8月21日正式加入百度,後續將不對此文進行編輯。


參考論文:

1.       J. Sivic and A. Zisserman. Video google: a text retrieval approach to object matching in videos. ICCV 2003.

2.       Herve Jegou , Matthijs Douze , Cordelia Schmid. Hamming embedding and weak geometric consistency for large scale image search. ECCV 2008.

3.       Relja Arandjelovic, Andrew Zisserman . Three things everyone should know to improve object retrieval. CVPR 2012.

4.       Xinyuan CaiChunheng WangBaihua Xiao, Xue Chen, Ji Zhou. Deep nonlinear metric learning with independent subspace analysis for face verification. ACM Multimedia 2012: 749-752.

5.       Jianguo Li, Tao WangYimin Zhang. Face detection using SURF cascade. ICCV Workshops 2011: 2183-2190.

6.       Xudong Cao; Yichen Wei; Fang Wen; Jian Sun. Face Alignment by Explicit Shape Regression. CVPR 2012.

 

7.       Dong Chen, Xudong Cao, Fang Wen, Jian Sun . Higher is Better: High-dimensional Feature and Its Efficient Compression for Face Verification. CVPR 2013.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章