影象檢索:INS視覺檢索
INS is a image retrieval system for instance search. The system can be used to retrieve same object, near-duplicate object, and copy detection, and developing the system is just for interest in my free time. I’ll improve the system contiously.
十一時期,窩在住的地方哪裡也沒有去,把此前閒著無事開發的INS檢索系統優化了一版。優化後的效果如下:
INS概覽
系統開發採用的C++和QT,在開發成桌面版本之前,複用SoTu 的web介面開發了一版web系統(開發的web演示系統,將會放在flask-keras-cnn-image-retrieval 中),發覺使用起來不是很方面,然後切換成桌面開發。整個開發流程相對都比較流暢,主要得益於下面兩點:
- QT與C++無縫銜接。無論是語法還是訊號槽等,理解起來都非常地直接,順暢。
- OpenCV DNN模組帶來的便捷。OpenCV從3.3開始,加入了DNN模組,所以不論是TensorFlow還是Caffe等主流框架訓練的模型,都可以使用OpenCV做推理,不用引入一堆依賴庫。
整個自由開發專案,小白菜收穫了主要有3點:
- 視覺檢索特徵學習方式進一步深入與拓寬。這一點在後面展開。
- QT多視窗通訊方式。比如主視窗開啟設定引數的視窗,將引數視窗設定的資訊傳遞給主視窗。
- 完整地打包軟體。將整個專案打包,釋出成一個完整的桌面安裝包。
整個系統的開發,對小白菜的工程能力提升最大,因為在開發整個系統之初,整個模型差不多已經訓練完了,剩下的就是把它搭成一個完整的桌面應用。下面針對視覺檢索系統的特徵與索引聊聊最近新收穫的感悟。
INS特徵學習
INS特徵學習有其相對比較固定的思路,但是在不同的應用場景下,其特徵學習的方式應該做相應的調整。簡單的列舉3個常見的場景:
- 拷貝檢測場景。最常見的工業應用場景有短視訊、圖片拷貝檢測(查重),實現流量分發控制,從而到達數字版權保護的目的。
- 例項檢索場景。比如電商例項檢索,比如拍立淘、Pinterst、Snapchat等主流的電商、社交平臺都有自己的視覺搜尋系統。
- 相似檢索場景。圖片推薦系統比如圖片廣告推薦、相似視訊推薦等場景皆有應用,人臉檢索裡面也可以用相似人臉做一些比較有趣的創意。
相似是一個比較主觀的東西,相同可以看成是相似的特例,按照這種範疇劃分,在做視覺拷貝檢測的時候,我們採用相似檢索方式訓練模型是沒有多大問題的,但是將採用這種方式訓練出來的模型應用到視訊、圖片查重中,取得的效果能不能達到最優,顯然是一個大大的問號。事實上,經過我們在大規模資料集上實驗驗證,這種針對相似檢索場景訓練出來的特徵,並沒有針對在拷貝場景訓練回來的特徵更適合視訊、圖片查重。這裡面的核心問題在於:在特徵度量空間,由於重複圖片形變過大,導致基於相似檢索場景訓練出來的模型,使得相似的圖片更靠近原始圖片,而形變過大的重複圖片,無論我們的模型如何加約束條件,都不能將它拉得比相似的更近。
所以,如果是拷貝檢測場景,應該單獨訓練一種能夠容忍影象不同形變的特徵。實際上,對於拷貝檢測場景,特徵與影象內容是無關的,也就是說,對於原始影象以及形變後的影象,特徵不需要關注影象裡面有什麼樣的內容 ,只需要關注原始影象的特徵與形變後的影象特徵,在度量空間裡,它們是不是足夠的近便可。因而對於拷貝檢測這個場景,根據”特徵不需要關注影象裡面有什麼樣的內容”這個結論,我們可以得到一條非常實用的資料經驗,即我們不需要對訓練資料做分佈上的要求 。比如,為了在A平臺上做拷貝檢測,我們完全可以使用B平臺的資料集(公開資料集),只要在訓練的時候,類標籤足夠的大,圖片的形變足夠多,那麼在B上訓練得到的模型,直接在A上應用,也能取得非常好的效果。
下圖是基於相似檢索場景和基於拷貝場景訓練出來的模型,在召回率上對比(圖片摘自指導同事做的實驗圖):
上圖xxx和xxx都是基於相似檢索場景訓練出來的模型,duplicate是基於拷貝檢測場景訓練出來的模型,可以看到,採用基於拷貝檢測場景訓練出來的模型,在視訊拷貝檢測上,召回來有了非常好的提升。同時,基於這種場景訓練出來的模型,在排序上,靠前的跟偏重圖片各種物理屬性視覺上的相似,而不是語義上的相似。
前面我們說過,相同可以看成是相似的特例,但是上面的實驗結果表明,相似檢索場景與拷貝檢測場景這兩個東西是相悖的,分別處於事物的兩個極端。要(語義)相似的話,特徵形變能力會減弱;要特徵抗形變能力增強,特徵(語義)相似性會減弱。這兩個似乎無法調和,無法統一到一起。但是,“相同可以看成是相似的特例”確實事實,所以兩者雖處於事物的兩個極端,但肯定是可以統一到一個框架中的。想想lambda、(1-lambda)以及多工學習,具體怎麼統一到同一個框架中,以後有機會再講。
至於例項檢索場景,通常需跟物體檢測結合起來才能學習好特徵,這也間接地說明,面向萬物的通用例項檢索系統,要做得非常的好,會碰到巨大的障礙。這也是視覺檢索為什麼會向垂直領域比如人臉檢索、電商商品檢索等發展的原因。
INS索引
INS針對的是一款桌面視覺檢索軟體,所以相簿大小適用於中小規模(百萬量級),對於中小規模應用場景,為了保證檢索的高召回率,INS採用了圖ANN索引演算法,到具體的方法則採用了層次可導小世界索引演算法(HNSW,在之前的博文OPQ索引與HNSW索引有相應介紹)。如果要拓展到百億以上規模的量級,索引可以採用圖索引跟向量量化結合的方法,比如HNSW和OPQ一起結合起來使用。
INS後續成長點
每個做演算法的同學,都踹懷著發明一種非常work、非常solid、非常先進並能成為經典演算法的夢想。小白菜也希望以INS為契機,進一步不斷在此領域不斷深耕細作,最後成為此領域的專家。具體到INS這款自由開發的視覺檢索軟體,小白菜會在週末自由時間,從下面方向完善INS:
- 優化特徵抽取模型,最終是把檢測模組也加上;
- 索引模組優化,目前索引模組還不是很合理,索引刪除未支援;
- 完善INS系統的穩健性,儘量避免出現軟體崩潰;
這是小白菜開發的第一款真正可以稱得上軟體的系統,小白菜期待自己能夠堅持下去。另外,INS暫時沒有開源的計劃,主要考慮到整個系統還不是很完善,效果也不是很好,等時機到了再說。