跨镜追踪(行人重识别Person Re-identification)读书笔记(二)

《Batch Feature Erasing for Person Re-identification and Beyond》

论文地址:https://arxiv.org/pdf/1811.07130.pdf

GitHub代码:https://github.com/daizuozhuo/batch-feature-erasing-network

阿里的一篇文章,思路挺新颖的。提出一种新的训练策略,大抵就是借鉴dropout思想随机丢弃特征图中的部分区域,只是处理细节和策略不同,文章称之为Batch Feature Erasing (BFE)。做法其实蛮简单的,如图所示a为输入行人图,在输出的CNN特征图中随机选取一块区域并将其特征全部置为0(全通道),如b图的红色框所示,如此便可强迫网络集中注意力学习剩下的区域,精炼网络。该方法在公开的数据集上能够达到很不错的效果,并且代码已经开源。

                                                    跨镜追踪(行人重识别Person Re-identification)读书笔记(二)_第1张图片

分析下网络框架,如下图所示,首先接一个backbone,用的是resnet-50的前4个stage,并且注意的是,去除掉stage-4前的down sampling,为的是提高最后特征图的尺寸,此处得到的维度是2048*24*8。接下来分成两个分支,上分支为baseline的全局branch,下分支便是文章提到的feature erasing branch。上分支首先采用全局平均池化将特征池化为2048*1维特征,接上1*1卷积或者说线性层降维到512*1,最后采用softmax进行ID分类及难例样本的triplet loss,ID分类类别为数据集的ID数。下分支便是特征擦除分支,设置一个擦除区域(mask)将resnet得出的特征T在该区域的特征值全部置为0,擦除区域设置算法如流程图所示,其实就是随机设置一个原特征图一定长宽比例的区域,并且这个长宽要保证足够大能够覆盖一定的语义信息(代码中设置为0.5)。以及,每个batch中该mask的区域位置都是不一样的。下分支采用的是全局最值池化,这点和上分支不同,下文有提到,erasing分支采用max池化而不是average池化是因为实验发现max池化效果更加稳定。接上线性层将池化后2048*1的特征降维到1024*1,同样的再接上softmax loss和batch hard triplet loss。

                                          跨镜追踪(行人重识别Person Re-identification)读书笔记(二)_第2张图片

                                                                                      跨镜追踪(行人重识别Person Re-identification)读书笔记(二)_第3张图片

训练时采用将上下分支特征进行ID和triplet loss的计算,测试时则直接连接上分支的512*1和下分支的1024*1特征,并计算特征之间的距离即可。

同时文章还做了模型简化测试,分别有:softmax和triplet以及融合,global branch和feature erasingbranch以及融合,erasing height ratio,erasing branch上pooling方式的性能研究等,如图所示。

    跨镜追踪(行人重识别Person Re-identification)读书笔记(二)_第4张图片     跨镜追踪(行人重识别Person Re-identification)读书笔记(二)_第5张图片    跨镜追踪(行人重识别Person Re-identification)读书笔记(二)_第6张图片     跨镜追踪(行人重识别Person Re-identification)读书笔记(二)_第7张图片

最后,该算法在reid的数据集上的指标如下所示,效果不错(without re-ranking),并且light weight。

                跨镜追踪(行人重识别Person Re-identification)读书笔记(二)_第8张图片

 

你可能感兴趣的:(跨镜追踪(行人重识别Person Re-identification)读书笔记(二))