從手工提取特徵到深度學習的三種圖像檢索方法

2021-01-07 雷鋒網

雷鋒網(公眾號:雷鋒網) AI 科技評論按:本文為專欄作者兔子老大為 AI 科技評論撰寫的獨家稿件,未經許可不得轉載。

前言

圖片檢索是計算機視覺,數字圖像處理等領域常見的話題,在我學習相關知識的過程中,圖像檢索算是我第一個學習的 demo,該過程都記錄在 利用python進行識別相似圖片(一) 和 利用python進行識別相似圖片(二) 兩篇文章,分別記錄了直方圖匹配,phash/average hash/dhash 三種基於哈希的方法。

圖片檢索的的大體框架大致可以分成兩步,抽取某種特徵,計算相似度。其中像上述提及的幾種方法,都是對應抽取特徵這一步,而計算相似度,則常使用歐式距離/漢明距離/Triplet 等方法。顯然的,上述方法都屬於人工設計的方法來進行抽取特徵,很自然的就想到使用當今很火熱的深度學習來代替人工的設計的方法,所以這篇文章主要介紹的就是基於深度學習的圖片檢索。

本文主要介紹的文章有以下幾篇:

Deep Learning of Binary Hash Codes for Fast Image Retrieval -- CVPR WORKSHOP 2015

DEEP SUPERVISED HASHING FOR FAST IMAGE RETRIEVAL -- CVPR 2016

Feature Learning based Deep Supervised Hashing with Pairwise Labels -- IJCAI 2016

提及到使用深度學習提取圖像特徵,業界一般認為現有的圖像模型中,前面的卷積層負責提取相關特徵,最後的全連接層或者 globel pooling 負責分類,因此一般的做法是直接取前幾層卷積的輸出,然後再計算相似度。

但這樣涉及到一個問題,首先一個是數據精度問題,因為直接取特徵輸出多是浮點數,且維度高,這會導致儲存這些圖像的特徵值會耗費大量空間,第二個因為緯度高,所以用歐式距離這種方式計算相似度,可能會觸發維度災難,令使用歐式距離代表相似度這種方法失效。

其中一種解決方法是使用 Triplet 函數構造一個能夠學習如何計算相似度的神經網絡。雖然 Triplet 這個方法並不在本文介紹範圍,但為了讀者可以橫向對比相關方法,這裡粗略的介紹以下基於 Triplet 的做法。

Triplet 的做法很簡單,人工構建一個三元集合,該三元集合包括(圖片 A,與 A 相似的圖片 B,與 A 不相似的圖片 C),期望該神經網絡接受兩個圖片輸入,若為相似,則輸出一個較高的分數,若不相似則輸出一個較低的分數。

Triplet Loss 的構造如上式所示,其中 f(xi) 為原圖在神經網絡輸出的分數,f(xj) 相似圖在神經網絡輸出的分數,f(xk) 為不相似圖片的輸出分數,在這條表達式中,我們期待相似圖片的分數之間,儘量接近,而不相似圖片的分數儘量遠離。在不考慮α時有個問題,顯然,

時,L=0,

這樣就沒有達到我們希望相似圖片和不相似圖片的分數在空間上存在一定的間隔這個目標,而 α 的設定,就是這個間隔。

顯然,α 設定太小,神經網絡不太容易區分相似圖片,而設定太大,則相當於對神經網絡提出更高的要求,神經網絡的收斂會更加不穩定。

Triplet 適合圖片檢索時每個類別的樣本不大的情況下,比如人臉檢測。但有研究指出,Triplet 集合的構建會影響訓練的效果,也就是該如何人工的定義相似和不相似,所以也有相關工作在構建 Triplet 上展開,但本文主要說的是另一種方法,即基於哈希的三種方法。

Deep Learning of Binary Hash Codes for Fast Image Retrieval -- CVPR WORKSHOP 2015

之所以先選擇這篇文章先作討論,是因為這篇文章的工作的思想和上文提及的方法,和下文要提到的文章思想過度的比較自然,方便讀者理解。

上文提及,最為簡單的方式是使用神經網絡特徵層的輸出用於計算空間距離來判斷相似度,但這樣會導致浮點型數據儲存消耗和維度災難。針對這兩個問題,這篇文章提出的方法較為直接。

浮點數據怎麼辦?將他離散成二值型數據,也就是一串 0 和 1 的哈希,這樣只需要幾個 byte 就能儲存一個數據了。

維度高怎麼辦?把他壓縮成低維唄。

所以我才說這篇文章的思路是十分直接和易於理解的,十分適合放在第一篇用於過渡。

下面說說文章的具體做法:

 

既然我們希望特徵的輸出可以離散化成 0 和 1,那就希望特徵的分布是關於某個值對稱的,然後只要根據該值作為閾值二值化即可,就這樣一步步推導,自然想到使用 tanh 或 sigmoid 函數,因為其輸出是關於 0 對稱或關於 0.5 對稱。該論文使用的 sigmoid 代替了預訓練網絡的倒數第二層的 ReLU 函數,且把輸出的維度壓縮至 12~48 之間,然後進行微調。

在微調的過程中,有幾點:一般我們的微調方法是指將前面卷積的權重凍結,然後訓練後面分類器的的權重。但在這裡,一個是因為維度的減少,第二個是 sigmoid 做中間層的激活函數可能會造成梯度消失,神經網絡的能力其實有了一定程度的衰減。因此做微調的時候,作者只是把 sigmoid 層的參數採用隨機化,其餘參數,包括分類器的大部分參數都保留下來,然後在訓練期間,sigmoid 使用 1e-3 的學習率,其餘層使用 1e-4 的學習率進行學習。對於 cifar10 來說,使用數據強化後,能達到 89% 左右的 Accuracy,圖片檢索的 map 能夠達到 85%,可以說性能上十分可觀。

論文連結:http://www.iis.sinica.edu.tw/~kevinlin311.tw/cvprw15.pdf

參考實現:https://github.com/flyingpot/pytorch_deephash

DEEP SUPERVISED HASHING FOR FAST IMAGE RETRIEVAL -- CVPR 2016

上文提及我們離散化時希望輸出的特徵的關於某個值對稱,所以有文章用了 sigmoid 作為特徵層的輸出的激活函數,但直接引用 sigmoid 函數會導致一些問題,那有沒有辦法緩解這些問題?有,那就是使用正則的方法將輸出約束到某一個範圍內。

這篇 CVPR 2016 的論文做法就是如此,並沒有像上述文章那樣使用分類網絡中間層來進行哈希,而是使用神經網絡直接學習哈希編碼,並用正則化方法將編碼進行約束。

具體來說,就是讓神經網絡的輸出通過正則的手法約束到 {-1,1} 之內(後續使用 0 作為閾值進行離散化),然後讓網絡的輸出達到以下的要求,相似的時候向量距離應該較近,反之則遠,下面通過其目標函數的表現形式來介紹具體過程

目標函數:

其中 b1,b2 是神經網絡輸出的向量,y 是一個標誌,相似時記為 0,不相似時記作 1,其中超參數有兩個,m 時用於控制 b1 和 b2 的最優間隔,和 α 是正則項的權重,可見當輸入的是相似圖片時,y=0,要使 L 最小,需要最小化兩個向量的距離和正則項。而當圖片不相似時,y=1,最少化 L 需要使得兩個向量的距離分布在 m 的附近,以及最小化正則項。

最後的正則項使得輸出的特徵向量分布在 {-1,1}。

而下圖是展示的是 m 和 α 對輸出分布的影響。

對於 CIFAR-10 來說,最終 map 只能 0.54~0.61,比上文提到的第一個方法要低,但實質這個方法要更靈活。

論文連結:https://www.cv-foundation.org/openaccess/content_cvpr_2016/papers/Liu_Deep_Supervised_Hashing_CVPR_2016_paper.pdf

參考實現:https://github.com/yg33717/DSH_tensorflow

Feature Learning based Deep Supervised Hashing with Pairwise Labels——IJCAI 2016

如圖所示,這篇文章和上文提及的第二種方法大致相似。不採用分類網絡的中間層作為特徵,而是直接採取一個神經網絡進行哈希函數的學習,並用正則方法將輸出的特徵的序列約束到一定範圍內。

下面通過目標函數的形式來說明具體過程:

其中 b 為輸出向量,Sij 是 label,相似為 1,否則為 0,ξij=bi*bjT,而 W,v 分別是最後一層的權重和偏置,而ϕ(x;ξ) 即是倒數第二層輸出。

算法的更新步驟如下:

 

該方法在 CIFAR-10 數據集上取得 0.71~0.80 的 map 值。

論文連結:https://cs.nju.edu.cn/lwj/paper/IJCAI16_DPSH.pdf

參考實現:https://github.com/jiangqy/DPSH-pytorch

總結

本文分享了之前使用手工設計規則的方法來提取圖片特徵用于衡量相似度,隨後介紹了深度學習在圖片搜索的過程,並給出三篇文章介紹了圖片檢索任務的大體框架和思路流程。

雷鋒網原創文章,未經授權禁止轉載。詳情見轉載須知。

相關焦點

  • 圖像識別中的深度學習【香港中文大學王曉剛】
    排名第2到第4位的小組採用的都是傳統的計算機視覺方法、手工設計的特徵,他們之間準確率的差別不超過1%。欣頓研究小組的準確率超出第二名10%以上,(見表1)。這個結果在計算機視覺領域產生了極大的震動,引發了深度學習的熱潮。  計算機視覺領域另一個重要的挑戰是人臉識別。
  • 圖像配準的前世今生:從人工設計特徵到深度學習
    本文將回顧圖像配準技術的前世今生,為讀者提供一個該領域的宏觀視野。圖像配準是計算機視覺領域的一個基礎步驟。在本文深入探討深度學習之前,我們先展示一下 OpenCV 中基於特徵的方法。什麼是圖像配準?圖像配準就是將同一個場景的不同圖像轉換到同樣的坐標系統中的過程。
  • 三種用Python從圖像數據中提取特徵的技術
    但數據科學家最近有這樣一種研究趨勢,他們堅信,在處理非結構化數據(尤其是圖像數據)時,深度學習模型是不斷向前發展的。毫無疑問,深度學習技術表現得非常好,但這是處理圖像的唯一方法嗎?所以在這篇適合初學者的文章中,你將了解到從圖像中生成特徵的不同方法,而後,可以將這些方法應用到自己喜歡的機器學習算法中。目錄1.機器是如何存儲圖像的?
  • 深度學習與圖像識別 圖像檢測
    CNN等為什麼對圖像領域更加有效,因為其不但關注了全局特徵,更是利用了圖像識別領域非常重要的局部特徵,應該是將局部特徵抽取的算法融入到了神經網絡中。圖像本身的局部數據存在關聯性,而這種局部關聯性的特徵是其他算法無法提取的。深度學習很重要的是對全局和局部特徵的綜合把握(2)深度學習不是一個黑箱系統。
  • 從傳統圖像算法到深度學習,文字識別技術經歷了這些變化
    文字識別的發展大致可以分為兩個階段,分別是傳統圖像算法階段和深度學習算法階段。傳統圖像算法2012年之前,文字識別的主流算法都依賴於傳統圖像處理技術和統計機器學習方法實現,利用光學技術和計算機技術把印在或寫在紙上的文字讀取出來,並轉換成一種計算機能夠接受、人又可以理解的格式。
  • 超全深度學習細粒度圖像分析:項目、綜述、教程一網打盡
    由於深度學習的蓬勃發展,近年來應用了深度學習的 FGIA 取得了顯著的進步。本文系統地對基於深度學習的 FGIA 技術進行了綜述。具體來說,本文將針對 FGIA 技術的研究分為三大類:細粒度圖像識別、細粒度圖像檢索和細粒度圖像生成。本文還討論了其他 FGIA 的重要問題,比如公開可用的基準數據集及其在相關領域的特定應用。本文在結尾處強調了未來仍需進一步探討的幾個方向以及待解決的問題。
  • 前沿研究丨深度學習在醫學超聲圖像分析中的應用
    傳統的機器學習方法通常利用從超聲圖像中提取的各種手工特徵,並與多路線性分類器(如SVM)相結合來實現特定的分類任務。然而,這些方法容易受到圖像失真的影響,例如由於內部或外部環境,或者成像過程中環境的影響而導致的形變。由於直接從原始數據(或者圖像)中學習中層或高層抽象特徵,因此深度神經網絡(DNN)有一些明顯的優勢。此外,DN能夠直接為每張圖像輸出一個個體預測標籤,從而實現感興趣目標的分類。
  • 黃浴:基於深度學習的超解析度圖像技術發展軌跡一覽
    監督SR如今已經有各種深度學習的超解析度模型。這些模型依賴於有監督的超解析度,即用LR圖像和相應的基礎事實( GT )HR 圖像訓練。 雖然這些模型之間的差異非常大,但它們本質上是一組組件的組合,例如模型框架,上採樣方法,網絡設計和學習策略等。
  • 基於深度學習的物候學識別
    點擊藍色字免費訂閱,每天收到這樣的好資訊本文闡述了基於深度學習研究人員利用農業監測網絡地面站的傳感器收集大量信息,通過將這些高質量的信息與現代圖像處理算法相結合,可逐步增加表型分析在農業上的應用潛力。本文採用深度學習方法對農業植物的物候階段進行識別和分類。利用表型平臺搭載的相機記錄植物的視覺數據(每半小時),並通過預訓練的卷積神經網絡系統(CNN)自動提取特徵圖像。研究發現,通過CNN模型獲得的結果與手工提取的特徵圖像相符合。
  • 語音識別 AI 挑戰賽上線:用深度學習三種結構,對 50 種環境聲音...
    深度學習與語音識別在目前大多數語音識別應用中,深度學習是較為常見的一種方法。它通過模仿人腦結構,建立起了一個深層神經網絡;通過輸入層輸入數據,由低到高逐層提取特徵,建立起低級特徵到高級語義之間複雜的映射關係。從而實現對輸入的複雜數據的高效處理,使機器可以像人一樣智能地學習不同的知識,並且有效地解決多類複雜的智能問題;例如:語音識別、圖像視頻識別、語言處理和信息檢索等領域。
  • 京東高級算法工程師34頁PPT詳解基於分布式向量檢索系統Vearch的大...
    在本次講解中,邸志惠老師從大規模圖像檢索任務所面臨的挑戰入手,詳細解析了Vearch的原理,最後通過三個案例展示Vearch如何在實踐場景中助力深度學習應用落地。本文為此次課程主講環節的圖文整理:正文:大家好,我是邸志惠,今天我要分享的主題為《大規模圖像檢索系統的挑戰與實踐》,我們會分為3個部分:1、大規模圖像檢索任務所面臨的挑戰2、Vearch原理解析3、Vearch在深度學習場景中的實踐大規模圖像檢索任務所面臨的挑戰隨著深度學習技術的快速發展,它的相關應用也滲透到了我們生活的方方面面
  • 基於PyTorch圖像特徵工程的深度學習圖像增強
    介紹在深度學習黑客競賽中表現出色的技巧(或者坦率地說,是任何數據科學黑客競賽) 通常歸結為特徵工程。 當您獲得的數據不足以建立一個成功的深度學習模型時,你能發揮多少創造力?我是根據自己參加多次深度學習黑客競賽的經驗而談的,在這次深度黑客競賽中,我們獲得了包含數百張圖像的數據集——根本不足以贏得甚至完成排行榜的頂級排名。那我們怎麼處理這個問題呢?
  • 語音識別 AI 挑戰賽上線:用深度學習三種結構,對 50 種環境聲音分類!
    深度學習與語音識別在目前大多數語音識別應用中,深度學習是較為常見的一種方法。它通過模仿人腦結構,建立起了一個深層神經網絡;通過輸入層輸入數據,由低到高逐層提取特徵,建立起低級特徵到高級語義之間複雜的映射關係。
  • 視頻圖像中文本的檢測、定位與提取
    目前,基於內容的視頻信息檢索(Content―Based Video Retrieval,簡稱CBVR)的研究已取得了較大的進展,但是檢索所採用的特徵基本上都是低級視覺特徵,如顏色、紋理、形狀、空間關係和運動等。
  • 深度神經網絡教你如何圖像去霧
    通過「觀察→經驗→設計」構建各式各樣的特徵來滿足各式各樣的任務需求。圖像去霧技術也是沿著手工特徵逐步地發展起來。(1)暗通道先驗[2](Dark Channel Prior,DCP)說起去霧特徵,不得不提起的暗通道先驗(DCP)。
  • 深度學習變革視覺實例搜索
    研究興趣為深度學習與計算機視覺。曾獲2015年首屆阿里巴巴大規模圖像搜索大賽二等獎,總排名第三名。摘要近些年,深度學習在各種計算機視覺任務上都取得了重大的突破,其中一個重要因素就是其強大的非線性表示能力,能夠理解圖像更深層次的信息。本文對基於深度學習的視覺實例搜索方法做了簡單的總結和概括,希望能給讀者們帶來啟發。
  • 基於深度學習的人臉識別技術全解
    特徵提取的方法一般包括基於知識的提取方法或者基於代數特徵的提取方法。 以基於知識的人臉識別提取方法中的一種為例,因為人臉主要是由眼睛、額頭、鼻子、耳朵、下巴、嘴巴等部位組成,對這些部位以及它們之間的結構關係都是可以用幾何形狀特徵來進行描述的,也就是說每一個人的人臉圖像都可以有一個對應的幾何形狀特徵,它可以幫助我們作為識別人臉的重要差異特徵,這也是基於知識的提取方法中的一種。
  • 深度學習不是萬靈藥!神經網絡3D建模其實只是圖像識別?
    但近期一項研究表明,幾乎所有基於深度神經網絡的3D中重建工作,實際上並不是重建,而是圖像分類。深度學習並不是萬能的!深度學習並不是萬靈藥。近幾年,隨著深度學習的大熱,許多研究攻克了如何從單張圖片生成3D模型。從某些方面似乎再次驗證了深度學習的神奇——doing almost the impossible。
  • 零基礎入門深度學習(六):圖像分類任務之LeNet和AlexNet
    :0001 導讀本課程是百度官方開設的零基礎入門深度學習課程,主要面向沒有深度學習技術基礎或者基礎薄弱的同學,幫助大家在深度學習領域實現從0到1+的跨越。圖像分類在許多領域都有著廣泛的應用,如:安防領域的人臉識別和智能視頻分析等,交通領域的交通場景識別,網際網路領域基於內容的圖像檢索和相冊自動歸類,醫學領域的圖像識別等。
  • 光學精密工程 | 實例特徵深度鏈式學習全景分割網絡
    該網絡由基本的鏈式單元組合而成,根據單元結構對特徵信息處理方法的不同,鏈式單元分為特徵保持鏈和特徵增強鏈兩種。特徵保持鏈是鏈式網絡特徵提取過程的輸入級,保證輸入信息的完整性,而後將特徵傳遞到特徵增強鏈結構;特徵增強鏈通過自身的拓展來加深網絡深度,提升特徵提取能力。鏈式學習網絡由於具有良好的深度堆疊特性,可以獲取豐富的邊緣特徵信息,提高分割精度。