MobileHumanPose: Toward real-time 3D human pose estimation in mobile devices

论文地址: MobileHumanPose_CVPRW_2021

代码地址: MobileHumanPose

论文作者: 韩国高等科技研究院,可以看做​​​​​​​​​​​​​​3DMPPE_POSENET_RELEASE的轻量化版本

摘要

当前3D姿态估计的方法受限于精度和速度的要求无法在移动端跑起来,本文提出了一个移动端可用的模型,可以从单张RGB图实时估计3D人体姿态。这个模型包括修改后的MobileNetV2骨干,参数化的激活方式以及类似于UNet的跳层连接.特别是跳层连接在仅增加很少算量的情况下可以大幅提升精度。我们的模型不仅精度可以和最好的方法可比速度更是它的好几倍,此外我们的模型在三星S20CPU上可以跑到12.2ms的速度,这使得其可以用于移动端姿态估计任务.

1.引言

得益于深度学习和热图表达的快速发展,3D姿态估计性能有了很大的提升,这可以让我们解锁人机交互、监控、增强现实和虚拟现实中更广泛的应用。特别的,移动端增强现实在学术界和工业界都吸引了大量的关注。因此,构建一个资源受限情况下的3D姿态估计模型是一个很重要的任务。然而,现有深度学习模型都是通过更宽和更深的网络来获取性能提升的,这导致了大量的计算,对于手机这种资源有限的设备就不太合适。

不幸的是,仅有2篇论文处理过这些问题,然而他们都有各自的问题: (a)尽管可微搜索可能高效的搜索网络结构,他们搜出来的还是不能用于移动端(b)也有好事者针对FLOPs进行攻关,但是最终的性能却差强人意。除了使用蒸馏好像并没有太有效的方法。此外,在实际中大家都是使用pytorch训练,用tf lite部署,因为这是android唯一受支持的方式。

为了解决这些问题,我们提出了一个移动端友好的模型,同时考虑性能和计算量。在训练过程中我们发现轻量级骨干网络在分类上取得好性能在姿态估计上却有些问题,因此我们使用随机初始化的方式进行训练而不是微调。此外我们修改了前4个逆残差的扩张系数,激活函数和跳层连接。特别的,我们提出了两种不同的连接方式:残差和跳层连接。和残差相比,跳层连接可以把编码器中丰富的信息传递给解码器,在保持高效的同时提升了精度。

为了和其它模型对比,我们还构建了大、小和超小模型。和最好的方法相比我们的大模型FLOPs少68.9%,体积小48.8%,它在Human3.6M上的MPJPE是51.4mm,在MuPoTS上的3DPCKrel是79.6%。

我们的贡献总结如下:

  • 我们调研了3D人体姿态估计中的效率问题,在低成本下获取高性能
  • 我们提出来一个名为MobileHumanPose的高效模型,可以实时的运行,它以MobileNetV2为基础进行了很多修改,包括但不限于跳层连接、参数化激活,这种结构在相同算量的情况下可以获得最好的性能
  • 我们还开源了代码,图2展示了可视化的结果

2.相关工作

高效结构 就是MobileNet那一堆

2D姿态估计 自顶向下和自底向上两大类

3D姿态估计 单阶段和双阶段两大类

3.本文方法

3.1权重初始化问题

大多数3D姿态估计模型使用在ImageNet上预训练的模型,然而,有人指出随机初始化性能也不差。为了验证这个猜想,我们做实验进行了对比,结果如表1所示,随机初始化可以获得更小的误差,MPJPE为56.38。

 3.2MobileHumanPose

我们也使用基本的编码器-解码器结构,但是修改了骨干网络和通道数(这tm能叫贡献?有手就能改吧)、激活函数和跳层连接

骨干网络 尽管选择了和chen等人类似的轻量级结构,我们也和ResNet进行对比。所有的骨干网络都是将分辨率降到8x8,在表2中,MnasNet误差最低,但是MobileNetV2也有可比的性能。

激活函数 就是用PReLU替换ReLU而已,公式我就不打了,故弄玄虚.

跳层连接 大多数网络使用FLOPs对算量进行统计,因此使用那些不计入算量的跳层连接就是很大的trick

损失函数 我们使用L1 Loss

 4.实验

4.1数据集和设置

数据集和评估指标 我们使用Human3.6M和MuCo-3DHP作为训练集

在训练Human3.6m时我们还使用了MPII数据集,他们的z值被设成0.Human3.6M有两个评估协议,协议1基于S1,S5,S6,S7,S8,S9用来训练,S11用来测试,协议2基于S1,S5,S6,S7,S8训练,S9和S11进行测试。为了评估这些方法,两个常用的指标是MPJPE(平均每关节位置误差)和PA-MPJPE(对齐后的平均每关节位置误差)

另外一个训练使用MuCo-3DHP和COCO数据集训练,MuCo-3DHP是一个单人姿态数据集,包含在MPI-INF-3DHP中。测试集是MuPoTS-3DHP,包含20个真实世界的场景,评估指标是3DPCkrel.

实现细节 网络权重是随机初始化的,正如3.1节所述,预训练并不是必须的。初始的学习率设成1e-3,并且在17和21个epoch时除以10,优化器选择Adam,批大小是24,总共训练25个epoch,在2张TITAN RTX GPU上训练3天,我们使用了类似于31的数据增强方法,包含旋转、水平翻转、颜色扰动、随机擦除,在测试阶段也使用了水平翻转增强。

框架 我们使用pytorch训练,使用tf-lite部署,他们之间默认的参数是相同的。

4.2 骨干网络的对比

如表2所示,GhostNet、MobileNetV3和MobileNeXt表现并不太好,所以我们排除了这些候选,最后选择了MobileNetV2.

4.3 消融实验

初始化和通道修改 表3不难看出我们修改后的MobileNetV2在随机初始化和与训练模型上误差更低。

激活函数 表4表明了激活函数选择的有效性,使用PReLU比ReLU低了一个点,但是耗时其实并没有什么差距。

连接结构 表5表明了连接结构的有效性,跳层连接确实很有效,残差FLOPs大很多提升也很有限。

耗时分析 我们从网络宽度和通道数进行了实验,结果如表6所示。我们把0.75和512通道的网络成为小模型,1.0和2014通道的网络称为大模型。由于宽度和整个网络相关,减少这个参数能够缩小推理时间,但是也会导致差的性能。另一方面,与1024到2048相比,512到1024通道并没有太大的差距,这表明512通道表达是足够的

4.4 和最好方法的比较

我们在Human3.6M和MuPoTS上和最好的方法进行了对比,图4展示了可视化的结果

H36M 表8展示了不同方法在协议2下的比较,在精度方面,我们的大模型获得了51.44mm的MPJPE,和最好的方法也是有可比性的,但是耗时却只有它的1/5(4.07M VS 20.4M),FLOPs少2.6倍(5.49G vs 14.1G)。我们的小模型MPJPE仅为56.94mm,2.24M参数以及3.92GFLOPs的算量。

表7展示了协议1下的结果,和表8是类似的,但是和表8相比,小模型和大模型之间的差距缩小了。

 MuPoTS 对于多人姿态估计任务,我们使用RootNet来定位绝对位置,我们的大模型(2.24M/3.92G FLOPs)和chen等人的小模型(13.0M/10.7GFLOPs)相比都还有很大的优势.

 

猜你喜欢

转载自blog.csdn.net/minstyrain/article/details/123331113
今日推荐