这篇论文是要解决 person re-identification 的问题。所谓 person re-identification,指的是在不同的场景下识别同一个人(如下图所示)。这里的难点是,由于不同场景下的角度、背景亮度等等因素的差异,同一个人的图像变化非常大,因而不能使用一般的图像分类的方法。论文采用了一种相似性度量的方法来促使神经网络学习出图像的特征,并根据特征向量的欧式距离来确定相似性。除此之外,论文通过对网络的训练过程进行分析,提出了一种计算效率更高的模型训练方法。

论文方法

相似性模型

论文采用的度量相似性的方法基于一个简单的想法:相同类型图片(同一个人)的特征之间的距离要小于不同类型的特征。假设我们有一些训练样本,现在把它们组织成三元组的形式 \({O_i}=<O_i^1,O_i^2,O_i^3>\),其中 \(O_i^1\) 和 \(O_i^2\) 表示属于同一类(匹配)的样本,\(O_i^1\) 和 \(O_i^3\) 表示不匹配的样本。设网络的参数为 \(W=\{W_j\}\),\(F_W(I)\) 表示图像 \(I\) 的特征向量,则我们的目标是使下面的不等式成立:
\[
\begin{align}
||F_W(O_i^1)-F_W(O_i^2)||^2<||F_W(O_i^1)-F_W(O_i^3)||^2 \tag{2}
\end{align}
\]
基于此,论文给出如下目标函数:
\[
\begin{align}
f(W,O)=\sum_{i=1}^n{\max{\{||F_W(O_i^1)-F_W(O_i^2)||^2-||F_W(O_i^1)-F_W(O_i^3)||^2, C \}}} \tag{3}
\end{align}
\]
其中,\(C\) 被设为 -1。

网络结构

这三个子网络是共享参数的,目标函数是要让 \(F_W(O_i^2)\) 和 \(F_W(O_i^1)\) 靠近,而 \(F_W(O_i^3)\) 远离前两个特征向量。

训练算法

设 \(d(W,O_i)=||F_W(O_i^1)-F_W(O_i^2)||^2-||F_W(O_i^1)-F_W(O_i^3)||^2\),基于 (3) 式,我们可以得到梯度下降的导数公式:
\[
\begin{align}
& \frac{\partial f}{\partial W_j}=\sum_{O_i}{h(O_i)} \tag{7} \\
& h(O_i)=\begin{cases} \frac{\partial d(W,O_i)}{\partial W_j} & if\ d(W,O_i)>C \\ 0 & otherwise \end{cases} \tag{8}
\end{align}
\]

\[
\begin{align}
\frac{\partial d(W,O_i)}{\partial W_j}=&2(F_W(O_i^1)-F_W(O_i^2))\frac{\partial F_W(O_i^1)- \partial F_W(O_i^2)}{\partial W_j} \notag \\
&-2(F_W(O_i^1)-F_W(O_i^3))\frac{\partial F_W(O_i^1)- \partial F_W(O_i^3)}{\partial W_j} \tag{9}
\end{align}
\]

由此可知,每次梯度下降时,我们只需要计算出每个 triplet 的 \(F_W(O_i^1)\)、\(F_W(O_i^2)\)、\(F_W(O_i^3)\) 和 \(\frac{\partial F_W(O_i^1)}{\partial W_j}\)、\(\frac{\partial F_W(O_i^2)}{\partial W_j}\)、\(\frac{\partial F_W(O_i^3)}{\partial W_j}\),就可以得到 \(W_j\) 的导数。这种导数计算方式是基于 triplet 的,每对样本需要计算三次前向和三次后向。由此可以得到论文中的算法 1:

然而,在实际训练时,一张图片可能在一个 batch 的多个 triplet 中出现,因此可以用一些技巧来减少一些重复计算的工作。重新审视导数的计算流程:
\[
\begin{align}
\frac{\partial f}{\partial W}=\sum_{O_i}(\frac{\partial f}{\partial F_W(O_i^1)}\frac{\partial F_W(O_i^1)}{\partial W_j} + \frac{\partial f}{\partial F_W(O_i^2)}\frac{\partial F_W(O_i^2)}{\partial W_j} + \frac{\partial f}{\partial F_W(O_i^3)}\frac{\partial F_W(O_i^3)}{\partial W_j}) \notag
\end{align}
\]
可以发现,重复计算的地方在于 \(\frac{\partial F_W(O_i^1)}{\partial W_j}\)、\(\frac{\partial F_W(O_i^2)}{\partial W_j}\)、\(\frac{\partial F_W(O_i^3)}{\partial W_j}\) 这些项,而且这些项也只跟对应的输入图像有关,所以,我们的想法是把这些可以重复使用的项提取出来。
假设一个训练 batch 中的图片集合为 \(\{I_k^{'}\}=\{O_i^1\} \cup \{O_i^2\} \cup \{O_i^3\}\),\(m\) 为图片数量,则针对一张图片的导数计算公式为:
\[
\begin{align}
\sum_{O_i}\frac{\partial f}{\partial F_W(I_i)}\frac{\partial F_W(I_i)}{W_j}=\frac{\partial F_W(I_i)}{W_j}\sum_{O_i}\frac{\partial f}{\partial F_W(I_i)}\notag
\end{align}
\]
因此整个 batch 上的导数如下:
\[
\begin{align}
\frac{\partial f}{\partial W}=\sum_{i=1}^m\{\frac{\partial F_W(I_i)}{W_j}\sum_{O_i}\frac{\partial f}{\partial F_W(I_i)}\} \tag{18}
\end{align}
\]
\(\frac{\partial F_W(I_i)}{W_j}\) 只跟输入 \(I_i\) 有关,因此接下来要解决 \(\sum_{O_i}\frac{\partial f}{\partial F_W(I_i)}\) 的计算问题。后者的计算是跟 triplet 相关的:
\[
\begin{align}
\frac{\partial f}{\partial F_W(I_K^{'})}=\sum_{i=1}^{n}\frac{\partial \max\{||F_W(O_i^1)-F_W(O_i^2)||^2-||F_W(O_i^1)-F_W(O_i^3)||^2,C\}}{\partial F_W(I_K^{'})} \tag{19}
\end{align}
\]
由此我们可以得出论文中的算法 3:

在此基础上,将 \(\frac{\partial f}{\partial F_W(I_K^{'})}\) 代入到 (18) 式,就得到了一个 batch 上的导数计算公式,即论文中的算法 2:

注意到,我们已经把原来基于 triplet 的计算方式转变为基于 image 的方式。后者可以大大减少计算量,我们只需要先计算出每张图片对应的 \(F_W(I_K^{'})\) 和 \(\frac{\partial F_W{I_K^{'}}}{\partial W_j}\),剩下的工作就是根据算法 2 计算出最终的导数。因此,这种计算方式使得整体的运算量只跟图片的数量有关。

最后要考虑的是样本生成的问题。最简单的想法是从所有可能的 triplet 组合中,随机挑选出若干的 triplet用于训练,但这种做法存在一个问题,考虑到数据集中的类别可能很大,因此所有 triplet 中包含的图片类别可能都是不同的,换句话说,网络在每次迭代时,处理的图片可能都是完全不同的,论文认为这种方式不利于参数的收敛。因此论文采用如下的 triplet 生成策略:在每轮迭代中,首先挑选出若干的类别(每个类别代表一个人),然后,对每个类别中的图片,从同类别的其他图片中随机选一张组成正样本对,从不同类别的图片中随机选一张组成负样本对。这种做法的优点在于,它的训练样本是梯度下降的时候动态生成的,假设显存中可以存放 300 张图片,那么对于最简单的 triplet 生成方法,可能只能放 100 对训练样本,但论文采用的生成策略,可以先从选定的几个类别中选出 300 张图片,然后进行 triplet 组合,等一次迭代训练完成后,再根据这 300 张图片随机生成另一种 triplet 组合。所以,这种方法不仅可以让网络更好地学习出样本对之间的距离约束关系,而且减少了频繁的 IO 操作。

下面给出完整的算法:

参考

论文笔记:Deep feature learning with relative distance comparison for person re-identification的更多相关文章

  1. 论文笔记——Deep Residual Learning for Image Recognition

    论文地址:Deep Residual Learning for Image Recognition ResNet--MSRA何凯明团队的Residual Networks,在2015年ImageNet ...

  2. Note for Reidentification by Relative Distance Comparison

    link Reidentification by Relative Distance Comparison Challenge: large visual appearance changes cau ...

  3. 论文笔记: Deep Learning based Recommender System: A Survey and New Perspectives

    (聊两句,突然记起来以前一个学长说的看论文要能够把论文的亮点挖掘出来,合理的进行概括23333) 传统的推荐系统方法获取的user-item关系并不能获取其中非线性以及非平凡的信息,获取非线性以及非平 ...

  4. [论文阅读] Deep Residual Learning for Image Recognition(ResNet)

    ResNet网络,本文获得2016 CVPR best paper,获得了ILSVRC2015的分类任务第一名. 本篇文章解决了深度神经网络中产生的退化问题(degradation problem). ...

  5. [论文理解]Deep Residual Learning for Image Recognition

    Deep Residual Learning for Image Recognition 简介 这是何大佬的一篇非常经典的神经网络的论文,也就是大名鼎鼎的ResNet残差网络,论文主要通过构建了一种新 ...

  6. 论文笔记之:Learning Cross-Modal Deep Representations for Robust Pedestrian Detection

    Learning Cross-Modal Deep Representations for Robust Pedestrian Detection 2017-04-11  19:40:22  Moti ...

  7. 深度学习论文笔记-Deep Learning Face Representation from Predicting 10,000 Classes

    来自:CVPR 2014   作者:Yi Sun ,Xiaogang Wang,Xiaoao Tang 题目:Deep Learning Face Representation from Predic ...

  8. 论文笔记-Deep Affinity Network for Multiple Object Tracking

    作者: ShijieSun, Naveed Akhtar, HuanShengSong, Ajmal Mian, Mubarak Shah 来源: arXiv:1810.11780v1 项目:http ...

  9. 论文笔记之:Learning Multi-Domain Convolutional Neural Networks for Visual Tracking

    Learning Multi-Domain Convolutional Neural Networks for Visual Tracking CVPR 2016 本文提出了一种新的CNN 框架来处理 ...

随机推荐

  1. Facebook第三方网页登录(JavaScript SDK)

    文档网址:https://developers.facebook.com/docs/facebook-login/web#logindialog 一.应用配置  https://www.faceboo ...

  2. 在OSGI容器Equinox中嵌入HttpServer

    原文地址:https://liugang594.iteye.com/blog/1328050 简单介绍一下如何在一个osgi的bundle中内嵌使用http服务 一.基础 首先看看在OSGI中怎么启动 ...

  3. c++ fmt 库安装和使用示例

    安装: 1 git clone  https://github.com/fmtlib/fmt.git 2. cmake . 3. make && make install  #incl ...

  4. GEC6818连接Ubuntu,下载程序至开发板

    使用  secure CRT连接开发板,可视化操作 连接成功 设置临时ip ubuntu 要跟 开发板同一网段: ip前三位相同 代码:sudo service tftpd-hpa restart 代 ...

  5. @Valid注解的使用(转)

    原文地址:http://blog.csdn.net/xzmeasy/article/details/76098188 @Valid注解用于校验,所属包为:javax.validation.Valid. ...

  6. python关于二分查找

    楔子 如果有这样一个列表,让你从这个列表中找到66的位置,你要怎么做? l = [2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72 ...

  7. vuex学习总结

    vuex 学习 mapState,mapGetters 一般也写在 computed 中 , mapActions 一般写在 methods中.

  8. c语言第三次课

    一.const的使用1)const声明变量为只读 ; a = ; //error ] = "abcdef"; const char *p = buf; char const *p ...

  9. [模板] 匈牙利算法&&二分图最小字典序匹配

    匈牙利算法 简介 匈牙利算法是一种求二分图最大匹配的算法. 时间复杂度: 邻接表/前向星: \(O(n * m)\), 邻接矩阵: \(O(n^3)\). 空间复杂度: 邻接表/前向星: \(O(n ...

  10. Java多线程处理某个线程超时的问题

    ExecutorService exec = Executors.newFixedThreadPool(4); List<Future<Integer>> futures = ...