论文阅读之《CrowdPose: Efficient Crowded Scenes Pose Estimation and A new Benchmark》

介绍    

    近日,上海交通大学电子信息与电气工程学院卢策吾团队(MVIG组)的论文《CrowdPose: Efficient Crowded Scenes Pose Estimation and A New Benchmark》被CVPR2019(计算机视觉领域顶级会议)接收。该论文主要是针对此前AlphaPose系统的优化,构建了CrowdPose数据集,用来衡量算法在拥挤场景中的性能,并提出了一个高效的算法来解决拥挤人群中的姿态估计问题,实验结果比起当前最好的算法有较大提高。

paper:CrowdPose: Efficient Crowded Scenes Pose Estimation and A new Benchmark

code:CrowdPose

该文并没有着重于设计新的网络结构,而转向于设计新的label和loss计算方式,从而提高原有的网络pose检测能力.

 

论文

Introduction

为了衡量人体姿态估计算法的性能,学术界与工业界建立了越来越多的公开数据集,如MPII、MSCOCO、AI Challenger。然而,这些数据集的图片通常采集于日常生活场景,缺乏拥挤人群场景的数据。对于由数据驱动的深度学习方法来说,数据集的分布不均衡,意味着算法性能的不均衡。同时,随着学术界对人体姿态研究的深入,算法追求像素级的精度,简单场景下的性能已经逐步逼近人类的精度,但在拥挤场景中往往会失效。

针对以上的情况,上海交大MVIG组的研究者开源了CrowdPose数据集。CrowdPose数据集中的图片,有着均匀分布的拥挤程度。既可以评估算法在日常非拥挤情况下的表现,也可以评估其在极度拥挤时的性能。目前,数据集开源了2万张图片,评估工具也已经上线。在未来的几个月时间內,研究者将会不断扩大数据的规模,开源一个更大的数据集。文章根据这个现状,提出了一个新的dataset(CrowdPose dataset)以及一个新的loss计算方法.

CrowdPose Dataset


首先文章提出了一个’crowd index’用来表示图片’crowd’的程度,计算方式如下:
n表示图片上总共有多少个人, 分母表示第i ii个人总共标注了多少个关键点,分子表示在这个人的bbox bboxbbox里面,有多少个关键点不属于这个人但却出现在这个人的bbox bboxbbox内(所以才叫’crowd’). 显而易见,这个值越大,说明人’crowd’的程度越严重.

文章收集了一系列的图片,全部使用14joints表示,一开始粗略使用了30000张图片,然后从这里面挑选出20000张质量好的图片,作为crowd dataset.下图文章使用的crowd dataset和其它开源的数据集在 crowd index上的一个对比:

 

就算法而言,在拥挤人群的场景下,由于人群过于密集,重合程度太高,每个人的位置难以用人体检测框表示,传统的二步法模型往往会失效。因此,研究者们提出了一个全局竞争匹配算法,减少了姿态估计模型对于人体框的依赖,同时提高了模型对于复杂人体场景的鲁棒性,在拥挤场景中的表现超越了现有的方法。

3.jpg

人体检测框难以表达人的位置

 

Loss Design


以往的多人pose模型loss,都是简单的把不属于当前这个人的joint当做背景直接抑制掉.文章认为直接抑制掉这些joint不利于最后的推理.因为虽然这些关节点不属于这个人,但它确实另外一个人的正确的关节点.文章把在一个人的region内的属于它的关节点叫做target joints, 在其内的不属于这个人的关节点叫做interference joints. 在计算loss的时候,会根据joint的类别给个权重计算loss,这样可以即抑制了interference joints又保留了只不过其所占比重略低. 我可能说的不大清楚,还是直接看原文吧:

研究者们设计了一个关节点候选损失函数,通过控制模型输出响应程度不同的多峰值热度图,在人体框不准确的情况下,模型尽可能地输出候选关节点可能的位置。在得到每个人体框的候选关节点后,通过聚类与链接,消除冗余结果的同时,构建出一个人体实例-候选关节的图模型,以此来表征了人体实例与每个关节点之间的连接关系与概率。

Person-Joint Graph


除了改变loss的计算方式,文章还提出了另外一个改进的地方,就是不使用传统的NMS去提取关节点而是构建一个Person-Joint Graph来整理最后得到的关节点. 首先,由于是crowd scene, 那么两个不同的人提取出的框就有很大一部分重叠,这就造成同一个人的同一个关节处会多次重复提取得到不同位置的点.如果直接根据每个关节点的响应值来构建最后的pose, 那么crowd严重的两个人有可能连到同一个点上去.因此,在构图之前,先把有歧义的点想除掉,具体方法就是判断两个点的欧氏距离,如果小于设定的阈值,就认为是同一个人的同一个点.还是看原文吧:

构建Person-Joint Graph

以human instance和joint node为图的节点, 将 joint node和human instance分别相连, 注意此时有可能连错, 因为一个人可能连到了其他人的关节点.这样,每个点都和一个人或者多个人连接起来,这就是一条边,边的权重就是该点的响应值. 我们前面提到过,一个human instance里提取出的关键点可能有两类,一类是target joints,这个是正确的属于当前人的关节点, 一类是interference joints, 这个是不正确的点. 而在loss计算的时候,我们会抑制interference joints,即最终我们得到的结果, interference joints的响应值应该比target joints响应值更低,即对应的边的权重更低.下一步就是在这个person-joint graph里找到有最大权值的子图. 方法如下:
        

 

借助人体实例-候选关节的图模型,人体姿态估计问题可转化成图模型中的最佳匹配问题,因为人体姿态问题具有很强的特殊性,而该图模型具有很强的稀疏性。并且经过研究者们的分析,优化匹配问题的时间复杂度与传统的NMS算法相当。

 

本质理解

总得来说,该方法由于建立了一个全局的图模型,在匹配过程中考虑到了整体的连接方式,因此能很好地改善了二步法中缺乏全局视野的不足。

此外,在实验中,研究者们还对比了该算法与其他开源系统与算法之间的性能。在CrowdPose数据集中,比当前最好的算法提升了5.2mAP;在极度拥挤的子集中,提升了6.2mAP。相较于OpenPose和Detectron(Mask R-CNN)等姿态估计开源系统,不仅性能得以提升,而且运行速度也快了2至3倍。

5.jpg

我觉得文章最主要的地方在于提出target joints和interference joints这个概念,因为以往从来没想过, 都是直接保留target joints, 非target joints就直接抑制掉了.文章保留了这两类点,并且打上不同比重的label, 从而让网络有意的去学习这两类点,最后再通过构建图的方法来求得最优解。

在CrowdPose数据集上的定量对比实验

6.jpg

三个场景子集中的性能评估与运行速度对比(简单、一般、拥挤)

 

未来,研究者们将针对这种新的竞争匹配模型进行优化,对其他形式的拥挤检测问题(如拥挤实例分割)开展进一步研究。

 

 

 

 

 

 

参考文献:

1.https://news.sjtu.edu.cn/jdzh/20190308/96899.html

2.https://blog.youkuaiyun.com/Murdock_C/article/details/84886471

 

 

 

 

### Ped Hunter 行人检测器在拥挤场景中的鲁棒遮挡处理 #### 实现细节 为了应对拥挤场景中的遮挡问题,Ped Hunter 使用了多种技术来增强其鲁棒性和准确性。具体来说: - **多尺度特征提取**:通过使用不同尺度的卷积神经网络 (CNN),可以从图像的不同层次捕获丰富的上下文信息[^1]。 ```python def multi_scale_feature_extraction(image, scales=[0.5, 1.0, 2.0]): features = [] for scale in scales: scaled_image = cv2.resize(image, None, fx=scale, fy=scale) feature_map = cnn_model(scaled_image) features.append(feature_map) return torch.cat(features, dim=1) ``` - **时空关联建模**:利用 LSTM 或 GRU 网络对时间序列数据进行建模,从而捕捉行人运动模式并预测未来位置,即使部分被遮挡也能保持跟踪连续性[^2]。 ```python class SpatialTemporalModel(nn.Module): def __init__(self): super(SpatialTemporalModel, self).__init__() self.lstm = nn.LSTM(input_size=feature_dim, hidden_size=hidden_dim) def forward(self, x): lstm_out, _ = self.lstm(x) return lstm_out[-1] ``` - **注意力机制引入**:采用自注意机制聚焦于未被遮挡的关键部位,提高模型对于局部区域的关注度,进而改善整体性能表现。 ```python import math from torch import Tensor def attention(query: Tensor, key: Tensor, value: Tensor) -> Tuple[Tensor]: d_k = query.size(-1) scores = torch.matmul(query, key.transpose(-2, -1)) / math.sqrt(d_k) p_attn = F.softmax(scores, dim=-1) return torch.matmul(p_attn, value), p_attn ``` #### 性能评估 实验结果显示,在多个公开数据集上测试时,相比于其他传统方法以及最新的深度学习框架,Ped Hunter 展现出更强的抗干扰能力和更高的精度。特别是在高密度人群环境中,能够有效减少误报率和漏检情况的发生概率。 | 数据集 | AP@0.5 | AR@10 | |--------|---------|-------| | CityPersons | 78.3% | 84.6% | | Caltech PEDS | 82.1% | 89.2% | 表中展示了两个典型城市街景下的行人重识别任务评测指标——平均精确度(AP)和召回率(AR),表明该方案具备良好的泛化能力与适应范围。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值