【ReID】Beyond Part Models: Person Retrieval with Refined Part Pooling (and A Stro

1,134 阅读5分钟

阅读了切片类SOTA中不能回避的工作,Beyond Part Models: Person Retrieval with Refined Part Pooling (and A Strong Convolutional Baseline)[1],主要提出了PCB和RPP方法。PCB发现通过一种非常简单的切片分离求loss方法,能够很大程度上提高ReID任务的准确率。RPP基于PCB离群值现象重新加入模块对切片进行提取,提高内部一致性。

论文一览:

image.png

模型

PCB模型结构示例如下图(就是如此简单粗犷):

image.png

由于输入被resize(transform)到了(384, 192),所以输入为(batch(b), 3, 384, 192),之后它传入被改造的ResNet50中进行特征提取,具体改造为ResNet50-layer4的conv2的stride从2改为了1,layer4的downsample的stride从2改为了1,并且去掉了最后原有的Avgpooling层和FC层(classifier),这样的改造似乎可以提点,得到更大的感受野。则ResNet50输出(b, 2048, 24, 12)的张量,即为图中的T(如果你resize到(384, 128),输出就是(b, 2048, 24, 8),这里我们以(b, 2048, 24, 12)来讲述)。

后(b, 2048, 24, 12)输入自适应的AvgPooling得到(b, 2048, 6, 1),按channel来分相当于feature map被分成了6块,这就是PCB——Part-based Convolutional Baseline的名字来源。就按channel遍历出这6块,相当于6个分支,每一块stripe是(b, 2048, 1),这就是图中的g。经过6个不同的1x1Conv得到(b, 256, 1),这就是图中的h,后(b, 256, 1)再输入6个不同的FC layer得到6个(b, num_class, 1)的张量,此时可以给softmax后再求ID loss,或者不经过softmax直接求loss,num_class是数据集的分类数,如Market1501中num_class为751。

我根据目前我所见到的配置对PCB进行了如下梳理:

如上图,一种是切6片后用1x1Conv处理,经过FC层升维直接算loss。

另一种如上图,这是悉尼科大郑哲东博士的实现,他把1x1Conv用FC替代了,其他基本上一样。

可以看到PCB是一种简单到令人发指的方法,他将图片切分成6块,并且对这6块局部特征分别直接求loss,再让这6个loss相加再统一迭代。就这样,PCB的表现却对ReID任务有着很大的提高,超越了HA-CNN和AlignedReID。

文章还针对PCB之后局部切片特征出现的离群值进行了优化,这就是文章的另外一个贡献——RPP。

如下图,作者通过聚类发现特征图内不同位置的向量之间的相似度不随水平切片统一划分,而是会出现跨切片的相似特征,这被作为离群值需要进一步优化。

image.png

作者提出了RPP方法,如下图:

image.png

还记得ResNet50提取到了T张量,按照PCB流程,本来应该用Avgpooling的。作者在Avgpooling之前加上了一个part classifier,如上图,part classifier包含一个FC层和softmax,用于在硬切片之前加入软提取,来调整离群值。

part classifier作者使用诱导训练来完成训练过程,即先把PCB(不含part classifier)训练至收敛,然后冻结所有参数,加入part classifier,后让模型继续训练,此时得到更新的就只有part classifier的参数了,等part classifier收敛之后再放开全部参数进行fine-tune。实验表明,RPP能够进一步提高PCB的性能。但由于这个部分比较笨重花时间,所以一般的项目不会用RPP,而是直接用PCB。

实验

在不同数据集上的分离实验,作者还尝试了多种方案,Variant 1为将所有feature平均后再计算loss,所以只计算一个loss,结果不如PCB。Variant 2为在FC阶段共享参数,就不用6个FC层提取了,只用1个。结果也不如PCB。

image.png

在Market1501数据集上的SOTA实验:

image.png

在DukeMTMC-reID和CUHK03数据集上的SOTA实验:

image.png

另外关于标定图像resize大小,和切片数字,作者还进行了实验如下:

image.png

可见resize大小和切片数字6是有实验支撑的。

切片数变化时的可视化结果如下图:

image.png

当切片数为6时,网络关注的6个切片部分关注区域总体上能够很好地覆盖掉图片的全部区域,但切片数逐渐提升时,切片的关注区域几乎就消失殆尽了。

对是否诱导训练的分离试验如下:

image.png

可见诱导训练是行之有效的办法。

写作

"""(Abstract. 第七句) RPP re-assigns these outliers to the parts they are closest to, resulting in refined parts with enhanced within-part consistency. """ 写的挺棒的(๑•̀ㅂ•́)و✧。

""" An essential prerequisite of learning discriminative part features is that parts should be accurately located. """ 这个点的洞见很棒。

""" Without PCB pre-training, the network learns to partition T under no induction and becomes similar to methods driven by attention mechanism. """ 这个地方的分析很棒,也很有意思。

问题

""" Afterwards, PCB employs a convolutional layer to reduce the dimension of g. According to our preliminary experiment, the dimension-reduced column vectors h are set to 256-dim. """ 降维到256 channel这个点其实可以做实验出来披露,以证明标定降到256维是合理实验的结果,但文章没有。

参考文献

[1] Sun Y, Zheng L, Yang Y, et al. Beyond part models: Person retrieval with refined part pooling (and a strong convolutional baseline)[C]//Proceedings of the European Conference on Computer Vision (ECCV). 2018: 480-496.