VLAD / NetVLAD / GhostVLAD


部分參考:
場景識別之NetVLAD
論文筆記:NetVLAD: CNN architecture for weakly supervised place recognition
論文閱讀筆記-《GhostVLAD for set-based face recognition》
論文閱讀-人臉識別:GhostVLAD

三者簡單對比如下:

1.VLAD:局部聚合描述子向量,利用硬分配。
2.NetVLAD:結合CNN的VLAD網絡結構,利用軟分配。
3.GhostVLAD:在聚類中心中加入ghost 聚類中心,削弱低質量圖像在模板中的權重。

VLAD

VLAD 和 BoW、Fisher Vector 等都是圖像檢索領域的經典方法。
VLAD的全稱是Vector of Locally Aggregated Descriptors,即“局部聚集描述子向量”。顧名思義,把聚集起來的局部描述子構造成一個向量,用該向量作為圖像的全局描述子。
通常在傳統方法中我們會獲得一系列的局部特征(SIFT、SURF、ORB)之類,假設為 N 個 D 維的局部特征(通常 N 可能比較大,而且每幅圖特征多少不一,N 可能數量也不一定),我們希望通過這 N*D 維特征獲得一個可以表示圖像全局 K*D 維特征的方法(通常K是我們指定的數目,例如128維)。
VLAD算法可以看做是一種簡化的Fisher Vector【FV方法的核心思想是利用高斯混合模型(GMM),通過計算高斯混合模型中的均值、協方差等參數來表示每張圖像。該方法的優點是准確度高,但缺點是計算量較大】,其主要方法是通過聚類方法訓練一個小的碼本,對於每幅圖像中的特征找到最近的碼本聚類中心,隨后所有特征與聚類中心的差值做累加,得到一個k*d的vlad矩陣,其中k是聚類中心個數,d是特征維數(如sift是128維),隨后將該矩陣擴展為一個(k*d)維的向量,並對其L2歸一化,所得到的向量即為VLAD。關於該算法為何有效,Jegou et al.在2012年的期刊版本 Aggregating local image descriptors into compact codes 中有着相關證明。

NetVLAD

VLAD設計很巧妙,但隨着深度學習的發展,人們想要試試能不能用神經網絡代替傳統的VLAD方法,於是就有了NetVLAD,也是一個較早的使用 CNN 來進行圖像檢索或者視頻檢索的工作。
在VLAD算法的基礎上Arandjelovic et al.在 All about VLAD 一文中提出了一種改進方法。隨后,其又結合深度卷積神經網絡的相關內容,提出了NetVLAD,一個廣義VLAD層。
NetVLAD是一個將傳統方法神經網絡化的教科書般的實現。用softmax代替最近鄰的二值函數,實現了全流程可導。另一方面NetVLAD將聚類中心也作為網絡的參數進行訓練,使得聚類中心不再是狹義的聚類中心,而是更能體現特征分布的語義上的中心,從而得到比傳統聚類方法更好的結果。

首先,由於是 NN 的方法,我們這里使用 CNN Feature 代替了傳統 VLAD 中的 N 個局部描述子,CNN 是一個全局的特征,它的 Feature Map 是 W*H*D 大小,那么類比於我們之前的傳統方法 N*D,我們這里 NetVLAD 目標就是將 W*H*D (N=W*H)的特征轉換為 K*D 的特征;
其次,我們將整個 NetVLAD 看做一個 pooling layer,它的作用是實現降采樣?最終和 VLAD 一樣獲得我們想要的 K*D 維描述子。

NetVLAD與VLAD的區別就在於將VLAD的系數ak({0,1})改寫為softmax的軟分配系數。在網絡中表現為用K個1*1的卷積核卷積之后再進過softmax層得到軟分配系數 (從而可以利用卷積操作和反向傳播自動求參的功能)。將該系數與殘差(圖像特征向量x和聚類中心c的差值)相乘,累加得到V(D*K)的矩陣。最后經過兩次歸一化操作得到一個維度為(K*D)的向量。

GhostVLAD

來自DeepMind和VGG組被ACCV2018接收的論文《GhostVLAD for set-based face recognition》。
NetVLAD可以理解為一種可微分完全可訓練的VLAD編碼聚合方法,它的作用大致是自動計算特征聚類中心,計算殘差,然后把殘差加權,構建聚合特征矩陣,整個過程方便加入到神經網絡中。
NetVLAD中所有聚類中心ck都參與了聚合,GhostVLAD的改進則是增加聚類中心的個數到K+G,但是增加的聚類中心在構建聚合特征矩陣的時候不參與貢獻權重。這些多出來的不參與聚合特征矩陣構建的Ghost聚類中心,就相當於給了神經網絡丟棄一部分信息使得網絡更具鑒別性的可能,而在原來的NetVLAD中是體現不出來的。

ghostVLAD的架構,很清晰:

  1. Feature extraction: 用個預訓練的 backbone 提取特征;
  2. Aggregation: 把提取到的多個圖片的多個特征聚合為一個描述子。

GhostVLAD的作用,就是給定 N 個 \({{N_{F}}}\) 維的圖像描述子,將其轉換為一個 \({{D_{F*K}}}\) 的輸出。然后這個輸出再經過一層全連接層,得到一個 D 維的向量。
backbone論文里用的是 ResNet-50 和 SENet-50,當然,要去掉最后的池化層。

就是在計算 VLAD 的時候,多加了 “Ghost clusters”, 但是在向后傳遞的時候,又把 “Ghost clusters” 給去掉了,不算在內。
這樣一來,整個網絡訓練的時候,有些圖片會被聚類到“Ghost clusters”,但又不會參與到整個網絡的權重更新中。它在那里,又好像不在那里,所以稱為“Ghost clusters”。通過端到端的訓練,來讓網絡自主選擇哪些圖片作用較低,應該成為“Ghost clusters”。
當然,對於這個特定的 set-based face recognition 場景,我們當然是期望那些模糊的、信息量較低的圖像成為“Ghost clusters”。

ghost clusters 的有效性:

因為 GhostVLAD 聚合的是一系列圖像的描述子的殘差向量,而殘差向量是每個non-ghost cluster的加權殘差值,所以可以通過計算這些殘差向量的模來衡量其對於這一系列圖片的貢獻程度。

Ghost有“幻象”的意思,可能很多模糊的人臉的確看起來是“幻象”,這也是GhostVLAD名稱的由來。加入了ghost聚類中心,能夠有效的減小低質量圖片在人臉模板中的比重,增強高質量圖片的比重。
ghost的中心點僅僅參與軟分配的權重計算而不參與殘差的計算,所以實際上還是K個點參與的VLAD。

所謂的ghost的聚類中心就是指一些假設存在但是實際沒有的中心點,主要目的就是讓低質量圖片可以歸類在這類中心點上,從而在軟分配的時候,對實際的k個歸類點的得分都降低。比如說,x在原有k個中心點上的得分分別為0.3 0.3 0.4,加入了g=1的ghost中心之后,x在k個中心的得分表示為0.2 0.2 0.3,所以減弱了這個影響。


免責聲明!

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



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