文章题目:Self-Supervised 3D Mesh Reconstruction from Single Images
链接:https://openaccess.thecvf.com/content/CVPR2021/papers/Hu_Self-Supervised_3D_Mesh_Reconstruction_From_Single_Images_CVPR_2021_paper.pdf
作者:Tao Hu, Liwei Wang, Xiaogang Xu, Shu Liu, Jiaya Jia
代码:
What:
- 输入mask后的2D图像生成 3D mesh (类似meshRCNN也是这样),不需要gt的3D监督(像pixel2mesh);
- 类似pixel2mesh 是在一个椭圆mesh上做变形得到最后结果的;
- 作者提出了一个问题: if it is possible to achieve 3D attribute-level reconstruction only with 2D annotation. 主要还是希望少用监督,达到类似结果。
- Category-specific 3D mesh 所以训练中用了鸟类的类别? 还是说 鸟 只能做鸟?(答:鸟只能做鸟)
- 跑了 ShapeNet, BFM (这个可以做2D supervised 和 unsupervised 重构 )和 CUB。
- 不需要template , camera 参数预测 和 part parsing
读前疑问:
keypoints是类似很早之前vgg 的unsupervised 方法么,类似first order 中的方法? 怎么实现的?
- 答:直接用的椭圆初始化mesh的顶点作为keypoint。
How:
结构:
1.3D属性包含: 相机参数,形状,纹理和光照。这4个都是后面需要用网络做预测的。
2. 在2D监督层面,重构的模型 需要能 投影回 2D图像。
3. 在3D监督层面,如论文图一,提出了两个consistency的 loss,分别是 Interpolated Consistency 和 Landmark Consistency。
4. 对于 Interpolated Consistency, 差值以后的3D参数 还可以渲染,来做监督。可能后续要求一些 self-supervised loss在 interpolated mesh上(可能还是GAN的loss?答:代码里有用到GAN,但是文章里没写 )。
5. 对于 Landmark Consistency, 会做一个 landmark的 classification,看图是 引入一个额外的 UNet,区分关键点顺序,预测是哪一个关键点。(可能用的是一个语义分割网络? 直接用的就是keypoint 的 index )。
6. Encoder包含4个自网络,分别是 Camera pos预测, light预测, shape预测 和 texture预测。其中 只有 Texture是 UNet的样子其他都是正常的预测几个参数的那种降采样网络。
7. 有 V个顶点 ,每个顶点有一个 3Channel deter 构成了 S,这个S就是 xyz 坐标?
8. 纹理特征用的是 UV map,注意这个 UV map 还是 HW3, 其实就是把每个部件的位置做了移动。
9. 相机参数 包含 distance,azimuth(水平的偏角),Elevation(垂直偏角) 。
- 光照方面用的是 Spherical Harmonics 这个需要对着render确定 。目前只要知道 是一个向量。
- 所以 当我们知道了 C,L,S ,T 其实就可以render出一个3D模型了。(读者按:这边 vn 这种法向量 还是没有讨论到?)而这个3D模型可以再投影回2D得到 图像Ir,和mask Mr。
- 如果我们重新思考的话, camera 这种信息还是需要背景+前景的,光照也是需要背景信息的; 而Shape 和 Texture 只需要前景。
- 这边预测 azimuth的时候 回归了 两个值,用来 atan, 为了方便模型回归。相比 e的话 估计直接就用 0,1 来弄了。
- shape encoder 是来预测 相对球形mesh的位移,而不是直接回归形状。
- texture encoder 也不是直接预测 UV map的,而是预测 2D flow map,完了用spatial transformation移动过去的 。
2D 重构 Loss (Section 3.3.1)
- 最基本的 如果有渲染的参数 可以直接 监督 A和 A_{gt} ,如 Eq3 ;
- 没有的话,我们可以再投影回 2D 如 Eq4, 看看重构的效果;
- 具体来说 这个 2D的重构损失有两部分,一部分是前景L1损失(Eq5),一部分是针对mask 有损失,用的是IoU loss (Eq6)。
差值连续性 Loss (Section3.3.2)
- Eq 8 给我的感觉是 类似 cyclegan 和 munit, Render就是Decoder,但是有一个区别,这个 Render是没有参数的。 要求 E(R(E(X)) 和 E(x) 一样。
- Eq8 只是最基本的,其实就是Eq11 不差值的版本。
- 这一段讨论了一下 每个参数如何差值。Fig4 比较好地展示了效果。
- alpha的取值是random 采样的,按照之前mixup的经验 可以试试训练的时候用 beta分布。
坐标连续性 Loss (Section3.3.3)
- 这边就是一个分类网络 每个像素 预测 是第几个顶点, 如公式 12
- 里面有一个 vk 代表 这个顶点 是不是可以被看到,我在想 是直接用了 mask 还是根据depth( z坐标) 来判断 。 感觉上用depth 更合理
- 需要注意的是 网络的 输入 是 图像 不是 mesh。
PCK 指标
- 有不同的metric,常用的是如果关键点和检测到的点 距离小于 150mm 就算答对了。
- 不过我有个concern,如果点多了,是不是 PCK指标就自然更高一些。
本文会预测 642个关键点。 而原始cub数据集应该没有标注那么多。
参数分配上
2D重构给的权重为 10 , IC的权重是 1, LC的权重是 0.1
和代码里不一致。代码里
2D重构给的权重为 1 , IC的权重是 0.1, LC的权重是 0.001
相对来说 LC更小 。
可能缺陷
相比CMR 感觉鸟的脚 很难出现。其他都OK。可能还是 CUB的问题?看 Fig7的 马 啊 牛啊 还OK。
最后最后,也欢迎大家可以check我的一些其他文章,感谢~比心。
郑哲东:【新无人机数据集】从 行人重识别 到 无人机目标定位