Marrnet 解读
marrnet是MIT 2018年发表在nips上的工作,由于最近基于这篇工作的基础上做一些应用, 所以写下我个人的一些理解。
图片来自marrnet输入256*256 rgb,中间输出256*256 depth, normal,silhouette,最终输出128*128*128volume.
(a) 2.5D Sketch Estimation, 是一个autoencoder的网络;
(b)3D Shape Estimation, 依然是一个autoencoder的网络,这都没有什么可以说;
(c)Reprojection Consistency,这是我想主要讲的地方。我们看一下这一步3D->2D的难点在哪里.
一般我们做reprojection, 我们需要知道相机内参, 甚至是外参(如果物体在世界坐标系的话),加上这里生成的物体是用3D binary volume表示的,一个离散化的representation,只知道每个整数坐标,这种情况下,即使知道内参也无法做reprojection. 接下来我们看一下marrnet是如何克服以上这些问题的。
1) 3D ground truth是在相机坐标系下的,也就是说,从3D CAD渲染数据的时候,需要记录相机的view,这样就可以将数据库中朝向一致的椅子转到相机坐标系下,;
2) Volume 是128*128*128的,但是image是256*256的,做过reprojection的同学应该知道,仅依靠离散的3D点是不可能做到reprojection, 因为没有办法将voxel和pixel一一对应起来。论文没有说这里做了什么变换可以让voxel和pixel一一对应起来,我猜他们的操作是将256*256的image reshape 成128*128的图像,这样就一一对应起来啦.
3)另外就是深度,从volume这里来看深度,单位是一个voxel,voxel的坐标 (x,y,z)是整数,这里怎么对应depth上的深度值呢,因为我们理解的深度是在相机坐标系下的深度,以米为单位。但是marrnet depth image的深度值是[0,256]之间的整数,除以一下2就是[0,128]内的整数。这样就将128*128*128 volume 的深度和128*128 depth上pixel的深度一一对应起来啦,巧妙吧。
对三个操作,render数据的时候,就相当于将CAD model 离散化成256*256*256的3D volume, 并且将128*128*128 3D ground truth转到相机view下,然后就是reshape, 为了完成reporjection以计算consistency loss, 将中间输出的depth,silhouette,normal image reshape成和volume 一样大的128*128 image。
感谢marrnet作者小能手对我的帮助,为他打call