动作识别/驱动项目全流程回顾

包括最简单的2D动作识别,复杂一些的2D 3D数字人驱动,单目/多目数字人工程方案。

全景思维导图

(隐去生产部署细节


动作识别

动作识别用于健身大屏、虚拟拜佛等生产场景,依托于大屏(一张RTX3080,双RGB摄),深度学习+UE4的组合来实现一些生产的互娱需求,由于UE4占用比较多的计算资源,动作识别的核心痛点在于利用单目RGB做一些准确率达标的实时应用。

作为应用基础,也在其上开发了一些滑雪/切水果等互娱应用,复用一套算法pipeline、API接口即可。

实现的思路很简单,单帧提取动作,多帧做滑动窗口,提取feature通过分类器进行动作分类,分类器实现了包括NN,Linear SVM,RandomForest,XGBoost等机器学习方法,,MLP等深度学习网络,也包括基础的模型集成,投票选举等功能。

一些tricks包括noise的添加(data aug),nan的处理逻辑(前帧),feature包括哪些信息(pose 位移 速度 增加了joint angle)。

项目是我中间接手的,接手后做的主要工作包括mediapipe替代老旧的openpose提速(保证精度损失);data处理代码重构,进行提速,保留重复处理数据,减少存盘环节;增加关节角度信息丰富feature的组成等等,最终效果是数据采集完成后,单卡20min训练一个动作识别模型,提速数倍。

动作识别效果:


数字人驱动基础概念

一些基础的数学概念,思维导图:

相机模型

相机内参 外参 畸变系数

张正友标定法 ChArUco 对极约束 PnP (Perspective n point Homography matrix(单应矩阵

三角化 Triangulation DLT(Direct Linear Transform) SVD求解 RANSAC

IK

IK Solver IK Net IK algorithm

Param Model

SCAPE SMPL SMPL-X STAR

其他

Filter(smooth滤波器) Rotation(4种形式和变换 ) 优化方法(梯度下降 牛顿 L-BFGS SGD EM)


2D数字人驱动

竞品公司

deepmotion,基于几年自研的运动估计模型(大量cpu集群做运动优化),用户上传单目video返回bvh,效果业内领先,偶发失误;

TDPT/VseeFace/Kalidokit 一类伪开源项目,主要通过2D关键点lift到3D关键点,或者直接IKNet计算出关节旋转角度,缺点是关节翻转问题严重;

Pose提取

coco wholebody

ref AI_Power


3D数字人驱动

竞品公司

国内在单目3D数字人驱动上做的比较好的是北京的聚力维度,主打人脸表情丰富和单目动作驱动。

英国的move.ai在多目数字人驱动上效果较好,是多目的竞品对象。

其他一些竞品公司:

手部估计

手部的估计模型有两种,第一种是MANO,本质上是SMPL+H,61个参数(15*3 + 10 shape + 3 cam + 3 rot),MANO又分为两种,一种是获取MANO params,也就是hand 3d pose数据,另一种是直接回归mesh。

MANO params 相关:

Minimal-Hand,以速度提升为主,为了达到实时,采用2D lift的方案,使用DetNet+IKNet,先检测2d+3d关键点,然后通过IK获得MANO参数,实际使用中速度是满足要求的,但是受限于训练数据和2D lift的方案,准确度不高,达不到生产级别;

MobileHand,也是以移动端部署为核心,所以选择了MobileNetV3这样的轻量级backbone,做end2end的推理,image2mano,使用23个自由度代替MANO+PCA的方案,问题仍然是数据集,FreiHand几乎都是手部近景数据,这种paperwork在生产上效果很差;

S2HAND采用自监督方式,但只要数据摆在那,无论网络结构还是训练方式玩出什么花,都无法解决生产问题。

MANO mesh 相关:

MobRecon,通过2D lifting 3D,然后通过spatial conv回归hand mesh;

HandOccNet,主要针对手部遮挡的问题,使用FPN结构,通过改进transformer网络结构克服遮挡;

手部估计另一种是SMPLX params,毕竟SMPLX里面也包含手部参数。

FrankHand,实际上是从FrankMocap里面扒出来的手部估计模型,类HMR encoder-decoder结构,end2end从image中提取feature,然后获取SMPLX参数,FrankHand的优势在于训练数据足够丰富,几乎采用了市面上开源的所有手部数据,并将其统一格式,效果实测也是最好的。

人脸估计

没有较好的开源方案,主要有两条路线,一条是通过landmark或者face mesh驱动,效果不会很好,另一条是通过人脸3D重建获得3D系数,通过算法或网络转换到blendshape驱动,是工业界常用的方法。

身体估计

身体估计的参数模型主要有SCAPE SMPL SMPLX STAR等,围绕这些参数模型,又可以将身体估计分为pose估计和mesh估计,从估计方法上,可以分为回归方法、混合方法、基于时序的方法等。围绕身体参数,引入外部硬件的又有基于IMU的身体估计,使用运动学算法优化的physical方法等。

几乎阅读并复现了这个领域所有效果看起来可以的论文,大部分是通过魔改结构或者数据增强在human3.6m数据集上刷榜。

回归方法

HMR是人体姿态估计的开山之作,通过2D joints回归SMPL param;

PyMAF使用spatial feature pyramid学习pose的dense特征,使用HRNet提取grid feature,通过反馈网络精细化mesh;

Mesh Transformer使用transformer结构来学习pose特征,不经过SMPL参数,直接回归3D关键点和mesh;

ROMP解决了多人实时估计的问题,使用HRNet+CoordConv,输入尺寸达到512;

混合方法

SPIN在HMR基础上加入了SMPLify先验(由CMU pose数据学习,通过不断迭代回归来逼近SMPL参数);

ETF使用比SPMLify更好的回归方式,构建大规模训练集

PARE着力解决人体姿态估计中的遮挡问题,做occlusion sensitivity analysis;

DynaBOA通过test-time-augmentation在Human3.6M上刷榜;

HybrIK解决了3D-mesh的问题,为了提高IKNet效果,将旋转分为twist+swing两个部分处理(额外标注);

LVD使用新颖的视角,通过vertex descent从image回归mesh;

基于时序的方法

VIBE是开山之作,通过AMASS学习先验,通过GRU实现时序encoder(工程上优化到实时);

TCMR首先用r50 backbone提取所有frame的静态特征,然后基于GRU回归pose参数,通过前后帧监督调整当前帧,时间序列上更加平滑;

DeciWatch解决了时间序列pose估计的效率问题,使用frame sample,类似于插帧算法,sample系数就是加速倍数;

基于运动学优化/传感器的方法

PhysCap使用openpose提取人体2d joints,基于RBDL做运动学优化,特别是GRF(ground reaction force)的计算,优化接地效果;

PIP结合IMU与RBDL运动学优化,效果较好但毕竟引入了惯性传感器;

UnderPressure为了解决脚部接地的问题,建立了GRF数据集,并通过网络预测GRF,优化脚部接地效果;

TransPose直接基于noitom的IMU做运动估计;

rgbd-kinect使用kinect相机获取深度信息(API出pose),mediapipe估计人脸,minimal-hand估计手部,效果差;

Stanford团队的contact-human-dynamics部分借鉴CMU的MTC,引入TOWR做运动学优化,优化人物的接地效果;

后续又提出HuMor使用vposer做先验,在测试时进行增强,不适用于实时驱动的场景;

Full Body估计

SMPL-X是full body估计的主要参数模型,原因是融合了脸部的FLAME和手部的参数,真正实现了全身模型,也包括提出了vposer的先验。
但是工程上很难使用SMPLX做出成果,最大的原因就是缺少数据,不像SMPLX的普朗克实验室一样可以去3D scan一些数据集,开源的数据集大部分还是在2d joints数据,即使human3.6m也是在通过mosh取的的3D pose先验。

开源比较好的全身估计包括meta的FrankMocapHand4Whole ,等等。

FrankMocap的创造性在于将身体和手部分开预测,然后结合在一起,来解决手部姿态预测困难的问题,这部分模型也是私有数据train的,开源的EFT也证明了meta在开源数据整合上走了很远,生产的数据生成也采用了ETF的方式。

在手部和身体的结合上,frankmocap提出了两种,一种是简单的copy&paste,另一种是通过2d joints优化,耗时较长。

能够获得全身3D关键点的比较多,即使mediapipe加入了大量私有数据集也做不好,失误较多。


人体shape估计

基于 shapy


Text2Motion

一个奇怪的paper分支,大概是基于HumanML3D KIT等几个text2motion数据集,做一些基于BERT/CLIP理解文本,VAE/diffusion/attention推理的方案,不出意外效果都很差。


动作识别/驱动项目全流程回顾
http://example.com/posts/16852/
作者
ykk648
发布于
2023年3月21日
许可协议