关键点检测,作为计算机视觉领域的重要分支,旨在识别图像或视频中具有特定意义或信息的关键点。如人脸上的鼻子,眼睛,或是关节等。在神经网络中,用于关键点检测的卷积神经网络(Convolutional Neural Networks, CNNs)有许多出名的模型。从DeepPose开始,直到现在的先进方法,形成了丰富的历史脉络。
在我第一节笔记里,我展示了如何标注关键点数据,从实战入门,其笔记是关键点检测(1)——标注关键点检测数据(labelme和CVAT)-CSDN博客。而这一节课,我打算先简单了解一下其发展历史,并做一个笔记。可能个人在网上寻找的资料并不全,自己的经验也并不丰富,所以所记录的也不全面,如有错误请指正,谢谢。当然随着我笔记内容的深入,我会继续完善这一节课的内容。争取让看到我这篇笔记的同学也对关键点检测的历史有一个浅浅的认识。
1,深度学习之前的关键点检测思路
在深度学习兴起之前,关键点检测主要依靠手工设计的特征和机器学习算法,如SIFT、SURF、HOG等特征描述子,结合滑动窗口和分类器如SVM进行检测。这些方法在特定条件下有效,但在复杂场景和变化光照下性能受限。
角点检测:早期的关键点检测方法主要集中在角点的检测上,如Harris角点检测器和Shi-Thmasi角点检测器。这些方法依赖于图像局部的梯度信息来检测角点。
SIFT(尺度不变特征变换):SIFT是一种经典的特征提取和匹配算法,通过在不同尺度和方向上寻找极值点来检测关键点,并提取描述符用于匹配。
SURF(加速稳健特征):SURF算法是SIFT的一种加速版本,通过积分图像和快速Hessian矩阵检测关键点,提高了计算效率。
FAST(特征点检测器):FAST是一种快速的角点检测算法,适用于实时应用,但对于光照变换和视角变化敏感。
HOG(方向梯度直方图):HOG特征描述符广泛应用于行人检测等任务,通过统计图像局部区域的梯度方向直方图来描述特征。
2,DeepPose(2014):最早使用深度神经网络进行人体姿态估计
- 里程碑意义:DeepPose是首个将深度神经网络应用于人体姿态估计和关键点定位的框架,将姿态估计视为回归问题,直接输出关键点坐标。
- 技术突破:引入了级联的网络结构,通过多个阶段逐步细化关键点的位置,提高了检测精度。
DeepPose是一种使用深度学习技术进行关键点检测的方法,特别应用于人体姿态估计。它是最早使用卷积神经网络(CNNs)来解决人体姿态估计问题的模型之一,由Shih-En Wei等人在2016年提出。DeepPose的主要目标是预测人体关节点的位置,这对于动作识别、人机交互、虚拟现实等应用至关重要。
DeepPose的基本思路是将人体姿态估计问题视为回归问题,其中网络直接预测人体关节的二维或三维坐标。具体来说,DeepPose模型接收一张输入图像,并输出一系列坐标,每个坐标代表一个特定的人体关键点,如肘部、膝部、腕部等。
为了实现这一点,DeepPose采用了多层卷积神经网络(CNN),这种网络能够从图像中提取复杂的特征。CNN的输出被送入全连接层,最后输出每个关键点的坐标。训练时,模型通过最小化预测坐标与真实坐标之间的距离(通常使用均方误差损失)来进行学习。DeepPose的模型如下,包含了七层Alexnet和额外的回归全连接层,输出为2*关节点坐标数目,表示二维图像中的坐标。而且作者针对当前浅层CNN学习到的特征尺度固定,回归性能差的问题,将网络得到的粗分回归(x, y)坐标保存,增加一个阶段,在原图中以(x, y)为中心,剪切一个区域图像,将区域图像传入CNN网络学习更高分辨率的特征,进行较高精度的坐标值回归。
即通过级联提高精度:第一级以全身图像为输入,预测所有关键点坐标,位置精度较低。
第二级以每个预测点为中心,裁剪局部图像送入第二级网络,再次回归该点,提升精度。
DeepPose的创新点:
- 1,端到端学习:DeepPose可以端到端的学习从输入图像到关键点坐标的映射,而不需要人工设计特征。
- 2,回归而非分类:与许多早期姿态估计方法不同,DeepPose不使用热力图或关键点的分类,而是直接回归关键点的坐标,这在当时是一个新颖的策略。
- 3,灵活性:DeepPose可以处理不同视角和复杂背景下的姿态估计,而且可以扩展到三维空间中的姿态估计。
虽然DeepPose开创了姿态估计领域的新篇章,但是他也存在一些局限性。例如,他可能在关节重叠或遮挡的清空下表现不佳,因为网络难以区分被遮挡的关键点。此外,由于它直接回归坐标,可能会收到坐标表示的局限极小值问题的影响。后续的研究者提出了多种改进方案,包括使用热力图、多任务学习、循环神经网络(RNNs)以及更深层次的CNN架构,以提高姿态估计的准确性和鲁棒性。
总之,DeepPose是姿态估计领域的一个重要里程碑,它展示了深度学习在解决复杂视觉任务方面的潜力。
3,Stacked Hourglass Network(2016):通过堆叠沙漏网络进行人体姿态估计
- 里程碑意义:提出了堆叠的Hourglass网络结构,这是一种完全卷积网络(FCN),能够进行多次上下采样和上采样,形成多尺度的特征表示,增强了对姿态估计的分辨率敏感性。
- 技术突破:使用热力图作为输出,而非直接坐标,解决了坐标回归的局部极小值问题,提高了检测的鲁棒性。
Stacked Hourglass Network(堆叠沙漏网络)是一种深度学习架构,最初由Alexander Newell、Kaiyu Yang和Jia Deng在2016年的论文《Stacked Hourglass Networks for Human Pose Estimation》中提出。这项工作主要关注于人体姿态估计,即在给定的图像中检测并定位人体关键点,如关节位置。Stacked Hourglass Network因其在人体姿态估计任务上的卓越表现而成为该领域的里程碑。
堆叠沙漏网络同样在2D人体姿态识别领域有着颠覆性的地位,一经提出就横扫各大比赛数据集,并且凭着简单灵活的结构获取了很多的关注和后续改进。它继承并放大了DeepPose所提出的多分辨率特征思路,虽然单独的关节点坐标回归依赖于某个小尺寸区域,如手,腿,头区域图像的特征,但是整个人的完整姿态也依赖于大尺度的全局特征,CNN在学习分辨图像中关键点坐标的同时,也要学习各个关键点在整个图像中的空间位置关系。
Stacked HourGlass Network的组成如下:
Stacked Hourglass Network的核心是其独特的沙漏结构,这是一种完全卷积网络(Fully Convolutional Network, FCN),能够对输入图像进行多次下采样和上采样操作,形成一个多尺度特征表示。
- 下采样(Downsampling):通过卷积和池化层逐层减少特征图的尺寸,这有助于捕获图像的全局信息。
- 上采样(Upsampling):通过反卷积层恢复特征图的尺寸,这有助于保留图像的局部细节。
- 堆叠(Stacking):多个沙漏结构被堆叠在一起,形成一系列的重复模块,每个模块都可以输出一组关键点的热力图。堆叠的沙漏网络能够迭代地细化关键点的位置,提高检测的准确性。
其工作流程如下:
- 输入图像经过初步的卷积层处理,生成初始的特征图。
- 特征图进入第一个沙漏模块,进行下采样和上采样,最终输出一组关键点的热力图。
- 输出的热力图和原始特征图通过跳跃连接(skip connection)合并,作为下一个沙漏模块的输入,这个过程可以重复多次。
- 每个沙漏模块的输出都会被用于最终的关键点预测,而不仅仅是最后一个模块的输出。
Stacked Hourglass的关键贡献点:
- 多尺度特征学习:通过下采样和上采样的过程,网络能够学习到图像的多尺度特征,这对于姿态估计非常重要,因为人体的不同部位可能在不同的尺度上呈现。
- 迭代预测:堆叠的沙漏结构允许网络对关键点的位置进行多次迭代修正,提高了预测的精度。
- 端到端学习:整个网络可以端到端地训练,不需要任何手工设计的特征,仅依赖于自动学习的表示。
Stacked Hourglass Network在发布时,在多个姿态估计数据集上取得了当时最好的结果,显示了其在处理复杂姿态和遮挡情况下的强大能力。此外,其设计思想也被广泛应用于其他视觉任务,如人脸关键点检测、手部姿态估计等。
4,Cascaded Pyramid Network(CPN):级联金字塔网络用于人体姿态估计
-
里程碑意义:CPN展示了如何有效的从不同尺度的特征图中提取和整合信息,然后通过级联网络逐步改进关节位置的预测,CPN的创新之处在于结合了全局和局部的信息,首先进行全局的预测,然后针对每个关节的局部区域进行细化,这种策略提高了定位的精度和鲁棒性。最后它引入了多任务学习的概念,除了主任务的关键点定位,还预测关节的存在性,这种联合训练方式提升了模型的整体性能。
- 技术突破:CPN利用金字塔网络结构处理多尺度特征,这在姿态估计中是创新的,它能够捕捉到不同大小关节的细节,提高了模型的泛化能力。CPN的级联结构允许模型在每个阶段都对预测进行修正,这种迭代式的精炼过程能够逐渐消除预测中的误差,最终得到更准确的关节位置。CPN的局部引导机制通过关注每个关节周围的区域,增强了模型对局部细节的理解,尤其是当关节被衣物或其他物体遮挡时,这种机制尤为重要
Cascaded Pyramid Network(CPN)确实是人体姿态估计领域的一个重要里程碑。由Zhe Cao、Tianchuang Shen、Wei Wang和Yichen Wei在2017年提出的CPN,主要针对的是单人姿态估计任务,但它引入的几个创新点对后续的研究产生了深远的影响。
整体模型采样自上而下的检测策略,首先对输入图像进行人体目标检测,得到候选框后传入CPN网络进行人体关键点回归。该方法对关键点的预测包含三种方法:直接预测,增大感受野预测,根据上下文预测。
网络的结构如下:
左边的GlobalNet负责关键点的直接预测,针对比较容易检测到的眼睛,肘等部位,每个featuremap输出都要经历一个1*1的卷积层。右边的RefineNet对预测结果进行修正,对左边难以处理的遮挡,背景复杂以及尺度不合适的关节点进行修正。
CPN在发布时,其在多个姿态估计基准上的性能超过了当时的现有方法,特别是在复杂姿态和遮挡情况下的表现尤为突出。它不仅展示了深度学习在姿态估计中的强大能力,还启发了后续的研究者在姿态估计任务中探索更复杂的网络架构和训练策略。
CPN的贡献在于它提出了一种有效的多尺度特征融合和级联精炼机制,这在姿态估计领域中是一种创新,也为其他相关任务(如人体部位分割、行为识别等)提供了有价值的参考。随着深度学习技术的不断进步,CPN的理念和方法仍在被后续的研究所借鉴和拓展。
5,AlphaPose(2018):可以在复杂场景同时检测和估计多个人体姿态
- 里程碑意义:AlphaPose是基于Mask R-CNN的改进版本,不仅检测关键点,还提供了实例分割,帮助解决了多人姿态估计中的关键点归属问题。
- 技术突破:引入了多个人姿态估计的解决方案,通过高级的后处理算法(如贪婪匹配算法)来关联不同姿势的关键点。
AlphaPose是2018年上海交大和腾讯优图提出的一种人体姿态估计系统,它在多人姿态估计领域取得了显著的成果。AlphaPose不仅能够准确地估计单个人体的姿态,还能在复杂的场景中同时检测和估计多个个体的姿势,这是其相对于之前方法的一个重要突破。
以下是AlphaPose的一些关键特性和创新点:
- 关联与嵌入(Associative Embedding): AlphaPose采用了关联嵌入技术来解决多人姿态估计中的关键点归属问题。它使用一个附加的嵌入向量来区分属于不同人的相同类型的关键点,即使这些关键点在图像中重叠或接近。
- 自顶向下与自底向上结合: AlphaPose结合了自顶向下的目标检测和自底向上的关键点检测方法。首先,它使用一个检测器来定位图像中的人体框;然后,在这些框内,应用自底向上的关键点检测来找到每个个体的姿态。这种混合策略提高了检测速度和准确性。
- 多级融合: AlphaPose使用一个多级融合机制来优化关键点的检测。它利用了不同级别的特征图,从粗到细逐步精炼姿态估计的结果。
- 递归神经网络(RNN)的使用: 在一些实现中,AlphaPose还引入了递归神经网络(RNN)来建模时间序列数据,这有助于在视频序列中追踪运动和姿态变化。
- 端到端的训练: 整个系统可以进行端到端的训练,这意味着所有组件(包括检测、关键点估计和关联)可以联合优化,以获得最佳的整体性能。
AlphaPose因其在多人姿态估计方面的优秀表现而受到广泛关注,并且在COCO Keypoint检测基准测试中取得了优异的成绩。它的方法和理念启发了后续许多研究,尤其是在多人姿态估计和视频姿态估计领域。AlphaPose不仅在学术界产生了影响,也在实际应用中找到了用武之地,例如在体育分析、虚拟现实、增强现实以及监控系统等领域,它可以帮助理解人类的行为和动作。随着深度学习和计算机视觉技术的不断发展,AlphaPose及其衍生方法将继续推动人体姿态估计技术的进步。
6,Simple Baselines(2018):提出人体姿态估计和跟踪的简单基线网络
- 里程碑意义:证明了简单的残差网络(ResNet)架构和自顶向下的策略也能达到先进的关键点检测性能,简化了模型设计。
- 技术突破:强调了数据增强和训练技巧的重要性,如多尺度训练,以及通过预训练在ImageNet上的模型初始化网络。
2018年微软提出了简单有效的人体姿态估计和跟踪的简单基线方法,旨在展示在人体姿态估计任务中,使用相对简单的神经网络架构和训练策略,也可以取得非常有竞争力的性能。该方法在COCO关键点检测挑战赛上获得了第一名,证明了即使是基础的架构,通过精心设计的训练流程和数据增强策略,也能达到顶尖的检测效果。
Simple Baselines 的核心特点:
-
ResNet Backbone:Simple Baselines使用了ResNet(残差网络)作为基础的特征提取网络。ResNet是一种深而强大的卷积神经网络,能够学习到图像中的复杂特征。
-
Heatmap Regression:像许多其他姿态估计方法一样,Simple Baselines也使用热力图回归作为输出表示。每个关键点都对应一个热力图,热力图的峰值位置表示关键点的位置。
-
Multi-Scale Training:为了提高模型的泛化能力和对不同尺度物体的检测能力,Simple Baselines在训练过程中使用了多尺度训练策略。这意味着模型在不同分辨率的图像上进行训练,以增强其对尺度变化的鲁棒性。
-
Heavy Data Augmentation:Simple Baselines在训练时采用了大量的数据增强技术,包括随机裁剪、缩放、旋转和颜色抖动等,以增加模型的多样性暴露和提高其泛化能力。
-
Flip Test Time Augmentation:在测试阶段,Simple Baselines还使用了翻转测试时间增强,即同时对原图和水平翻转后的图像进行预测,然后平均两个预测结果,以进一步提高精度。
-
Post-processing:除了网络本身的优化,Simple Baselines还使用了一些后处理技术,如非极大值抑制(NMS)和基于解剖学约束的调整,以提高关键点定位的准确性。
Simple Baselines通过展示在姿态估计任务中,一个相对简洁的模型架构配合高效的数据增强和训练策略,可以达到甚至超过复杂定制模型的性能,极大地简化了姿态估计模型的设计和训练流程。这种方法降低了姿态估计的入门门槛,促进了该领域的发展,同时也强调了数据增强和训练策略的重要性。此外,Simple Baselines的代码公开,为研究社区提供了一个强大的基准,便于后续研究的对比和改进。
Simple Baseline为人体姿态估计提供了一套基准框架。SBL在主干网络后接逆卷积模块来预测热图,就是在ResNet后加了几层Deconvolution直接生成热力图。相比于其他模型,就是使用Deconvolution替换了上采样结构。将上采样和卷积参数以一种更简单的方式组合到反卷积层中,而不是使用跳跃层连接。
Hourglass,CPN,SBL共同点是,采用三个上采样步骤和三个水平的非线性(来自最深处的特征)来获得高分辨率的特征图和heatmap。
在这些模型中,可以看出如何生成高分辨率特征图是姿态估计的一个关键。SimplePose 采用Deconv扩大特征图的分辨率,Hourglass, CPN中采用的是 upsampling+skip的方法。
另外作者还提出了一种姿态追踪的方法:首先对每一帧用Mask-RCNN估计人体姿态;然后在帧间进行在线的跟踪,使用的是一个贪婪的二分匹配算法。
7,HRNet(2020):用于人体姿态估计的深度高分辨率模型
HRNet是由中科大和微软亚洲研究院发布的人体姿态估计模型,刷新了三项COCO记录,并入选CVPR2019.
在人体姿态任务中,之前的CPN,Hourglass等方法,重建高分辨率表征都是从低分辨中恢复的,一般是通过一个从高到低分辨率网络结构(如VGG,Resnet)中用低分辨率恢复高分辨率表征;在CPN中有提到过,较高的空间分辨率有利于特征点精确定位,低分辨率具有更多的语义信息。这些方法都是通过一定方式得到了新的高分辨率特征表示,但是本文作者认为这种高分辨率特征不够强,因为他们都是通过相对低分辨率表征恢复出来的,本文作者想从其他角度解决这个问题并分析了目标的本质,目标本质是是想获得高分辨率表征,那么本文作者考虑在设计网络的时候,一直保持高分辨率表征,而不是从低分辨率表征来恢复。在设计上采用网络并行连接从高到低的子网的方式。
HRNet基于了这一思想,设计了高低多分辨率网络并联的网络结构来提取特征,如下图:
HRNet的关键特性:
-
多分辨率并行处理: HRNet采用了一种多分支并行的网络结构,这些分支以不同的分辨率并行处理特征。与其他网络架构先进行下采样再上采样恢复分辨率不同,HRNet在整个网络中保持了高分辨率的特征流,从而避免了信息的丢失。
-
交叉分辨率融合: HRNet中的不同分辨率分支之间通过跨分辨率的连接进行信息交换,低分辨率分支的特征被上采样并与高分辨率分支的特征融合,而高分辨率分支的特征则被下采样并传递给低分辨率分支,这样可以促进不同尺度特征之间的互补。
-
模块化设计: HRNet的架构是模块化的,这意味着网络的不同部分(模块)可以灵活地组合,以适应不同的任务和输入规模。这种设计使得HRNet能够在不同的视觉任务中展现出良好的适应性和可扩展性。
-
轻量化和效率: 尽管HRNet保持了高分辨率的特征表示,但通过并行计算和模块化设计,它依然能够保持计算效率,避免了过高的计算成本。
HRNet在姿态估计任务中取得了显著的效果,特别是在人体姿态估计方面,它在COCO等标准数据集上达到了业界领先的性能。此外,HRNet在语义分割、图像分类、目标检测等任务中也展现了出色的表现,这得益于其对细节信息的保留和对多尺度特征的有效利用。后续会针对HRNet专门进行学习的,毕竟真的是太重要的。
HRNet模型与之前主流方法思路上有很大的不同。在HRNet之前,2D人体姿态估计算法是采用(Hourglass/CPN/Simple Baseline/MSPN等)将高分辨率特征图下采样至低分辨率,再从低分辨率特征图恢复至高分辨率的思路(单次或重复多次),以此过程实现了多尺度特征提取的一个过程。HRNet的主要特点是在整个过程中特征图(Feature Map)始终保持高分辨率,低分辨率特征和高分辨率特征是并行设计的。低分辨率特征和高分辨率特征的融合,他们在特征层面基本上是相似的或者相同的。
8,YOLO系列——端到端的姿态检测算法
YOLO(You Only Look Once)系列模型在目标检测领域具有里程碑意义,对包括人体姿态估计在内的多种计算机视觉任务产生了深远影响。尽管YOLO系列模型最初专注于目标检测,即识别和定位图像中的物体,但它们的实时性能和准确性使得它们在多种应用场景中得到了广泛使用,包括人体检测和初步姿态估计。
目前最著名的Ultralytics系列的yolo和旷世的YOLOX系列均可以简单实现图像分类,目标检测,关键点检测,目标跟踪,图像分割等计算机视觉任务。
YOLO系列的里程碑意义:
-
实时检测: YOLO系列模型的最大特点是它们能够以极快的速度进行目标检测,这在实时应用中至关重要。YOLOv1首次提出了一种单次通过网络进行目标检测的方法,大大提高了检测速度。
-
端到端检测: YOLO将目标定位和分类集成到一个统一的框架中,无需预处理步骤如区域提议,这简化了目标检测的流程,使其更加高效。
-
持续的性能提升: 随着YOLOv2、YOLOv3、YOLOv4、YOLOv5, YOLOX, YOLOV8, YOLOV10等版本的推出,YOLO系列模型在保持高速度的同时,检测精度也不断提高,这得益于网络架构的优化、数据增强技术的改进以及更高效的训练策略。
-
灵活性和可扩展性: YOLO模型的架构易于调整和扩展,可以适应不同场景的需求,无论是手机等移动设备上的轻量级应用,还是服务器上的高性能检测任务。
YOLO与人体姿态估计:虽然YOLO系列模型主要针对目标检测,但它们在人体检测上的高效性为后续的人体姿态估计提供了坚实的基础。一旦YOLO检测出人体,后续的模型如DeepPose、Stacked Hourglass Network、AlphaPose等可以专注于检测到的区域,进行更详细的姿态估计。
YOLO系列模型通过其高效的实时检测能力,不仅改变了目标检测领域,也为包括人体姿态估计在内的多种计算机视觉任务提供了有力的支持。随着YOLO系列的持续发展,我们可以期待在未来的计算机视觉应用中看到更多的创新和进步。
9,mmpose——综合性的开源姿态估计工具箱
- 里程碑意义:MMPose是一个综合性的开源姿态估计工具箱,包含了多种姿态估计模型,包括2D和3D姿态估计,以及手部和面部关键点检测。
- 技术突破:促进了研究社区的资源共享,加速了姿态估计领域的进展。
MMpose是一个开源的、全面的、模块化的人体姿态估计工具箱,由阿里云和上海交通大学共同开发。它基于PyTorch框架,旨在为研究者和开发者提供一个强大的平台,用于研究和实现姿态估计相关的算法。MMpose不仅仅局限于2D姿态估计,还涵盖了3D姿态估计、手部姿态估计、面部关键点检测等多种任务,提供了丰富的模型和数据集支持。
MMpose的特点:
-
广泛的模型支持: MMpose包含了一系列姿态估计模型,包括但不限于HRNet、Simple Baselines、Stacked Hourglass、AlphaPose等,这使得用户能够方便地比较和选择适合他们需求的模型。
-
模块化设计: MMpose的模块化设计使得用户可以轻松地添加、修改或替换模型组件,如backbone、neck、head等,这增加了框架的灵活性和可扩展性。
-
丰富的数据集支持: MMpose支持多种姿态估计数据集,如COCO、MPII、AIC、Total Captures等,这为模型训练和评估提供了便利。
-
全面的文档和教程: MMpose提供了详尽的文档和教程,包括模型配置、数据准备、训练和推理流程等,这降低了新手的入门难度,加速了研究和开发过程。
-
社区和生态系统: MMpose拥有活跃的开源社区,定期更新维护,提供bug修复、性能优化和新功能添加,这促进了知识共享和协作。
-
高性能和可复现性: MMpose致力于确保提供的模型和结果具有高度的可复现性,同时优化了代码效率,以支持大规模训练和部署。
MMpose作为一个全面的姿态估计工具箱,通过其模块化的设计、广泛的模型支持和丰富的数据集,为姿态估计领域的研究和应用提供了强大的支持。它不仅加速了姿态估计技术的发展,还促进了该领域的知识共享和技术创新。
我们查看其代码仓库介绍,就可以看到mmpose已经集成了前面所说的所有算法:
包括各种姿态估计的数据集:
这当然也是我们最后学习的重点和关键。后面会详细学习。
10,最新进展——RTMO算法
我们从最新的榜单也可以看出,目前RTMO是SOTA算法:
当然我们直接去mmpose的代码仓库也可以找到,其最新的文章:
这个是结合了YOLO系列的框架,使用单阶段的方法达到了一个速度和精度都很高的水平。后面我们也会认真学习一下。
标签:特征,检测,模型,估计,历程,姿态,关键点 From: https://blog.csdn.net/zhanzhengrecheng/article/details/141287962