PSTR: End-to-End One-Step Person Search With Transformers
Abstract:
本文提出了基于transformer的one-step的person search架构PSTR,包含两个两个部分,分别为a person search-specialized (PSS) module that contains a detection encoder-decoder for person detection and a discriminative re-id decoder for person re-id。
- discriminative re-id decoder使用multi-level supervision scheme with a shared decoder进行reid的特征学习,并且使用a part attention block来编码一个人不同部分之间的关系。
- 论文还进一步引入了一种简单的多尺度方案来支持跨不同尺度的人实例重新id
Introduction
person search可以分为one step和two step:
- one step:首先使用同一个网络进行特征提取,然后使用提取的特征进行person detection和reid
- two step:首先进行person detection,识别出人,然后再对识别出来的人进行reid。与one step的区别为:在two step中一般要分别在person detection和reid中进行一次特征提取。
Motivation:
- person detection和reid所需要的特征是不同的,因为person detection需要判断的是哪个是人,reid需要判断的是这是哪个人,也就是说reid需要更加精细的特征。所以本论文中使用两种decoder,分别用于person detection和reid。
- multi-scale:不同摄像机拍出来的人的大小有所不同(多尺度),这就会导致reid阶段的图像匹配出现问题。传统的方法是通过ROI pooling或resize将图片弄成同一个分辨率,而作者研究了一种在transformer体系结构中对多尺度信息进行编码的方法,以便在人员搜索中重新识别。
图a为总览图,PSTR包含了backbone和PSS两个部分,PSS用于进行person detection和reid。图b总览图中PSS的实现细节。
backbone为ResNet或PVT,PSS包含下面两个部分:
- a detection encoder-decoder:使用提取到的特征,预测bbox和为行人的概率。从图中可知它使用了三个串联的encoder、三个串联的decoder、一个prediction head,这个网络结构是来自于deformable DETR。
- a discriminative re-id decoder:训练期间将三个串联的decoder中的某一个decoder的输出作为re-id feature queries,输入到a discriminative re-id decoder中。a discriminative re-id decoder中有一个part attention block用于获取一个人不同部分之间的关系。
为person生成一个feature。\(F_{di}\)输入到decoder中,\(F_{d3}\)作为re-id feature query,
a detection encoder-decoder:
- encoder结构:a deformable self-attention layer and a MLP layer,三个encoder的输出分别为\(F_{e_1}\) 、\(F_{e_2}\) 、\(F_{e_3}\)。
- decoder结构:a standard self-attention layer, a deformable cross-attention layer, and a MLP layer。第一个decoder的输入为\(F_{e_3}\)或待查询的N个目标行人,三个decoder的输出分别为\(F_{d_1}\) 、\(F_{d_2}\) 、\(F_{d_3}\)
【注】输入encoder和decoder中的特征向量的长度为256。
discriminative re-id decoder:
输入有四个,为什么输出只有一个。
看不懂上图到底在干嘛?
“使用query features去预测sampling points,它代表人的不同部分”,什么意思?
本网络使用attention block学习人的不同部分。
Multi-level supervision with shared decoder design:
re-id features是个啥?
在训练阶段,我们构建了一个查找表 V 和一个循环队列 U 来指导reid的特征学习。构建过程如下:将所有的有标记身份的reid feature存储在 V 中(假设为L个),并从最近的min-batch取出Q个没有标记身份的reid feature存储在U中。接下来,计算当前min-batch的reid feature与在V和U中所有特征的相似度,并更新V和U:
- 如果当前min-batch的reid feature与V中某个feature相匹配,那么就用min-batch的reid feature替换V中的feature
- 使用当前min-batch未标记的reid feature替换U中的feature。
在推理阶段
首先使用PSTR生成多个预测,每个预测包含a classification score, a bounding box and a re-id feature。
然后将the re-id feature of query person(目标行人的reid feature)当成和query person有最大重合。
最后计算gallery中的行人的reid feature与目标行人的reid feature特征之间的相似度。
【问题】reid中的匹配过程在哪里?query和gallry中的人如何匹配的,query和gallry中的人如何被提取成特征向量?
【问题】论文是否是通过如下方法解决multi-scale的问题:不同层的特征图(\(P_i\))提取得到不同大小的行人,越深层提取到的人越大,越浅层提取到的人越小。
【问题】为什么要由多个\(F_r\)
其他
Query其实就是目标行人(person of interest),而Gallery就是检索的库,也就是一大堆行人的照片或者视频。
reid feature就是\(F_{ri}\)
【问题】encoder和decoder的作用分别是什么?
【问题】“训练期间将三个串联的decoder中的某一个decoder的输出作为re-id feature queries”,这个意思是否是:detection query输入到串联的decoder中得到的输出作为re-id feature queries。
还是说re-id feature queries包括了目标图片和从Gallery中抠出来的行人。
图中detection query代表待查询的人。
【问题】Gallery中的行人和query中的行人,从原图开始经历了不一样的网络。当然,这样做的一部分原因是Gallery中的行人是在一个完全未裁剪的图片中,而query则是已经被裁剪的图片。
从图中可以看出,通过输入不同层的特征图来解决multi-scale问题。
【问题】这他妈能解决吗,这解决方法和multi-scale问题都不一致,怎么就解决了?
【问题】以下话语是什么意思:该方案在训练期间将三个检测解码器之一中的 re-id 特征查询作为输入。为什么要将某一个decoder的输出作为query,数据集中没有query吗?
【问题】“PSS模块用于多尺度扩展,以支持不同尺度下人员实例的重新识别。”,这是如何实现的?
【问题】multi-level supervision scheme是个什么东西?
【问题】a detection encoder-decoder生成的cls指的是什么?,cls不是由a discriminative re-id decoder生成的吗?
【问题】re-id feature query是什么意思?
答:应该是指detection query输入以后得到的结果
【问题】detection query又是什么?待查询的person吗?
【问题】现有的yolo算法已经很强了,是否可以将其迁移到person search中
【问题】re-id features与re-id feature query有什么区别?
【问题】cls不是确定是哪个人的意思吗?,那reid模块又是干嘛的?
object-level recognition (detection) and instance-level matching (re-id):
- object-level指识别出哪个是人
- instance-level指识别出是哪个人