PCB

3 篇文章 0 订阅
1 篇文章 0 订阅

PCB

论文:Beyond Part Models: Person Retrieval with Refined Part Pooling,ECCV,2018

链接:论文链接

代码:PCB_RPP

背景介绍
目前利用局部特征做 Re-ID 的方法大致分为下面两类:

  1. 利用在其他数据集上训练好的姿势估计模型无监督迁移到 Re-ID 数据集上,得到局部特征的定位,根据这些提取到的关键点信息,利用图像处理(图像区域联结)的方法,得到各个部件(如头、上身,下身、手,脚等),然后基于这些分割开的部件,提取局部特征信息(part-level features),如下图CVPR2017的工作Spindle Net (http://openaccess.thecvf.com/content_cvpr_2017/papers/Zhao_Spindle_Net_Person_CVPR_2017_paper.pdf) 就利用了14个人体关键点来提取局部特征,Spindle Net直接利用这些关键点来抠出ROI;

img

2.不使用额外的类似于姿势估计的模型,因此也就不需要单独对每个人体部件进行标注,而是用统一的分块方式,最常用的就是水平切块(stripe)(例如对一个行人均匀分割为固定数目的水平块)或者采用 attention 机制去locate等。

使用第一种方法虽然可以显式的定位这些人体的部件,但是也要忍受从姿势估计这个任务迁移到行人重识别任务过程中,由于 姿势估计的数据集和Re-ID的数据集之间肯定存在很大的数据偏差(datasets bias ),从而引入了新的误差,如果通过姿势估计定位带来的提升大于引入误差导致的性能降低,那么整体也是可以接受的;但是引入姿势估计一方面是模型训练的时间消耗较大,另一方面是标注的成本增加。

这篇文章第一部分PCB模型属于第二类方法,使用得是均匀水平切块(分成6块)。且对不同part用不同loss去训练(6块对应6个loss)。但是对于均匀分割来说,一个致命的问题就是:不同图像在同一part可能因为没有对齐而出现不同的语意信息(比如第一张图的从上到下的第一个水平块对应这个人的头部,但是由于第二张图顶部有很大的背景空余,导致同一个ID的人的头部出现在第四个水平块,这样会给模型的学习带来很大的干扰)。具体可以看下面这张图:

img

因此,有一些论文就针对分块提出了对齐的策略,如AlignedReID (https://arxiv.org/pdf/1711.08184.pdf) 就提出了基于SP距离的自动对齐模型,在不需要额外信息的情况下来自动对齐局部特征。而采用的方法就是最短路径距离。

而本文作者提出了 RPP(Refined Part Pooling) 对统一分割进行精修,这也是本文的一大亮点。(给我的感觉有那么一点像目标检测里two stages的Faster RCNN,第一步先得到proposals也就是比较粗略的信息,然后通过第二步进行回归精修得到准确的信息,只不过这边的第二步利用了局部信息,相当于在全局信息上增加了attention)

摘要

背景:提取局部特征为行人描述提供了细粒度的信息,并在最近的文献中被证实有益于行人的检索,但前提是每个行人图像的各个part之间要能准确的定位到,也就是能准确定位到行人的各part 部件,不能只是严格的均匀的分割区域,否则就会有很大的对齐问题需要解决。

贡献:本文没有采用姿态估计等外部线索直接定位局部特征,而是注重各局部特征间的相关性,本文贡献如下:1、作者首先设计了新的更强的baseline网络PCB(Part-based Convolutional Baseline),输入一张行人的图片,可以得到由几个part 级别的特征得到的综合描述用于Re-ID 任务的行人匹配。

2、用于后续精修的池化部分RPP(Refine Part Pooling),统一的划分不可避免地会在每一个part中带来些误差,(比如有些part 明明更像下一部分,却因为强制划分在了上一部分去了),因此RPP重新指定和分配这些part到更接近真实part的那部分去,使得精修后的每一part更具代表性,也就是学习到更具有区分性的部件信息。

RPP加上PCB,可以达到很好的实验效果,例如在Market-1501数据街上,达到了 (77.4+4.2)% mAP 和 (92.3+1.5)%rank-1 accuracy,+号后面的数字代表加上RPP后提升的效果。

引言

主要是介绍Re-ID是在一个大的数据库里,给你一个query,检索到和这个query身份一致的人,目前大部分都是用到深度学习的方法,而且当局部特征聚合时,一般都能取得比较好的效果,最新的取得 state of the art 的方法基本都是借助了 part-informed deep features,如下图所示:

img

前面提到过,要想学习到有区分性的局部特征,一个很重要的先决条件是:各part之间要能准确的 located 到。近期的这些state of the art 的方法主要就是在行人划分partition的方法上做五花八门的改变。

作者思考如何能够使得部件更好地对齐,考虑到如果引入语义分割肯定会得到比较好的指引信息,更好地学习到局部特征,但是同时也不可避免地引入了姿势估计的误差,因此本文就从另一个角度出发,强调each part的一致性,因此作者就想到了先得到一个粗略的划分,然后通过refined来得到更好的更一致性的局部信息

Method

1、PCB: A Part-based Convolutional Baseline

本文的backbone 主要采用了ResNet50, 在 **全局平均池化GAP层(global average pooling)**之前的结构和原始的Backbone模型也就是Resnet50完全一样,主要不同在于GAP层的改变,以及Resnet50 GAP后面的层都被移除了。

img

具体实现:

当输入一张行人图片H,经过backbone网络得到 Tensor T,接着将Tensor 分为p个水平块,在对p个水平块做average pooling 得到p个局部特征g(1x1xchanel),然后在用1x1卷积降低g的维度,使其降到256维,得到新的局部特征h,最后每一个h单独经过一个全连接层,都会被单独送入一个分类器中,即用p个n分类的softmax作为分类器进行训练。

在训练阶段时,通过 最小化(minimizing)交叉熵损失函数的 sum (p个分类器p个loss) 来优化PCB的训练;

在测试阶段时,分别串联向量g和h作为行人图像的特征表示

PCB的重要参数和细节:

一些超参数如

  • 输入图像的size(H和W)
  • 深度特征 tensor T的空间size(图2中T的尺寸M和N)
  • 池化后的 column vectors 的数量(p)

对PCB的效果影响很大,因此需要选择正确的超参数

其中,深度特征tensor T的空间size (M和N 是由backbone 模型的空间降采样的比例决定的)

**同时还借鉴了目标检测中的思想,减少降采样(down-sampling)的比例可以有效的提高特征的细粒度,**作者去掉了Resnet50的最后一次down-sampling,从而增大了tensor T 的size,这是PCB取得好的效果之一,这步操作增加了很少的时间消耗,却取得了可观的准确率提升。

因此,通过实验对比,作者得出PCB的最优设置参数如下:

  • 图像 resize 到 384x128 ,图像高宽比(H:W)为3:1
  • 深度特征 tensor T的空间尺寸MxN 为 24x8
  • T最后被均等地划分为6个 horizontal stripes ,即 p 取6

2、Within-Part Iconsistency

这部分描述了part内部信息不一致的现象,揭示了这种强制划分存在的问题

因为虽然这种强制均等划分简单有效,但同样会出现不可避免地由于划分的不精准带来的part与partz之间的误差,必然会降低模型的学习区分特征的能力。

因此本文从一个新的视角去分析这种 partition errors :从 the within-part inconsistency 方面,也就是part内部的不一致性

作者认为同一个part 内的column vector 应该彼此之间相似,而不同part 之间应该有差异。(和triplet loss 相似,相同ID 的人靠近)

训练PCB到收敛后,通过比较每一个column vector f 和 g 的相似度,即测量它们之间的余弦距离,找到离每一个column vector f 距离最近的 part ,具体看下面图 ,每一个 column vector 通过一个小矩形块来表示,而且根据距离其最近的part画上不同的颜色,这样就很容易进行观察。

img

我们可以看到存在很多前面说到的误差 outliers,比如Part 1 里面有一些其他颜色的小矩形,这就说明,有些column vectors更像另一个part的,所以这样的强制均匀划分是存在问题的,需要进一步改进。

3、Refine Part Pooling

由于上面提到的存在很多的误差outliers,所以文中提出了refined part pooling(RPP)来纠正这些part内的不一致现象,目标是通过column vectors f 和其最相似的part 来对齐所有的column vectors f,让他们回到属于自己的那个part 去,这些误差outliers 就能被重新定位,找到属于它自己的位置。

更具体是,在数值上测量f 和 每一个P(part)的相似度S,然后column vector f根据计算得到的S值来重采样到最相似的那个part上,公式如下:

img

(其中,F是tensor T 中所有的column vector f的集合,{}表示重采样操作,形成一个新的集合)

假定我们已经完成了上面公式1的重采样操作,并更新了每一个part,然后之前测试过的S 就不起作用了,因为位置都发生变化了,所以就需要不断的重复“相似度测量”—>“重采样操作”,直到收敛。

所以,RPP不再通过测量每一个 f 和 P之间的相似度,而是对每一个 f 用 6个 part classifier (假设共有6个parts)去预测img的值(即 f 属于某一个P 的概率),文中是通过线性函数W加Softmax来实现 ,公式2如下:

img

(其中,p是设定的分成的part的数目,这里取6;W是提到的part classifier 分类器中可训练的权重矩阵)

因此RPP做的是一个“soft”的和自适应的划分操作,来精修前面PCB的“hard”和均匀划分,且由于均匀划分带来的误差 outliers 会被重新分配它们应该属于的位置,这些都是RPP带来的好处。

结合了RPP 之后,PCB结构变为:

img

RPP 和 part classifier 和后续的降采样操作,取代了原来的 average pooling 操作,而其他层跟图2是一样的,没有变化把每个part对应的 attention map 权值叠加回 tensor T 里(即上图的 GAP过程),得到各 part 的spatial 空间压缩后的 feature vector g 后续步骤都和PCB一样

RPP部分的重新划分操作其实就是给每个像素一个空间注意力叠加,只不过这里的注意力用的是对每一个像素进行分类而得到的注意力。然后再进行均等划分。

权重矩阵W不需要各部件的label就可以训练。下面介绍如何训练part classifier.

4、Induced Training for Part Classifier

这一小节主要介绍如何训练RPP,因为没有part label 信息的辅助训练,所以使用已经学习到的PCB训练好的模型,来引导新加入的RPP的训练,RPP只有一项参数W,训练分如下几步:

1、Tensor 均等划分,并训练PCB至收敛

2、将原来的Tensor T 后面的average pooling 层替换为一个P分类的part calssifier

3、固定PCB的其它层的参数只训练part classifier 的W 参数

4、放开全部参数,fine tune 以达到overall optimization

在上面的训练过程中,第一步训练好的PCB模型会引导后续的 part classifier 的训练。第三步和第四步收敛得非常快,大约总共只需要10 多个 epochs 即可。

Experiments

1、Datasets and setting

这一小节主要介绍实验数据集和配置。

  • Datasets:Market-1501,DuckMTMC-reID,CUHK03 (new training/testing protocol)
  • setting:single-query,without re-ranking(因为re-ranking会对mAP的提升效果显著)

2、Implementation details

这一小节主要介绍一些实验的细节部分。

进行IDE作为对比实验(IDE is a commonly used baseline in deep re-ID systems),且做了一些改进(same backbone network,i.e., ResNet50, and with several optimizations over the original one),最终作者实验出来的IDE模型效果稍好过原来的(On Market-1501, our implemented IDE achieves 85.3% rank-1 accuracy and 68.5% mAP, which is a bit higher than the implementation)。

然后是2种PCB的结构进行实验比较,用相同的 backbone network ,有不同的结构to learn part-level features :

  • Variant 1:不再基于每个 img 去进行单独的ID prediction,而是合并所有的 img 成为一个img,然后得到一个ID prediction 向量。测试时同样concat所有的g或h,因为concat了,所以只有一个loss;
  • Variant 2:和 图2 一样的PCB结构,所有的 FC classifiers 的分支共享参数。

训练时,对训练集进行了水平翻转和normalization的增强操作,batch size 设置为64,以0.1的基础学习率训练模型60个epochs ,在40个epochs之后降低到 0.01 。backbone model 在 ImageNet 上进行预训练。

实验用2块NVIDIA TITAN XP GPUs ,框架使用Pytorch , 在 Market-1501 (12,936 training images)上训练一个 IDE model 和一个标准的 PCB大约分别需要 40 和 50分钟。PCB训练上消耗多的10多分钟主要是因为去掉了最后的降采样层,使得 tensor T 扩大了4倍。

3、Performance evaluation

1、变体实验

实验结果如下图:

img

结论:

  1. PCB是一个strong的baseline模型。相比 IDE,PCB 的 mAP 提升8.9-15.3%;
  2. RPP可以有效改善PCB的效果,特别是mAP。RPP 对 PCB 的 rank-1 提升 1.5-3.1%,mAP 提升 3.1-4.2%,mAP提升效果更加明显,因为rank-1是描述找到最佳匹配的衡量标准,而mAP是描述找到所有匹配的衡量标准,因此就说明RPP对于找到more challenging的匹配是有效的;
  3. 使用p个losses的有效性。图2中,最后用到了p 个分支的损失,通过对比上一小节的Variant 1单loss,可以看到Variant 1的准确率没有PCB高,多损失比单损失提升明显,mAP 提升约 10-15%,这也就说明了对每个part 分别使用一个loss去约束,对学习到每个part的区分性特征十分有效;
  4. p 个分类器(identity classifiers)不共享参数的有效性。通过对比本文的PCB(不共享参数),以及上一小节的Variant 2的共享参数,p 个分类器不共享参数相比共享参数提升 mAP 2.4-7.4%。

2、Table 2是Market-1501数据集上 state of the art 方法之间的对比:

img

只依靠统一均匀划分的PCB就超过了其他所有的方法,甚至包括那些需要额外的辅助part labels 来故意对齐part的方法。

3、Table 3是在DukeMTMC-reID and CUHK03数据集上的比较:

img

最终,本文的PCB+RPP方法对于Market-1501, Duke and CUHK03这三个最权威的Re-ID数据集:mAP = 81.6%, 69.2%, 57.5% 以及 Rank-1= 93.8%, 83.3% and 63.7% ,在三个数据集上均达到了 state of the art !且没有用到re-ranking,当用了re-ranking之后,在Market-1501数据集上,mAP 和 Rank-1 提升到了 91.9% and 95.1%

总结

本文主要有2点贡献来解决Re-ID的问题:

1.设计了**新的更强的baseline网络-PCB(Part-based Convolutional Baseline)**来学习 part-informed features,目的是作为后续的RPP的引导信息,PCB采用的是强制统一均匀划分,PCB 达到了 state of the art 的水平, 未来应该会是一个广泛应用于Re-ID任务的 strong baseline 模型;

2.不过PCB太过于暴力,因此还需要 refined 一下,于是作者又提出了用于后续精修(refined)的池化部分RPP(Refined Part Pooling),用来增强每一个 part 内部的信息一致性。Refinement 之后,相似的 column vectors 会被划分到相同的 part 内,使得每一个 part 内部信息更加趋于一致。RPP不需要 part labeling information ,并且能够很大程度改善PCB的效果。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值