Instant-NGP: Multi-resolution Hash Encoding(多分辨率哈希编码)

Instant-NGP: Multi-resolution Hash Encoding(多分辨率哈希编码)

文章目录

Multi-resolution Hash Encoding(多分辨率哈希编码)

输入: 输入是 x \mathbf{x} x = [ x , y ] [x, y] [x,y],一个2D weight tensor归一化的坐标 (后续会进行插值)

输出:
在 Instant-NGP 的架构中,训练过程实际上是在优化两部分:显式特征(Explicit Features):

  • 存储在哈希表(Hash Table)中的 L × T L \times T L×T 个特征向量。
  • 隐式映射(Implicit Mapping):后端小型 MLP 的权重。

Multi-resolution Hash Encoding分为四个步骤

  • 系统预设 L L L 个不同精度的网格(从粗糙到精细)。粗层捕捉大轮廓,细层捕捉微小细节。
  • 网格顶点索引与哈希 (Hashing):在每一层,坐标 x \mathbf{x} x 会落在某个小格子(Voxel)里。计算该格子 4 个顶点的索引(三维空间8个顶点,二维空间4个顶点)。为了节省空间,如果顶点数超过预设大小 T T T,则使用空间哈希函数将坐标映射到固定大小的哈希表中: h ( x ) = ( ⨁ i = 1 d x i π i ) m o d T h(\mathbf{x}) = (\bigoplus_{i=1}^d x_i \pi_i) \mod T h(x)=(i=1⨁d​xi​πi​)modT 这里d=4是顶点数,x是坐标, π \pi π是一个很大的质数,为了让坐标的每一维在计算时都能产生巨大的差异,从而打乱空间顺序,减少“空间聚集性”导致的冲突(就是哈希的原理), ⨁ \bigoplus ⨁是按位异或
  • 双线性插值 (Interpolation):根据 x \mathbf{x} x 在当前格子内的相对位置,对 4 个顶点的哈希特征向量进行线性插值,得到该层分辨率下的特征。
  • 特征拼接 (Concatenation):将所有 L L L 层得到的特征向量拼接在一起,输入给一个非常小的 MLP(通常只有 2 层)解码回图像像素值。

下面分步骤讲解代码实现:

双线性插值

classImage(torch.nn.Module):def__init__(self, filename, device):...# load a tensor/imagedefforward(self, xs):with torch.no_grad():# Bilinearly filtered lookup from the image. Not super fast,# but less than ~20% of the overall runtime of this example. shape = self.shape xs 

Read more

现代 C++ 资源所有权与参数转发机制深度研究报告:std::move 与 std::forward 的理论架构、底层实现与工程实践

现代 C++ 资源所有权与参数转发机制深度研究报告:std::move 与 std::forward 的理论架构、底层实现与工程实践 在现代系统级程序设计领域,C++11 标准的发布标志着从传统内存管理向现代资源所有权模型(Ownership Model)的范式转移。这一转型的核心支柱在于移动语义(Move Semantics)与完美转发(Perfect Forwarding)的引入,而 std::move 与 std::forward 作为实现这两大特性的核心工具,其重要性不言而喻。尽管这两个实用程序在表面上看似简单,但其背后交织着复杂的模板元编程、值类别理论、引用折叠规则以及编译器优化策略。本报告旨在从底层机制、语言规范及工程实践等多个维度,对 std::move 与 std::forward 进行详尽的解构与综合分析。 现代 C++ 值类别体系的演进与逻辑重构 要深刻理解 std:

By Ne0inhk

C++高性能图像处理ximage类详解与实战

本文还有配套的精品资源,点击获取 简介:ximage类是C++中一款高效且灵活的图像处理工具,旨在简化图像的创建、读取、编辑与显示操作。支持BMP、JPEG、PNG等常见格式,提供丰富的功能接口,涵盖图像基本操作、颜色处理、几何变换、滤波增强、Alpha混合及绘图功能。本文深入解析ximage类的核心机制与使用方法,结合实际应用场景,帮助开发者掌握其在GUI开发、图像算法实现和交互式图形程序中的综合运用。 ximage:现代C++图像处理库的设计与实现 在嵌入式系统、边缘计算和实时视觉算法日益普及的今天,我们对图像处理工具的需求早已不再满足于“能用”——而是要求它 轻量、高效、安全且可扩展 。OpenCV功能强大但过于臃肿;CImg简洁却缺乏工业级健壮性;而STB系列虽极简,但在复杂项目中难以维护。于是,一个念头浮现:能否打造一款既保留C++底层控制力,又具备现代编程范式的图像类?这便是 ximage 的由来。 🧠 没错,这不是另一个轮子,而是一次重新思考:如何用 RAII + 移动语义

By Ne0inhk
从构造到操作:全面掌握 C++ std::vector 的接口使用

从构造到操作:全面掌握 C++ std::vector 的接口使用

一、vector的接口 vector是一个类模板,这也就意味着可以存储各种类型。vector底层是一个数组,一个顺序容器。 接下来就看看vector的接口。 1. 构造函数 //用n个val构造vector对象explicitvector(size_type n,const value_type& val =value_type(),const allocator_type& alloc =allocator_type());//用一段迭代器区间构造vector对象template<classInputIterator>vector(InputIterator first, InputIterator last,const allocator_type& alloc =allocator_type());//拷贝构造vector(const vector& x); 2. 赋值运算符重载

By Ne0inhk
C++之《程序员自我修养》读书总结(5)

C++之《程序员自我修养》读书总结(5)

《程序员自我修养》读书总结(五) Author: Once Day Date: 2026年2月12日 一位热衷于Linux学习和开发的菜鸟,试图谱写一场冒险之旅,也许终点只是一场白日梦… 漫漫长路,有人对你微笑过嘛… 全系列文章可参考专栏: 书籍阅读_Once-Day的博客-ZEEKLOG博客 参考文章:《程序员的自我修养》读书笔记 | Zachary’s blog《程序员的自我修养》阅读笔记 - T0fV404 - 博客园读书笔记:《程序员的自我修养》 - 楷哥 - 博客园 文章目录 * 《程序员自我修养》读书总结(五) * 5. Windows PE/COFF 格式 * 5.1 发展历史 * 5.2 mingw-w64 工具链 * 5.

By Ne0inhk