首页 > 其他分享 >论文解读:YOLO-Pose(姿态估计)

论文解读:YOLO-Pose(姿态估计)

时间:2025-01-21 23:21:21浏览次数:1  
标签:Pose 检测 尺度 YOLO 损失 解读 方法 姿态 关键点

论文原文: https://arxiv.org/abs/2204.06806   1、摘要   这篇文章介绍了YoLoPose,基于流行的YOLO框架,实现了一种新颖的无热力图的关节检测与2D多人姿态估计。当前,基于热力图的方法是两个阶段,这个方法并不是最优的,因为他们不是端到端训练的,并且训练依赖于可替代的L1损失,它并不等同于最大化评估策略,即目标关键点相似度(object keypoint similarity,OKS)。该文章实现了一种端到端训练的模型,并优化OKS指标本身。这个模型在单向前向传播过程中,可以实现联合检测人体框以及对应的2D姿态,因此对于自上而下或自下而上的方法中是最好的。该方法不需要自下而上方法的后处理过程,即将检测到的关键点分组到一个骨架中,因为每个检测框都有一个相关的姿态,从而导致了关节点的固有分组。也不像自上而下的方法,多个前向传播被取消,因为所有人与他们的姿态在一个单向推理中一起被定位。YOLOPose在COCO val上取得了领先的结果,在AP50上取得了90.5%以及test-dev上取得了90.3% 的AP50,超过了当前所有的基于自下而上的方法,在单次的前向传播中,不使用翻转、多尺度或其他数据增强方式。       添加图片注释,不超过 140 字(可选)   YOLOPose在密集人群上的姿态估计效果图       添加图片注释,不超过 140 字(可选)   与YOLOPose对比,HigherHRNet-w32处理密集人群效果不佳     2、介绍   多人2D姿态估计,是理解图像中人体的一种任务。输入一张图片,其目标是检测每一个人和定位到他们对应的关节点。推测图片中多人的姿态是有挑战的,由于图像中存在人体数量的变化,尺度变化,身体部位遮挡,人体非刚性等因素。 当前对于姿态估计的方法主要分为两大类:自下而上,和自上而下的。自上而下或者双阶段的方法是目前最领先的方案。他们首先采用一个强大的人体检测器,然后针对每个人体做单人的姿态估计。自上而下的方法的复杂度随着图像中人体数量而线性增加。多数实时应用需要限制运行时间,不倾向于采用自上而下的方法,由于其复杂度较高。反而,自下而上的方法提供了恒定的运行时间,因为他们在单次检测中依赖热力图检测所有关键点,然后进行复杂的后处理将他们分组成个体。后处理可能涉及到如像素级别的NMS,线积分,细化,分组等步骤。坐标调整和细化减少了下采样热力图的量化误差,其中NMS用于寻找热力图中的局部最大值。即使经过后处理,热力图也许不够清晰,去区分同一类型的两个靠得很近的关键点。同样,自下而上的方法也不能端到端训练,因此后处理步骤是不可差分的,因此在卷积网络之外发生。他们在方法上存在很大差异,从线性规划到各种启发式算法。很难用CNN加速器去加速他们,因此速度也很慢。有单次推理的方法,虽然避免了分组任务,但不能与自下而上的方法相提并论。他们依赖额外的后处理来提升性能。 这篇文章的动机,是解决姿态估计不使用热力图,而与目标检测保持一致,因为目标检测中的挑战与姿态估计类似,例如尺度多样性,遮挡,人体非刚性等。因此,如果一个人体检测网络能够处理这些问题,它也能处理姿态估计。例如,最近的目标检测框架尝试解决尺度变化的问题,通过在多个尺度上做预测。这里,我们采用相同的策略去针对每个检测去预测多尺度的人体姿态。相似地,在目标检测领域中所有主要的进展,无缝传递给姿态估计。该论文提出的姿态估计方法能够轻松集成到计算机视觉系统中其他运行目标检测的方法中,计算量增加几乎为0。 该方法YOLOPose,基于当前流行的YOLOv5框架。这是首次提出解决2D姿态估计不使用热力图的方法,并且摆脱当前常用的很多非标准化的后处理操作。该方法使用目标检测中相同的后处理,在COCO上取得了领先性能。 在YOLOPose中,每一个anchor框或锚点,与真实标记框匹配,存储着其完整的2D姿态以及边界框位置。来自不同人体的两个相似关节点在空间上可以互相靠近。使用热力图很难区分这种情况。但是,如果这两个人通过不同的anchor匹配,这将很容易区分空间上靠近的相似关节点。再次强调,与锚点关联的关键点已经分组。在自下而上的方法中,一个人的关节点很容易被另一个人弄混淆,如上图所示,然而该方法能够本质上解决这个问题。不同于自上而下的方法,YOLO-Pose的复杂度与图像中人体数量是无关的。因此,我们具有了自上而下,自下而上的方法中最好的:恒定的运行时间,简单的后处理。贡献总结如下: 1)我们将多人姿态估计与目标检测任务保持一致,因为相似的挑战如多尺度、遮挡等都存在。因此,迈出了统一这两个领域的第一步。该方法直接从目标检测领域的任何进步中收益。 2)该方法基于无热力图,使用标准的目标检测后处理步骤,替代了自下而上的复杂预处理步骤,以端到端方式训练而不采用独立的后处理。 3)将目标框检测的IoU损失扩展到关键点估计上。OKS不仅用于评估,也用于训练的误差。OKS损失是尺度不变的,固有地为不同关节点提供了不同的权重。 与领先的DEKR算法相比,在少4倍运算量情况下,获得了89.8%的AP50,还高了0.4%。 将检测与姿态估计联合的框架,在目标检测框架上几乎不额外增加运算实现了姿态估计。 提出了低复杂度的模型变体,明显超过了EfficientHRNet等关注实时的模型。         3、相关工作 2.1 自上而下 自上而下的方法或两阶段方法首先使用像快速RCNN 这样的重型人体检测器进行人体检测,然后估计每个被检测到的人的二维姿态。因此,计算复杂度随人数呈线性增加。现有的自上而下的方法主要侧重于网络架构的设计。 Mask-RCNN 检测关键点作为分割掩码。 Simple Baseline提出了一个简单的架构,具有较深的主干和几个反卷积层,以扩大输出特性的分辨率。 这些方法是尺度不变的,因为它们在相同的尺度上处理所有的主题,在流行的基准测试上实现了最先进的性能(最新的I^2RNet就是借鉴了HRNet的多分辨率并行优化了多尺度的问题)。然而,它们在处理遮挡方面很差。YOLOPose在一定程度上克服了遮挡的挑战,如图3所示。 2.2 自下而上 自底向上的方法是在一次扫描中找出一个图像中所有的人的无身份关键点,然后将他们分组到个人实例中。自底向上的方法用于一种称为热图的概率映射,它估计包含特定关键点的每个像素的概率。关键点的确切位置是通过NMS找到的热图的局部极大值。自底向上的方法通常的复杂性较低,并且具有恒定运行时间的优势。然而,与自上而下的方法相比,准确性有了大幅下降。还有各种其他的调整和细化步骤,以从热图中提取更好的关键点。 不同方法不同的部分是用于对图像中检测到的身体部位进行分组的策略。 OpenPose 构建了一个模型,其中包含两个分支来预测关键点热图和部分亲和场,它们是建模关节之间关联的二维向量。在分组过程中使用了零件亲和关系场。 在关联嵌入中,Newell等人训练网络来预测每个关节的关键点热图和标签值。损失函数被定义为预测属于同一个人的关节的相似标签值,以及属于不同人的关节的不同标签值。 Chen等人提出了更高的HRNet ,它利用更高的输出分辨率来大幅度提高预测精度。 Geng等人最近提出了解开关键点表示(DEKR),提出了一种使用偏移映射的直接回归方法。提出了一种利用自适应卷积来回归相应关键点的偏移量的k个分支结构。这种方法需要关键点热图和后处理中的各种NMS操作的中心热图。即使后处理没有任何分组,但它并不像我们的那样简单。   4、YOLO-Pose 基于YOLOv5的YOLO-Pose架构。输入图像经过darknet主干网络,产生不同尺度的特征图(P3,P4,P5,P6,相比于YOLOv5目标检测多了一个尺寸的特征图)。PANet被采用来融合不同尺度的特征图。PANet的输出作为检测头的输入。最后,每个检测头分支到检测框头和关键点头中。           添加图片注释,不超过 140 字(可选)   3.1 框架概述 为了展示该方法的潜力,作者考虑去选择检测人体效果好的框架。YOLOv5是当前领先的检测器,在考虑精度和运算量方面。因此YOLOv5被选择作为地基去构建。YOLOv5主要关注COCO目标检测上的80个类别,在每个anchor上采用框头预测85种元素。对于80种类别,他们对应边界框,目标分数,置信度分数。针对每个格子位置有不同形状的三种anchor。 对于人体姿态估计,它就检测一种类别即人体,每个人体有17个关节点,并且每个关节点被位置和置信度{ x , y , c o n f } 所确定。因此,与一个关联anchor,有17个关节点的51个元素。因此,对于每个anchor,关键点头预测51个元素,框头预测6个元素。对于n个关节点的anchor,所有需要的元素可以表达成一个向量,即:       添加图片注释,不超过 140 字(可选)   关键点置信度是基于其是否可见来训练的。如果一个关键点是可见的或者遮挡了,那么人工标注置信度设置1;如果它在视野范围之外,则设置为0。**在推理阶段,我们保留置信度大于0.5的关键点。其他预测的关键点被丢弃。预测的关键点置信度不用于评估。但是,由于网络针对每一个检测都输出17个关键点,我们需要过滤掉视野范围外的关键点。否则,会有悬空的关键点导致骨架变形。当前的自下而上的方法基于热力图需要这个操作,因为视野外的关键点在第一阶段就不会被检测到。 YOLOPose采用CSP-darknet53作为骨架,PANet融合多尺度特征。遵从四个检测头在不同尺度的做法。最后,有两个耦合的头用于预测边界框与关键点。 本架构限制其运算量在150 GMACS(乘法累加运算量,约等1~1.2倍GFLOPs浮点数运算)内,也能达到有竞争力的结果。在进一步增加运算量的情况下,能够缩小与自上而下方法的差距。但是,我们不追求那个,因为我们关注的是实时模型。 3.2 基于Anchor的多人姿态公式 对于一个给定的图像,与一个人匹配的锚框会存储其整个二维姿态和边界框。边界框坐标相对于锚中心进行转换,而边界框尺寸根据锚框的高度和宽度标准化。同样,关键点位置也相对于锚框中心进行转换。然而,关键点并没有根据锚框的高度和宽度进行标准化。关键点和边界框都相对于锚的中心进行预测。由于我们的增强独立于锚框的宽度和高度,它可以很容易地扩展到Anchor-free的目标检测方法,如YOLOX ,FCOS 。 3.3 基于IoU边界框的损失函数 多数现代的目标检测器优化IoU,出现了其高级变体例如GIoU,DIoU和CIoU等损失,替代了基于距离的用于边界框预测的损失,因为这些损失是尺度不变的,并能够直接优化评估策略本身。YOLOPose使用CIoU损失用于边界框的监督,对于一个标定的真实边界框,匹配第k个anchor,位置( i , j ),尺度为s,损失可以定义为:       添加图片注释,不超过 140 字(可选)   在本模型中,每个位置有三个anchors,预测有四个尺度。 3.4 人体姿态损失函数公式 OKS是评估关键点的最流行的策略。传统上讲,基于热图的自下而上的方法采用L1损失去检测关键点。但是,L1损失可能不合适去获取优化的OKS。因为L1损失是最朴素的,并不考虑一个物体的尺度或者关键点的类型。由于热图是概率图,不可能去使用OKS作为纯热图方法的损失函数。OKS能当做损失函数仅当我们回归关键点位置的情况下。有人提出尺度归一化的L1损失用于关键点回归,这是迈向OKS损失的一步。 因此,我们直接相对于锚框中心回归关键点,所以我们可以优化评估度量本身,而不是一种代理的损失函数。我们将IOU损失的概念从边界框扩展到关键点。在关键点中,OKS被当做IoU。因此OKS损失本质上是尺度不变的,针对特定的关键点倾斜重要性。也就说,一个人头部的关键点如耳朵、鼻子和眼睛等,会比身体如肩膀,膝盖和臀部等在像素级别上受到更多的错误惩罚。这个权重因子是COCO作者从冗余的标注验证集中根据经验选择的。不像原始的IoU损失,会在非重叠情况下出现梯度消失,OKS损失不会停滞。因此,OKS损失更像dIoU损失。 对应于每个边界框,我们存储整个姿态信息。针对每一个单独的关键点计算OKS,并累加到最终的OKS损失或者关键点IoU,即:       添加图片注释,不超过 140 字(可选)   针对每一个关键点,学习了一个置信度参数,它能够表示该关键点对于那个人是否存在。因此,关键点是是否存在的标志,作为真实标注。可得:       添加图片注释,不超过 140 字(可选)   如果真实边界框与第K个度为 s 的anchor匹配了,那么在位置( i , j ) 那个损失将会有效。最后,对所有尺度、锚点和位置的损失进行累加得到总损失:       添加图片注释,不超过 140 字(可选)   3.5 测试时间增强策略 图像翻转与多尺度测试是两个常用的方法。翻转,将会增加2倍运算量,而多尺度通常在三个尺度上如( 0.5 × , 1 × , 2 × ) 等,对应增加运算量为( 0.25 + 1 + 4 ) 即为原始运算量的5.25倍。本方法不使用任何的数据增强策略。 除了增加计算复杂度外,准备增强的数据本身也可能很昂贵。例如,在翻转测试中,我们需要翻转图像来增加系统的延迟。同样,多尺度测试也需要为每个尺度调整大小操作。这些操作可能相当昂贵,因为它们可能不会加速,不像CNN的操作。融合各种正向传球的输出会带来额外的成本。对于一个嵌入式系统,如果我们能在没有任何TTA的情况下获得有竞争的结果,这是最有利的。我们所有的结果都没有任何TTA。 3.6 边界框外的关键点 自上而下的方法在遮挡条件下表现不佳。与自上而下的方法相比,YOLO-Pose方法的优点之一是对关键点没有限制约束必须在预测的边界框内。因此,如果关键点由于遮挡而位于边界框之外,那么它们仍然可以被正确识别。然而,在自上而下的方法中,如果人的检测不正确,姿态估计也会失败。在YOLOPose中,遮挡和错误的边界框检测的这些挑战都在一定程度上得到了缓解,如图3所示。       添加图片注释,不超过 140 字(可选)     5、实验   4.1 COCO数据集 作者在COCO数据集上评估了模型。它包含了超过20万张图片,有25万人的实例,有17个关键点。train2017集包含57K图像,而val2017和test-dev2017集分别由5K和20K图像组成。我们在train2017上训练该模型,并报告了val2017和test-dev2017的结果。 4.2 COCO val2017结果       添加图片注释,不超过 140 字(可选)   YOLOpose取得了领先的性能,并且运算量比同期最领先的DEKR节省近一半的运算量。 4.3 COCO test-dev2017结果         添加图片注释,不超过 140 字(可选)   4.4 消融实验   4.4.1 OKS Loss vs L1 Loss OKS的损失是本文工作的主要贡献之一。由于这种损失比L1损失更受到限制,因此训练动力学更加稳定。我们不得不在L1损失训练时调整一些损失权重。在YOLv5- s6_960上的测试中,OKS损失明显优于L1损失。我们像在[30]中一样,用尺度归一化的L1损失来训练我们的模型,以检查尺度不变性对我们的损失公式的影响。       添加图片注释,不超过 140 字(可选)   4.4.2 跨分辨率 我们已经通过不同的分辨率训练了我们的模型。我们选择了960作为我们的基本分辨率,因为我们能够在这个分辨率下获得具有竞争力的性能。超过这个分辨率,YOLOv5-s6模型的性能增益已经大大饱和,如下图所示:       添加图片注释,不超过 140 字(可选)         添加图片注释,不超过 140 字(可选)   在较低的分辨率下,YOLOv5s6姿态的表现明显比现有的最先进的低复杂度模型好,如COCO上的高效EfficientHRNet。 4.4.3 量化 YOLOv5模型是基于SiLU激活。正如Liu仁杰等人观察到的,像SiLU或hardSwish这样的无界激活函数不是量化友好的,而具有ReLUX激活的模型对量化是鲁棒的,因为他们有界的本性。因此,我们用ReLU激活重新训练了我们的模型。我们观察到在从SiLU改变到ReLU的激活过程中下降了1-2%。 我们称这些模型为YOLOv5_relu。我们已经将这些模型量化,以进一步将它们定位为嵌入式友好型。这些模型可以被量化,其精度下降可以忽略不计(~1.2%),如下表以YOLOv5-s6_960_relu为例所示。       添加图片注释,不超过 140 字(可选)   度实现良好的精度对于在嵌入式系统中部署任何模型都是至关重要的。量化后的模型可以降低延迟和降低功耗。由于大多数CNN加速器都是针对整数操作进行优化的,因此通过8位量化或混合精     6、总结 该文提出了一个端到端的基于 YOLOv5 的联合检测和多人姿态估计框架。它已经证明,YOLOPose在复杂性显着降低的情况下优于现有的自下而上方法。此工作是统一目标检测和人体姿态估计领域的第一步。到目前为止,姿态估计的大部分进展都是作为一个不同的问题独立发生的。这个SOTA 结果将进一步鼓励研究界探索共同解决这两项任务的潜力。此工作的主要动机是将对象检测的所有好处传递给人体姿势估计,因为我们正在目睹对象检测领域的快速进展。作者已经为 YOLOX 目标检测框架扩展了这种方法进行了初步实验,并取得了可喜的成果。作者也将把这个想法扩展到其他对象检测框架,并进一步推动有效人体姿态估计的极限。         添加图片注释,不超过 140 字(可选)   —————— 浅谈则止,细致入微AI大道理 扫描下方“AI大道理”,选择“关注”公众号 —————————————————————       —————————————————————   公众号《AI大道理》征稿函​mp.weixin.qq.com/s?__biz=MzU5NTg2MzIxMw==&mid=2247489802&idx=1&sn=228c18ad3a11e731e8f325821c184a82&chksm=fe6a2ac8c91da3dec311bcde280ad7ee760c0c3e08795604e0f221ff23c89c43a86c6355390f&scene=21#wechat_redirect | 论文解读:YOLO-Pose(姿态估计)​mp.weixin.qq.com/s/EZTr2YUhp0RIFR4hWfRGqA?token=252033425&lang=zh_CN  

标签:Pose,检测,尺度,YOLO,损失,解读,方法,姿态,关键点
From: https://www.cnblogs.com/AIBigTruth/p/18684751

相关文章

  • 基于YOLOv5、YOLOv8和YOLOv10的机场安检行李检测:深度学习应用与实现
    引言随着全球航空运输业的持续增长,机场的安全性变得越来越重要。机场安检作为航空安全的重要组成部分,主要负责对乘客和行李进行检查,防止危险物品进入机场或飞行器。传统的安检方式多依赖人工检查,效率低下且容易出错。因此,基于深度学习的自动化行李检测系统应运而生,通过计算......
  • Android Systrace 基础知识 - Triple Buffer 解读
    怎么定义掉帧?Systrace中可以看到应用的掉帧情况,我们经常看到说主线程超过16.6ms就会掉帧,其实不然,这和我们这一篇文章讲到的TripleBuffer和一定的关系,一般来说,Systrace中我们从App端和SurfaceFlinger端一起来判断掉帧情况App端判断掉帧如果之前没有看过Systrace......
  • 虚拟现实国标解读系列(一)帧率
    大家好,我是ij(我的网名),中文名叫林志宏。遵循我一贯的年底必摸鱼的习惯,我打算开始摸鱼来水一些文章,安慰下自己过去的一年。有关注过我,听我吹过牛的都知道,我在几年前,也不知道几年前,反正longlongago,我参与起草过一份牛逼的测试标准,国标GB/T38258《虚拟现实应用软件基本要求和测......
  • 深度学习目标检测使用yolov8训练使用路障类数据集之_道路积水检测数据集并构建一个基
    道路积水检测数据集,23097张,yolo和voc1类,标注数量:0道路积水:133261imagenum:23097积水啦,怎么办构建基于YOLOv8的道路积水检测系统。两种标注方式(YOLO和VOC)。以下是完整的代码实现,包括数据加载、模型训练、评估和推理。1.安装依赖首先,确保您已经安装了所需的库,特......
  • 训练YOLOv8模型_胸部x光片检测数据集 且构建一个基于YOLOv8的胸部X光片检测系统 voc_y
    训练YOLOv8模型_胸部x光片检测数据集且构建一个基于YOLOv8的胸部X光片检测系统voc/yolo文章目录以下文字及代码仅供参考1.安装依赖2.数据准备3.文件内容3.1`datasets/chest_xray_detection/`目录3.2`Config.py`3.3`train.py`3.4`detect_tools.py`3.5`UIProgr......
  • 如何使用深度学习框架目标检测YOLOv8训练骨折检测模型涉及到准备数据集、设置环境、预
    如何使用深度学习框架目标检测YOLOv8训练骨折检测模型涉及到准备数据集、设置环境、预处理数据、定义模型、训练模型、评估模型性能、分析结果和可视化,以及开发用户界面识别骨折X光检测数据集骨折X光检测数据集YOLO20000一套全面的X射线图像,旨在促进使用计算机视觉技......
  • 深度学习目标检测框架训练使用YOLOv8训练钓鱼检测数据集 使用Flask或FastAPI等框架创
    深度学习目标检测框架训练使用YOLOv8训练钓鱼检测数据集并构建一个基于YOLOv8的钓鱼检测系统使用YOLOv8训练钓鱼检测数据集,如何针对钓鱼检测进行调整和实现的详细步骤。1.安装依赖确保安装了必要的库。对于钓鱼检测,所需的库应该与之前提供的相同,但请根据实际情况检查是......
  • 《StringBuilder类的数据结构和扩容方式解读》
    StringBuilder类的简单用法、数据结构和扩容方式解读文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结前言在之前的文章中和大家讲过String字符串类具有不可变性,今天给大家介绍一个可变字符串类——StringBuilder类。提示:以下是本篇文章正文内......
  • 《String类的equals()的作用和源代码解读》
    一、equals()方法的由来equals()最开始是定义在Java.lang包下的Object中的一个经行比较的方法,根据Object类的核心代码可以看出来,在Object类中equals()方法比较时使用“==”运算符来比较两者地址,但实际应用情况下,人们往往想比较两者的值是否相同,当两个相同的值存进不同内存地址时......
  • String类的equals()的作用和源代码解读
    1. 了解equals()方法equals方法是用于比较两个对象是否相等的方法,定义在Object类中。其默认实现仅比较对象的引用地址,但可以通过重写方法实现对对象内容的比较。只有引用数据类型才可以使用equals方法,我们点进equals方法的源码:我们看代码前几行,观察到当传入进来的参数之间......