在本文中將介紹如何查找相似圖像的理論基礎并且使用一個用于查找商標的系統為例介紹相關的技術實現,本文提供有關在圖像檢索任務中使用的推薦方法的背景信息。 閱讀本文后你將有能夠從頭開始創建類似圖像的搜索引擎的能力。
圖像檢索(又名基于內容的圖像檢索-Based Image 或 CBIR)是任何涉及圖像的搜索的基礎。
上圖來自文章 in -based Image : A (2017) arxiv:1706.06064
“按照片進行搜索”方式已經出現在各個領域周詳基于內容的圖像檢索研究,特別是在電子商務網站中(例如淘寶),并且 “通過關鍵詞搜索圖片”(對圖片內容的理解)早已被谷歌、百度,bing等搜索引擎使用(圖片搜索)。 我認為自從計算機視覺界轟動一時的 CLIP: Text and 出現后,這種方法的全球化將會加速。
在本文中,將只討論研究計算機視覺中的神經網絡的圖片搜索方法。
基礎服務組件
步驟 1. 訓練模型。 該模型可以在經典的 CV 或基于神經網絡的基礎上制作。 模型輸入——圖像,輸出——D維的特征嵌入。 在傳統的情況下,它可以是 SIFT- + Bag of Words 的組合。 在神經網絡的情況下,可以是像 、 等這樣的標準主干 + 復雜的池化層 。 如果有足夠的數據,神經網絡幾乎總是表現得很好,所以我們將專注于它們。
步驟 2. 索引圖像。 索引是在所有圖像上運行經過訓練的模型,并將獲得的嵌入寫入特殊索引以進行快速搜索的過程。
步驟 3. 搜索。 使用用戶上傳的圖像,通過模型獲得嵌入,并將該嵌入與數據庫(索引)中的其他圖像的嵌入進行比較,并且搜索結果可以按照相關性排序。
神經網絡和度量學習
在尋找相似性任務中,神經網絡的作用是特征提取器(主干網絡)。 主干網的選擇取決于數據的數量和復雜性——可以考慮從 到 的所有模型。
圖像檢索中模型的第一個特點是是神經網絡頭的設計。 在Image 排行榜()上,它們通過 pools 、Batch Drop Block等技術,可以獲得使輸出特征圖的激活分布更均勻的最佳圖像特征描述。
第二個主要的特征是損失函數的選擇。 僅在 Deep Image : A (arxiv 2101.11282)中,就有十幾個推薦的可用于配對訓練的損失函數。 所有這些損失的主要目的都是訓練神經網絡將圖像轉換為線性可分空間的向量,以便進一步通過余弦或歐幾里德距離比較這些向量:相似的圖像將具有緊密的嵌入,不相似的圖像將距離則比較遙遠。 下面我們看看幾個主要的損失函數。
損失函數
1、 Loss
這是雙重損失,即對象通過彼此之間的距離進行比較。
如果這些圖像實際上相似,則神經網絡會因圖像 p 和 q 的嵌入彼此之間的距離過遠而受到懲罰。 如果圖像實際上是彼此不同,但嵌入距離較近也會受到懲罰,但是在這種情況下設置了邊界 m(例如,0.5),這個設置是認為神經網絡已經應對了“分離”不同圖像的任務,不需要進行過多的懲罰。
2、 Loss
這個損失的目標是最小化到的距離,最大化到的距離。 Loss 最早是在 的 關于人臉識別的論文中引入的,長期以來一直是最先進的解決方案。
3、N- Loss
N- Loss是 Loss 的一種發展,它也采用 和 ,但使用多個樣本而不是一個樣本。
3、 ()
雙重損失的問題在于選擇、和的組合——如果它們只是從數據集中均勻隨機抽取,那么就會出現“light pairs”的問題,某些圖像對的損失將為 0這樣會網絡非常快的收斂到一個狀態,因為我們的輸入中的大多數樣本對它來說很“容易”,當損失為0時網絡就停止學習了。 為了避免這個問題,為樣本的配對提出復雜的挖掘技術—— hard 和hard 挖掘。 對這方面感興趣的可以看看一個叫PML 庫,它實現了許多挖掘方法,該庫包含很多關于 上的 任務的有用信息,有興趣的可以多關注下。
light pairs問題的另一個解決方案是分類損失。 主要思想是在通常的交叉熵中添加一個縮進 m,它可以使同類圖像的嵌入分布在該類的質心區域中心周圍,以便它們都與其他類的嵌入集群分開最小的角度 m。
這是一個完美的損失功能,尤其是在使用 進行基準測試時。 但是需要在有分類標記的情況下才會起作用。 畢竟如果沒有分類的標記是無法計算交叉熵的,對吧。
上圖展示了具有單類和多類標記時選擇損失函數的推薦(如果沒有標記也可以通過計算樣本的多標簽向量之間的交集百分比從后者派生成匹配對的標記)。
池化
在神經網絡架構中池化也會經常被用到,下面介紹圖像檢索任務中使用的幾個池化層。
1、R-MAC
of (R-MAC)可以看作一個池化層,它接收神經網絡的輸出特征圖(在全局池化或分類層之前)并返回根據不同窗口計算輸出激活總和的向量描述,其中每個窗口的激活是每個通道獨立的取這個窗口的最大值。
這種操作是通過圖像在不同尺度上的局部特征創建了更豐富的特征描述。這個描述符本身就是是一個嵌入的向量,所以它可以直接輸送到loss函數。
2、 Mean
Mean(GeM)是一個可以提高輸出描述符的質量簡單的池化操作,它將范式應用到平均池化操作中。通過增加,使網絡聚焦于圖像的重要部分,這在某些任務中是很有效的。
距離的測量
1、索引
高質量搜索相似圖像的另一個關鍵點是排名,即顯示給定查詢的最相關結果。 它的主要度量是建立索引的速度、搜索的速度和消耗的內存。
最簡單的方法是直接使用嵌入向量進行暴力的搜索,例如使用余弦距離。 但是當有數據量很大時就會出現問題——數百萬、數千萬甚至更多。 搜索速度明顯降低。
這些問題可以以犧牲質量為代價來解決——通過壓縮(量化)而不是以原始形式存儲嵌入。同時也改變了搜索策略——不是使用暴力搜索,而是嘗試用最小的比較次數來找到最接近給定查詢的嵌入向量。有大量的高效的框架來近似搜索最接近的對象。例如, Annoy, Faiss, Scann。除了機器學習的庫以外,傳統 在7.3 以后也支持向量的查詢。
2、重排
信息檢索領域的研究人員很早早就發現了:在收到原始搜索結果后,可以通過某種方式對集合進行重新排序來改進搜索結果的質量。
使用最接近搜索輸入的 top-k 來生成新的嵌入, 在最簡單的情況下可以取平均向量。如上圖所示,還可以對嵌入進行加權周詳基于內容的圖像檢索研究,例如通過問題中的距離或與請求的余弦距離進行加權排序。
3、k-
k- 是一組來自 top-k 的元素包括最接近請求本身的 k 個元素, 在這個集合的基礎上構建了對結果進行重新排序的過程,其中之一是在Re- Re- with k- 一文中進行的描述。 k- 比 k最近鄰更接近查詢。 因此可以粗略地將 k- 集中的元素視為已知正樣本,并更改加權規則。原始論文中包含大量計算,這超出了本文的范圍,建議有興趣的讀者閱讀。
驗證指標
最后就是檢查類似搜索質量的部分。 初學者在第一次開始從事圖像檢索項目時可能不會注意到此任務中的許多細微之處。
讓我們看一下圖像檢索任務中這些流行的指標:@k、@k、R-、mAP 和 nDCG。
1、@R
優點: 顯示相關的 top-k 的百分比。
缺點:
2、R-
與@k 相同,其中k 設置為等于相關查詢的數量。
優點: 對@k中數字k的敏感性消失,度量變得穩定
缺點: 必須知道與查詢請求相關的樣本總數(如果不是所有相關的都被標記,會產生問題)
3、@k
在 top-k 中找到的相關項目的比例
優點
4、mAP(mean )
用相關結果填充搜索結果頂部的密集程度。 可以將其視為搜索引擎用戶收到相同的信息量時需要閱讀的頁面數(越少越好)。
優點:客觀穩定的檢索質量評價
缺點:必須知道與請求相關的樣本的總數
5、nDCG ( Gain)
該度量顯示了 top-k 中的元素在它們之間的排序是否正確。 這里不會介紹這個指標的優缺點,因為這是度量指標列表中唯一考慮元素順序的一個指標。 并且有研究表明當需要考慮順序時,這個指標相當穩定并且適用于大多數情況。
6、驗證方案推薦
6a、對一組查詢和選定的相關查詢進行驗證
輸入:請求圖像和與其相關的圖像。 需要有與此查詢相關的列表形式的標記。
要計算指標:計算每個的相關矩陣,并根據有關元素相關性信息,計算指標。
6b、全庫驗證
輸入:請求的圖像,以及與它們相關的圖像。 理想情況下應該有一個驗證圖像的數據庫,所有相關查詢都在其中被標記。需要注意的是相關圖像中不應包含查詢的圖像以免它會排在 top-1,我們的任務是相關圖像而不是找到他自己本身。
要計算指標:遍歷所有請求,計算到所有元素(包括相關元素)的距離,并將它們發送到指標計算函數。
完整的樣例介紹
這里以搜索相似商標logo為例介紹圖像搜索引擎是如何工作的。
圖像索引數據庫的大小:數百萬個商標。 這里第一張圖片是一個查詢,下一行是返回的相關列表,其余行是搜索引擎按照相關性遞減的順序給出的內容。
總結
就是這樣,希望本篇文章可以那些正在構建或即將構建類似圖像搜索引擎的人提供一個完整的思路,如果你有什么好的建議也歡迎留言。