BEV (2022 CVPR) 仅靠视频,也实时能做到细致的动捕?——多人Meh估计(II)
前不久,京东探索研究院一个小组两年磨一剑,终于发表了他们的工作:ROMP———一个框架朴实的多人Mesh估计网络。ROMP不仅仅在思想上优雅简洁,而且在效果上也是出奇的好。它不仅仅能够做到30fps的实时性,在整体的准确度上也达到了SOTA,是名副其实的文武双全。
而在ROMP的简洁基础上,京东的作者小组又做了进一步的深入探索,发表了这一篇BEV(Birds-Eye View)。具体来说,他们构建了更完整的深度估计机制——"鸟瞰图",并且发布了一个帮助训练的数据集"RH",从而克服了ROMP在深度估计机制上的缺陷。如果说原先ROMP的核心理念是尽量的简单快速化,那么这一篇BEV则是对深度问题不遗余力地去克服。最终,即使是在较为拥挤的情况下,BEV仍然条理性地构建出了人物的深度顺序,效果惊艳:
下面就在ROMP的基础上,讲讲BEV都做了哪些改进吧。(如果不了解ROMP的可以先看一看原论文或者我之前的一篇讲解,不然下面的理解可能会有些吃力)
一,背景知识
(1)ROMP对于深度的处理
ROMP对于深度的估计机制是比较简陋的。简单来说,网络通过某种手段估计出图片中每个人体的相对大小,再根据近大远小的原则决定人物的深度顺序。然而,这种策略有两个比较明显的缺陷:
首先,人物在现实中的大小其实是不一致的,而网络在采取近大远小的原则时,默认的条件却是所有人的身高都相等。打个简单的比方,有一个婴儿和成人现实中明明处于同一深度层下,然而网络死板地用近大远小来度量时,则会估计成婴儿离我们很远,而大人离我们近。这是我们不希望见到的。除此之外,还有对于异性间的身高差异,甚至对于同性同年龄段段个体身高差异,这种粗糙的策略都没有办法很好的解决。
其次,即使是同一身高下的两个个体,他们在照片上的大小也会由于姿态的不同而变化。比如下面这张图,蹲着的人就比站着的人在照片上大许多。这种情况下,仅仅根据人物大小划分其深度顺序也是不合适的。
(2)多人姿态估计对于深度的处理
作为3D人体的姊妹领域,多人3D姿态估计(Muti-person Pose Estimation,MPE)在很多方面和多人Mesh估计是相通的。因此,我们不妨从前者对深度的估计方式上获得一点启迪。2019年,首尔大学的Moon提出了经典的3DMPPE架构,其对“近大远小”的假设作了数学上的定量分析,来检测我们直觉的科学性。
具体来说,假如图片中的人体完美地满足近大远小,我们就可以把不同的人体看成一组组完美的相似图形,其面积的开根号应该和深度成正比例关系。具体来说,在Object Detection阶段,我们划分出来的“人体框大小 S_{real} /人体真实大小 S_{img} ”开根号后应该和深度 d 呈正比。定义k为“人体框大小 S_{real} /人体真实大小 S_{img} 开根号“的简单符号表示:
k=\sqrt{\frac{S_{real}}{S_{img}}}\tag1
由相似定理,我们有
d=\alpha \cdot k\tag2
但我们上面也说过,即使我们归一化了人体的真实大小,人体的姿态等因素也会对真实情况有比较大的影响。具体的偏离程度有多大呢?Moon就在3DMPPE中统计了Human3.6M和MuCo-3DHP中作了一个统计:
不难发现,整体上数据集确实满足近大远小,但也有许多偏离得比较厉害的点。因此,3DMPPE采取的办法是让网络自己去回归一个深度修正值 \lambda , 用这个深度修正值去校正那些偏离得厉害的点:
给定图片和基准的k值时,我们先用backbone提取特征图。上半个网络负责从特征图回归横纵坐标,而下半个网络则负责回归深度修正值 \lambda , \lambda 越远离1,则说明偏差得越厉害。此时,用公式 k_{new}=k/\sqrt\lambda 对偏离的点做出修正,就可以得到深度的准确估计了。这就是3DMPPE对深度的估计办法,结合了我们的直觉和数据的数学特征,因此也取得了很好的效果。
看完了多人3D姿态估计的策略,那BEV又是如何在前人的考量上建立深度估计系统的呢?它又是如何解决年龄带来的歧义和矛盾呢?这就要看下一部分网络架构的介绍了。
二,BEV的网络架构
BEV之于前作ROMP有两个最大的结构差异:一个是加入了Offset层,一个是加入了鸟瞰图的机制。Offset层是Point-Based方法里很常见的误差修正方法,而鸟瞰图(Birds-Eye View)是本文的核心之一,也是模型架构名称“BEV”的来源。下面分别来讲讲他们的思想和作用:
(1)姗姗来迟的Offset层
ROMP也好,BEV也好,本质上来讲他们的核心都是回归人体的中心点,也就是所谓的Point-Based方法。而且,由于是热图式的办法,一个不可避免的挑战就是像素的精度存在误差下界。试想,一张输入图片是512x512,输出是缩小4倍即128x128,那么假设一个关键点位置是507x507,那么缩小4倍后,即使没有任何误差的高斯热图还原,也会存在最大507-126*4=3个像素误差,这个3就是理论误差的下界。
那怎么办?其实,老祖宗Objects as Points在18年提出时就给出了一个解决途径。除去热图层,Objects as Points还额外回归一个偏差层(Offset Layer), 用于弥补采样过程带来的理论误差下界。比如上面的例子中,原本存在3个像素的理论误差下界,单纯使用Heatmap是无论如何都不可能避免这个误差的。但是如果Offset层在126x126的地方给出了估计出的偏差,比如说是[0.5,0.5]。那么,这个时候误差就下降成507-126.5*4=1个像素,下降了整整66%。
当然,Offset层显然是可选的,不用它只是会带来精度的一定下降罢了。ROMP时可能出于对网络简洁性的考量,网络并没有加入这个结构。但BEV需要准确性更高的估计,所以又将Offset层这个经典的设计带回来了。
(2)类似三视图的思想——BEV
在机械加工领域,为了无歧义地表示复杂精密的零件,我们选择采用三视图进行设计。那么,能不能借鉴这样的思路,采取更多维的视角来回归3D人体呢?BEV给出了一个解决思路:添加鸟瞰图,以缓解歧义问题。主要思路就是在ROMP的2维表示上加入一个俯视的视角,从而将特征图从2D拓展成3D。由于具体流程比较复杂,因此这里逐步进行讲解。
首先,很容易用网络获得正面视角下的Body Center Heatmap和Offset Map。其中Body Center Heatmap代表人体中心点的热图,大小为1x128x128;而因为偏置有三个方向,所以Offset Map大小为3x128x128。
接着,把feature map(32x128x128)和正面视角的两张特征图组合((1+3)x128x128)并接在一起,成为一张36x128x128的深度图。为了探究深度信息,我们将前两个维度坍缩成一个维度,获得原始的深度图(1x(36x128)x128)(这步对应于下图第一个箭头)。再使用一维卷积提取信息,直到长度达到我们所要的深度值 D ,也就是64。(这步对应于下图第二个箭头)
这就形成了Body Center Heatmap和Offset Map的鸟瞰图,大小为1x64x128,也就是1xDxW:
得到鸟瞰图后,我们要将正视图和俯视图结合。一个简单的策略是吧他们都沿着缺失的轴复制很多份,补齐成两个形状一致的三维矩阵(1x64x128x128或者3x64x128x128),然后再把正视图和俯视图拓展出的结果相加或者相乘,这就完成了两个信息的组合。这步对应于下图中的Composition模块:
其他的部分,思路仍然保持和ROMP一致。具体来说,得到了3D的Center Map和Offset Map后,我们取出Heatmap中的局部最大值 (x_i,y_i) ,再加上对应的Offset (\Delta x_i,\Delta y_i) ,就得到了精确的中心点坐标。这个时候去对应的SMPL map里取出142个SMPL基变量就好了。而每个中心点的深度信息 d_i 则输入一个Encoder,最后和SMPL基变量组合起来即可。形象一些的流程图如下:
整个图的大概流程包括:
- 左上角先得到正视图,再得到鸟瞰图。
- 中上方,二者经过复制拓展,相加或者相乘,以得到3D的特征图。
- 右上方,取出其局部最大值 (x_i,y_i,d_i)
- 左下方,用二维坐标 (x_i,y_i) 取出对应的142个SMPL基础变量。再结合深度信息 d_i decoder后的向量,获得最终SMPL基础变量。
- 中下方,FC变换后就有SMPL模型产出了。
三,Relative Human数据集
BEV的想法很好,通过建立鸟瞰图来补充深度上的信息。然而,如果没有数据来监督训练的话,直接让网络学习抽象的俯视信息是十分困难的。因此,BEV文章中提出了一个新的数据集——Relative Human,简称RH。这个数据集搜集了7.6k张多人图片,共有超过24.8k个人体。数据集标注数据的方式是分层。简单来说,RH以人体的常规厚度0.7m为一层,将每个人分到不同的深度层(Depth Layer, DL)里。
以这张图为例,RH就将合照分成了前后大概三层,以供神经网络学习。这是一种更加具体可考的深度划分,与之前的很多基于相对顺序的次序划分相比,RH的准确性和稳健性更强。而且,还记得我们之前对于年龄问题的探究吗?RH也考虑到了这一点,因此加入了人物粗糙年龄段的标注,包括成人,青少年,孩子,婴儿,供训练时参考。比如上面我们举的那个年龄歧义的例子,就是RH的标注之一:
四,总结
文章的最后,对本文作一个小小的总结;
- ROMP对于深度的估计采取近大远小的策略。然而,这种方法可能难以处理年龄和姿态的变化。同时,根据3DMPPE的数据分析,我们了解“近大远小”在定量上的误差。
- BEV新采用了Offset Map来减小最小误差下界的影响。同时,我们了解了文章的核心——鸟瞰图。BEV对正视特征图和俯视特征图用复制的方式拓展成3D变量,再相加或者相乘,完成两种视图信息的交融。
- RH数据集以更具体的方式标注深度信息,取代了以往只标注人物顺序的办法。同时,为了解决年龄带来的歧义问题,RH把人物划分为有显著身高差异的四个年龄段。
码字不易,喜欢的话可以点个赞或者收藏,作者会很开心的。后续作者也会更新更多关于姿态动作领域的内容,感兴趣的话也可以关注一下哦。最后以著名的索尔维会议作为结尾,两个科学时代的产物以这种神奇的方式相遇,倒是莫名的浪漫。