读SMR 三维重构

文章题目: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:

  1. 输入mask后的2D图像生成 3D mesh (类似meshRCNN也是这样),不需要gt的3D监督(像pixel2mesh);
  2. 类似pixel2mesh 是在一个椭圆mesh上做变形得到最后结果的;
  3. 作者提出了一个问题: if it is possible to achieve 3D attribute-level reconstruction only with 2D annotation. 主要还是希望少用监督,达到类似结果。
  4. Category-specific 3D mesh 所以训练中用了鸟类的类别? 还是说 鸟 只能做鸟?(答:鸟只能做鸟)
  5. 跑了 ShapeNet, BFM (这个可以做2D supervised 和 unsupervised 重构 )和 CUB。
  6. 不需要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(垂直偏角) 。
在这里插入图片描述

  1. 光照方面用的是 Spherical Harmonics 这个需要对着render确定 。目前只要知道 是一个向量。
  2. 所以 当我们知道了 C,L,S ,T 其实就可以render出一个3D模型了。(读者按:这边 vn 这种法向量 还是没有讨论到?)而这个3D模型可以再投影回2D得到 图像Ir,和mask Mr。
  3. 如果我们重新思考的话, camera 这种信息还是需要背景+前景的,光照也是需要背景信息的; 而Shape 和 Texture 只需要前景。
  4. 这边预测 azimuth的时候 回归了 两个值,用来 atan, 为了方便模型回归。相比 e的话 估计直接就用 0,1 来弄了。
  5. shape encoder 是来预测 相对球形mesh的位移,而不是直接回归形状。
  6. texture encoder 也不是直接预测 UV map的,而是预测 2D flow map,完了用spatial transformation移动过去的 。

2D 重构 Loss (Section 3.3.1)

  1. 最基本的 如果有渲染的参数 可以直接 监督 A和 A_{gt} ,如 Eq3 ;
  2. 没有的话,我们可以再投影回 2D 如 Eq4, 看看重构的效果;
  3. 具体来说 这个 2D的重构损失有两部分,一部分是前景L1损失(Eq5),一部分是针对mask 有损失,用的是IoU loss (Eq6)。

差值连续性 Loss (Section3.3.2)

  1. Eq 8 给我的感觉是 类似 cyclegan 和 munit, Render就是Decoder,但是有一个区别,这个 Render是没有参数的。 要求 E(R(E(X)) 和 E(x) 一样。
  2. Eq8 只是最基本的,其实就是Eq11 不差值的版本。
  3. 这一段讨论了一下 每个参数如何差值。Fig4 比较好地展示了效果。
  4. alpha的取值是random 采样的,按照之前mixup的经验 可以试试训练的时候用 beta分布。

坐标连续性 Loss (Section3.3.3)

  1. 这边就是一个分类网络 每个像素 预测 是第几个顶点, 如公式 12
  2. 里面有一个 vk 代表 这个顶点 是不是可以被看到,我在想 是直接用了 mask 还是根据depth( z坐标) 来判断 。 感觉上用depth 更合理
  3. 需要注意的是 网络的 输入 是 图像 不是 mesh。

PCK 指标

  1. 有不同的metric,常用的是如果关键点和检测到的点 距离小于 150mm 就算答对了。
  2. 不过我有个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我的一些其他文章,感谢~比心。

郑哲东:【新无人机数据集】从 行人重识别 到 无人机目标定位

郑哲东:TOMM | 用CNN分100,000类图像

郑哲东:IJCV | 利用Uncertainty修正Domain Adaptation中的伪标签

Pytorch有什么节省显存的小技巧?

猜你喜欢

转载自blog.csdn.net/Layumi1993/article/details/120593356