ngp背景重建

目的

探究影响背景重建的因素。

推测因素

原始重建结果
  1. 视角 在拍摄时由于俯拍绕物体一周,导致场景上方缺乏光线透过,于是在场景顶部产生云雾。
  2. 距离 拍摄时绕物体一周的过程中,对于场景中的一个点,缺乏同一 \((\theta,\phi)\) 的数据,导致体密度训练较差。
  3. 背景特征 背景特征多,增加网络的复杂程度,是否导致网络更难学习。
  4. 训练 外参 曝光 畸变

实验一

实验目的

探究相机拍摄视角对背景重建的影响

实验条件

  1. 同一场景,光照相同,背景相同
  2. 相机参数 :同一相机 (Sony A6000), 镜头焦距 50mm,采用 A 挡拍摄 (F = 2.8) , 曝光补偿 +0.7,ISO: auto.
  3. 数据量相同:每组实验的照片数量一致
  4. COLMAP 模型SIMPLE_RADIAL 且 每张图像内参一致
  5. 未勾选 训练外参,曝光和畸变。

实验步骤

  1. 数据收集:绕物体分别在 上、中、下拍摄一圈。

  2. 第一组 :对于从上方拍摄的视角提取 215 张图像。

    第二组 :上、中、下分别使用 60、60 、110张图像 并且筛掉一些模糊和虚焦的照片

  3. 数据处理:使用COLMAP稀疏重建, 每一组都总共有215张图像用于稀疏重建

    第一组得到的相机内参:

    1
    2
    3
    4
    # Camera list with one line of data per camera:
    # CAMERA_ID, MODEL, WIDTH, HEIGHT, PARAMS[]
    # Number of cameras: 1
    1 SIMPLE_RADIAL 1920 1080 4090.2916176564518 960 540 0.348649511020239

    第二组得到的相机内参:

    1
    2
    3
    4
    # Camera list with one line of data per camera:
    # CAMERA_ID, MODEL, WIDTH, HEIGHT, PARAMS[]
    # Number of cameras: 1
    1 SIMPLE_RADIAL 1920 1080 4726.2638345804498 960 540 0.48132964624147656
  4. NeRF 重建 : run.py 两组实验相机沿着相同的轨迹 base_cam.json,导出渲染后的视频

实验结果

第一组

背景渲染结果白色桌面为锥型

整体效果

物体周围有明显的云雾环绕

实验二

云雾分布有明显分层现象,上方云雾仍然为白色,中间云雾的一半视角出现绿色,而另一半云雾基本消除,下方圆桌形态较好重建,但桌面呈现透明。更多周围背景被重建(窗外绿树,栏杆,沙发等)

结论

增加相机视角多样性明显减少物体周围的云雾

不足

  1. 拍摄过程中虚焦导致不同视角的数据量有差别
  2. 不同视角拍摄时镜头与物体距离未保持一致

讨论

  1. 网络倾向于在相机面前贴云雾,导致通常沿着相机轨迹产生云雾
  2. 室内一面造成的云雾少于窗外绿树形成的云雾。推测,室外场景不同变化小.
  3. 上方的云雾?

实验二

实验目的

背景纹理的复杂程度如何影响背景重建效果

实验条件

  1. 同一场景,光照相同,背景相同
  2. 相机:同一实际拍摄
  3. 数据量相同:每组实验的照片数量基本一致
  4. COLMAP 模型SIMPLE_RADIAL 且选择内参 share_for all images
  5. 未勾选 训练外参,曝光和畸变。

实验步骤

  1. 数据收集:绕物体在相似的角度分别在有格子纹理和空白桌面进行拍摄

  2. 各提取60张图像

  3. 数据处理:使用COLMAP稀疏重建

    空白桌面得到的相机内参:

    1
    2
    3
    4
    # Camera list with one line of data per camera:
    # CAMERA_ID, MODEL, WIDTH, HEIGHT, PARAMS[]
    # Number of cameras: 1
    1 SIMPLE_RADIAL 3840 2160 2928.591596486669 1920 1080 0.035193673608008569

    有纹理得到的相机内参:

    1
    2
    3
    4
    # Camera list with one line of data per camera:
    # CAMERA_ID, MODEL, WIDTH, HEIGHT, PARAMS[]
    # Number of cameras: 1
    1 SIMPLE_RADIAL 3840 2160 2929.642972834683 1920 1080 0.027481430175291963
  4. NeRF 重建 : run.py 两组实验相机沿着相同的轨迹 base_cam.json,导出渲染后的视频

实验结果

有纹理组

桌上的纹理较好重建

image-20221026191200695

空白桌面组

空白对照

空白组的桌面相比有纹理的会更加透明

实验结论

  1. 纹理更多 COLMAP 更好的进行特征提取

    image-20221026191811412
image-20221026191914388

实验三

  1. Train extrinsic: propagates gradients back onto the camera parameters in order to minimize the loss (in this case by treating the cameras as rigid bodies with momentum and the loss gradients as impulses acting on them). This can fix slight inaccuracies in the poses from transform.json. If you're using COLMAP, this option only yields a small benefit as COLMAP is already quite accurate -- I'd leave it off for most scenes.
  2. Train distortion: learns a grid-based camera distortion model on top of the Open CV camera model parameterized in transforms.json. Again, COLMAP usually does a good enough job that you don't need this.
  3. Train exposure: learns to compensate for varying exposure levels of the training images. If you generate your own data, you should not use this and instead set your camera to fixed exposure
  4. extrinsic: 14073 steps ; 收敛时间 235s ; Loss: 0.000482(33.17dB)
  5. exposure: 7032 steps; 收敛时间 110s ; Loss: 0.000577 (32.39dB)
  6. disorder: 6374 steps ; 收敛时间:100s Loss 0.000606(32.17db)
  7. origin: 6214 steps ; 收敛时间 100s ; Loss : 000614 (32.12DB)

结论

  1. 勾选extrinsic 结果更加清晰,使头发上的云雾消失,并且训练速度变慢一倍左右。
  2. 勾选 exposure 使头发上的云雾消失。
  3. 勾选 disorder 使结果更加清晰。