稀疏卷积

稀疏卷积 TLDR 💡 通过对输入输出不为空的数据建立位置哈希表和RuleBook,只对有效数据计算卷积,从而减少计算量! Rulebook 储了稀疏卷积过程中需要计算的位置和操作,但是这个过程是高度可并行化的,因此可以有效地利用GPU来加速。 普通卷积 卷积的实际流程 反卷积的实际流程 矩阵是如何存储的? 这个矩阵的作用是将原始输入张量中每个像素的特征向量投影到输出通道的特征向量上。可以把它想象成一个坐标变换的过程,将一个3维数据投影到128维空间。 矩阵是如何优化的? 对单个像素的优化: 一次卷积的完整流程 稀疏卷积 普通卷积的推广 $$ \mathrm{x_u=\sum W_{i}x_{i+u}}:for: u\in\mathbb{C}^{out} $$ 其中 i 属于 N,代表卷积核的像素位置相对于当前处理的像素 (u) 的偏移量。 具体来说,稀疏卷积使用一个被称为“Rulebook”的结构来安排所有原子操作(例如卷积核对应位置的计算)。这个 Rulebook 是一组规则,定义了输入特征的哪些位置需要和卷积核进行计算。 坐标散列(coordinate hashing) 要解决的问题 当稀疏3D点云在大部分空间中是空的,如何在下采样后恢复到原始分辨率是一个很具挑战性的任务。坐标散列将不同层次之间的坐标映射起来,以便在卷积和反卷积操作中有效地追溯和恢复这些点的位置。 原理 本质上是一种记录和查询机制,可以将高维空间中的稀疏数据映射到一个紧凑的、易于管理的格式中。通过这个机制,每个点的空间信息都能在不同的层次结构中进行高效的映射和还原,从而使得在下采样和上采样(反卷积)操作之后,数据能够准确恢复到它们原来的空间位置。 不同层的映射是分层链接的。 参考文献 How does sparse convolution work? Sparse Convolution explained with code

June 4, 2024 · 1 min · Huijie Liu

相机的外参和内参

相机的外参和内参 TLDR 💡 **外参矩阵:**将点从世界坐标系转换到相机坐标系。 **内参矩阵:**将点从相机坐标系转换到像素坐标系。 关键概念 相机是用于捕捉图像的传感器,它们将世界中的点投影到我们看到的2D平面上。 这种变换通常分为两个部分:外部参数和内部参数。相机的外部参数取决于其位置和方向。相机的内部参数则取决于它如何捕捉图像(焦距、光圈、视场、分辨率)。 坐标系 在成像过程中,主要使用三种坐标系: 世界坐标系(3D):这是一个固定的全局坐标系,用于描述场景中物体的绝对位置。 相机坐标系(3D):这是以相机为中心的坐标系,用于描述相对于相机的物体位置。 图像坐标系(2D):这是投影到2D图像平面上的坐标系,用于描述图像上像素的位置。 像素坐标系(2D):这是具体到图像像素的坐标系,通常以图像左上角为原点。 外部参数 外部参数包括旋转矩阵 $R$ 和平移向量 $t$ ,它们描述了世界坐标系到相机坐标系的变换。具体来说,给定一个世界坐标系中的点 $P_w$ ,通过外部参数变换可以得到相机坐标系中的点 $P_c$ : $P_c = R \cdot P_w + t$ 其中 $R$ $$ 是一个 $3 \times 3$ 的旋转矩阵, $t$ 是一个 $3 \times 1$ 的平移向量。 内部参数 内部参数描述了相机的成像特性,主要包括焦距 $f$ 、主点 $(c_x, c_y)$ 、像素尺寸等。内部参数矩阵 $K$ 可以表示为: $K = \begin{pmatrix} f_x & 0 & c_x \ 0 & f_y & c_y \ 0 & 0 & 1 \end{pmatrix}$ ...

June 3, 2024 · 1 min · Huijie Liu

3DGS Tutorial

3DGS 基本思想 3D高斯分布可以通过它们的各向异性协方差矩阵、位置和透明度等参数来有效地表示复杂场景。由于这些参数是通过机器学习方法进行训练的,渲染阶段无需进行大量处理。因此,它可以利用基于瓦片的光栅化器实现快速渲染,从而在性能上有显著的提升。 创新点 Point-Based Rendering:点基渲染直接将三维空间中的点渲染为图像。 Tiled Rasterization:分块光栅化的基本思想是将屏幕划分为多个小块(Tiles),然后在每个小块内进行相关计算和处理(可微分)。这种方法能够显著减少内存流量,从而提高渲染效率。 Spherical Harmonics:球谐函数是一种在球面上表示函数的方法,特别适用于描述球形表面的光照和阴影效果。 基本流程 收集数据 图像 视频->ffmpeg截取视频帧 ffmpeg -i <VIDEO_PATH> -qscale:v 1 -qmin 1 -vf fps=2 %04d.jpg 输出如下 📦 $FOLDER_PATH ┣ 📂 input ┃ ┣ 📜 000000.jpg ┃ ┣ 📜 000001.jpg ┃ ┣ 📜 ... 获取相机位姿 COLMAP:开源Structure-from-Motion (SfM) 软件,输入images,输出相机位姿 原论文使用的是自带的convert.py,自动调用COLMAP并转换成需要的格式 桌面软件:RealityCapture, Metashape 移动app:Polycam, Record3D(利用了雷达) 输出如下: 📦 $FOLDER_PATH ┣ 📂 (input) ┣ 📂 (distorted) ┣ 📂 images ┣ 📂 sparse ┃ ┣ 📂 0 ┃ ┃ ┣ 📜 points3D.bin ┃ ┃ ┣ 📜 images.bin ┃ ┃ ┗ 📜 cameras.bin 训练 ...

May 23, 2024 · 10 min · Huijie Liu

正向代理与反向代理

正向代理、反向代理与SSH端口转发 代理类型 正向代理 (Forward Proxy) 工作方式: 客户端 主动配置 代理服务器地址。客户端的请求先发送给代理,代理再转发给目标服务器。 目的: 主要为了 访问 客户端原本无法直接访问的资源(如突破网络限制),或隐藏客户端身份。客户端清楚代理的存在。 反向代理 (Reverse Proxy) 工作方式: 客户端 直接访问 代理服务器(以为它就是目标服务器),无需配置。代理服务器将请求转发给后端的真实服务器。 目的: 主要为了 保护和管理 后端服务器,如实现负载均衡、安全防护(隐藏真实IP)、SSL卸载等。客户端不感知真实服务器的存在。 透明代理 (Transparent Proxy) 工作方式: 在网络层(如网关)自动拦截并处理流量,客户端无需任何配置 且通常不感知其存在。 目的: 常用于网络内容过滤、访问控制或强制执行网络策略。 SSH 端口转发 (SSH Tunneling) 利用 SSH 安全连接创建端口转发通道,实现类似代理的功能。命令通常在 SSH 客户端机器上执行。 本地转发 (-L) 命令: ssh -L <本地端口>:<目标主机>:<目标端口> <SSH服务器> 作用: 将发往 本机指定端口 的请求,通过 <SSH服务器> 转发到 <目标主机> 的 <目标端口>。 场景: 从本地访问远程网络(SSH服务器可访问的网络)中的服务。 远程转发 (-R) 命令: ssh -R <远程端口>:<目标主机>:<目标端口> <SSH服务器> 作用: 将发往 <SSH服务器> 上指定 <远程端口> 的请求,通过 SSH 隧道转发回 执行 ssh -R 命令的机器 可访问的 <目标主机> 的 <目标端口>(<目标主机> 常为 127.0.0.1,指执行命令的机器自身)。 场景: 将本地网络的服务暴露给远程网络访问。 动态转发 (-D) ...

March 27, 2024 · 1 min · Huijie Liu