- 第一篇用深度学习来做Re-ID的工作,介绍了很多基础性的概念
- model部分对CNN的设计思路讲的很详细,有些细节还没有完全搞懂,回头会继续理解总结~
Motivation
- 传统的re-ID的流程如下图:
![](https://i-blog.csdnimg.cn/blog_migrate/eafdf2ea8b94873e889904dec70d4022.png)
-
现在的re-ID工作要么是分开优化流程中的几个模块,要么是顺序优化,这种做法如果有用的信息在之前的步骤中丢失就难以在恢复了,影响整个系统的性能。
-
那么有没有办法来建立一个不同模块之间可以自动交互的系统呢?
- 端到端的深度学习
- 本文这里主要是针对后三个模块
Contribution
- 使用了深度学习方法,提出了filter pairing neural network(FPNN)
- 可以端到端联合处理对齐、光照与几何变化、遮挡、背景混杂的问题
- 不再需要手工提取特征,让网络从数据中来自动学习re-ID所需要的最优的特征,对于不同的摄像机视角,使用了two paired filters来编码光照变化
- 能够建模混合的复杂变化
- 一些训练网络的策略来应对检测算法造成的不对齐、过拟合、数据集中正负样本对不平衡问题
- dropout
- data augmengtation
- data balancing
- bootstrapping
- 建立了一个大规模的re-ID数据集-CUHK03,如下图:
- 13164张图像对应于1360个人
- 同时提供自动检测以及人工裁剪的行人框,可以来评估检测算法带来的不对齐问题,更加接近实际应用
![](https://i-blog.csdnimg.cn/blog_migrate/a0293bace4bd1fdaaa5f7772881827e1.png)
1.Introduction
- Re-ID定义:跨摄像头(不重叠)检索行人。 本文是用视觉特征,如今也有结合时间信息的
- 挑战:不同摄像头下的行人的各种变化:光照、姿势、视角、分辨率、背景等等
- 具体流程以及本文贡献见上文。
2.Related Work
- 以前的工作都是分开改进各个模块:
- 特征模块:手工提取特征
- 全局特征:用颜色以及纹理分布构成的视觉词汇直方图,能具有一些不变性,但是缺少空间信息,判别能力较弱
- 分块的局部特征:比较两个图像对应的块来计算相似性,问题在于如何处理不同摄像头视角下的不对齐问题
- 手工特征很难实现判别能力与鲁棒性的平衡,文中举了特征设计与光照与几何形变的关系;以及特征选取不好对后面模块有很大影响
- 本文通过深度学习结合各个模块从数据中自动学习特征能够克服上述问题
- 光照、几何转换模块:
- 之前的工作都是将变化看作单模态来建模,从训练样本中学习模型参数
- 我们的FPNN能够建模混合的复杂变化:
- filter pairs and a maxout grouping layer来学习光照转换
- a patch matching layer学习几何转换
- 相似性度量:通过学习适当的距离/相似性度量可以进一步减弱跨摄像头的变化、遮挡以及背景混杂。
- 特征模块:手工提取特征
- 相比于其他的视觉任务,我们设计了特殊的层来直接处理re-ID中跨摄像头带来的种种问题,整个过程都是整体一起优化的
3.Model
- 整体结构如下图:6层FPNN
![](https://i-blog.csdnimg.cn/blog_migrate/5d68e067242fd6becca3ff4d60d0d584.png)
3.1.Feature extraction
- 第一层:convolutional and max-pooling layer
- 输入为:两个在不同摄像机下图的图像对 I I I 与 J J J`
- 卷积层:对光照变化建模,使用了两种不同的卷积核
(
W
k
,
V
k
)
(W_k, V_k)
(Wk,Vk)分别对两张图像进行操作,定义卷积函数如下:
f
,
g
:
R
H
i
m
×
W
i
m
×
3
→
R
H
0
×
W
0
×
K
1
f, g:\mathbb{R}^{H_{im} \times W_{im} \times 3} \to \mathbb{R}^{H_0 \times W_0 \times K_1}
f,g:RHim×Wim×3→RH0×W0×K1
f i j k = σ ( ( W k ∗ I ) i j + b k I ) g i j k = σ ( ( V k ∗ J ) i j + b k J ) f^k_{ij} = \sigma((W_k * I)_{ij} + b^I_k) \\ g^k_{ij} = \sigma((V_k * J)_{ij} + b^J_k) fijk=σ((Wk∗I)ij+bkI)gijk=σ((Vk∗J)ij+bkJ)
- 本文使用了
K
1
K_1
K1对不同的卷积核
- maxpooling:使卷积得到的特征对local misalignment更加鲁棒,输出得到 H 1 × W 1 × K 1 H_1 \times W_1 \times K_1 H1×W1×K1feature map.
3.2 Patch matching
- 第二层:patch matching layer:匹配不同视角下局部块的卷积核响应
- 将第一层的输出划分成M个水平条,每个水平条有 W 1 W_1 W1个patches,相同的patch进行匹配
- 该层的输出具有
K
1
M
W
1
×
W
1
K_1MW_1 \times W_1
K1MW1×W1个patch displacement matrices:
S ( i , j ) ( i ′ , j ′ ) k = f i j k g i ′ , j ′ k S^k_{(i,j)(i^\prime,j^\prime)} = f^k_{ij}g^k_{i^\prime,j^\prime} S(i,j)(i′,j′)k=fijkgi′,j′k
- 位移矩阵用来编码不同特征下的块匹配空间模式:当 S ( i , j ) ( i ′ , j ′ ) k S^k_{(i,j)(i^\prime,j^\prime)} S(i,j)(i′,j′)k具有较高值时,patches ( i , j ) (i, j) (i,j)与 ( i ′ , j ′ ) (i^\prime,j^\prime) (i′,j′)同时对filter pair ( W k , V k ) (W_k, V_k) (Wk,Vk)编码的特定特征有较高的响应
- 下图感觉左右两个人的框应该是个 W 1 × W 1 W_1 \times W_1 W1×W1的矩阵,对应向量作外积后得到了中间图,因为有两对不同的卷积核,所以有两个patch displacement matrices
![](https://i-blog.csdnimg.cn/blog_migrate/8211951ba5494a67150e8b3c273ddcaa.png)
3.3 Modeling mixture of photometric transforms
- 第三层:maxout-grouping layer:提高patch matchting的鲁棒性
- 把 K 1 K_1 K1个channel划分为T组,每组中只有最大的激活值传到下一层。这样每一个特征被多个冗余的通道所表示
- 在反向传播过程中,只有有最大响应的filter pair通过梯度得到更新,这样使在同一个组的filter pair竞争梯度,最终只有一个filter有对训练样本的最大响应
- 通过上面的方法图像块通过学习到的filter pairs将得到稀疏响应:sparsity is a property to eliminate noise and redundancy.
- 具体过程如下图:
![](https://i-blog.csdnimg.cn/blog_migrate/7d1015e7def8ca7e087503a39691dc5b.png)
3.4.Modeling part displacement
- 第四层:another convolution and max-pooling layer:输入为 M T W 1 × W 1 MTW_1 \times W_1 MTW1×W1 patch displacement matrices,输出为 M W 2 × W 2 × K 2 MW_2 \times W_2 \times K_2 MW2×W2×K2displacement matrices of body parts on a larger scale
- 卷积核可以学习捕捉local pattern of part displacements
3.5.Model pose and viewpoint transforms
- 第五层:fully connected layer
- 全局的几何变化是不同部分位移的结合,它们的分布是多模态的
- 由第四层得到的输出可以看做各种可能的part displacement,通过fc层的组合来表示全局的几何变化,以达到对混合的全局几何变化进行建模
3.6.Identity Recognition
- 第六层:softmax layer:由第五层输出的global geometric transform来判断输入的两张图片是否为同一个人:
p ( y = i ∣ a 0 , a 1 , b 0 , b 1 , x ) = e ( a i ⋅ x + b i ) ∑ i e ( a i ⋅ x + b i ) p(y=i|\mathbf{a_0},\mathbf{a_1},b_0,b_1,\mathbf{x}) = \frac{e^{(\mathbf{a_i}\cdot\mathbf x + b_i)}}{\sum_i{e^{(\mathbf a_i \cdot \mathbf x + b_i)}}} p(y=i∣a0,a1,b0,b1,x)=∑ie(ai⋅x+bi)e(ai⋅x+bi)
c o s t = − ∑ n H y n l o g ( p ( y = 1 ∣ Φ , ( I n , J n ) ) ) + ( 1 − y n ) l o g ( 1 − p ( y = 1 ∣ Φ , ( I n , J n ) ) ) cost = - \sum_n^H{y_nlog(p(y=1|\Phi,(\mathbf I_n, \mathbf J_n))) + (1 - y_n)log(1-p(y=1|\Phi,(\mathbf I_n, \mathbf J_n)))} cost=−n∑Hynlog(p(y=1∣Φ,(In,Jn)))+(1−yn)log(1−p(y=1∣Φ,(In,Jn)))
4.Traning Strategies
4.1. Dropout
- 在第一层卷积层后面使用了dropout:使网络提高应对不同视角下检测的行人图像块之间不匹配的问题
4.2. Data Augmentation
-
在训练集中,正样本对的数量远远少于负样本对(类别不平衡问题)
-
对每个图像进行简单的平移变化,将正样本数量扩大25倍
4.3. Data balancing
- 开始mini-batch中正负样本数量为1:1,随着训练进行逐渐增加负样本对的数量到1:5
4.4.Bootstrapping
- 当网络稳定后,不断选择hard negative samples:负样本对太多了,全部训练十分耗时,选择前一个epoch中hard simple来更新网络,这样容易产生较大的loss,对网络有较大的更新
- 文中公式:
s 0 = 1 − p ( x i s a m a t c h e d p a i r ∣ Φ k ) , s k = 1 − p ( x i s a m a t c h e d p a i r ∣ Φ k ) + s k − 1 2 s_0 = 1 - p(x\ is\ a\ matched\ pair|\Phi_k), \\s_k = \frac{1-p(x\ is\ a\ matched pair|\Phi_k) + s_{k-1}}{2} s0=1−p(x is a matched pair∣Φk),sk=21−p(x is a matchedpair∣Φk)+sk−1 - 公式的目的就是每次选择把负样本对预测为正样本得分最高的(即hard negative sample),随着训练的进行,hard negative sample得分也会变低,所以 s k s_k sk也在逐渐增加
5.DataSet
- 已有的数据集规模相对较小,本文提出了一个相对较大的CUHK03数据集,如下图:
![](https://i-blog.csdnimg.cn/blog_migrate/3ee8660afb866d51e0384f3d0a97b07d.png)
-
提供了检测得到的行人图片,更接近现实的应用
-
6个摄像头可以提供多种视角的图片,更具有复杂的变化
-
图像由几个月的录像中得到,会有天气、光照等对图片的影响
6.Experimental Results
- 图片预处理:
- histogram equlization并转换到LAB color space
- input size:64 x 64 x 3并减去均值
- 网络具体配置如下图:
![](https://i-blog.csdnimg.cn/blog_migrate/6591123d8c758eaa8e0b19840f44998a.png)
6.1 Experiments on our new dataset
- 数据集划分
- train set:1160 persons
- val set:100 persons
- test set: 100 persons
- 使用手动标注图片的结果
- rank1相比最好的算法有46%的提升
![](https://i-blog.csdnimg.cn/blog_migrate/d7c57c24b5428d0a930a475c0c1410db.png)
- 使用检测算法图片的结果
- 性能并没有下降太多,说明相比其他算法,本文的算法对misalignment更加鲁棒
![](https://i-blog.csdnimg.cn/blog_migrate/a765d37e97b5f6d92b22ff2c5a2292f2.png)
-
在训练集上增加了一些其他摄像机采集的107个人的照片:增加了训练数据集的复杂性
-
相比其他算法,本文算法有一定的提升,说明了算法有较强的学习能力以及泛化能力
![](https://i-blog.csdnimg.cn/blog_migrate/6918e5a36ea94ca42ca9fb3eb71fe471.png)
6.2.Evaluation of training strategies
- 对于dropout以及bootstrap的策略进行了实验验证,效果如下图:
- 可以看到使用drop减少了网络的过拟合,提高了泛化能力
- bootstrap对准确率也有一定提升
![](https://i-blog.csdnimg.cn/blog_migrate/1fbb8907f1eb005fd432bb2d802a79d2.jpeg)
6.3.Experiments on the CUHK01 dataset
- 在较小的数据集上进行实验与现有的方法进行了比较,结果如下图:
![](https://i-blog.csdnimg.cn/blog_migrate/609a27a54519a6498d6b9be98fb41b18.png)
7. Conclusion
- 总结了本文提出网络的功效~
- 夸了下自己的训练策略与在数据集上的性能