[NeRF]学习笔记(持续更新中)


前言

最近NeRF热的不行,好多组都在沿着这个方向做各种尝试,为了能和这些算法的兄弟们交流,不至于听不懂他们在讲什么,所以决定花些时间认真搞搞懂。之前也是经常因为这个原因就去学习一些东西,但是都是自己看看就完了,没有认真整理过笔记,后来受一位大佬的影响,发现认真整理笔记不仅为了自己,也为了后续学习的人可以方便有疑问的地方可以参考,所以也决定留些公开的学习笔记,一方面是强迫自己好好整理,二是万一对别人有点帮助更是一些欣慰。
由于是边学习,边记录,所以逻辑性会比较差,有机会的话我会重新再整理一下。

首先记录下我自己的学习顺序并推荐下参考资料:

  1. 原始论文:nerf因为和孩之宝的那个玩具重名,所以搜索关键词经常先出那个的链接,所以这里直接附上原始NeRF论文的链接:https://www.matthewtancik.com/nerf
  2. 达摩院大佬的笔记:[NeRF]代码+逻辑详细分析:https://samuel92.blog.csdn.net/article/details/118959540?spm=1001.2014.3001.5502 ,这个笔记写的非常好,推荐一定要读代码的时候对照着看,不仅很详细,而且以流程图的方式讲清楚了整个流程和细节,我的笔记能做的也就是重复这个内容并补充一些特别小的细节;
  3. pytorch的code:pytorch3d中有个nerf的project:https://github.com/facebookresearch/pytorch3d/tree/main/projects/nerf ,这个我在mac上是配置完了运行环境,但是因为没有GPU,所以都是方便debug看代码用的,配置时也遇到一些问题,后面可以慢慢整理下;

为了方便后续阅读,我争取都放在一篇文章中,我会慢慢整理补充这个笔记,持续更新完善细节,第一次弄,比较慢,也希望用心弄,争取对自己和别人都有些帮助。

0408:更新了个前言,后面的暂时还都是模板内容


一、Raysampler

1、RayBundle

RayBundle类是个NamedTuple,包含origins,directions,lengths,xys(保存了sample图像中的xy坐标),类注释中写了directions不一定非得标准化,RayBundle可以通过ray_bundle_to_ray_points函数得到所有的points(Tensor)信息。
还有一句注释没完全懂:they define unit vector in the respective 1D coordinate systems

    Args:
        rays_origins: A tensor of shape `(..., 3)`
        rays_directions: A tensor of shape `(..., 3)`
        rays_lengths: A tensor of shape `(..., num_points_per_ray)`

    Returns:
        rays_points: A tensor of shape `(..., num_points_per_ray, 3)`
            containing the points sampled along each ray.
   通过None扩展维度,通过Tensor Broadcasting完成计算
   https://pytorch.org/tutorials/beginner/introyt/tensors_deeper_tutorial.html#in-brief-tensor-broadcasting
    rays_points = (
        rays_origins[..., None, :]
        + rays_lengths[..., :, None] * rays_directions[..., None, :]
    )

2、MultinomialRaysampler

MultinomialRaysampler类是个nn.Module,这个类注释写的比较明白,还给了个图,直接完整copy过来,NDCMultinomialRaysampler也是这个类的特殊case,按照NDC空间指定了入参,这个类简单的说,就是一个立方体长宽高通过min_x,min_y,min_depth,max_x,max_y,max_depth来指定,每个维度均匀按照image_width, image_height,n_pts_per_ray划分格子进行采样,采样后再通过指定的输入cameras,通过cameras的unproject_points函数转换为变换前的世界坐标,得到采样后RayBundle。
这个类相比之前版本(0.6.1)做了更新,增加了几个参数,完成几个额外功能,n_rays_per_image,就是xy平面也可以进行采样了,unit_directions指定了方向向量是否归一化,stratified_sampling指定了每条ray是否采用stratified random sampling进行采样。
MonteCarloRaysampler的注释直接这里写下吧,For practical purposes, this is similar to MultinomialRaysampler without a mask, however sampling at real-valued locations bypassing replacement checks may be faster.

    Samples a fixed number of points along rays which are regularly distributed
    in a batch of rectangular image grids. P
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值