20

深度学习中处理多视角多相机数据新思路

 3 years ago
source link: https://zhuanlan.zhihu.com/p/265716984
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

很久没有写文章了,失踪人口终于归来!今天给大家介绍的是一个并不能算全新,但是最近越来越热门处理multi-view multi-camera数据的思路。其实基于这个想法的文章在去年就已经出现了,不过最近读了一些paper,发现越来越多不同的应用领域里都在重新发现这个想法,所以把我看到的一些工作整理汇总一下,相信还会有更多我没有注意到的应用中也是用了这样的思路,欢迎大家评论区补充~

首先,交待一下问题背景。在很多应用中,虽然我们能够借助CNN强大的学习能力,从单张2D的图片中恢复一些3D信息,但是这些信息基本都是CNN通过数据“脑补”出来的,虽然可能已经可以解决很多应用中的问题,但是泛化性能差,对场景依赖强。(欲知详情,可以参见之前总结另外一篇分析这个问题的文章: https:// zhuanlan.zhihu.com/p/95 758284 )故一个常见的方法便是我们再加入第二个相机,组成一个多目系统,如下图所示。这里我们假设这个系统是经过完善标定的,也就是说我们能得到准确的内参和外参。我们观察左眼图像中的一个点x1,其实对应的是3D空间中的一条射线。可以看到这条射线上的点,投影到右眼图像中对应的是一条线,这就是著名的epipolar line。这样系统的一个特例便是双目相机,通过合适的calibration和rectify,可以将epipolar line变为与图像坐标轴平行的线,从而方便后续的matching等一系列工作。

vmQNBrv.jpg!mobile

传统的3D计算机视觉中,更多关注通过对应特征点匹配以及代数方法来解决姿态估计和重建等问题。对于我们关注的各种high-level semantic问题,沿着这个思路的做法便是先解出单帧中的keypoint/semantic segmentation等语义信息,然后再使用triangulation这样的代数方法优化出对应点的3D位置。但是如果我们把这样的几何关系放到深度学习的大背景下,可以立马想到这样的对应关系可以为我们在feature层面去aggregate multi-view数据提供了极好的先验。

在Multi-view数据中,我看到比较早期的工作是[1],要完成的任务是从多张人体姿态的图片中估计出keypoint的3D位置。如下图所示,我们首先在待估计的人体周围建立一个分辨率为64的3D voxel。如上所述,我们在2D中的每一个点都对应到3D空间中的一条射线,虽然我们不知道具体是3D空间中哪一个点,我们可以将一个点的特征”unproject”回这个3D voxel空间中去。然后每个voxel对于所有view的特征进行aggregation,这样相当于每个view提供一些可能的candidate位置,然后不同view之间去做了majority vote。这样我们在这个完整的3D voxel中就融合了所有view图像的特征。在这个基础之上,后续再通过3D conv一系列操作,最终预测出在3D空间中keypoint位置。具体的aggregation操作可以选择sum,normalized sum以及soft argmax等。具体可以参见原文。

ay2yMnf.jpg!mobile

沿着这个思路的工作还有[2],区别主要在于[2]是一个two-stage的结构,在粗粒度的voxel得到proposal后,会在这个proposal周围建立更细粒度的voxel来refine结果。在[3]中,作者探索了更好的aggregate feature的方式,不同于前述两个工作,直接使用avg或者max来融合不同view的feature,[3] 尝试了各种不同的attention形式,这样相当于将epipolar line上的feature来通过和query feature的相似度来融合,从而避免错误或者不准确的feature可能起到反作用的问题。

3Ebueen.jpg!mobile

这个思路的另外一大应用是在室外场景,其特点是有明确的ground plane。在这样的场景中,我们感兴趣的物体大多是在地面上,故可以利用这样的假设将monocular的信息还原回3D空间中。很容易想到,这样也可以将multi-view的数据在统一的3D空间中融合起来。我看到的一个直接应用是multi-view行人检测[4]。这个任务中输入是同一场景在不同相机中图像,希望最终能输出一个在BEV下的行人occupancy grid。首先,我们明确在每个相机参数已知且假设每个点都在ground plane上的情况下,我们可以将每张图像通过perspective transformation转换为BEV下投影的一个梯形区域,如下图所示。有了前文这么多的铺垫,很自然就可以想到,我们可以将multi-view的数据project到同一个BEV空间中,以便解决遮挡和远处小物体等hard case。作者也对应该在什么时候去做这样的multi-view融合做了ablation分析,不出意外,在中间层的特征上融合这样的效果最好。

UvyqQrV.jpg!mobile

第二个工作是通过车载摄像头完成BEV semantic segmentation[5](也就是semantic occupancy grid)。和上面的工作直接对单一feature map做变化不同,这个工作更加充分利用了像FPN这样结果的多尺度信息,让不同尺度的feature map分别对应不同距离的特征:直观上来说,更高分辨率的feature map应当负责生成远处的BEV feature,反之近处的BEV feature应当从低分辨率的feature map中生成。在这里,作者根据距离进行了硬划分。如下述流程图所示:

FJneUfi.jpg!mobile

为了完成这样的从相机坐标系到BEV的转换,作者提出了一个dense transformer layer。核心操作是通过采样和插值将一个“近细远粗”的Polar feature转换为一个和深度无关等间距的BEV feature。在这个操作中自然也会用到相机的内外参这些参数。具体每步的操作见下图,比较清晰。前两步都是标准的conv和pooling操作,最后一步的resample操作便是核心。直观来说,resample的操作便是将在近处的feature,使用更细的步长进行采样,反之远处使用更粗的步长。这样保证得到最终的feature map在BEV下是等距的。每一个z下的具体步长和相机的参数,feature map downsample的次数,和最终BEV下的grid size相关。具体的resample操作可以使用各种Interpolation方法。

MVbeyq6.jpg!mobile

稍微遗憾的是,在multi-view和temporal fusion上,作者使用了传统的bayesian filter的后处理办法,而不是像前述工作,在feature层面上先fuse。这也是后续可以继续提升的一个点。

总结一下,将相机成像的原理和CNN强大的表示能力结合是一个很有意思的研究方向。我们可以将一些基本的3D计算机视觉知识结合到CNN中feature map的transform和aggregate中,从而增强单一视角下的图像特征。相信更多的应用都可以从这样的想法中受益。

[1] Iskakov, K., Burkov, E., Lempitsky, V., & Malkov, Y. (2019). Learnable triangulation of human pose. CVPR 2019.

[2] Tu, H., Wang, C., & Zeng, W. (2020). Voxelpose: Towards multi-camera 3d human pose estimation in wild environment. ECCV 2020.

[3] He, Y., Yan, R., Fragkiadaki, K., & Yu, S. I. (2020). Epipolar Transformers. CVPR 2020.

[4] Hou, Y., Zheng, L., & Gould, S. (2020). Multiview detection with feature perspective transformation. ECCV 2020

[5] Roddick, T., & Cipolla, R. (2020). Predicting Semantic Map Representations from Images using Pyramid Occupancy Networks. CVPR 2020


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK