文章目录
2021年第11周学习小结:
数据集对SVR的影响
单视图重建中常用的数据集包括Pascal 3D+、ObjectNet3D、IKEA、ShapeNet、Pix3D等。
对于ShapeNet这类数据集,由于没有匹配三维形状的二维图像,因此往往使用软件合成出对应的视图。
而Pascal 3D+这类数据集中图像与三维形状并不匹配,多种类型的椅子可能都是用同一个形状表示。
且这些数据集的图像与形状数量不够多。往往许多SVR网络都使用人工合成的图像数据对模型进行训练。由于合成数据集与真实数据集之间存在许多差异,导致这些网络在使用真实图像作为输入时无法得到较好的重建效果。
2.5D Sketch 在单视图重建中的作用
David Marr 认为人对三维形状的感知依赖于2.5D草图(深度、轮廓、表面法向信息)。我们可以通过下面的这张图来理解这一点:
图1(a)包含了很多椅子图像,每幅图像中光照角度,椅子的材质,纹理以及背景部分都存在巨大的差异,但我们能够很轻松的辨认出他们具有相似的三维形状。从这一点可以看出我们判断一个物体的三维形状,并不需要了解光照条件,色彩等信息。那么可以考虑三维形状的信息是否有很大一部分来源于这些图像的共性。
如(b)所示,图中的椅子都具有相似的表面法线图以及深度图,如果只使用2.5D草图,而非原始RGB图像来预测重建形状。首先能够忽略数据集的差异性问题,因为真实图像与合成的图像在2.5D草图上的差异很小;其次剔除了色彩纹理信息,相当于删除了对形状没有贡献的特征;最后图像到图像的预测相比2D到3D的预测要简单许多。
论文阅读 MarrNet: 3D Shape Reconstruction via 2.5D Sketches
方法
文章提出了MarrNet,其重建步骤分为两步:先从RGB图像预测出深度图、表面法线图、轮廓图;再通过这些2.5D草图重建出3D形状。
这种分步重建的方法有以下几点优势:
- 由2D图像预测得到2.5D草图较简单,且合成图像与真实图像之间的差异对预测得到的2.5D草图并无太大影响。
- 由2.5D草图重建得到3D形状的网络可以直接使用合成数据集进行训练,因为网络的输入仅仅使用了深度、表面法向与轮廓信息。
网络的具体结构如下:
包含两个部分:
Ⅰ 2.5D sketch estimator:用于预测图像的深度、法向等信息。
Ⅱ 3D shape estimator:根据前面的2.5D图像生成对应的三维形状。
同时还根据2.5D草图与3D形状的对应关系引入了一致性损失。
2.5D sketch estimation network
使用编码器-解码器结构进行2.5D草图的预测,编码器部分使用了ResNet-18。
将一张256*256的RGB图像输入网络后以相同的分辨率输出深度图、表面法线图以及轮廓图共三张图像。
3D shape completion network
使用编码器-解码器结构进行3D形状的预测,
将前面网络得到的轮廓图作为法线图以及深度图的mask,将处理好的深度图与法线图作为网络的输入,最终得到 12 8 3 128^3 1283的体素。
Reprojection Consistency
网络引入了形状与图像之间的一致性损失,但并不针对3D与2D之间的对应关系,而是3D与2.5D之间的关系。
值得注意的是作者后续的工作中并没有再次使用过重投影一致性损失,可能是效果不好。在后续的ShapeHD与GenRe中都用到了2.5D草图,可以看出这种方法相比直接对RGB图像进行重建还是有一定的优势的。
ShapeHD单视图重建实例
项目地址:https://github.com/xiumingzhang/GenRe-ShapeHD
数据集地址:(训练集总共144G)http://genre.csail.mit.edu/downloads/shapenet_cars_chairs_planes_20views.tar
训练好的模型:http://genre.csail.mit.edu/downloads/genre_shapehd_models.tar
代码中提供了几张RGB图像以及对应的Mask作为测试集,也可以从Pix3D数据集中中获取其他的图片用于输入
Pix3D数据集下载地址:http://pix3d.csail.mit.edu/data/pix3d.zip
环境配置
代码中包含环境配置文件: environment.yml
需要注意的toolbox路径下有些文件需要编译,要求pytorch的版本为0.4.1,版本过高会引发许多问题。
toolbox文件编译
#error This file requires compiler and library support for the ISO C++ 2011 standard. This support must be enabled with the -std=c++11 or -std=gnu++11 compiler options.
在编译文件时,报错:
error: #error This file requires compiler and library support for the ISO C++ 2011 standard. This support must be enabled with the -std=c++11 or -std=gnu++11 compiler options.
网上给出的解决方案都是针对诸如gcc编译c++程序时发生的错误,按照提示在g++后添加参数: -std=c++11 。
而我的命令行是这样的:
cmd="nvcc -c -o back_projection_kernel.cu.o back_projection_kernel.cu -x cu -Xcompiler -fPIC -I ${TORCH}/lib/include/TH -I ${TORCH}/lib/include -I ${TORCH}/lib/include/THC -I ${HERE} -I ${TORCH}/lib/include\
-gencode