查看原文
其他

【源头活水】PAMTRI:结合仿真数据+姿态信息的车辆ReID算法

“问渠那得清如许,为有源头活水来”,通过前沿领域知识的学习,从其他研究领域得到启发,对研究问题的本质有更清晰的认识和理解,是自我提高的不竭源泉。为此,我们特别精选论文阅读笔记,开辟“源头活水”专栏,帮助你广泛而深入的阅读科研文献,敬请关注。

作者:知乎—罗驳思

地址:https://zhuanlan.zhihu.com/p/347957184

论文标题:PAMTRI: Pose-Aware Multi-Task Learning for Vehicle Re-Identification Using Highly Randomized Synthetic Data
地址:https://openaccess.thecvf.com/content_ICCV_2019/papers/Tang_PAMTRI_Pose-Aware_Multi-Task_Learning_for_Vehicle_Re-Identification_Using_Highly_Randomized_ICCV_2019_paper.pdf
作者&单位:

01

研究动机
车辆重识别(Vehicle ReID)在智慧城市等方向有着广泛的应用前景,不过相比它的“同胞兄弟”行人重识别(Person ReID),车辆ReID获得的关注要少得多——一方面是因为标注人体的数据要远多于车辆的标注数据,另一方面是因为车辆ReID问题面临“类间差异小,类内差异大”的挑战,任务难度大。为了直观地体现出车辆重识别任务中这个难点,作者选取了行人重识别数据集Market1501和车辆重识别数据集CityFlow-ReID用作分析:用经过ImageNet预训练的GoogLeNet分别提取这两个数据集的样本的特征,计算类内和类间特征的方差之比(基于欧式特征空间),发现Market1501是0.921,小于CityFlow-ReID的0.946——车辆重识别任务相比行人重识别,面临着更严峻的“类间差异小,类内差异大”的挑战。
图1
同样是重识别问题,在算法上是否有通用性呢?之前有研究发现,直接把行人重识别的算法套用在车辆重识别数据集上,算法的性能并没有达到其在行人数据集上的水准。作者认为,这是由于两个任务有着不同的难点造成的,车辆重识别的一个关键点在于提取对视角鲁棒的图片特征,尤其是对车辆的姿态信息、颜色、车型要有鲁棒性(如图1所示)。提高模型鲁棒性的一大绝招,在于构建大规模数据集用于训练。作者由此想到,用仿真程序来扩充训练数据。
如果通过“前景+背景”的方式制造仿真图片,那么背景图就是类似真实场景的图片,前景则通过三维的车辆CAD模型的二维投影+不同颜色、视角、光照等的变化来生成。在生成仿真图片的同时,我们很容易获取车辆的颜色、姿态、车型等多个维度的信息,能否用上这些信息来提升ReID模型的性能呢?作者由此提出了一个Multi-task learning的框架,结合多维度信息来提升模型的性能。


02

算法研读
先瞅一眼本文方法的流程图(如图2所示):
图2
我认为,本文的创新点主要在于构建仿真数据集多任务学习框架这两点。
构建仿真数据集
作者采用了domain randomization的思想来制作仿真数据。作者使用UnReal4 + NVIDIA Deep learning Dataset Synthesizer(NDDS)(https://github.com/NVIDIA/Dataset_Synthesizer)插件作为工具进行制作,具体信息如下:
  • 图片背景:背景图片来自于CityFlow视频数据。
  • 三维模型:选用42个车辆的CAD模型,每个模型标注了36个关键点(keypiont),共有10种颜色。
  • 图片生成:首先用Unreal4构建一个随机的环境,然后选取背景图片和车辆模型,设定随机的位姿、光照,然后将三维模型投影至二维空间,再对其进行缩放、裁剪、水平翻转、遮挡等后处理,然后生成图片。
  • 数据集规模:每个样本包括RGB图片和关键点的坐标、朝向、颜色、类型、id编号等信息。整个数据集包含402个id,共有41000张图片。
生成的仿真数据集随后将和真实数据集一起用作训练集。本文采用的数据集的规模比较表如图3所示:
图3
多任务学习框架
可行性分析:在设计框架之前,首先要想搞清楚一个问题:像颜色、车型、车辆姿态这些信息,究竟是否有助于主任务车辆重识别的训练呢?
作者认为是可行的,给出的理由如下:
  1. 车辆姿态信息隐含了车辆结构信息,这部分信息是每辆车关于视角不变的特征信息,因而模型需要学习提取之;
  2. 车型的信息也和车辆ID相关(不同车型对应不同的ID);
  3. 结合车辆的关键点信息可以定位车辆关键部位的颜色信息,从而得到更准确的车辆特征属性用于重识别。
算法概述:该算法的主干网络架构为DenseNet,该网络架构在车辆ReID中应用较广。
由于仿真数据集包括关键点坐标、车辆颜色、型号等多维度信息,作者尝试将这些信息都利用上来提升模型的性能,因此设计了一个多任务学习的框架。本文算法中,用于训练的信息渠道包括车辆颜色(color)、型号(type)、id和关键点坐标,其中颜色和型号的标签各自在主干网络输出的特征后接一个head(线性层+ReLU+线性层),并用交叉熵损失用来训练:
id的标签则采用了分类损失和度量学习中距离度量的损失hard-mining triplet loss用于训练,其中  表示距离边际参数,  、  表示候选样本到正/负样本的距离,超参数  和  各自是1,  和  都是0.125(之所以这两个超参数取得很小,是因为这两个任务与ID分类任务存在潜在的冲突:两辆有着相同颜色/品牌的车子不一定共用一个车辆id):
最重要也是最复杂的信息处理模块在于代表车辆姿态的关键点信息。作者选用了当年在人体姿态估计上取得SOTA性能的网络架构HRNet(TPAMI 2020)作为车辆姿态估计的主干网络(这么选取是有先例的,18年的IROS中有篇估计车辆姿态的文章The earth ain’t flat: Monocular reconstruction of vehicles on steep and graded roads from a moving camera用的也是当时流行的人体姿态估计网络架构Hourglass Network),训练集约为10000张仿真图像+真实数据集。
具体来说,作者设计了两种方式来利用车辆的姿态信息,这两种方式分别对应于两种不同的信息存储方式,heatmap和segments。
  • 在网络的最后一层反卷积层后面,对每个关键点提取一个heatmap(共36个);
  • 在FC层输出36个关键点对于的二维坐标和置信度之后,用它们再分割出车辆的主体部件。作者将36个关键点归为13个组(如图4所示),每组对应于一个mask,如果某一组包含的关键点的置信度低于阈值,则该组对于的图片部分被遮蔽掉(就是说这部分可能被遮挡了,需要遮掉它,以免其对应的颜色特征提取有误)。
图4
  • 得到heatmap和segments以后,将这些信息(和RGB图像在width和height这两个维度是一致的)拼接到RGB图像矩阵之后,送入主干网络。
  • 在主干网络输出特征之后,将HRNet输出的36个关键点的二维坐标+置信度信息拼接在特征之后,一起用作多任务训练。
实现细节
本文代码已开源(https://github.com/NVlabs/PAMTRI)。
本文的训练分为两部分,首先是训练姿态估计网络HRNet部分,然后是训练主干网络DenseNet121。DenseNet网络的RGB部分和HRNet的参数都是用ImageNet预训练得到的参数,而DenseNet网络的其余部分参数则是根据高斯分布随机生成的。姿态估计网络的损失函数是类似于HRNet中的损失函数的,代码如下所示:
class JointsMSELoss(nn.Module): def __init__(self, use_target_weight): super(JointsMSELoss, self).__init__() self.criterion = nn.MSELoss(reduction='mean') self.use_target_weight = use_target_weight
def forward(self, output, target, target_weight): batch_size = output.size(0) num_joints = output.size(1) heatmaps_pred = output.reshape((batch_size, num_joints, -1)).split(1, 1) heatmaps_gt = target.reshape((batch_size, num_joints, -1)).split(1, 1) loss = 0
for idx in range(num_joints): heatmap_pred = heatmaps_pred[idx].squeeze() heatmap_gt = heatmaps_gt[idx].squeeze() if self.use_target_weight: loss += 0.5 * self.criterion( heatmap_pred.mul(target_weight[:, idx]), heatmap_gt.mul(target_weight[:, idx]) ) else: loss += 0.5 * self.criterion(heatmap_pred, heatmap_gt)
return loss / num_joints

03

实验结果
实验一:验证本文方法有效的实验
在VeRi和CityFlow-ReID两个数据集上进行实验,该方法的性能取得了[准]SOTA水平(如图5,6所示):
图5
图6
实验二:消融实验
如图5,6所示,可以看到Multi-task learning、基于关键点信息的姿态估计、Heatmap/Segments等模块都能带来模型性能的提升。
实验三:车辆重识别效果可视化的实验
可视化结果如图7所示,结果表明:本文方法未解决的难点主要还是由高类间相似度和严重遮挡造成的。
图7
实验四:车辆颜色、类型的分类实验
实验结果如图8所示,结果表明:姿态embedding有助于提升这两个分类模块的性能。
图8
实验五:验证使用仿真数据是否提升了姿态估计的准确率
实验结果如图9所示,结果表明:增加了仿真数据集之后,模型的性能有了一定的提升。
图9


04

参考文献
[1] Ansari, Junaid Ahmed, et al. "The earth ain't flat: Monocular reconstruction of vehicles on steep and graded roads from a moving camera."2018 IEEE/RSJ International Conference on Intelligent Robots and Systems (IROS). IEEE, 2018.
[2] Wang, Jingdong, et al. "Deep high-resolution representation learning for visual recognition."IEEE transactions on pattern analysis and machine intelligence(2020).
[3] Tang, Zheng, et al. "Pamtri: Pose-aware multi-task learning for vehicle re-identification using highly randomized synthetic data."Proceedings of the IEEE/CVF International Conference on Computer Vision. 2019.

本文目的在于学术交流,并不代表本公众号赞同其观点或对其内容真实性负责,版权归原作者所有,如有侵权请告知删除。


“源头活水”历史文章


更多源头活水专栏文章,

请点击文章底部“阅读原文”查看



分享、在看,给个三连击呗!

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存