YOLOPose:除了目标检测,YOLO还能不花代价地估计人体姿态,对实时性能有要求必看!

Posted 烧技湾

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了YOLOPose:除了目标检测,YOLO还能不花代价地估计人体姿态,对实时性能有要求必看!相关的知识,希望对你有一定的参考价值。

导读:

YOLO,是一种流行的目标检测框架。如果将YOLO引入姿态检测任务中,将取得什么结果呢?这篇文章实现了单向传播路径下的2D人体姿态检测,与自上而下或自下而上的方法不同,该方法将人体检测与关键点估计联合实现,在不采用数据增强如翻转、多尺度等情况下,实现COCO keypoint上领先的性能,并且该方法可以集成中其他目标检测算法中实现姿态估计,而几乎不增加运算量,对实时估计人体姿态非常关键。


ArXiv:https://arxiv.org/abs/2204.06806

Open Code(Pose已开源): https://github.com/TexasInstruments/edgeai-yolov5/tree/yolo-pose

目录


摘要

这篇文章介绍了YoLoPose,一种新颖的无热力图的方法,基于流行的YOLO目标检测框架,用于单张图片中的关节检测与2D多人姿态估计。当前,基于热力图的方法是两个阶段,这个方法并不是最优的,因为他们不是端到端训练的,并且训练依赖于一种L1损失,即目标关键点相似度(object keypoint similarity,OKS),这不是等同于最大化评估指标的。该文章框架是一种端到端地训练模型,并优化OKS指标本身。所提出的模型在单向前向传播中联合检测人体框以及对应的2D姿态,因此对于自上而下或自下而上的方法中是最好的。该方法不需要自下而上方法的后处理过程,即将检测到的关键点分组到一个骨架中,因为每个检测框都有一个相关的姿态,从而导致了关节点的固有分组。也不像自上而下的方法,多个前向传播被取消,因为所有人与他们的姿态在一个单向推理中一起被定位。YOLOPose在COCO val上取得了领先的结果,在AP50上取得了90.5%以及test-dev上取得了90.3% 的AP50,超过了当前所有的基于自下而上的方法,在单次的前向传播中,不使用翻转、多尺度或其他数据增强方式。

YOLOPose在密集人群上的姿态估计效果图


与YOLOPose对比,HigherHRNet-w32处理密集人群效果不佳

一、介绍

多人2D姿态估计,是理解图像中人体的一种任务。输入一张图片,其目标是检测每一个人和定位到他们对应的关节点。推测图片中多人的姿态是有挑战的,由于图像中存在人体数量的变化,尺度变化,身体部位遮挡,人体非刚性等因素。

当前对于姿态估计的方法主要分为两大类:自下而上,和自上而下的。自上而下或者双阶段的方法是目前最领先的方案。他们首先采用一个强大的人体检测器,然后针对每个人体做单人的姿态估计。自上而下的方法的复杂度随着图像中人体数量而线性增加。多数实时应用需要限制运行时间,不倾向于采用自上而下的方法,由于其复杂度较高。反而,自下而上的方法提供了恒定的运行时间,因为他们在单次检测中依赖热力图检测所有关键点,然后进行复杂的后处理将他们分组成个体。后处理可能涉及到如像素级别的NMS,线积分,细化,分组等步骤。坐标调整和细化减少了下采样热力图的量化误差,其中NMS用于寻找热力图中的局部最大值。即使经过后处理,热力图也许不够清晰,去区分同一类型的两个靠得很近的关键点。同样,自下而上的方法也不能端到端训练,因此后处理步骤是不可差分的,因此在卷积网络之外发生。他们在方法上存在很大差异,从线性规划到各种启发式算法。很难用CNN加速器去加速他们,因此速度也很慢。有单次推理的方法,虽然避免了分组任务,但不能与自下而上的方法相提并论。他们依赖额外的后处理来提升性能。

这篇文章的动机,是解决姿态估计不使用热力图的问题,与目标检测保持一致,因为目标检测中的挑战与姿态估计类似,例如尺度多样性,遮挡,人体非刚性等。因此,如果一个人体检测网络能够处理这些问题,它也能处理姿态估计。例如,最近的目标检测框架尝试解决尺度变化的问题,通过在多个尺度上做预测。这里,我们采用相同的策略去针对每个检测去预测多尺度的人体姿态。相似地,在目标检测领域中所有主要的进展,无缝传递给姿态估计。该论文提出的姿态估计方法能够轻松集成到计算机视觉系统中其他运行目标检测的方法中,计算量增加几乎为0。

该方法YOLOPose,基于当前流行的YOLOv5框架。这是首次提出解决2D姿态估计不使用热力图的方法,并且摆脱当前常用的很多非标准化的后处理操作。该方法使用目标检测中相同的后处理,在COCO上取得了领先性能。在该方法中,一个anchor点,与真实的标准框匹配,存储着其完整的2D姿态以及边界框位置。来自不同人体的两个相似关节点在空间上可以互相靠近。使用热力图很难区分这种情况。但是,如果这两个人通过不同的anchor匹配,这将很容易区分空间上靠近的相似关节点。

示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。再次强调,与锚点关联的关键点已经分组。在自下而上的方法中,一个人的关节点很容易被另一个人弄混淆,如上图所示,然而该方法能够本质上解决这个问题。不同于自上而下的方法,YOLO-Pose的复杂度与图像中人体数量是无关的。因此,我们具有了自上而下,自下而上的方法中最好的:恒定的运行时间,简单的后处理。贡献总结如下:

  • 我们将多人姿态估计与目标检测任务保持一致,因为相似的挑战如多尺度、遮挡等都存在。因此,迈出了统一这两个领域的第一步。该方法直接从目标检测领域的任何进步中收益。
  • 该方法基于无热力图,使用标准的目标检测后处理步骤,替代了自下而上的复杂预处理步骤,以端到端方式训练而不采用独立的后处理。
  • 将目标框检测的IoU损失扩展到关键点估计上。OKS不仅用于评估,也用于训练的误差。OKS损失是尺度不变的,固定地为不同关节点提供了不同的权重。
  • 与领先的DEKR算法相比,在少4倍运算量情况下,获得了89.8%的AP50,还高了0.4%。
  • 将检测与姿态估计联合的框架,在目标检测框架上几乎不额外增加运算实现了姿态估计。
  • 提出了低复杂度的模型,明显超过了EfficientHRNet等关注实时的模型。

二、方法


YOLO-pose architecture based on YOLOv5. Input image is passed through darknetcsp backbone that generates feature maps at various scales P3, P4, P5, P6. PAnet is used for fusing these feature maps across multiple scales. Output of PANet is fed to detection heads. Finally each detection head branches into box head and keypoint head.
基于YOLOv5的YOLO-Pose架构。输入图像经过darknet骨架,产生不同尺度的特征图(P3,P4,P5,P6)。PANet被采用来融合不同尺度的特征图。PANet的输出作为检测头的输入。最后,每个检测头分支到检测框头和关键点头中。

2.1 框架概述

为了展示该方法的潜力,作者考虑去选择检测人体效果好的框架。YOLOv5是当前领先的检测器,在考虑精度和运算量方面。因此YOLOv5被选择作为地基去构建。YOLOv5主要关注COCO目标检测上的80个类别,在每个anchor上采用框头预测85种元素。对于80种类别,他们对应边界框,目标分数,置信度分数。针对每个格子位置有不同形状的三种anchor。

问:YOLOv5的box head输出为什么有85个元素?
其中,80个元素对应类别,边界框对应4个元素,1个目标分数

对于人体姿态估计,它就检测一种类别即人体,每个人体有17个关节点,并且每个关节点被位置和置信度 x , y , c o n f \\x,y,conf\\ x,y,conf所确定。因此,与一个关联anchor,有17个关节点的51个元素。因此,对于每个anchor,关键点头预测51个元素,框头预测6个元素。对于n个关节点的anchor,所有需要的元素可以表达成一个向量,即:
P v = C x , C y , W , H , b o x c o n f , c l a s s c o n f , K x 1 , K y 1 , K c o n f 1 , ⋅ ⋅ ⋅ , K x n , K y n , K c o n f n P_v=\\C_x,C_y,W,H,box_conf,class_conf,K^1_x,K^1_y,K^1_conf,\\cdot \\cdot \\cdot, K^n_x,K^n_y,K^n_conf\\ Pv=Cx,Cy,W,H,boxconf,classconf,Kx1,Ky1,Kconf1,,Kxn,Kyn,Kconfn

问:YOLOPose,在YOLOv5基础上增加了什么?
答:YOLOPose,除了YOLOv5原有的box head,还增加了keypoint head。box head只检测人体类别,输出6个元素;keypoint head检测关键点,输出x和y位置、置信度共三个元素。一种17个关键点,输出51个元素。

关键点置信度是基于其是否可见来训练的。如果一个关键点是可见的或者遮挡了,那么人工标注置信度设置1;如果它在视野范围之外,则设置为0。在推理阶段,我们保留置信度大于0.5的关键点。其他预测的关键点被丢弃。预测的关键点置信度不用于评估。但是,由于网络针对每一个检测都输出17个关键点,我们需要过滤掉视野范围外的关键点。否则,会有悬空的关键点导致骨架变形。当前的自下而上的方法基于热力图需要这个操作,因为视野外的关键点在第一阶段就不会被检测到。

YOLOPose采用CSP-darknet53作为骨架,PANet融合多尺度特征。遵从四个检测头在不同尺度的做法。最后,有两个耦合的头用于预测边界框与关键点。

本架构限制其运算量在150 GMACS(乘法累加运算量,约等1~1.2倍GFLOPs浮点数运算)内,也能达到有竞争力的结果。在进一步增加运算量的情况下,能够缩小与自上而下方法的差距。但是,我们不追求那个,而关注实时模型。

2.2 基于Anchor的多人姿态公式

2.3 基于IoU的边界框损失函数

多数现代的目标检测器优化IoU,出现了其变体例如GIoU,DIoU和CIoU等损失,替代了基于距离的用于边界框预测的损失,因为这些损失是尺度不变的,并能够直接优化评估策略本身。我们使用CIoU损失用于边界框的监督,对于一个标定的真实边界框,匹配第 k t h k^th kth个anchor,位置 ( i , j ) (i,j) (i,j),尺度为 s s s,损失可以定义为:
L b o x ( s , i , j , k ) = ( 1 − C I o U ( B o x g t s , i , j , k , B o x p r e d s , i , j , k ) ) L_box(s,i,j,k)=(1-CIoU(Box^s,i,j,k_gt,Box^s,i,j,k_pred)) Lbox(s,i,j,k)=(1CIoU(Boxgts,i,j,k,Boxpreds,i,j,k))

在本框架中,每个位置有三个anchors,预测有四个尺度。

2.4 人体姿态损失函数公式

OKS是评估关键点的最流行的策略。传统上讲,基于热力图的自下而上的方法采用L1损失去检测关键点。但是,L1损失可能不合适去获取优化的OKS。因为L1损失是最朴素的,并不考虑一个物体的尺度或者关键点的类型。由于热力图是概率图,不可能去使用OKS作为纯热力图方法的损失函数。OKS能当做损失函数仅当回归关键点位置的情况下。有人提出尺度归一化的L1损失用于关键点回归,这是迈向OKS损失的一步。

因此,我们直接回归关键点,即anchor中心,我们能够优化评估策略自身而不是一中损失函数。我们扩展了从边界框的IoU损失到关键点中来。在关键点中,OKS被当做IoU。因此OKS损失本质上是尺度不变的,针对特定的关键点倾斜重要性。也就说,一个人头部的关键点如耳朵、鼻子和眼睛等,会比身体如肩膀,膝盖和臀部等在像素级别上受到更多的错误惩罚。这个权重因子是COCO作者从冗余的标注验证集中根据经验选择的。不像原始的IoU损失,会在非重叠情况下出现梯度消失,OKS损失不会停滞。因此,OKS损失更像dIoU损失。针对每一个单独的关键点计算OKS,并累加到最终的OKS损失或者关键点IoU,即:

针对每一个关键点,作者学习了一个置信度参数,它能够表示该人是否存在该关键点。因此,关键点是否可见的标志,作为真实标注。可得:

如果真实标注的边界框与第 K t h K^th Kth个anchor匹配了,那么在位置 ( i , j ) (i,j) (i,j),尺度 s s s以及那个anchor的损失将会有效。最后,在所有尺度、anchors和位置上的整体损失表示为:

2.5 测试时间增强策略

图像翻转与多尺度测试是两个常用的方法。翻转,将会增加2倍运算量,而多尺度通常在三个尺度上如 ( 0.5 × , 1 × , 2 × ) (0.5\\times,1\\times,2\\times) (0.5×,1×,2×)等,对应增加运算量为 ( 0.25 + 1 + 4 ) (0.25+1+4) (0.25+1+4)即为原始运算量的5.25倍。本方法不使用任何的数据增强策略。

2.6 边界框外的关键点

自上而下的方法在遮挡情况下表现不佳。YOLOPose比自上而下方法好的一点是对于在边界框内的关键点没有约束。因此,如果由于遮挡而位于边界框外的关键点,仍然能够检测正确。但是,在自上而下的方法中,如果人体检测不正确,姿态估计也会失败。对于遮挡和不正确的边界框检测等挑战在该方法中得到一定缓解。


我们可以看到,在边界框外的关键点也能检测到。这对于自上而下的方法,肯定会漏检。

实验

数据集:

COCO数据集。包含200,000张图片,和250,000个人体实例。

评估策略:

采用标准的评估策略,使用OKS策略用于姿态估计。评估了精度和召回率,在不同的阈值和尺度上。

训练:

我们采用与 YOLOv5 [1] 类似的增强、锚选择和损失加权策略。我们使用随机尺度 ([0.5, 1.5]) 的数据增强、随机平移 [-10, 10]、概率为 0.5 的随机翻转、概率为 1 的马赛克增强以及各种颜色增强。

测试:

我们首先将输入图像的大边调整为所需的大小,保持纵横比。图像的下侧被填充以生成方形图像。这确保所有输入图像具有相同的大小。

结果:


YOLOpose取得了领先的性能,并且运算量比同期最领先的DEKR节省近一半的运算量。

总结

该文提出了一个端到端的基于 YOLOv5 的联合检测和多人姿态估计框架。它已经证明,YOLOPose在复杂性显着降低的情况下优于现有的自下而上方法。此工作是统一目标检测和人体姿态估计领域的第一步。到目前为止,姿态估计的大部分进展都是作为一个不同的问题独立发生的。我们相信,这个SOTA 结果将进一步鼓励研究界探索共同解决这两项任务的潜力。此工作的主要动机是将对象检测的所有好处传递给人体姿势估计,因为我们正在目睹对象检测领域的快速进展。我们已经为 YOLOX 目标检测框架扩展了这种方法进行了初步实验,并取得了可喜的成果。作者也将把这个想法扩展到其他对象检测框架,并进一步推动有效人体姿态估计的极限。

以上是关于YOLOPose:除了目标检测,YOLO还能不花代价地估计人体姿态,对实时性能有要求必看!的主要内容,如果未能解决你的问题,请参考以下文章

目标检测数据增强:YOLO官方数据增强实现/imgaug的简单使用

目标检测 YOLO系列——YOLO v1

【目标检测算法解读】yolo系列算法二

Yolopose关键点检测:自己标注数据集,制作数据集

使用 YOLO v5 进行目标检测

下载PyTorch 实现的YOLO v2目标检测算法