关于手部姿态估计的资料好少,那我就自己来整理一下吧
参考文献:《Hand Pose Estimation: A Survey》
近年来,深度卷积神经网络(CNNs)在几乎所有计算机视觉任务中的成功,以及低成本消费者深度相机的普及,使得手部姿态估计成为计算机视觉领域的一个热门话题。
手部姿态估计如果按照时间线来分,我们可以以CNN为分界线来描述。在深度学习热潮出现之前,手部姿态估计主要使用传统机器学习和计算机视觉的方法,之后是使用深度学习来解决。早前那一波热潮是因为Kinect一代的发布,引起了Kinect应用的研究热潮,手势姿态估计就是其中的一个应用。如果大家去看那些年的论文可以发现:时间在10-14年之间的论文基本是采用机器学习方法,如随机森林,输入图像为depth。时光飞逝,岁月如梭,时间就如手里的沙子……咳咳画风不对,回来回来。就这样深度学习热潮爆发了,计算机视觉迎来了全新的纪元,手部姿态也翻开了崭新的篇章!随着CNN兴起、计算机硬件算力的提升、消费级相机的普及、数据集的增多,手部姿态估计进入以深度学习为依托的时代。
相比于早期,精度提升、处理能力增强了、应用广泛,输入的图像数据也越来越多元化:depth、RGB、RGB-D。当然还是video,但是video处理起来也是一帧一帧的RGB图像,所以把它算作RGB。研究者们也不再满足于在二维图像中回归姿态,3D的手部姿态估计也取得了长足稳定的发展,并且在至今仍保持自己的热点地位。
得益于以上的工作,姿态估计的应用越来越广泛,关于手部姿态估计的一些设想也有了实现的可能。现有的应用实现在方便了工作学习的同时也给生活带来了很多乐趣。
手势估计助力于体感游戏的发展和实现,出现了虚拟钢琴、虚拟驾驶游戏等应用。AR、VR中也应用此项技术。 手势姿态估计在3D建模领域也有广泛应用,现在已经有一些工作能实时建模出手部模型。可以用于工程中的许多方面,比如3D动画和3D游戏。汽车的智能化发展也受到了大家的广泛关注,在这一方面手势姿态估计也对其有助力。手势姿态估计有助于实现智能驾驶中的无接触操作。
说了这么多,还没有讲讲手部姿态估计到底是干什么。一句话概括:给定输入数据,得到关于手部关键点的二维或三维关键点位置。
当然这个手部关键点也不是自己想怎么定义就怎么定义的,一般是取决于你选用的数据集。现有的开源数据集主要是分三类:14个关节点的、19个关节点的、21个关节点的。(如果你有钱有时间自己搞了一个数据集,也不是不可以自己定义关键点)其中绝对大部分是采用21个关键点。
这个21个关键点是:
姿态估计已经前前后后发展了十几年,手部姿态估计也发展了很长时间。手部姿态估计面临着
研究者们为了解决手势姿态估计的挑战,提出了许多优秀的解决方案。下面咱们就来了解一下
如果将手部姿态估计按照最终的生成方式来分来的话可以分为两类:基于检测的方法和基于回归的方法。基于检测的方法是通过生成heatmap来得到最终的预测关键点。基于回归的方法则是直接回归关键点的位置坐标。之前的方法基本上是采用回归的方法,采用全连接的方法直接回归关键点的坐标位置,优点是输出即为坐标点,训练和前向速度很快。缺点是缺乏空间泛化能力,丢失了特这个图上的空间信息。但是从15年的《Flowing ConvNets for Human Pose Estimation oin Videos》这篇论文之后,姿态估计基本上是采用检测的方法。
目前在深度学习中常用的姿态估计框架为(我自己画的,如有错漏请见谅):
以上框架也包含了二维姿态回归。从输入上讲,输入的数据可以是depth、RGB、RGB-D。如果淡出从输入数据上看,最近几年的工作集中于RGB,一部分是depth但是RGB-D的工作相对较少。在从单幅RGB回归3D姿态取得了令不错的成果。
特征提取网络部分呢,主流的是使用ResNet-50网络,还有使用VGG-19和Hourglass网络的。相对别的领域,手部姿态估计使用的特征提取网络相对单一。特征提取之后会生成Feature Map.
2D Detector部分是为了生成HeatMap,这里的HeatMap是某一位置为特定关节点的概率图。
后续经过3D回归网络回归出三维坐标。
//TODO
这篇论文是2020CVPR的论文,效果达到了state-of-the-art。
论文的优点是:
①精度高、速度快
②提出逆运动学网络(IKNet)
可以看到上图论文的框架主要分为两部分:回归和建模,这里我们主要讨论姿态回归部分。作者将这一部分称为DetNet,DetNet以单个RGB图像为对象,在图像空间中输出相对根和尺度归一化的三维手部关节预测和二维手部关节预测。DetNet的体系结构包括三个部分:特征提取器、2D检测器和3D检测器。可以看到,整个流程清晰明了,采用了常见的姿态估计框架。
论文的主要思想是输入RGB图大小为128×128,对输入的图像经ResNet50网络输出大小为32×32×256的特征图块F。在2D Detector部分,通过两层的卷积层生成HeatMap,该热点图表征了像素点被关节点J覆盖的概率,用于2D姿态估计。
3D Detector
从置信图和特征图回归3D手部姿态。
输入:Feature Maps F+Heat Maps H
中间:Delta Maps D
输出:Location Maps L
D是子节点相对于根节点的方向向量,L是手部的三维关节点的位置。这部分需要仔细说一说。
对于这部分的思想,作者没有详细的说,需要阅读:《VNect: Real-time 3D human Pose Estimation with a Single RGB》
D中的每一个像素Db编码骨骼b的方向,这个方向表示的是从父关节到子关节的3D向量表示。为什么要有这种表示呢?我猜测是手部姿态毕竟也是有运动学关系的,这种中间表示需要明确地告知网络运动链中相邻关节的关系。
关于是如何回归3D坐标的,需要参考论文VNect,分别从XYZ坐标轴表示的图中选择置信度最大的点所对应的值为做坐标轴的数值。对XYZ轴都执行以上操作,将得到的值保存为三维坐标点,就得到了三维关节坐标图L。
可以参考下图:
介绍了符合主流框架的论文,接下来的这一篇在姿态估计中是别具一格的。论文主要思想是采用多任务信息共享机制。对single depth mapp做手部姿态估计。提出了CrossInfoNet网络,该网络有两个子任务:手掌的姿态估计和手指的姿态估计,并采用两分支交叉连接结构,在子任务之间共享有益的互补信息。。除此之外还使用了heatmap用于指导特征提取部分获得更好的特征图。最后作者证明他们的网络是可靠的:
通过广泛的自我比较实验和在四个公共手姿态数据集上与最先进的方法进行比较来评估提出的CrossInfoNet的有效性。
第一部分是初始特征提取模块,将heat map作为约束来学习更好的特征映射并得到所有初始联合特征。
第二部分是特征细化模块,将任务分解为两个子任务,一个子任务是手掌关节估计,另一个子任务是手指关节估计。本模块中的信息共享策略指导网络利用来自对手的有用线索,以有效地提高手部姿态估计的性能。
最后是联合坐标回归模块。