論文筆記:Cross-Domain Visual Matching via Generalized Similarity Measure and Feature Learning


Cross-Domain Visual Matching,即跨域視覺匹配。所謂跨域,指的是數據的分布不一樣,簡單點說,就是兩種數據「看起來」不像。如下圖中,(a)一般的正面照片和各種背景角度下拍攝的照片;(b)攝像頭不同角度下拍到的照片;(c)年輕和年老時的人臉照;(d)證件照和草圖風格的人臉照,這些圖像都存在對應關系,但由於它們屬於不同的域,因此必須針對不同的域采用不同的特征提取方法,之后再做特征匹配。這篇論文提出用一種通用的相似模型來匹配兩個域之間的特征,並將其和特征提取流程融合在一起,統一成一個 end-to-end 的框架。

論文動機

針對這種跨域圖片檢索,常用的方法是:先用深度學習方法提取出不同域之間的特征,然后選擇一種相似度模型來度量特征之間的相似性,並以此作為網絡的代價函數來訓練網絡參數。如下圖就是一種很常用的 Siamese 網絡結構:

這里說的相似模型可以是歐氏距離、余弦相似度等等。但很多時候,我們並不知道哪種相似度模型最合適。這篇論文提出了一種通用的相似度模型——一種 Affine 變換。它表明,很多相似模型都可以用這個統一的模型來表示,而這個通用的模型也可以認為是多種相似模型的綜合。因此,我們與其糾結選擇哪種相似度模型,不如讓網絡自己學習出這個通用模型的參數,讓網絡自己選擇最適合的模型。本文的另一個貢獻在於將特征的提取與相似模型的學習融合進一個統一的框架內。

論文方法

通用的相似模型

論文認為,大多數相似模型都可以歸納為如下形式:

\[\begin{align} S(\mathbf{x}, \mathbf{y})=\begin{bmatrix}\mathbf{x}^T & \mathbf{y}^T & 1 \end{bmatrix} \begin{bmatrix} \mathbf{A} & \mathbf{C} & \mathbf{d} \\ \mathbf{C}^T & \mathbf{B} & \mathbf{e} \\ \mathbf{d}^T & \mathbf{e}^T & f \end{bmatrix} \begin{bmatrix} \mathbf{x} \\ \mathbf{y} \\ 1 \end{bmatrix} \tag{1} \end{align} \]

\(\mathbf{A}\)\(\mathbf{B}\)\(\mathbf{C}\) 是矩陣,\(\mathbf{d}\)\(\mathbf{e}\) 是兩個向量,\(\mathbf{x}\)\(\mathbf{y}\) 分別表示兩個待匹配的向量)

舉個例子,如果 \(\mathbf{A}\)=\(\mathbf{B} = \mathbf{I}\)\(\mathbf{C}=-\mathbf{I}\)\(\mathbf{d}=\mathbf{e}=\mathbf{0}\)\(f=0\),則該模型退化為歐式距離:\(S(x,y)=\mathbf{x}^T\mathbf{x}-2\mathbf{x}\mathbf{y}+\mathbf{y}^T\mathbf{y}=||\mathbf{x}-\mathbf{y}||^2\)

同時,論文還限制 \(\mathbf{A}\)\(\mathbf{B}\) 為半正定矩陣,表示同域內的自相關性,\(\mathbf{C}\) 為兩個域之間的相關性矩陣。根據半正定矩陣的性質以及 \(\mathbf(C)\) 的對稱性,我們可以將 \(\mathbf{A}\)\(\mathbf{B}\)\(\mathbf{C}\) 表示為:

\[\begin{align} \mathbf{A}=\mathbf{L_A}^T \mathbf{L_A} \notag \\ \mathbf{B}=\mathbf{L_B}^T \mathbf{L_B} \tag{2} \\ \mathbf{C}=-\mathbf{L_C^x}^T\mathbf{L_C^y} \notag \end{align} \]

這樣,(1) 式可以展開為:

\[\begin{align} \tilde{S}(\mathbf{x},\mathbf{y})&=S(\mathbf{f_1}(\mathbf{x}), \mathbf{f_2}(\mathbf{y})) \notag \\ =& \begin{bmatrix} \mathbf{f_1}(\mathbf{x})^T & \mathbf{f_2}(\mathbf{y})^T & 1 \end{bmatrix} \begin{bmatrix} \mathbf{A} & \mathbf{C} & \mathbf{d} \\ \mathbf{C}^T & \mathbf{B} & \mathbf{e} \\ \mathbf{d}^T & \mathbf{e}^T & f \end{bmatrix} \begin{bmatrix} \mathbf{f_1}(\mathbf{x}) \\ \mathbf{f_2}(\mathbf{y}) \\ 1 \end{bmatrix} \tag{3} \\ =& \mathbf{f_1}(\mathbf{x})^T\mathbf{A}\mathbf{f_1}(\mathbf{x}) + \mathbf{f_1}(\mathbf{x})^T\mathbf{C}\mathbf{f_2}(\mathbf{y}) + \mathbf{f_1}(\mathbf{x})^T\mathbf{d} + \mathbf{f_2}(\mathbf{y})^T\mathbf{C}\mathbf{f_1}(\mathbf{x}) \notag \\ &+\mathbf{f_2}(\mathbf{y})^T\mathbf{B}\mathbf{f_2}(\mathbf{y}) + \mathbf{f_2}(\mathbf{y})^T\mathbf{e} + \mathbf{d}^T\mathbf{f_1}(\mathbf{x}) + \mathbf{e}^T\mathbf{f_2}(\mathbf{y}) + f \notag \\ =&||\mathbf{L_A}\mathbf{f_1}(\mathbf{x})||^2+||\mathbf{L_B}\mathbf{f_2}(\mathbf{y})||^2+2\mathbf{d}^T\mathbf{f_1}(\mathbf{x}) \notag \\ & -2(\mathbf{L_C^x}\mathbf{f_1}(\mathbf{x}))^T(\mathbf{L_C^y}\mathbf{f_2}(\mathbf{y}))+2\mathbf{e}^T\mathbf{f_2}(\mathbf{y})+f \notag \end{align} \]

(3) 式中的 \(\mathbf{f_1}(\mathbf{x})\)\(\mathbf{f_2}(\mathbf{y})\) 分別代表 \(\mathbf{x}\)\(\mathbf{y}\) 兩個樣本經過提取得到的向量。這樣一來,我們就將半正定矩陣等限制引入到這個度量關系中。

接下來,我們考慮如何優化這個相似模型。

假設 \(D=\{(\{\mathbf{x_i}, \mathbf{y_i}\}, \ell_i) \}_{i=1}^N\) 表示訓練的數據集,\(\{\mathbf{x_i}, \mathbf{y_i}\}\) 表示來自兩個不同域的樣本,\(\ell_i\) 標記兩個樣本是否屬於同一類,如果是同一類則記為 -1,否則為 1:

\[\begin{align} \ell_i=\ell(\mathbf{x_i}, \mathbf{y_i})= \begin{cases} -1 & c(\mathbf{x})=c(\mathbf{y}) \\ 1 & otherwise \end{cases} \tag{4} \end{align} \]

我們的目標是,當兩個樣本屬於同一類時,相似度要小於 -1,否則大於 1:

\[\begin{align} \tilde{S}(\mathbf{x_i}, \mathbf{y_i})=\begin{cases} < -1 & if\ \ell_i=-1 \\ \ge 1 & otherwise \end{cases} \tag{5} \end{align} \]

基於此,論文提出如下目標函數:

\[\begin{align} G(\mathbf{W}, \mathbf{\phi})=\sum_{i=1}^N{(1-\ell_i \tilde{S}(\mathbf{x_i}, \mathbf{y_i}))_+}+\Psi (\mathbf{W}, \mathbf{\phi}) \tag{6} \end{align} \]

其中,\(\mathbf{W}, \mathbf{\phi}\) 分別表示網絡參數和相似模型參數,\(\mathbf{\phi}=(\mathbf{L_A},\mathbf{L_B},\mathbf{L_C^x},\mathbf{L_C^y},\mathbf{d},\mathbf{e},f)\)\(\Psi(\mathbf{W}, \mathbf{\phi})\) 表示正則化項。

特征學習與相似度融合

接下來要解決的是如何用一個框架將特征學習與相似模型融合在一起。論文采用如下網絡結構:

首先,我們用兩個子網絡分支分別提取兩個不同域的圖片特征,然后用一個共享的網絡將兩種特征融合起來,最后再用兩個子網絡分支計算相似模型的參數。
接下來分析一下網絡訓練的流程。首先,我們將網絡的輸出結果記為:

\[\begin{align} \tilde{x} \triangleq \begin{bmatrix} \mathbf{L_A f_1(x)} & \mathbf{L_C^x f_1(x)} & \mathbf{d}^T \mathbf{f_1(x)} \end{bmatrix}^T \notag \\ \tilde{y} \triangleq \begin{bmatrix} \mathbf{L_B f_2(x)} & \mathbf{L_C^y f_2(y)} & \mathbf{e}^T \mathbf{f_2(y)} \end{bmatrix}^T \notag \end{align} \]

為了將 \(\tilde{x}\)\(\tilde{y}\) 代入 (3) 式,我們再引入三個輔助矩陣:

\[\begin{align} & \mathbf{P_1}=\begin{bmatrix} \mathbf{I}^{r \times r} & \mathbf{0}^{r \times (r+1)} \end{bmatrix} \notag \\ & \mathbf{P_2}=\begin{bmatrix} \mathbf{0}^{r \times r} & \mathbf{I}^{r \times r} & \mathbf{0}^{r \times 1} \end{bmatrix} \notag \\ & \mathbf{P_3}=\begin{bmatrix} \mathbf{0}^{1 \times 2r} & 1^{1 \times 1} \end{bmatrix}^T \notag \end{align} \]

\(r\) 表示網絡輸出的特征維度,即 \(\mathbf{f_1}(\mathbf{x})\)\(\mathbf{f_2}(\mathbf{y})\) 的維度。

借助這三個矩陣,可以得到:\(\mathbf{L_A}\mathbf{f_1}(\mathbf{x})=\mathbf{P_1}\tilde{x}\)\(\mathbf{L_B}\mathbf{f_2}(\mathbf{y})=\mathbf{P_1}\tilde{y}\) 等。

然后我們可以把 (3) 式表示為:

\[\begin{align} \tilde{S}(x,y)=&(\mathbf{P_1} \tilde{x})^T\mathbf{P_1}\tilde{x}+(\mathbf{P_1} \tilde{y})^T\mathbf{P_1}\tilde{y} \notag \\ &-2(\mathbf{P_2}\tilde{x}^T)\mathbf{P_2}\tilde{y}+2\mathbf{P_3}^T\tilde{x}+2\mathbf{P_3}^T\tilde{y}+f \notag \end{align} \]

目標函數調整為:

\[\begin{align} G(\mathbf{W}, \mathbf{\phi}; D) =&\sum_{i=1}^N{(1-\ell_i \tilde{S}(x_i,y_i))_+ + \Psi{(\mathbf{W}, \phi)}} \notag \\ =&\sum_{i=1}^N{\{1-\ell_i [(\mathbf{P_1}\tilde{x_i})^T\mathbf{P_1}\tilde{x_i} + (\mathbf{P_1}\tilde{y_i})^T\mathbf{P_1}\tilde{y_i}} - \notag \\ & {2(\mathbf{P_2 \tilde{x_i}})^T\mathbf{P_2}\tilde{y_i} + 2\mathbf{P_3}^T\tilde{x_i}+2\mathbf{P_3}^T\tilde{y_i}+f] \}}_+ + \Psi{(\mathbf{W}, \phi)} \tag{13} \end{align} \]

公式中的 \(D\) 表示訓練的樣本對。

訓練細節優化

值得注意的是,(13) 式是一種 sample-pair-based 的表示,每次計算目標函數的時候,我們需要生成很多的樣本對,而且,由於同一張圖片可能出現在多個 pair 中,這樣就容易造成很多重復計算(例如,計算 \(\tilde{x_1}\) 時需要一次前向傳播,如果 \(x_1\) 這張圖片又出現在同一個 batch 的其他 pair 中,那我們又需要計算一次前向傳播,而這個計算結果其實是可以復用的)。所以,下一步是將它表示成 sample-based 的形式,以減少這種重復計算。

sample-based 的基本想法是,在每次 batch 訓練時,我們不是用一個個 pair 計算,而是針對每張圖片,把與該圖片相關的操作都放在一起計算。
具體點說,假設一個 batch 中的數據為 \(\{\{x_1,y_1\},\dots,\{x_n,y_n\}\}\),在原始的 sample-pair-based 的算法中,我們會針對網絡的兩個輸入計算兩個導數。

\(\tilde{x_i}\) 而言:

\[\begin{align} \frac{\partial G(\Omega_x; D)}{\partial \Omega_x}=\sum_{i=1}^n{-\frac{\partial (\ell_i \tilde{S}(x_i,y_i))}{\partial \tilde{x_i}}\frac{\partial \tilde{x_i}}{\partial \Omega_x} + \frac{\partial \Psi}{\partial \Omega_x} } \notag \end{align} \]

\(\tilde{y_i}\) 而言:

\[\begin{align} \frac{\partial G(\Omega_y; D)}{\partial \Omega_y}=\sum_{i=1}^n{-\frac{\partial (\ell_i \tilde{S}(x_i,y_i))}{\partial \tilde{y_i}}\frac{\partial \tilde{y_i}}{\partial \Omega_y} + \frac{\partial \Psi}{\partial \Omega_y} } \notag \end{align} \]

在上面兩個公式中,\(\Omega=\{W,\phi\}\)\(n\)表示sample的數量。不難發現,\(\frac{\partial \tilde{x_i}}{\partial \Omega_x}\)\(\frac{\partial \tilde{y_i}}{\partial \Omega_y}\) 都只跟各自的輸入圖片有關,跟樣本對中的另一張圖片無關,而這一項也是重復計算的根源,所以,sample-based 的計算過程是把這兩項單獨提取出來,重復利用。以 \(\tilde{x_i}\) 為例:

\[\begin{align} \frac{\partial G(\Omega_x; D)}{\partial \Omega_x}=\sum_{i=1}^m{\{ \frac{\partial \tilde{x_i}}{\partial \Omega_x} \sum_{j}(-\frac{\partial (\ell_i \tilde{S}(x_i,y_j))}{\partial \tilde{x_i}})\} + \frac{\partial \Psi}{\partial \Omega_x} } \notag \end{align} \]

上式中的 \(y_j\) 表示與 \(x_i\) 組成一個 pair 的另一張圖片。注意這里我們用\(m\)替換\(n\),因為現在只需要針對\(m\)張不同的圖片(\(n\)個樣本對中可能只有\(m\)\(x_i\)是不同的)計算導數平均值即可。

基於上述思想,論文給出了如下更加符號化的表述。對於 \(D\) 中的每一個樣本對 \(\{\mathbf{x_i},\mathbf{y_i}\}\),我們假設 \(\mathbf{z}^{j_{i,1}}=\mathbf{x_i}\)\(\mathbf{z}^{j_{i,2}}=\mathbf{y_i}\),其中,\(1 \le j_{i,1} \le M_x\)\(M_x+1 \le j_{i,2} \le M_z(=M_x+M_y)\)\(M_x\) 是樣本 \(\mathbf{x}\) 的數量,\(M_y\) 是樣本 \(\mathbf{y}\) 的數量。同理,\(\tilde{\mathbf{z}}^{j_{i,1}}=\tilde{\mathbf{x_i}}\)\(\tilde{\mathbf{z}}^{j_{i,2}}=\tilde{\mathbf{y_i}}\)
然后,我們可以將 (13) 式改寫成 sample-based 的形式:

\[\begin{align} G(\Omega;Z)=&L(\Omega;Z)+\Psi(\Omega) \notag \\ =& \sum_{i=1}^N{\{1-\ell_i [(\mathbf{P_1} \tilde{\mathbf{z}}^{j_{i,1}})^T \mathbf{P_1}\tilde{\mathbf{z}}^{j_{i,1}} + (\mathbf{P_1} \tilde{\mathbf{z}}^{j_{i,2}})^T \mathbf{P_1}\tilde{\mathbf{z}}^{j_{i,2}}} \notag \\ & {-2(\mathbf{P_2}\tilde{\mathbf{z}}^{j_{i,1}})^T\mathbf{P_2}\tilde{\mathbf{z}}^{j_{i,2}} + 2\mathbf{P_3}^T\tilde{\mathbf{z}}^{j_{i,1}} + 2\mathbf{P_3}^T\tilde{\mathbf{z}}^{j_{i,2}} + f] \}}_+ \notag \\ & + \Psi(\Omega) \tag{14} \end{align} \]

其中,\(\Omega=(\mathbf{W}, \phi)\)
梯度下降的導數為:

\[\Omega=\Omega - \alpha \frac{\partial G(\Omega)}{\partial \Omega}=\Omega - \alpha ( \frac{\partial L(\Omega)}{\Omega} + \frac{\partial \Psi}{\partial \Omega}) \]

其中,\(\alpha\) 是學習率。
這里的重點是要計算 \(\frac{\partial L(\Omega)}{\partial \Omega}\)

\[\frac{\partial L(\Omega)}{\partial \Omega}=\sum_j{\frac{\partial L}{\partial \tilde{\mathbf{z}}^j}\frac{\partial \tilde{\mathbf{z}}^j}{\partial \Omega}} \]

由於存在兩個子網絡分支,上式中,\(\tilde{\mathbf{z}}^j=\tilde{\mathbf{z}}^{j_{i,x}}\)\(\tilde{\mathbf{z}}^j=\tilde{\mathbf{z}}^{j_{i,y}}\)\(\frac{\partial \tilde{\mathbf{z}}^j}{\partial \Omega}\)
分別對應兩個網絡分支的導數(論文中 \(\tilde{\mathbf{z}}^{j_{i,x}}\)\(\tilde{\mathbf{z}}^{j_{i,y}}\) 和 (14) 式中的 \(\tilde{\mathbf{z}}^{j_{i,1}}\)\(\tilde{\mathbf{z}}^{j_{i,2}}\) 等符號混用了)。在梯度下降中,我們需要針對兩個網絡分支計算兩次導數。
對處理 \(\mathbf{x}\) 的分支,計算得到:

\[\begin{align} \frac{\partial L}{\partial \tilde{\mathbf{z}}^{j_{i,x}}}=-\sum_{j_{i,y}}{2\ell_{j_{i,x},j_{i,y}} (\mathbf{P_1}^T\mathbf{P_1}\tilde{\mathbf{z}}^{j_{i,x}}-\mathbf{P_2}^T\mathbf{P_2}\tilde{\mathbf{z}}^{j_{i,y}}+\mathbf{P_3})} \notag \end{align} \]

這里的 \(\ell_{j_{i,x},j_{i,y}}\) 就是 (4) 式中定義的 \(\ell(\mathbf{x_i}, \mathbf{y_i})\)
另外,有些樣本可能已經具備一定的區分度了,因此訓練時要剔除這些樣本。論文中引入一個標識函數 \(\mathbf{1}_{\mathbf{z}^{j_{i,x}}}(\mathbf{z}^{j_{i,y}})\),當 \(\ell_{j_{i,x},j_{i,y}}\tilde{S}(\mathbf{z}^{j_{i,x}},\mathbf{z}^{j_{i,y}})<1\) 時「由 (5) 式可知,此時 \((\mathbf{z}^{j_{i,x}},\mathbf{z}^{j_{i,y}})\) 還達不到要求的區分度」,\(\mathbf{1}_{\mathbf{z}^{j_{i,x}}}(\mathbf{z}^{j_{i,y}})=1\),否則為 0。於是,得到最終的導數公式:

\[\frac{\partial L}{\partial \tilde{\mathbf{z}}^{j_{i,x}}}=-\sum_{j_{i,y}}{2\mathbf{1}_{\mathbf{z}^{j_{i,x}}}(\mathbf{z}^{j_{i,y}})\ell_{j_{i,x},j_{i,y}} (\mathbf{P_1}^T\mathbf{P_1}\tilde{\mathbf{z}}^{j_{i,x}}-\mathbf{P_2}^T\mathbf{P_2}\tilde{\mathbf{z}}^{j_{i,y}}+\mathbf{P_3})} \tag{18} \]

對於另一個分支,我們可以用同樣的方法計算 \(\frac{\partial L}{\partial \tilde{\mathbf{z}}^{j_{i,y}}}\)

最后,把 (18) 式代回到 (17) 式,就可以得到 sample-based 的梯度公式。

論文給出了計算公式 (18) 的具體執行算法:

這個算法總結起來就是,對於每張輸入圖片 \(\mathbf{z}^j\),收集跟它組成 pair 的所有圖片,按照公式 (18) 計算 \(\frac{\partial L}{\partial \tilde{\mathbf{z}}^j}\)

下面給出的是完整的梯度下降算法:

注意到,對於每次迭代訓練的 batc h數據,算法中會將每張圖片前向傳播和后向傳播的計算結果都保存下來,然后再針對之前提及的 sample-based 的方法計算梯度。因此,相比 sample-pair-based 的形式,我們實際上只需要對每張圖片計算一次前向和后向即可,節省了大量重復計算。

樣本生成

最后,在訓練樣本對的生成上,論文采用如下方法:
每次迭代時,先隨機挑選 K 個目錄(每個目錄都包含兩個不同的域),然后從每個目錄的兩個域中,分別隨機挑選 \(O_1\)\(O_2\) 張圖片。接着,對第一個域中的每張圖片 \(A\),從第二個域中隨機挑選若干圖片和它組成樣本對,注意,從第二個域中挑選的圖片,有一半和 \(A\) 屬於同一目錄,另一半與 \(A\) 屬於不同目錄。

參考


免責聲明!

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



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