Carpet 是專為家用和中小型企業所設計的互動式雲端圖像搜尋系統, 它以直觀的介面帶給使用者親切的操作體驗,支援數萬至數十萬張的巨量影像資料庫。 而令人驚異之處,就在於它能在家用電腦上展現非凡的效能。
按一下上方LOGO或此處以展開流程圖。
按一下流程圖的任何一個環節以顯示詳細說明。
To Query Images
非常簡單,只要使用我們的上傳工具即可輕易上傳圖片。
1. 選擇您所要上傳的圖片
2. 選擇您想要使用的搜尋廣度以進行搜尋,廣度越低則速度越快
(選擇「上傳圖片」可以將您的圖片插入我們的圖片庫)
3. 按下「下一步」按鈕,在一般的情況下,我們只需要數秒鐘便能為您呈現結果
Extract SURF
Speeded-Up Robust Features(SURF)是一種對於2D影像的特徵的描述方法,它改進了SIFT的缺點,因此有更好的效率。
SURF以64或128個(我們選用128個)值介於-1和1之間的雙精度浮點數(double)來表示一個特徵區塊,
因此我們可以將一個特徵視為是在有限的128維度的空間上的一個座標點,若兩個特徵很相似,則它們在空間中的距離極短。
而通常,我們能為一張圖片取出大約數百至數千個特徵。有了這些特徵,我們便能比較兩張圖片是否相似。
若兩張圖片的特徵集合有許多部份是相似的,那麼我們便能推測這兩張圖片也是相似的。
關於SURF的詳細介紹,請參閱維基百科的SURF條目,及其下方所列出的外部連結
Global Clustering
為了加快搜尋的速度,首先我們利用圖片的顏色為它們分群。
首先,我們為圖片的每個像素(pixel)同時減掉該像素中,R、G、B中,含量最低的量。
這樣的好處是用最低的運算成本參考了飽和度,例如黑色、灰色和白色經過如此的處理之後都變成了黑色。
而只有那些鮮豔的顏色經過這樣的處理之後依然維持原來的色彩。
接著,我們計算一張圖的所有處理過的像素色彩,其在R、G、B的平均值。
如此一來,我們便能知道這張圖的RGB原色的含量為何,再透過一些統計決定的門檻(Threshold),
將三種原色含量依照多寡給予一個0、1、2或3的整數,3代表含量多,而0代表含量少。
於是,我們圖片庫中的圖片便能被分進編號000~333這64群中。
往後,在使用者Query一張圖片後,我們便能先找到它所屬的群,在它以及鄰近的群內搜尋,
您所選擇的搜尋廣度廣度就是在定義「鄰近」,例如10%的搜尋廣度僅搜尋與圖片所在的群曼哈頓距離≦1的所有群。
透過一次只搜尋一部份的群,便能減少大約一半的搜尋時間,而在每個群裡面進行搜尋又都是平行化的。
因此,在僅搜尋部分資料而非全部資料的演進上,我們減少了45%至90%的搜尋時間。
而最令人驚異之處,就在於搜尋較少的資料的情況下,準確度(使用avg-MAP評估)竟然較高。
同時,藉由把程式平行化,又讓我們再減少了一半的耗時。
Separate and Hash-bit
在關於Extract SURF的介紹中,我們為您簡介了SURF,它提供了良好的比對(Match)效果。
但我們需要的是搜尋(Search),它需要更好的效能。
所以我們必須設法壓縮圖片的特徵。
首先,我們使用PCA來將SURF的128維度向量壓縮成40維度,
(在預處理的過程中會產生一個投影矩陣,我們將它保留,讓Query圖片直接乘上這個特徵)
然後再透過Hash-bit將40維度的值以0為分水嶺,亦即將>0的項設為1,而≦0的項設成0。
現在,我們便能用一個長整數(Int64)來表示這40bit的壓縮後的特徵。
Primary Searching (Feature Matching)
當使用者Query了一張圖片進行搜尋時,我們會先找到這張圖片所屬的色彩群,
在它所屬的群以及鄰近的群中進行搜尋。在這之前,我們也對這張圖片也進行投影和Hash-bit,
壓縮這張圖片的所有特徵,使它們和我們資料庫內的特徵有相同的表示方式。 |
其實,我們還做了更多的改良,使得搜尋所花費的時間能夠壓縮到最短。
首先,我們將資料庫中所有的特徵再依照其中所含bit 1的數量多寡,由0個到40個再分成41群。
由於我們以兩個bit向量的Hamming Distance是否≦2為判斷兩個特徵是否相似的標準,
這道手續便可以讓我們在搜尋時省下不少時間。
而在這41群內的特徵又依照它們所代表的長整數的大小排序過了,所以整體的搜尋其實是Binary Search。
這就是為何我們的系統能在家用電腦上展現出超乎想像的效能。
Primary Result
下方為您呈現的,是我們的系統以Flickr11k這個圖片集所隨附的測試資料所得出的部分結果。
可以看出在大部分的Query中,我們的系統都展現了一定的精確度。
以average-mean Average Precision (avg-mAP)來評估,我們的系統達到了38.4%的平均正確率。
而在專題展上,我們也提供同學們和事先準備的Angry Bird絨毛玩偶合照,
利用手機上傳後立刻搜尋,得到了極佳的效果,甚至,右下方一隻被壓扁的Angry Bird也被正確搜尋出來。
To Provide Hints
但這樣仍然不夠,我們似乎遇到了瓶頸,無論我們如何改進現有的比對方法, 總是無法帶來突破性的準確率提升,反而,一些增加搜尋精確度的程序大大地拖慢了效能。 |
於是我們將系統加入了和使用者互動的功能,透過在初步結果中隨意點選幾張使用者認為是正確的圖片, 將這些資訊回饋給我們,我們的系統便能夠利用這些資訊而產生更令人滿意的搜尋結果。
Advanced Searching
至於當使用者點選了他(她)們認為是正確的圖片之後,我們如何利用這僅有的資訊對搜尋結果做出改進呢?
例如,使用者點選了看起來與原圖相似的兩張貓咪圖片,那麼我們就找出正確結果1和2中,
哪些特徵是原圖上也有出現的特徵,將它們當成是有效的特徵而收集起來,做成像右方的黃色的「新的特徵清單」。
其中,您可以發現特徵 J 出現了兩次,代表它有可能是非常重要的特徵,所以我們會特別加重它的權重。
以如此的新的特徵清單,再回到我們的資料庫中進行第二次的搜尋之後,就可以得到更好的結果。
Refined Result
整體而言,我們利用讓使用者任意選取自己滿意的結果,來為他(她)們帶來更加令人滿意的結果。
由於我們追求速度和降低成本的關係,我們的系統在第一次的搜尋準確度並沒有我們參考的論文來得好,
這是因為他們使用Bag of Words來為圖片的特徵來做近似的壓縮,而我們使用的是PCA Hash。
但是在參考了使用者提供的提示後,我們的系統準確度提升到大約70%。
Best resolution : 1280×720 or higher