单目人体姿态估计:基于深度学习的方法概览-2D 单人姿态估计
基于回归的方法
AlexNet (Krizhevsky等人,2012)是基于深度学习的HPE方法的早期网络之一,因为其简单的体系结构和令人印象深刻的性能。托舍夫和塞格迪(2014)首次尝试训练一个类似AlexNet的深度神经网络,以非常直接的方式从完整图像中学习关节坐标,而不使用任何身体模型或部分检测器,如图3所示。此外,采用多级细化回归器的级联结构来细化来自前一级的裁剪图像并显示改进的性能。Pfister等人(2014)还应用了一个类似AlexNet的网络,使用一系列串联的帧作为输入来预测视频中的人体姿态。
只使用没有周围信息的关节缺乏鲁棒性。将热图监控转换为数字联合位置监控可以保留两种表示的优势。Luvizon等人(2017)提出了一个软参数最大值函数来将热图转换为关节坐标,该函数可以将基于检测的网络转换为基于可微分回归的网络。尼巴利等人(2018年)设计了一个可微分的空间到数值变换(DSNT)层,用于从热图中计算关节坐标,这在低分辨率热图中效果很好。直接从输入图像中预测关节坐标很困难,因此引入了更强大的网络,并采用了细化或身体模型结构。Carreira等人(2016)提出了一种基于谷歌网络的迭代误差反馈网络,该网络递归处理输入图像和输出结果的组合。迭代后,最终姿态从初始平均姿态开始改善。孙等(2017)提出了一种结构感知回归方法basedonaResNet-50。代替关节存储呈现姿势,通过涉及身体结构信息来设计基于骨骼的表示,以获得比仅使用关节位置更稳定的结果。基于骨骼的表示也适用于3D HPE。处理人体多个密切相关任务的网络可以学习不同的特征,以提高对关节坐标的预测。Li等人(2014)采用类似AlexNet的多任务框架以回归方式处理完整图像的联合坐标预测任务,以及通过滑动窗口获得的图像块的身体部位检测任务。Gkioxari等人(2014a)使用R-CNN架构来同步检测人、估计姿势和对动作进行分类。Fan等人(2015)提出了一种双源深度神经网络,它以图像块和完整图像为输入,输出热图表示滑动窗口的联合检测结果,坐标表示联合定位结果。最终估计的姿态从两个结果的组合中获得。Luvizon等人(2018)设计了一个网络,可以从视频序列中联合处理2D/3D姿态估计和动作识别。网络中间估计的姿态可以作为动作识别的参考。
基于检测的方法
基于检测的方法是从身体部位检测方法发展而来的。在传统的基于部分的HPE方法中,首先从候选图像块中检测身体部分,然后组装以适合人体模型。早期工作中检测到的身体部位比较大,一般用矩形滑动窗口或面片来表示。我们参考(Poppe,2007;龚等,2016)进行了更详细的介绍。一些早期的方法使用神经网络作为身体部位检测器来区分候选贴片是否是特定的身体部位(Jain等人,2013),在预定义的模板中对候选贴片进行分类(Chen和Yuille,2014),或者预测属于多个类别的置信度图(Ramakrishna等人,2014)。身体部位检测方法通常对复杂的背景和身体遮挡很敏感。因此,仅具有局部外观的独立图像块对于身体部位检测可能没有足够的区分性。为了提供更多的监督信息,而不仅仅是联合坐标,也为了便于训练CNNs,最近的工作采用热图来显示联合位置的地面实况7(Tompson等人,2014年;Jain等人,2014年)。如图4所示,每个关节占据热图通道,2D高斯分布以目标关节位置为中心。此外,帕潘德里欧等人(2017)提出了一种改进的联合位置表示,这是一个二进制激活热图和相应的偏移的组合。由于热图表示比坐标表示更健壮,所以最近的大多数研究都是基于热图表示的。
神经网络体系结构对于更好地利用输入信息非常重要。一些方法主要基于经典网络并进行适当的改进,例如基于GoogLeNet的多尺度输入网络(Rafi等人,2016年),基于ResNet的具有反进化层的网络(肖等人,2018年)。在迭代细化方面,一些工作以多阶段方式设计网络,以通过端到端学习来细化粗预测的结果(Tompson等人,2015;Bulat和Tzimiropoulos,2016年;Newell等人,2016年;魏等,2016;杨等,2017;Belagiannis和Zisserman,2017年)。这种网络通常使用中间监督来处理消失的梯度。Newell等人(2016)通过使用剩余模块作为组件单元,提出了一种新的堆叠沙漏架构。魏等人(2016)提出了一个多阶段预测框架,每个阶段输入图像。杨等人(2017)设计了一个金字塔残差模块(PRMs)来代替沙漏网络的残差模块,以通过学习不同尺度上的特征来增强离散余弦变换神经网络的尺度不变性。Belagiannis和Zisserman (2017)将一个7层前馈模块与一个递归模块相结合,以迭代地完善结果。该模型学习预测关节和肢体的位置热图。此外,他们还分析了地面真实分布不平衡时的关键点可见度。为了在整个网络中保持高分辨率的特征表示,孙等人(2019)提出了一种新的具有多尺度特征融合的高分辨率网络(HRNet)。与早期试图将检测到的身体部位装配到身体模型中的工作不同,最近的一些工作试图将人体结构信息编码到网络中。Tompson等人(2014年)用类似MRF的空间模型联合训练了一个网络,用于学习关节之间的典型空间关系。Lifshitz等人(2016)将图像离散化为以每个关节为中心的对数极坐标箱,并使用基于VGG的网络来预测每个成对关节的关节类别置信度(二进制项)。有了所有相对可信的分数,每个关节的最终热图可以由一个反进化网络生成。杨等(2016)设计了一个两级网络。第一阶段是卷积神经网络,用于预测热图表示中的关节位置。第二阶段是根据人体结构手动连接的消息传递模型,通过最大和算法找到最佳关节位置。Gkioxari等人(2016)提出了一种卷积递归神经网络,按照链式模型一个接一个地输出关节位置。每个步骤的输出取决于输入图像和先前预测的输出。网络可以通过不同的连接策略处理图像和视频。Chu等人(2016)提出通过双向树来变换核,以在树体模型中的相应关节之间传递信息。楚等人(2017)用更复杂的模块取代了沙漏网络的剩余模块。条件随机场用于注意图,作为学习身体结构信息的中间监督。(宁等,2018)设计了一个分形网络,将人体先验知识强加给网络进行指导。通过使用学习的投影矩阵将外部知识视觉特征编码到基本网络中。柯等人(2018)提出了一种基于沙漏网络的多尺度结构感知网络,该网络具有多尺度监督、多尺度特征组合、结构感知损失和关节掩蔽的数据增强功能。在沙漏网络的基本框架上,唐等人(2018a)设计了用于中间监督的身体部位的分层表示,以代替每个关节的热图。因此,网络学习的是自下而上/自上而下的身体结构,而不仅仅是分散的关节。唐和吴(2019)提出了基于部件的分支网络(),以学习每个部件组的具体表示,而不是预测来自一个分支的所有联合热图。然后,通过计算关节的互信息来分割数据驱动的零件组。生成性对抗网络也被用来为学习身体结构或网络训练提供对抗监督。Chou等人(2017)引入了对抗性学习,两个沙漏网络分别作为发生器和鉴别器。生成器预测每个关节的热图位置,而鉴别器将地面真实热图与生成的热图区分开来。陈等人(2017)提出了一种结构感知的卷积网络,该网络具有一个生成器和两个鉴别器来合并人体结构的先验信息。该生成器是根据沙漏网络设计的,用于预测关节热图和闭塞热图。姿势鉴别器可以区分合理的身体配置和不合理的身体配置。置信度鉴别器显示
推荐阅读
-
[姿势估计] 实践记录:使用 Dlib 和 mediapipe 进行人脸姿势估计 - 本文重点介绍方法 2):方法 1:基于深度学习的方法:。 基于深度学习的方法:基于深度学习的方法利用深度学习模型,如卷积神经网络(CNN)或递归神经网络(RNN),直接从人脸图像中学习姿势估计。这些方法能够学习更复杂的特征表征,并在大规模数据集上取得优异的性能。方法二:基于二维校准信息估计三维姿态信息(计算机视觉 PnP 问题)。 特征点定位:人脸姿态估计的第一步是通过特征点定位来检测和定位人脸的关键点,如眼睛、鼻子和嘴巴。这些关键点提供了人脸的局部结构信息,可用于后续的姿势估计。 旋转表示:常见的旋转表示方法包括欧拉角和旋转矩阵。欧拉角通过三个旋转角度(通常是俯仰、偏航和滚动)描述头部的旋转姿态。旋转矩阵是一个 3x3 矩阵,表示头部从一个坐标系到另一个坐标系的变换。 三维模型重建:根据特征点的定位结果,三维人脸模型可用于姿势估计。通过将人脸的二维图像映射到三维模型上,可以估算出人脸的旋转和平移信息。这就需要建立人脸的三维模型,然后通过优化方法将模型与特征点对齐,从而获得姿势估计结果。 特征点定位 特征点定位是用于检测人脸关键部位的五官基础部分,还有其他更多的特征点表示方法,大家可以参考我上一篇文章中介绍的特征点检测方案实践:人脸校正二次定位操作来解决人脸校正的问题,客户在检测关键点的代码上略有修改,坐标转换部分客户见上图 def get_face_info(image). img_copy = image.copy image.flags.writeable = False image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) results = face_detection.process(image) # 在图像上绘制人脸检测注释。 image.flags.writeable = True image = cv2.cvtColor(image, cv2.COLOR_RGB2BGR) box_info, facial = None, None if results.detections: for detection in results. for detection in results.detections: mp_drawing.Drawing.detection = 无 mp_drawing.draw_detection(image, detection) 面部 = detection.location_data.relative_keypoints 返回面部 在上述代码中,返回的数据是五官(6 个关键点的坐标),这是用 mediapipe 库实现的,下面我们可以尝试用另一个库:dlib 来实现。 使用 dlib 使用 Dlib 库在 Python 中实现人脸关键点检测的步骤如下: 确保已安装 Dlib 库,可使用以下命令: pip install dlib 导入必要的库: 加载 Dlib 的人脸检测器和关键点检测器模型: 读取图像并将其灰度化: 使用人脸检测器检测图像中的人脸: 对检测到的人脸进行遍历,并使用关键点检测器检测人脸关键点: 显示绘制了关键点的图像: 以下代码将参数 landmarks_part 添加到要返回的关键点坐标中。
-
单目人体姿态估计:基于深度学习的方法概览-2D 单人姿态估计
-
深度理解CVPR2020年的进化训练数据驱动的级联单目3D人体姿态估计研究论文