赞
踩
点击上方“3D视觉工坊”,选择“星标”
干货第一时间送达
作者丨爱做菜的炼丹师
来源丨CV研习社
文章导读
人体姿态估计作为当下热门的技术有着广泛的应用场景,比如健身程序、电影特效、行为预测等等。本文通过分析几种主流的姿态估计方案并刨析其中的经典算法。然后借由姿态估计中的关键点检测技术引申到自动驾驶中的应用,最后在文末带来一个自制的小视频。
如何做人体的姿态估计?
计算机视觉中的很多任务都可以分成两个思路来解决:
自上而下
自下而上
自上而下指的是由粗到精的处理流程,比如目标检测任务中的两阶段算法,先区分出前景目标外接框,再基于该外接框进行分类和回归修正。
自下而上指的是由部分组合到整体的处理流程,比如目标通过检测部分结构而出现,在CornerNet检测网络中,先检测到目标的左上角和右下角,然后再将它们配对形成整体目标。
人体的姿态估计发展至今经历了2D单人姿态估计—>2D多人姿态估计—>3D多人姿态估计。
如果是做多人姿态估计的话,方法其实大同小异,用上面提到的两种思路来说:
采用自上而下的方案:先检测人体得到边界框后,然后再对每个边界框中做关键点检测。此类方法准确率高,但是受限于人体外接框的准确性;
采用自下而上的方案:先对整幅图像做关键点检测,再将各个部位组合成人形,此类方法速度快,但是多人靠近后组合环节容易混乱。
那么可以通过人体的哪些关键点来估计姿态呢?
根据COCO数据集给出的18个关键点,如下图所示:包括鼻子,左右眼,左右耳,左右肩,左右肘,左右腕,左右臀,左右膝,左右脚踝。
在实际场景中进行姿态估计时,我们会遇到很多问题。比如:图像中人的个数未知;人的远近大小不同;人的姿态动作各异;多人之间相互干扰;关节的关联关系复杂等等因素,下面我们从两个经典实例看看前人是如何构建姿态估计的网络结构。
自下而上的代表作OpenPose
OpenPose是一个可以同时学习身体部位和关节联系的架构网络,从网络结构图中它有两路分支,F作为共享卷积层,将提取的特征图输出给两个平行的分支,分支1用来预测 18 个置信图,每张图代表人体骨架中的一个关节点。分支2用来预测描述各关节之间的连接程度的矢量场集合,该集合中包含 38 个关节仿射场。
该算法使用关节置信图在每个关节对之间形成二分图 ,并用分支2得到的亲和值删除二分图里较弱的连接。
我们可以通过下面的五幅图贯穿此方法:
(a) 单帧图像作为网络的输入提取特征;
(b) 对特征图预测关键点位置信息;
(c) 对特征图预测关节处方向信息;
(d) 计算关节的之间的匹配关系;
(e) 利用匈牙利算法对多人的关节点进行数据关联;
看到这里小伙伴们可能会疑惑多人场景中, 人体的所有关键点都检测出来后如何构建之间的对应关系呢?
如下左图所示,三个人的颈部和臀部6个关键点存在多种关系。本文针对该问题提出了PAFs部分亲和场表征每个肢体的2D向量,从而编码肢体的方向信息并将多人检测问题转化成二分图匹配问题,采用匈牙利算法寻找关节点间的最优匹配。如下右图所示:
Part Affinity Fields(PAFs)就是这个算法的核心所在,涉及公式较多,建议小伙伴看看论文详细了解。
自上而下的代表作AlphaPose
AlphaPose是一个两步走的姿态估计模型,先通过目标检测算法获取人体的区域框,然后再进行单人的姿态估计。整个网络结构如下图所示:
这里我们看一下框架图中提到的STN、SPPE、SDTN、Pose-NMS等模块分别有什么功能!
STN:用于从不准确的候选框中抽取高质量的单人区域。
SPPE:一个单人姿态估计器,从STN抽取的区域中估计此人的姿态动作。
SDTN:一个空间逆变换网络,将估计出的姿态重新映射到图像坐标系下。
Pose-NMS:一个参数化的姿态非极大抑制方法来处理冗余的估计结果。
为什么AlphaPose中需要加入这么多小模块,候选框+SPPE不行吗?
这是由于算法叠加容易造成累积误差带来的问题,如下图所示,红色的候选框完美的包含了人体,输入到SPPE单人姿态估计模块中能够得到所有的关键点位置;但是当黄色的候选框出现偏差时,无法包含完整的人体,那么姿态估计器会因为输入误差预测失效。所以该算法在SPPE之前加入STN接受人体区域,在SPPE之后加入SDTN生成人体区域。
STN和SDTN就是一个相对的模块,STN把图像中原本的东西做变换后送入SPPE,那么SPPE处理的结果此时并非原图信息,所以又需要进行STN的反变换恢复到原图,即SDTN。该空间变换网络早在2018年就被提出《Spatial Transformer Networks》,用于在训练的过程中自动选择感兴趣的区域特征,实现对各种形变的数据进行空间变换。
后处理部分其实和目标检测类似,都是用于消除重复结果,如下图所示,如果检测器对一个目标产生多个预测框,那么姿态估计器就会对每一个预测框都生产骨架结构,为了删除这些冗余的姿态,可以选择里面得分最高的,删除掉和它相似度较近的姿态,遍历所有候选姿态直到最后。(算法类似NMS)
从姿态估计到自动驾驶的技术思考
姿态估计任务的本质在于关键点检测技术,追溯到早期特征提取和匹配的三部曲:从关键点检测——>关键点特征描述——>关键点匹配。
站在低维空间的角度来说,关键点往往是物体边界方向突然改变的点或多个边缘段之间的交点,基于这样的思想可以通过图像中的边缘检测用梯度等方法求取。
站在高位空间的角度来说,往往需要借助深度神经网络引入语义级特征来提取固定点周边范围内的上下文关系,比如人体关节处,车辆接地点,车位交界点等。
关键点检测技术经常被用于不同领域,如:
人脸关键点检测:可帮助判断目标的情绪/状态;
人体关键点检测:可帮助识别目标的行为动作;
车辆关键点检测:可辅助回归车辆的姿态朝向;
车位关键点检测:可辅助回归车位的顶点坐标;
关键点检测技术是如何辅助道路目标检测任务的?
当我们采用通用的目标检测算法做道路目标检测时,得到的是如下图的二维外接框,但是二维框提供的信息只能告诉我们图像上在什么位置有一个什么东西,无法进一步知道它的朝向和姿态信息。假如相邻车道一辆大货车驶入视野范围后,二维框很可能占据大半个图像空间,这样的目标信息对功能模块会造成很多干扰:
既然二维框无法满足功能开发的需求,那么是否能从单帧的检测中直接回归出目标的三维外接框呢?
这种想法很端到端,但是存在几个难点:
首先如果想把像素坐标系下的位置转换到世界坐标系下,那么网络结构中需要引入相机的内外参信息;
其次在缺乏深度信息的情况下,单纯的依靠神经网络硬回归目标的空间位置,鲁棒性存在很大的挑战;
是否能够找到一种权衡的做法解决目标姿态的问题?
可以尝试在图像空间中找到目标的朝向角,但是该角度仅是相机透视投影中的相对值,不同于真实三维空间中的航向角,再对通用的检测算法做一点改进,我们就能在图像中检测到一个伪三维的目标,如下图所示:
所以关键点检测也是一种帮助回归道路三维目标的手段,可以模仿二维框的点回归方式硬回归出三维框的8个点坐标,不过如此生硬的方法结果可想而知;也可以将车辆拆分成不同部分,通过回归接地处推算出航向;亦或者采集级联网络的方式第一步做二维框的回归,第二步接入一个自编码器回归关键点的热力图。
最后我们用一段姿态估计的小视频结束本篇文章,小编作为一名非二次元玩家,从B站下载了一段极乐净土的舞蹈,载入姿态估计模型看看效果如何!
本文仅做学术分享,如有侵权,请联系删文。
3D视觉精品课程推荐:
2.面向自动驾驶领域的3D点云目标检测全栈学习路线!(单模态+多模态/数据+代码)
3.彻底搞透视觉三维重建:原理剖析、代码讲解、及优化改进
4.国内首个面向工业级实战的点云处理课程
5.激光-视觉-IMU-GPS融合SLAM算法梳理和代码讲解
6.彻底搞懂视觉-惯性SLAM:基于VINS-Fusion正式开课啦
7.彻底搞懂基于LOAM框架的3D激光SLAM: 源码剖析到算法优化
8.彻底剖析室内、室外激光SLAM关键算法原理、代码和实战(cartographer+LOAM +LIO-SAM)
重磅!3DCVer-学术论文写作投稿 交流群已成立
扫码添加小助手微信,可申请加入3D视觉工坊-学术论文写作与投稿 微信交流群,旨在交流顶会、顶刊、SCI、EI等写作与投稿事宜。
同时也可申请加入我们的细分方向交流群,目前主要有3D视觉、CV&深度学习、SLAM、三维重建、点云后处理、自动驾驶、多传感器融合、CV入门、三维测量、VR/AR、3D人脸识别、医疗影像、缺陷检测、行人重识别、目标跟踪、视觉产品落地、视觉竞赛、车牌识别、硬件选型、学术交流、求职交流、ORB-SLAM系列源码交流、深度估计等微信群。
一定要备注:研究方向+学校/公司+昵称,例如:”3D视觉 + 上海交大 + 静静“。请按照格式备注,可快速被通过且邀请进群。原创投稿也请联系。
▲长按加微信群或投稿
▲长按关注公众号
3D视觉从入门到精通知识星球:针对3D视觉领域的视频课程(三维重建系列三维点云系列结构光系列、手眼标定、相机标定、激光/视觉SLAM、自动驾驶等)、知识点汇总、入门进阶学习路线、最新paper分享、疑问解答五个方面进行深耕,更有各类大厂的算法工程人员进行技术指导。与此同时,星球将联合知名企业发布3D视觉相关算法开发岗位以及项目对接信息,打造成集技术与就业为一体的铁杆粉丝聚集区,近4000星球成员为创造更好的AI世界共同进步,知识星球入口:
学习3D视觉核心技术,扫描查看介绍,3天内无条件退款
圈里有高质量教程资料、答疑解惑、助你高效解决问题
觉得有用,麻烦给个赞和在看~
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。