Pixel Nerf代码阅读

  • Input: 图像的 分辨率是 300*400; 每个场景里面有 49张 Training 的图像。

SB: scene batch 场景的个数; 4
NV: number input ,每个场景的视角,也就是图像的数量; 49

每条光线首先会采集 64个采样点, 一次训练4 个场景,每个场景随机【用上了该场景的所有的图像】选择128条光线,因此 光线的 shape (4,128,8)

## 将光线reshape 成(512,8)
rays = rays.reshape(-1, 8)  # (SB * B, 8)## 每条光线采集 64 个采样点
z_coarse = self.sample_coarse(rays)  # (B, Kc)
coarse_composite = self.composite(model, rays, z_coarse, coarse=True, sb=superbatch_size,
)

在 compostit_alpha 函数里面,使用 Z 的数值 生成采样点 points, point 的 shape 设置为(4,8192,3) 表示一共有4个场景,每个场景生成 8192条光线

model.py forward 函数中正式实现论文中的 pixel nerf

输入的是 world 系 下面的采样点的 坐标:

  1. 将world 系下面的采样点坐标 转变到相机坐标系

    将 world 系下面的采样点 转换到 各自的相机坐标系下面,然后做 projection

         xyz = repeat_interleave(xyz, NS)  # (SB*NS, B, 3)xyz_rot = torch.matmul(self.poses[:, None, :3, :3], xyz.unsqueeze(-1))[..., 0]xyz = xyz_rot + self.poses[:, None, :3, 3]
    
  2. 由于世界点的 是由所有图像去生成的,并不是由某一张图像去生成的 Ray, 因此可以将这些采样点投影到 2D 图像上去 query feature

 latent = self.encoder.index(uv, None, self.image_shape)  # (SB * NS, latent, B)
  1. 得到 Query 的 feature 之后,然后再通过 网络回归出 density 和 color

Appendix: https://openaccess.thecvf.com/content/CVPR2021/supplemental/Yu_pixelNeRF_Neural_Radiance_CVPR_2021_supplemental.pdf

def forward(self, zx, combine_inner_dims=(1,), combine_index=None, dim_size=None):""":param zx (..., d_latent + d_in):param combine_inner_dims Combining dimensions for use with multiview inputs.Tensor will be reshaped to (-1, combine_inner_dims, ...) and reduced using combine_typeon dim 1, at combine_layer"""with profiler.record_function("resnetfc_infer"):assert zx.size(-1) == self.d_latent + self.d_inif self.d_latent > 0:z = zx[..., : self.d_latent]x = zx[..., self.d_latent :]else:x = zxif self.d_in > 0:x = self.lin_in(x)  ## 对PE 的mlp ,input:42 out:512else:x = torch.zeros(self.d_hidden, device=zx.device)## combine_layer = 3, 在Appendix 当中 ResBlock 需要注入3次: ReatBlock 3×for blkid in range(self.n_blocks):if blkid == self.combine_layer:## 一个场景可能有多个视角,在重复3次 ResNet 之后,需要对于 对个视角的特征进行 Average ## https://openaccess.thecvf.com/content/CVPR2021/supplemental/Yu_pixelNeRF_Neural_Radiance_CVPR_2021_supplemental.pdfx = util.combine_interleaved(x, combine_inner_dims, self.combine_type)if self.d_latent > 0 and blkid < self.combine_layer:tz = self.lin_z[blkid](z)  ## 对于 imgae_feature 进行的 mlp 操作if self.use_spade:sz = self.scale_z[blkid](z)x = sz * x + tzelse:x = x + tzx = self.blocks[blkid](x)out = self.lin_out(self.activation(x))return out

大致的 思路是 Feature 和Postion Encoidng 得到的 Feature 需要通过 MLP 进行组合,组合的方式 需要Repeat 3次,每一次都需要 注入 Feature 的信息。 然后如果一个场景参与 训练的图像超过了 1张,需要在 combine_interleaved 函数中,将 多个视角的 feature 进行平均。 之后回归出 rgb 和 density
在这里插入图片描述

n 表示的视角输入,默认是1 ,可以是 3
程序中的 n.blocks 对应着 3,resnet 的网络重复3次,组合 image feature和 PE 的结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/288951.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微电网优化(Matlab复现)— 微电网两阶段鲁棒优化经济调度方法_刘一欣

论文链接&#xff1a;微电网两阶段鲁棒优化经济调度方法 - 中国知网 代码链接&#xff1a;https://m.tb.cn/h.5Mg7fCo?tkhnpmWgZiv2R 复现效果&#xff1a; 运行环境&#xff1a;Matlab 2020bCplexyalmip 1 微电网结构 图 1 所示为典型的微电网结构&#xff0c;由可控分布式…

Python Opencv实践 - 手部跟踪

使用mediapipe库做手部的实时跟踪&#xff0c;关于mediapipe的介绍,请自行百度。 mediapipe做手部检测的资料&#xff0c;可以参考这里&#xff1a; MediaPipe Hands: On-device Real-time Hand Tracking 论文阅读笔记 - 知乎论文地址&#xff1a; https://arxiv.org/abs/2006…

Mysql之约束上篇

Mysql之约束上篇 约束的概述为什么需要约束什么是约束约束的分类 非空约束作用关键字特点添加非空约束删除非空约束 唯一性约束关键字特点添加唯一约束关于复合唯一约束删除唯一约束查看索引 主键约束(非空唯一性约束)作用关键字特点添加主键约束关于复合主键删除主键约束 约束…

排序算法——快排

快速排序算法最早是由图灵奖获得者Tony Hoare设计出来的,他在形式化方法理论以 及ALGOL.60编程语言的发明中都有卓越的贡献,是20世纪最伟大的计算机科学家之—。 而这快速排序算法只是他众多贡献中的—个小发明而已。 快速排序&#xff08;Quick Sort&#xff09;的基本算法思…

类和对象(中篇)

类的六个默认成员函数 如果一个类中什么成员都没有&#xff0c;简称为空类。 空类中真的什么都没有吗&#xff1f;并不是&#xff0c;任何类在什么都不写时&#xff0c;编译器会自动生成以下6个默认成员函数。 默认成员函数&#xff1a; 用户没有显式实现&#xff0c;编译器会…

那些类型有Class对象

演示哪些类型有 Class对象 /*** 演示哪些类型有 Class对象*/ public class AllTypeClass {public static void main(String[] args) {Class<String> stringClass String.class; //外部类Class<Serializable> serializableClass Serializable.class;//接口Class&…

你知道跨站脚本攻击吗?一篇带你了解什么叫做XSS

1.XSS简介 &#xff08;1&#xff09;XSS简介 XSS作为OWASP TOP 10之一。 XSS中文叫做跨站脚本攻击&#xff08;Cross-site scripting&#xff09;&#xff0c;本名应该缩写为CSS&#xff0c;但是由于CSS&#xff08;Cascading Style Sheets&#xff0c;层叠样式脚本&#x…

RocketMQ系统性学习-RocketMQ原理分析之Broker接收消息的处理流程

Broker接收消息的处理流程&#xff1f; 既然要分析 Broker 接收消息&#xff0c;那么如何找到 Broker 接收消息并进行处理的程序入口呢&#xff1f; 那么消息既然是从生产者开始发送&#xff0c;消息是有单条消息和批量消息之分的&#xff0c;那么消息肯定是有一个标识&#…

LEFT JOIN

通過中間表説明 biz_email_sent table1 biz_email table2 biz_email_sent_address 中間表 LEFT JOIN 是 JOIN 左邊的記錄(biz_email_sent id52)全部查出&#xff0c;比如52 的記錄全部查出。 即使中間表se.sa_email_id 在 table2中找不到&#xff0c…

管理类联考——数学——真题篇——按知识分类——代数——数列

【等差数列 ⟹ \Longrightarrow ⟹ 通项公式&#xff1a; a n a 1 ( n − 1 ) d a m ( n − m ) d n d a 1 − d A n B a_n a_1(n-1)d a_m(n-m)dnda_1-dAnB an​a1​(n−1)dam​(n−m)dnda1​−dAnB ⟹ \Longrightarrow ⟹ A d &#xff0c; B a 1 − d Ad&#x…

MySQL的增删改查(进阶)--下

3. 新增 插入查询结果 在一张表中插入另一张表的查询结果 语法为&#xff1a; INSERT INTO table_name [(column [, column ...])] SELECT ...该语句是组合技&#xff1a;把插入语句和查询语句结合到一起了—以查询结果&#xff0c;来作为插入的值。即把表一查询出来的结果集合…

MobileNet-V2实现遥感土地利用图像识别

今天我们分享MobileNet V2实现遥感影像土地利用的图像分类。 数据集 本次使用的数据集是UC Merced Land-Use Dataset。UC Merced Land-Use Dataset 是一个用于研究的 21 级土地利用图像遥感数据集&#xff0c;均提取自 USGS National Map Urban Area Imagery&#xff08;美国地…