YOLO-Pose: Enhancing YOLO for Multi Person Pose Estimation Using Object Keypoint Similarity Loss
参考资料:
(56条消息) YOLOPose:除了目标检测,YOLO还能不花代价地估计人体姿态,对实时性能有要求必看!_烧技湾的博客-CSDN博客
本文介绍了YOLO-Pose,一种新颖的无热图的检测方法,基于流行的YOLO目标检测框架,用于单张图片中的关节检测与2D多人姿态估计。
现有的基于热图的两阶段方法是次优的,因为它们不是端到端可训练的,并且训练依赖于一种L1损失,不等价于最大化评估度量,即目标关键点相似度(OKS)。我们的框架允许我们端到端地训练模型并优化OKS指标本身。该模型学习了在一次前向传递中联合检测多个人的边界框及其相应的二维姿态,从而超越了自上而下和自下而上两种方法的最佳效果。
YOLO-Pose不需要对自底向上的方法进行后处理,以将检测到的关键点分组到一个骨架中,因为每个边界框都有一个相关的姿态,从而导致关键点的固有分组。与自上而下的方法不同,多个前向传播被取消,因为所有人的姿势都是局部化的。
YOLO-pose在COCO验证(90.2%AP50)和测试开发集(90.3%AP50)上获得了新的最先进的结果,在没有翻转测试、多尺度测试或任何其他测试时间增加等Trick的情况超过了所有现有的自底向上的方法。本文中报告的所有实验和结果都没有任何测试时间的增加,而不像传统的方法使用翻转测试和多尺度测试来提高性能。
多人 2D 姿势估计是理解图像中的人类的任务。 给定输入图像,目标是检测每个人并定位他们的身体关节。 由于图像中的人数可变、比例变化、身体部位的遮挡、人体的非刚性以及各种其他原因,推断图像中多人的姿势可能具有挑战性。
现有的姿态估计解决方案分为自上而下和自下而上。 自上而下或两阶段方法的 Simplebaseline,Hourglass,HRNet目前是最先进的。 他们首先使用一个强大的人体检测器,然后针对每个人体做单人的姿态估计。 自上而下方法的复杂性随着图像中的人数线性增加。 由于高复杂性和可变运行时间,大多数需要恒定运行时间的实时应用程序不喜欢自上而下的方法。
相比之下,自下而上的 Associate embedding,PifPaf等方法提供恒定的运行时间,因为它们依靠热图来检测单次中的所有关键点,然后是复杂的后处理将他们分组为个人。 自下而上方法中的后处理可能涉及像素级 NMS、线积分、细化、分组等步骤。坐标调整和细化减少了下采样热力图的量化误差,其中NMS用于寻找热力图中的局部最大值。即使经过后处理,热力图也许不够清晰,无法区分同一类型的两个靠得很近的关键点。同样,自下而上的方法不能进行端到端的训练,因为后处理步骤不可区分并且发生在卷积网络之外。他们在方法上存在很大差异,从线性规划到各种启发式算法。很难用CNN加速器去加速他们,因此速度也很慢。有单次推理的方法,虽然避免了分组任务,但不能与自下而上的方法相提并论。他们依赖额外的后处理来提升性能。
我们这项工作的目的是解决没有热图的位姿估计问题,与目标检测保持一致,因为目标检测中的挑战与位姿估计相似,如尺度变化、遮挡、人体的非刚性等。因此,如果一个人体检测网络能够处理这些问题,它也能处理姿态估计。例如,最新的目标检测框架尝试解决尺度变化的问题,通过在多个尺度上做预测。这里,我们采用相同的策略去针对每个检测去预测多尺度的人体姿态。相似地,在目标检测领域中所有主要的进展,无缝传递给姿态估计。该论文提出的姿态估计方法能够轻松集成到计算机视觉系统中其他运行目标检测的方法中,计算量几乎没有增加。
基于流行的YOLOv5[1]框架,我们将我们的方法称为YOLO-Pose。这是首次在没有热图的情况下重点解决二维位姿估计问题的尝试,重点是摆脱目前使用的各种非标准化的后处理。我们的方法使用与目标检测相同的后处理。我们在具有挑战性的Coco KeyPoint数据集[7]上验证了我们的模型,并展示了在AP方面具有竞争力的准确性,以及在AP50方面相对于具有类似复杂性的模型的显著改进。
在YOLO-Pose中,与真实的标准框匹配的anchor box或者anchor point,存储着其完整的2D姿态以及bounding box位置。来自不同人体的两个相似关节点在空间上可以互相靠近。使用热力图很难区分这种情况。但是,如果这两个人通过不同的anchor匹配,这将很容易区分空间上靠近的相似关节点。
YOLO-pose 是与其他自下而上方法一样的单次方法。 但是,它不使用热图。 相反,它将一个人的所有关键点与锚点相关联。 它基于 YOLOv5 目标检测框架,也可以扩展到其他框架。 我们也在 YOLOX上对它进行了有限的验证。 图 2 说明了用于姿势估计的keypoint head的整体架构。
*图2:基于YOLOv5的YOLO-Pose的结构图。输入图像被传入到darknetcsp backbone中以产生不同尺度的feature map {P3,P4,P5,P6}。PANet被用来融合这些具有不同尺度的feature map。PANet的输出被传入detection heads。最终每个detection head分支被分为box head和keypoint head。
为了展示该方法的潜力,作者考虑去选择检测人体效果好的框架。YOLOv5是在准确性和复杂性方面领先的检测器,因此选择YOLOv5作为基础并在它之上去构建。YOLOv5主要关注COCO目标检测上的80个类别,在每个anchor上采用box head预测85种元素(80个元素对应类别,边界框对应4个元素,1个目标分数)。 它们对应于 80 个类别的bounding box、object score和confidence score。 对应每个网格位置,有3个不同形状的anchor。
对于人体姿态估计YOLO-Pose,它就检测一种类别即人体,每个人体有17个关节点,并且每个关节点被位置和置信度{x,y,conf}所确定。因此,与一个关联anchor,有17个关节点的51个元素。因此,对于每个anchor,keypoint head预测51个元素,box head预测6个元素。对于n个关节点的anchor,所有需要的prediction元素可以表达成一个向量,即:
Keypoint confidence是基于其该关键点的可见标志来训练的。如果一个关键点是可见的或者遮挡了,那么人工标注置信度设置1;如果它在视野范围之外,则设置为0。在推理阶段,我们保留置信度大于0.5的关键点。其他预测的关键点被丢弃。预测的关键点置信度不用于评估。但是,由于网络针对每一个检测都输出17个关键点,我们需要过滤掉视野范围外的关键点。否则,会有悬空的关键点导致骨架变形。当前的基于热图的自下而上的方法不需要这个操作,因为视野外的关键点在第一阶段就不会被检测到。
YOLO-Pose 使用 CSP-darknet53 [27] 作为主干,使用 PANet [6] 从主干融合各种尺度的特征。 随后是四个不同规模的检测头。 最后,有两个解耦头用于预测框和关键点。
在这项工作中,我们将复杂性限制为150 GMACS,在此范围内,我们能够取得有竞争力的结果。 随着复杂性的进一步增加,可以通过自上而下的方法进一步弥合差距。 但是,我们不走这条路,因为我们的重点是实时模型。
对于给定的图像,与一个人匹配的Anchor将存储其整个2D pose和bounding box。bounding box的坐标被转换为Anchor中心,而bounding box的尺寸则根据Anchor的高度和宽度进行规范化。同样,关键点位置将转换为Anchor中心。然而,关键点并没有与Anchor的高度和宽度进行标准化。Keypoint和box都被预测在Anchor的中心。由于YOLO-Pose的改进与Anchor的宽度和高度无关,所以YOLO-Pose可以很容易地扩展到Anchor Free的目标检测方法,如YOLOX, FCOS。
大多数目标检测器优化了IoU Loss的变体,产生了其变体如GIoU、DIoU或CIoU Loss,替代了Distance-based Loss,因为这些损失是尺度不变的,并能够直接优化评估度量本身。而YOLO-Pose使用CIoU Loss来进行bounding box监督。对于在位置(i,j)和scale s上的第k个Anchor所匹配的Ground Truth bounding box,损失定义为:
是在位置(i,j)和scale s上的第k个Anchor所预测的bounding box,在本框架中,每个位置有三个anchors,预测有四个尺度。
OKS是评估关键点的最流行的策略。传统上讲,基于热力图的自下而上的方法采用L1 loss去检测关键点。但是,L1 loss可能不合适去获取优化的OKS。因为L1损失是最原始的,并不考虑一个物体的尺度或者关键点的类型。由于热力图是概率图,不可能去使用OKS作为纯热力图方法的损失函数。OKS能当做损失函数仅当回归关键点位置的情况下。有人提出尺度归一化的L1 loss用于关键点回归,这是迈向OKS loss的一步。
因此,作者直接将回归的关键点直接定义为anchor中心,因此能够优化评估策略自身而不是一种替代的损失函数。这里将IoU损失的概念从box扩展到关键点。在出现关键点的情况下,目标关键点相似度(OKS)被视为IOU。因此OKS损失本质上是尺度不变的,针对特定的关键点有倾斜。也就说,一个人头部的关键点如耳朵、鼻子和眼睛等,会比身体如肩膀,膝盖和臀部等在像素级别上受到更多的错误惩罚。这个权重因子是COCO作者从冗余的标注验证集中根据经验选择的。不像原始的IoU损失,会在非重叠情况下出现梯度消失,OKS损失不会停滞。因此,OKS损失更像dIoU损失。
对应于每个bounding box,我们存储了整个姿势信息。 因此,如果真实边界框与位置 (i,j ) 和尺度 s 处的第 个anchor匹配,我们预测相对于anchor中心的关键点。 对每个关键点分别计算 OKS,然后将其相加得出最终的 OKS 损失或关键点 IOU 损失:
对应于每个关键点,我们学习一个置信度参数,该参数显示该人的关键点是否存在。在这里,关键点是否可见的标志被用作真实标注。可得:
如果真实标注的边界框与第个anchor匹配了,那么在位置( i , j ),尺度s以及那个anchor的损失将会有效。最后,在所有尺度、anchors和位置上的整体损失表示为:
所有用于姿态估计的 SOTA 方法都依赖于测试时间增强 (TTA) 来提高性能。 翻转测试和多尺度测试是两种常用的技术。 翻转测试将复杂度提高了 2 倍,而多尺度测试在三个尺度 {0.5X、1X、2X} 上运行推理,将复杂度提高了 (0.25X + 1X+4X) = 5.25倍。 同时开启翻转测试和多尺度测试,复杂度增加了 5.25*2x=10.5倍。 在我们的比较表中,我们相应地调整了复杂性。
除了增加计算复杂性之外,准备增强数据本身也很昂贵。 例如。 在翻转测试中,我们需要翻转图像,这将增加系统的延迟。 同样,多尺度测试需要对每个尺度进行调整大小操作。 与 CNN 操作不同,这些操作可能非常昂贵,因为它们可能无法加速。 融合来自各种前向传递的输出需要额外的成本。 对于嵌入式系统,如果我们能够在没有任何 TTA 的情况下获得有竞争力的结果,那将是最有利的。 我们所有的结果都没有任何 TTA。
自上而下的方法在遮挡情况下表现不佳。YOLO-Pose相对于自上而下方法的优势之一是,关键点不受限制位于预测的边界框内。因此,如果关键点由于遮挡而位于边界框之外,则仍然可以正确识别它们。然而,在自上而下的方法中,如果人物检测不正确,姿势估计也将失败。在我们的方法中,遮挡和错误框检测的这些挑战都在一定程度上得到了缓解,如图3所示。
*图3:应对自上而下方法的挑战。 上图:YOLO-pose 正确预测了位于边界框外的被遮挡关键点。 下图:对于中间的人,框检测不准确。 然而,这并不限制出问题的右脚踝关键点。 它是在box外面预测的。 自上而下的方法会完全错过右脚踝的关键点。
ONNX(Open Neural Network Exchange)用于神经网络的与框架无关的表示。 将深度学习模型转换为 ONNX 使其能够有效地部署在各种硬件平台上。 现有自下而上方法中的后处理没有标准化,并且使用不属于标准深度学习库的操作。 例如。 基于 Associative embedding的自下而上方法使用 KuhnMunkres 算法 [29] 进行分组,该算法不可微,不属于任何深度学习库。
我们模型中使用的所有操作符都是标准深度学习库的一部分,也与ONNX兼容。因此,整个模型可以导出到ONNX,使其可以轻松地跨平台部署。这个独立的ONNX模型可以使用ONNX Runtime执行,它将图像作为输入,并推断图像中每个人的边界框和姿势。没有其他自下而上的方法可以端到端地导出中间的ONNX表示。
数据集:COCO
训练:采用与 YOLOv5 [1] 类似的增强、锚选择和损失加权策略。我们使用随机尺度 ([0.5, 1.5]) 的数据增强、随机平移 [-10, 10]、概率为 0.5 的随机翻转、概率为 1 的mosaic增强以及各种颜色增强。
SGD optimizer with a cosine scheduler
base lr:1e-2 300 epoches
测试:首先将输入图像的大边调整为所需的大小,保持纵横比。图像的下侧被填充以生成方形图像。这确保所有输入图像具有相同的大小。
OKS损失是我们工作的主要贡献之一。由于这种损失与L1损失不同,因此训练动态更加稳定。在L1失利的训练中,我们不得不稍微调整一下loss weight。在YOLv5s6_960上测试,OKS损失显著优于L1损失。我们像[30]中那样用尺度归一化的L1损失来训练我们的模型,以检查尺度不变性对我们的损失公式的影响。
我们已经对我们的模型进行了各种分辨率的训练。我们选择960作为我们的基本分辨率,因为我们能够在此分辨率下获得具有竞争力的性能。除此之外,YOLOv5-S6的性能提升在很大程度上已经饱和,如下所示:
在较低的分辨率下,YOLOv5s6-pose 的性能明显优于 COCO val2017 上现有的最先进的低复杂度模型,如 EfficientHRNet [15]。
YOLOv5 模型基于 sigmoid 加权线性单元 (SiLU) [39] 激活。 正如 Renjie Liu 等人所观察到的那样。 [38],像 SiLU 或 hardSwish [40] 这样的无界激活函数对量化不友好,而具有 ReLUX激活的模型由于其有界性质而对量化具有鲁棒性。 因此,我们使用 ReLU 激活重新训练了我们的模型。 我们观察到将激活从 SiLU 更改为 ReLU 下降了约 1-2%。 我们将这些模型称为 YOLOv5_relu。 我们已经量化了这些模型,以进一步将它们定位为嵌入式友好。 这些模型的量化精度可以忽略不计(~1.2%),如下表所示,以 YOLOv5-s6_960_relu 为例。
使用 16 位量化,AP 下降 0.1% 可以忽略不计,AP50 没有下降。 使用 8 位量化,精度会显着下降。 然而,对于混合精度,只有选定的几个卷积层为 16 位,其余层为 8 位,我们能够将浮点数的下降幅度大幅降低到 1.2%。 在我们的混合精度设置中,我们必须将所有层的约 30% 设置为 16 位。 由于大多数 CNN 加速器都针对整数运算进行了优化,因此通过 8 位量化或混合精度实现良好的精度对于在嵌入式系统中部署任何模型至关重要。 量化模型可降低延迟和功耗。 以上结果是使用训练后量化 (PTQ) 而不是量化感知训练 (QAT)。
我们提出了一个端到端的基于 YOLOv5 的联合检测和多人姿态估计框架。我们已经证明,我们的模型在复杂性显着降低的情况下优于现有的自下而上方法。我们的工作是统一目标检测和人体姿态估计领域的第一步。到目前为止,姿态估计的大部分进展都是作为一个不同的问题独立发生的。我们相信,我们的 SOTA 结果将进一步鼓励研究界探索共同解决这两项任务的潜力。我们工作的主要动机是将对象检测的所有好处传递给人体姿势估计,因为我们正在目睹对象检测领域的快速进展。我们已经为 YOLOX 目标检测框架扩展了这种方法进行了初步实验,并取得了可喜的成果。我们也将把这个想法扩展到其他对象检测框架,并进一步推动有效人体姿态估计的极限。