基于深度学习的Person Re-ID(特征提取)
一. CNN特征提取
通过上一篇文章的学习,我们已经知道,我们训练的目的在于寻找一种特征映射方法,使得映射后的特征 “类内距离最小,类间距离最大”,这种特征映射 可以看作是 空间投影,选择一组基,得到基于这组基的特征变换,与 PCA 有点像。
这一篇我们讲的就是基于 CNN的特征提取,特征提取过程也就是训练过程,训练结果就是 CNN 的参数。
以 Triplet Function 为例,对于 一个输入图像三元组 Trip<I, +,I->,通过一个共享参数的网络进行训练,通过下图可以看到,三个图像 <I, +,I-> 分别得到了一个特征空间,这个特征空间只要满足 前面提到的距离度量函数(后面的Distance Cost),那么训练就算完成了。
这里面有几个关键点:
- 提取全局特征与局部特征结合,可以学到更能描述行人的特征;
- CNN采用共享权值方式进行特征提取;
- Distance Cost 作为Loss函数驱动 CNN特征参数调整;
二. 训练过程
还是通过 Loss 函数来看训练过程(每N个Trip样本训练一次):
前面已经讲过,Loss函数表示两部分的误差和,即:
1) t1表示 I与正样本的距离 与 I到负样本的距离的Margin;
2) t2表示 I与正样本的距离 小于一个常数;
下面步入正题,这两个参数 是否有必要?ok,我们第一步就是去除拍脑袋参数,重新设计 Loss函数为:
那么这个函数如何改进呢? (想几个idea,哈哈)
三. New Idea
提出新的思路,如何通过训练的方法更进一步 对 Loss Func 进行加工,比如:
1)借鉴 Pair-wise 的方法,得到的结果为 负样本-正样本的差;
2)或者通过某种换算,将正样本距离映射为0,这样就只需要考虑一种距离的Loss;
3)将两种距离的比值近似为线性函数展开;
另外,针对卷积部分,有两个思路可以参考:
1)可以基于上面 Part-Model 进行分块,分块的 卷积结果 通过加权来设计,从而提高其中一部分的影响力;
2)通过马氏距离替换原来的欧式距离,马氏距离反应了方差,对类比型的距离度量更合适;
先 Mark 这几种思路,有想改进算法的朋友可以多交流!