Instance-Aware Hashing for Multi-Label Image Retrieval 解析


源代碼百度雲鏈接:http://pan.baidu.com/s/1pLTtbM7 密碼:8o2r 

 深度學習入門選了這篇文章和相應代碼,糾結了兩三個月,加上師兄講解,現在才勉強搞懂,寫出來,自己總結一下,也希望其他人少走點彎路,之后還會寫一篇關於本文代碼的博客。由於我是從小白開始的,所以這篇文章會盡可能清楚,請大牛們不要介意我嘮叨。我寫的有錯的地方,歡迎大家留言,我更正。

文章目的和哈希碼(hashing)

  講文章目的之前,先講一個概念,叫哈希(hashing)碼。當初糾結好久,查了論文,現在就憑我自己的認知寫吧,盡量直白。哈希碼總的來說,就是用一串0、1碼代表,在本文就是代表圖片啦。文中有兩種,一種叫語義哈希(Semantic Hashing)。以圖1為例,給了查詢圖片,針對這張圖生成一條語義哈希碼,這條哈希碼可以是32位,48位,64位等,在此以16位為例。假設生成的語義哈希碼是這樣0010001001011001,本文中的哈希碼是保留相似性的哈希(Similarity-preserving hashing),相似圖片生成的哈希碼也是相似的。那么它可以對數據庫中其他圖片也用相同方式(后面會講是什么方式)生成哈希碼。假設還有一張圖,哈希碼是這樣的0010001001010001,那么就可以認為這兩張圖片相似(只有一位哈希碼不同),就得到了如下圖1(5a)那樣的結果。另一種叫Category-Aware哈希。這種哈希是重點。注意名字中的Category-Aware。種類已知。如下圖1,給它一張圖,經過吧啦吧啦的處理,它對每個種類,如下圖的自行車和沙發各生成一條哈希碼。一條哈希碼代表自行車,那可以檢索帶自行車的圖;另一條哈希碼代表沙發,可以檢索帶沙發的圖。文章的目的就是對多標簽圖片(一個圖里面有多個object)生成這兩種哈希碼,可以用於檢索。(作者給的代碼里只生成哈希碼,檢索的代碼要自己寫,嗚嗚,就為這浪費了好幾天)

圖1

步驟

  從一幅圖到一條哈希碼(語義哈希)或多條哈希碼(category-aware hashing)是怎樣做到的呢?分四步,第一步,把冰箱門打開;第二步,把大象放進去。。。好啦,接下來是四個步驟。先看圖吧。

圖2.對多標簽圖像生成哈希碼的深度結構。先接受一張圖(假設該圖所在數據集一共c類),接着生成N個proposals作為輸入。先經過深度卷積子網絡(GoogLeNet),通過SPP方法得到N個臨時特征向量(每個臨時特征向量針對一個proposal)。有了臨時向量,接下來有兩個分支:一個分支計算區域的標簽概率(見圖3),另一個分支生成proposal特征。

 

1.四部曲之生成proposal

proposal是什么呢,就是用算法處理圖像,針對object把圖像分割,這樣提取的特征可以代表特定目標。如下圖2紅色部分就是proposal。也就是算法認為哪一塊可能是一個object。本文中用了Geodesic object proposals(GOP)方法生成proposal。這個方法先不細講了,以免影響大家對文章的整體理解。總之,把圖像扔給GOP方法,它會給你多個proposal,就是它認為哪里可能是一個object。這多個proposal肯定會有重疊部分,不會像圖2那么理想。其實生成的proposal是坐標的形式,左上角的橫縱坐標和右下角的橫縱坐標四個數字代表一個proposal。

圖3.proposal

2.四部曲之深度卷積子網絡

GooLeNet這個網絡提取圖像特征效果很好,作者就以它為基礎。用它提取proposals的特征。但是我前面也講了proposals個數很多,要是用戶給了一張圖,你針對這張圖里生成的每個proposal都用GoogLeNet這種深度網絡處理一遍,那黃花菜都涼了。這里,作者用到了另一種方法Spatial Pyramid Pooling(SPP)。SPP的好處是我們可以先把整張圖用GooLeNet提取特征F,然后對每個proposal,直接根據F生成固定長度的表示。(可以理解為先計算整張圖的特征F,需要哪塊再從F中提取相應位置特征)。

3.四部曲之標簽概率計算模型

  這個模型是干嘛的呢?前面不是一張圖生成了多個proposal嘛,這個模型可以告訴你,每個proposal包含每個類的概率是多少。很厲害是不是,可是我們只有整幅圖的標簽呀,還拿圖1那個自行車和沙發的圖說事,根據標簽,我們只知道圖里有自行車和沙發,你怎么知道每個proposal有自行車或沙發的概率呢?作者用了一個厲害的辦法,見圖4.對一個有着N個proposals的圖(c類),我們的工作是對每個proposal生成一個概率向量,這個向量有多長呢,c那么長,因為有c類呀。接下來如圖4,N個proposal的概率向量就堆在一起,針對每一位,都選該列最大的拿出來,放到最后的概率向量里去。舉個例子,N個proposal概率向量的第一位拿出來比,嗯,第3個proposal第一位的值最大,那就把這個值放到最后的概率向量去。這個方法叫什么cross-hypothesis max-pooling.圖4最后那部分,不就可以代表整張圖了么,因為你把它里面所有的proposals都包括了,正巧我們還有整幅圖的標簽,這就可以開始訓練了呀。原諒我先不講細節了,太痛苦。。。先講個大致。

 圖4.傳說中的標簽概率計算模型。

 

4.哈希編碼模型

  終於要開始編碼了,這部分兩個任務,一個是把整幅圖表示為1條哈希碼,就是我們前面講的語義哈希;另一個是表示為多條哈希碼,每條哈希碼和一個種類相關。種類已知哈希。(先寫這些吧,過幾天再陸續加)

 

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM