关键点检测是计算机视觉领域中 一项重要任务,旨在识别图像或视频中具有特定意义或信息的关键点。如人脸上的鼻子,眼睛,或是关节等。在神经网络中,用于关键点检测的卷积神经网络(Convolutional Neural Networks, CNNs)有许多出名的模型。从DeepPose开始,直到现在的先进方法,形成了丰富的历史脉络。
下面简单了解一下其发展历史,并做一个笔记。可能个人在网上寻找的资料并不全,自己的经验也并不丰富,所以所记录的也不全面,如有错误请指正,谢谢。
在深度学习兴起之前,关键点检测主要依靠手工设计的特征和机器学习算法,如SIFT、SURF、HOG等特征描述子,结合滑动窗口和分类器如SVM进行检测。这些方法在特定条件下有效,但在复杂场景和变化光照下性能受限。
角点检测:早期的关键点检测方法主要集中在角点的检测上,如Harris角点检测器和Shi-Thmasi角点检测器。这些方法依赖于图像局部的梯度信息来检测角点。
SIFT(尺度不变特征变换):SIFT是一种经典的特征提取和匹配算法,通过在不同尺度和方向上寻找极值点来检测关键点,并提取描述符用于匹配。
SURF(加速稳健特征):SURF算法是SIFT的一种加速版本,通过积分图像和快速Hessian矩阵检测关键点,提高了计算效率。
FAST(特征点检测器):FAST是一种快速的角点检测算法,适用于实时应用,但对于光照变换和视角变化敏感。
HOG(方向梯度直方图):HOG特征描述符广泛应用于行人检测等任务,通过统计图像局部区域的梯度方向直方图来描述特征。
DeepPose是一种使用深度学习技术进行关键点检测的方法,特别应用于人体姿态估计。它是最早使用卷积神经网络(CNNs)来解决人体姿态估计问题的模型之一,由Shih-En Wei等人在2016年提出。DeepPose的主要目标是预测人体关节点的位置,这对于动作识别、人机交互、虚拟现实等应用至关重要。
DeepPose的基本思路是将人体姿态估计问题视为回归问题,其中网络直接预测人体关节的二维或三维坐标。具体来说,DeepPose模型接收一张输入图像,并输出一系列坐标,每个坐标代表一个特定的人体关键点,如肘部、膝部、腕部等。
为了实现这一点,DeepPose采用了多层卷积神经网络(CNN),这种网络能够从图像中提取复杂的特征。CNN的输出被送入全连接层,最后输出每个关键点的坐标。训练时,模型通过最小化预测坐标与真实坐标之间的距离(通常使用均方误差损失)来进行学习。DeepPose的模型如下,包含了七层Alexnet和额外的回归全连接层,输出为2*关节点坐标数目,表示二维图像中的坐标。而且作者针对当前浅层CNN学习到的特征尺度固定,回归性能差的问题,将网络得到的粗分回归(x, y)坐标保存,增加一个阶段,在原图中以(x, y)为中心,剪切一个区域图像,将区域图像传入CNN网络学习更高分辨率的特征,进行较高精度的坐标值回归。
即通过级联提高精度:第一级以全身图像为输入,预测所有关键点坐标,位置精度较低。
第二级以每个预测点为中心,裁剪局部图像送入第二级网络,再次回归该点,提升精度。
DeepPose的创新点:
虽然DeepPose开创了姿态估计领域的新篇章,但是他也存在一些局限性。例如,他可能在关节重叠或遮挡的清空下表现不佳,因为网络难以区分被遮挡的关键点。此外,由于它直接回归坐标,可能会收到坐标表示的局限极小值问题的影响。后续的研究者提出了多种改进方案,包括使用热力图、多任务学习、循环神经网络(RNNs)以及更深层次的CNN架构,以提高姿态估计的准确性和鲁棒性。
总之,DeepPose是姿态估计领域的一个重要里程碑,它展示了深度学习在解决复杂视觉任务方面的潜力。
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),能够对输入图像进行多次下采样和上采样操作,形成一个多尺度特征表示。
其工作流程如下:
Stacked Hourglass的关键贡献点:
Stacked Hourglass Network在发布时,在多个姿态估计数据集上取得了当时最好的结果,显示了其在处理复杂姿态和遮挡情况下的强大能力。此外,其设计思想也被广泛应用于其他视觉任务,如人脸关键点检测、手部姿态估计等。
里程碑意义: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的理念和方法仍在被后续的研究所借鉴和拓展。
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的代码公开,为研究社区提供了一个强大的基准,便于后续研究的对比和改进。
在这些模型中,可以看出如何生成高分辨率特征图是姿态估计的一个关键。SimplePose 采用Deconv扩大特征图的分辨率,Hourglass, CPN中采用的是 upsampling+skip的方法。
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)始终保持高分辨率,低分辨率特征和高分辨率特征是并行设计的。低分辨率特征和高分辨率特征的融合,他们在特征层面基本上是相似的或者相同的。
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系列的持续发展,我们可以期待在未来的计算机视觉应用中看到更多的创新和进步。
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已经集成了前面所说的所有算法:
包括各种姿态估计的数据集:
这当然也是我们最后学习的重点和关键。后面会详细学习。
我们从最新的榜单也可以看出,目前RTMO是SOTA算法:
当然我们直接去mmpose的代码仓库也可以找到,其最新的文章:
这个是结合了YOLO系列的框架,使用单阶段的方法达到了一个速度和精度都很高的水平。后面我们也会认真学习一下。