使用深度學習為您的圖片構建功能強大的圖像搜索引擎
幾天前,我有一種想要回顧一張我記憶猶新的舊照片的愿望,但我不知道在哪里可以找到…自從這張照片被拍攝后,我換了兩次手機,換了一次筆記本電腦,我很確定我當時已經通過Messenger把它發(fā)給了某人,但是是誰呢?如果能用一個簡單的描述性查詢搜索我所有的圖片并找到它,那該有多方便?。?hellip;
計算機視覺的最新進展提高了圖像嵌入(密集矢量表示)的相關性,使用最近的剪輯模型,為我的本地圖片實現(xiàn)類似Google的圖像搜索現(xiàn)在很容易實現(xiàn)。
無需深入研究細節(jié)(更多信息,請參閱博客帖子和論文:https://openai.com/blog/clip/),Clip是一個神經網絡,旨在通過自然語言監(jiān)督來學習圖像特征?;旧?,它使用互聯(lián)網上帶有相關字幕的公共圖像,將文本嵌入類似Bert的語言模型,并將圖像嵌入視覺轉換器。請注意,所使用的技術可以應用于其他NLP和CV模型體系結構。利用多個圖像/文本嵌入對,可以通過批量負對比訓練來微調視覺和文本嵌入模型,類似于在信息檢索的NLP領域中可以做的事情?;旧希繕耸鞘箞D像嵌入與其關聯(lián)的文本嵌入相對應(點積),并且與其他圖像的所有標題(1)不同。
剪輯通常用于“零鏡頭”分類;給定圖像和字幕列表,它會推斷圖像的最佳字幕是什么。在上面的例子(2)中,與“飛機的照片”、“鳥的照片”、“汽車的照片”相比,“狗的照片”是最好的圖片說明。…
我對圖像搜索引擎的想法(這里并不新鮮)是顛覆這一點,而不是基于圖像對字幕進行分類,而是基于文本查詢對圖像進行分類。該過程將如下所示:
- 找到給定目錄中的所有圖像
- 使用預先訓練的剪輯視覺轉換器計算每個圖像的嵌入,并將它們與圖像路徑一起存儲以供將來參考。https://openai.com/blog/clip/
- 在運行時,使用剪輯文本轉換器將用戶查詢轉換為文本嵌入。
- 計算文本嵌入與所有存儲的圖像嵌入的點積,根據其獲得的分數對所有圖像進行排序,并返回排名最高的N個圖像的路徑。
這個過程以及一些額外的特性是在我的Github存儲庫中實現(xiàn)的:https://github.com/ManuelFay/ImageSearcher. https://github.com/ManuelFay/ImageSearcher
在索引階段,代碼使用oslibrary查找給定目錄和子目錄中的所有圖片,使用轉換器和Pickle庫嵌入和存儲矢量化表示。在運行時,將加載酸洗過的嵌入,并根據嵌入的查詢進行匹配,然后返回排名第n位的圖像。提供了Flask/Gunicorn API,以便能夠高效地使用具有外部接口的搜索引擎。還提供了一個簡單的Google Image Search,類似于Vue.js構建的Web界面。
示例
為了獲取大量的圖片,我從Facebook下載了我的Messenger檔案,獲得了過去幾年里我發(fā)送和接收的大約1萬張圖片。
搜索引擎允許進行非常描述性的查詢。排名靠前的圖像排在第一位。請注意,這些圖片都是從我的大約10,000張本地圖片中提供的,因此選項池是有限的。
元查詢也是可能的。在這里,我們請求無人機拍攝的照片:
這是一個很快的下午項目,但剪輯模型的精確度給我留下了深刻的印象。要自己測試它,請使用https://github.com/ManuelFay/ImageSearcher.中的代碼歡迎對改進和額外功能的貢獻! https://github.com/ManuelFay/ImageSearcher