3D Gaussian Splatting:用于实时的辐射场渲染
Kerbl B, Kopanas G, Leimkühler T, et al. 3d gaussian splatting for real-time radiance field rendering[J]. ACM Transactions on Graphics (ToG), 2023, 42(4): 1-14.
3D Gaussian Splatting 是 Siggraph 2023 的 Best Paper,法国团队在会议上展示了其实现的最先进的场景渲染。该方法在训练时间和高质量的实时渲染之间实现了很好的权衡,在重建质量之高的情况下还能接入传统光栅化,优化速度也相当快。自从 3D Gaussian Splatting 横空出世,整个 NeRF 圈波涛汹涌,有望显著加速一系列 NeRF 类的工作 1。
3D Gaussian Splatting 和 NeRF 一样,所做的任务也是新视图的合成,但没有使用 ray tracing 的渲染方式,而是更偏向于光栅化的渲染。通过构建以协方差为主导的 3D Gaussian 点云,用 Splatting 的方式进行渲染,实现了高分辨率的实时渲染。

目录
- 一. 预备知识
- 1. 几何的隐式表达
- 2. 计算机中的几何表达
- 3. 3D Gaussian
- 4. 光栅化
- 5. Splatting
- 二. 研究背景
- 1. 3D Gaussian Splatting
- 2. 交叉优化
- 3. 快速可微光栅化
- 三. 3D Gaussian Splatting
- 四. 交叉优化
- 1. 参数优化
- 2. 自适应控制
- 五. 快速可微光栅化
- 六. 实验结果
- 1. 数据集
- 2. 对比实验
- 3. 实验细节
- 七. 总结
- 八. 复现
一. 预备知识
3D Gaussian Splatting 论文直接阅读会比较困难,本节参考 [NeRF坑浮沉记]3D Gaussian Splatting入门:如何表达几何,对需要用到的预备知识进行梳理。
更多参考资料如下:
- 公式推导:《3D Gaussian Splatting for Real-Time Radiance Field Rendering》3D高斯的理论理解;
- 源码解读:3D Gaussian Splatting源码解读、3D Gaussian Splatting cuda源码解读;
- 全文翻译:3D Gaussian Splatting for Real-Time Radiance Field Rendering 笔记;
- 文章总结:3D Gaussian Splatting笔记、论文简析:3D Gaussian Splatting !!!、Introduction to 3D Gaussian Splatting;
- 视频讲解:【论文讲解】用点云结合3D高斯构建辐射场,成为快速训练、实时渲染的新SOTA!、Gaussian Splatting: A 3D Rendering Technique;
- 实验指导:3D Gaussian Splats tutorial;
1. 几何的隐式表达
传统的几何显式表达使用点云、体素、网格等方式,可以沿着存储空间遍历场景中的所有元素。几何隐式表达则是使用函数或神经网络来表示几何信息,而不是使用显式的几何对象。在经典的隐式几何表达 —— NeRF 中,使用一个多层感知机作为几何的隐式表示方法,输入三维空间坐标和观测视角,就可以输出对应点的几何密度和颜色。渲染场景时把光线上的一系列采样点加权积起来,就可以渲染得到一个像素颜色。
从表达方式来看,几何的隐式表达可以分为体积类表达和表面类表达两种:
- 体积类表达:NeRF 属于体积类表达,通过几何密度决定采样点颜色的贡献度。
- 表面类表达:在表面类表达方式中,输入采样点,符号距离函数 SDF 输出空间中距离该点最近的表面的距离,正值表示表面外,负值表示表面内,表面类方法判定越靠近表面的采样点颜色贡献度越高。
2. 计算机中的几何表达
目前市面上大部分大型游戏在计算机中都是使用三角网格进行三维显式几何表达,能够借助 GPU 进行快速渲染。但三角网格由于三角形之间或三个顶点之间都是离散的,强行优化网格也只能是顶点粒度的,难免维度爆炸。
NeRF 系列方法大多使用光线追踪 (ray marching),速度自然没法和成熟的显式几何+光栅化比。而NeRF 在参数优化时一个参数变化对几何的优化可能是一大块也可能是一个小细节。
而 3D Gaussian 使用的椭球形表示可以作为小型可微空间进行优化,不同 Gaussian 之间则能够像三角网格一样并行光栅化渲染。可以看成是在可微和离散之间做了一个微妙平衡。其实早期的 3D 游戏也曾尝试过以椭球为基础元素进行建模 2:

3. 3D Gaussian
说到 3D Gaussian 3,第一反应是:
N μ x , σ x , μ y , σ y , μ z , σ z ( x , y , z ) = 1 ( 2 π ) 3 σ x σ y σ z exp ( − ( x − μ x ) 2 2 σ x 2 − ( y − μ y ) 2 2 σ y 2 − ( z − μ z ) 2 2 σ z 2 ) N_{\mu_x, \sigma_x, \mu_y, \sigma_y, \mu_z, \sigma_z}(x, y, z)=\frac{1}{(\sqrt{2 \pi})^3 \sigma_x \sigma_y \sigma_z} \exp \left(-\frac{\left(x-\mu_x\right)^2}{2 \sigma_x{ }^2}-\frac{\left(y-\mu_y\right)^2}{2 \sigma_y{ }^2}-\frac{\left(z-\mu_z\right)^2}{2 \sigma_z{ }^2}\right) Nμx,σx,μy,σy,μz,σz(x,y,z)=(2π)3σxσyσz1exp(−2σx2(x−μx)2−2σy2(y−μy)2−2σz2(z−μz)2)
但这其实是分量 x , y , z x, y, z x,y,z 互相独立的特例,此时的模型坐标系和世界坐标系平行。不过这种特例可以帮助理解 3D Gaussian:试想一个实心椭球,将它沿某一条轴切开后会得到一个椭圆,这个椭圆其实是无限大的,每一层的密度都不相同,这个切面就是二维高斯分布的等线图:


3D Gaussian 也叫三维高斯分布或三维正态分布,是统计学中一种特殊的多维正态分布,通常用来建模具有连续性随机性的现象,如图像处理、统计建模、机器学习等领域。3D Gaussian 能够涵盖空间中任意形状的椭球,包括平移、旋转。3D Gaussian 在三维空间中定义了一个概率分布,标准模型数学表示如下:
G s ( x ) = 1 ( 2 π ) 3 det ( Σ ) e x p ( − 1 2 ( x − μ ) T Σ − 1 ( x − μ ) ) G_s(x)=\frac{1}{(\sqrt{2 \pi})^3 \operatorname{det}(\Sigma)}exp \left( {-\frac{1}{2}(x-\mu)^T \Sigma^{-1}(x-\mu)} \right) Gs(x)=(2π)3det(Σ)1exp(−21(x−μ)TΣ−1(x−μ))
其中 x = [ a , b , c ] T x=[a, b, c]^T x=[a,b,c]T 是三维坐标向量; μ \mu μ 是椭球的中心,控制椭球的位置平移; Σ = [ σ a 2 Cov ( a , b ) Cov ( a , c ) Cov ( b , a ) σ b 2 Cov ( b , c ) Cov ( c , a ) Cov ( c , b ) σ c 2 ] \Sigma=\left[\begin{array}{ccc} \sigma_a^2 & \operatorname{Cov}(a, b) & \operatorname{Cov}(a, c) \\ \operatorname{Cov}(b, a) & \sigma_b^2 & \operatorname{Cov}(b, c) \\ \operatorname{Cov}(c, a) & \operatorname{Cov}(c, b) & \sigma_c^2 \end{array}\right] Σ= σa2Cov(b,a)Cov(c,a)Cov(a,b)σb2Cov(c,b)Cov(a,c)Cov(b,c)σc2 是协方差矩阵,控制椭球在三维方向的伸缩和旋转。
论文中的 3D Gaussian 表示去掉了指数部分前面的尺度系数(因为系数不影响椭球的几何形状)和均值(因为每个点云有自己的位置 p p p ),方便旋转放缩。于是 3D Gaussian 表示如下:
G ( x ) = e x p ( − 1 2 x T Σ − 1 x ) G(x)=exp \left({-\frac{1}{2}x^T \Sigma^{-1}x} \right) G(x)=exp(−21xTΣ−1x)
因此只要确定了 Σ \Sigma Σ 就可以确定一个椭球的形状。但需要注意的是,三维高斯分布的协方差矩阵 Σ \Sigma Σ 必须是半正定的才有数学意义。论文中使用的是各向异性 Σ \Sigma Σ,即在不同方向上具有不同方差值。各向异性协方差更有利于优化,因为它能够适应不同方向的变化,具有更精确的建模、更好的参数优化和更紧凑的表示。
4. 光栅化
在介绍 Splatting 之前需要先介绍一下 光栅化 (Rasterization) :光栅化是将图形或图像的矢量数据转换为像素数据,从而能够在计算机屏幕上显示的过程。通过将图形转换为像素级别,计算机可以更容易地处理和显示图形,同时确保图像在屏幕上以高速率绘制。
光栅化时,先将三角网格映射到二维平面,然后使用采样函数获取三角形内的像素情况 4,再根据走样情况(如锯齿 Jaggies、摩尔纹 Moire Patterns、车轮效应 Wagon Wheel Illusion 等)进行反走样 5,最后使用顶点片元着色 6 或其他方法进行像素点着色 7。
光栅化是实现计算机屏幕上图形显示和渲染的关键步骤,能够以非常高的速度生成图像,适用于实时渲染,例如视频游戏和模拟器。
5. Splatting
Splatting 是一种用于光栅化 3D 对象(如前文讨论的椭球)的技术。这些 3D 对象被映射到投影平面后得到的 2D 图形称为 splat,类似于一个点、圆、矩形或其他形状,就像雪球打在墙上留下的印记,能量从中心向外扩散并减弱。这个过程可以在 GPU 上并行处理,因为每个 Splat 之间是独立的。
Splatting 可以将三维空间中的点投影到二维图像平面上,这些投影的数据点以某种方式在图像上产生视觉效果,从而呈现在最终的渲染图像中。Splatting 通常并不是由传统的图形硬件管线 8 自动执行,而是需要相对复杂的 GPU 编程,通常由图形开发者在需要时自行实现。
二. 研究背景
- 传统的三维场景表示方法需要使用网格或点云进行三维重建,近几年出现的 NeRF 可以直接进行场景的视图合成。
- 但 NeRF 想要生成高质量的视图需要需要花大量的时间进行训练和渲染,因此在实际应用中需要对质量和速度进行权衡。并且目前还没有方法能够达到实时显示的效果。
- 文章提出了一种新方法—— 3D Gaussian Splatting,同时保证了图像的质量和渲染的速度:3D Gaussian 模型能够表示先进的 (state-of-the-art, SOTA) 视觉质量和高效的训练速度,Splatting 技术能够确保高分辨率的实时渲染。
整个模型的输入是 SfM 点云表示的一组静态场景的照片和相应机位,使用点云初始化一组 3D Gaussian 模型。 3D Gaussians 能够合理紧凑地表示三维场景,颜色由球谐系数 SH 表示。 通过交叉优化 3D Gaussian 模型参数和自适应控制得到场景表示。本文方法高效的关键在于 3D Gaussian 的光栅化,通过各向异性的 Splatting 和 α \alpha α-blending 技术,能够快速合成渲染图像。

1. 3D Gaussian Splatting
引入 3D Gaussian 来表示场景,将其初始化为摄像机标定产生的 SfM 稀疏 点云。这样既能保持辐射场的理想特性以便优化,又能避免在空白空间中进行不必要的计算。

3D Gaussian 的 光栅化 (rasterization) 过程如下:先使用 Splatting 技术将 3D Gaussian 投影到 2D 图像,然后使用标准的 α \alpha α-blending 技术快速合成渲染图像。这意味着 3D Gaussian 的三维场景表示可以转换为二维图像,以供渲染和可视化。
α \alpha α-blending:一种用于合成两幅或多幅图像以获得混合效果的图像处理技术。在 α \alpha α-blending 中,每幅图像都被赋予一个权重参数 α \alpha α ( 0 ≤ α ≤ 1 ) (0 \leq \alpha \leq 1) (0≤α≤1),表示每幅图像在最终合成中的贡献程度,0 表示完全使用第一幅图像,1 表示完全使用第二幅图像,而在 0 到 1 之间的中间值则表示混合两幅图像。
α \alpha α-blending 可以用于各种图像处理任务,包括图像叠加、过渡效果、颜色校正等,以实现图像的合成与编辑。一个典型应用就是创建图像淡入淡出效果,其中一个图像逐渐淡出,同时另一个图像逐渐淡入,通过调整 𝛼 参数的值来实现平滑过渡。𝛼-blending 也可以用于将两个图像合成成一个,以产生具有新特性的图像,如合成景深效果、融合不同光照条件下的图像等。
2. 交叉优化
交叉优化 (interleaved optimization) 3D Gaussian 的属性和 Gaussians 的自适应 密度控制 (density control),尤其是优化 各向异性协方差 (anisotropic covariance),以实现场景的精确表示。
可以优化的 3D Gaussian 点云属性包括:三维位置 p p p、透明度 α \alpha α(其实就是 α \alpha α-blending 中的权重参数)、各向异性协方差 Σ \Sigma Σ、球谐系数 SH (spherical harmonic coefficients) 等。
3. 快速可微光栅化
使用 GPU 进行快速、可微的渲染,支持各向异性 Splatting 和快速反向传播。因此能够加速训练和实时渲染。
三. 3D Gaussian Splatting
鉴于 3D Gaussian 可微、便于投影到二维 splats、显示地支持快速渲染等优点,用其作为场景表示。使用一个三维的满协方差矩阵初始化 3D Gaussian:
G ( x ) = e x p ( − 1 2 x T Σ − 1 x ) G(x)=exp \left({-\frac{1}{2}x^T \Sigma^{-1}x} \right) G(x)=exp(−21xTΣ−1x)
光栅化时需要将三维场景变换到二维空间,作者希望 3D Gaussian 在变换中保持分布(不然光栅完和高斯没关系的话一直以来的努力都白费了),这难免需要更多限制。View 变换 W W W 主要是旋转和平移,都是 仿射 (affine) 的 9,不会有问题;但 Project 变换不是仿射的,于是文中用 J J J 矩阵变换替代 Project 变换, J J J 是 Project 变换的仿射近似。于是得到摄像机坐标下的协方差矩阵 Σ ′ \Sigma^{\prime} Σ′:
Σ ′ = J W Σ W T J T \Sigma^{\prime}=J W \Sigma W^T J^T Σ′=JWΣWTJT
但 Σ \Sigma Σ 不能直接优化,因为 Σ \Sigma Σ 必须是 半正定 (semi-definite) 的 3D Gaussian 才有意义。于是文中将 Σ \Sigma Σ 表示为球变换到椭球的过程:将球按轴向先放缩 S S S 再旋转 R R R(注意顺序,是先放缩再旋转,椭球的对称轴一直是模型空间的 xyz 轴,互相垂直,详见视频讲解 17:15)。因此 Σ \Sigma Σ 初始化如下:
Σ = R S S T R T \Sigma=R S S^T R^T Σ=RSSTRT
于是在训练过程中使用梯度下降对参数 Σ \Sigma Σ 进行优化时需要继续将梯度传递到 S S S 和 R R R 进行优化。
如前文所述,各向异性协方差更适合优化:能够优化 3D Gaussian 以适应场景中不同形状的几何形状,从而产生一个紧凑的表示。如下图所示,将 3D Gaussian 渲染的图像缩小 60% 后细节仍然清晰可见,说明其对复杂细节较强的拟合能力:

四. 交叉优化
本文的核心是对 3D Gaussian 的优化,优化的目的是创建一组密集的 3D Gaussian 以精确地表示场景。优化的参数包括:三维位置 p p p、透明度 α \alpha α、各向异性协方差 Σ \Sigma Σ 和球谐系数 SH (spherical harmonic coefficients) 。这些 ⌈ \lceil ⌈参数的优化 ⌋ \rfloor ⌋ 和 ⌈ \lceil ⌈自适应控制高斯模型 ⌋ \rfloor ⌋ 交替进行。

1. 参数优化
由于 3D 投影到 2D 的模糊性,渲染图像中的几何体可能会被放错位置。因此,优化过程中需要能够创建几何体,并且在错误位置处销毁或移动几何体。
参数优化使用 SGD 连续迭代完成,每一轮迭代时都会渲染图像并将其与真实的训练视图做比较。 α \alpha α 使用 Sigmoid 激活函数来限制 (0, 1) 的范围; Σ \Sigma Σ 使用指数激活函数激活; p p p 使用指数衰减调度技术 (exponential decay scheduling technique) 进行优化。模型的损失函数是 L1 与 D-SSIM 项的组合:
L = ( 1 − λ ) L 1 + λ L D − S S I M \mathcal{L}=(1-\lambda) \mathcal{L}_1+\lambda \mathcal{L}_{\mathrm{D}-\mathrm{SSIM}} L=(1−λ)L1+λLD−SSIM
2. 自适应控制
在 3D Gaussian Splatting 中,场景表示是通过多个高斯模型叠加而成的。在早期迭代次数较少时,会出现 重建不足 (under-reconstruction) 的问题,即高斯模型没有完全覆盖小规模的几何体,此时需要复制高斯模型进行覆盖;在后期迭代次数较多时,会出现 重建过度 (over-reconstruction) 的问题,即高斯模型超出小规模几何体的范围,此时需要将该高斯模型一分为二。这就是自适应控制 Gaussians:

从初始化 Gaussians 为稀疏的 SfM 点云开始,通过 自适应地控制高斯模型的数量和它们在单位体积上的密度,逐渐从稀疏的高斯模型集合过渡到更密集且能够更好地表示场景的集合。该过程主要关注 under-reconstruction 和 over-reconstruction 的区域,即具有较大的视图空间位置梯度的区域。直观理解来看,是因为这些区域尚未完全重建好,因此优化算法试图移动高斯函数以进行修正。under-reconstruction 和 over-reconstruction 的区别是 over-reconstruction 区域的 Gaussian 方差大,因为数据的变化幅度较大。对于视图空间的位置梯度大于阈值 𝜏pos 的区域,需要对该高斯模型进行 稠密化 (densify) 操作:
- under-reconstruction 区域:高斯模型没有完全覆盖小规模的几何体,此时需要复制高斯模型并将其沿位置梯度方向移动,以覆盖几何体。
- over-reconstruction 区域:高斯模型超出小规模几何体的范围,此时需要将该拆分高斯模型只覆盖几何体。
然而,这种体积表示法在优化过程中可能会因为相机附近的漂浮物而陷入困境,从而导致高斯密度不合理的增加。一个有效的调节方法是每 3000 次迭代就将 α \alpha α 值设为接近零,然后再根据上述优化过程逐渐提高 α \alpha α 值。此外,每 100 次迭代就剔除透明的高斯分布(即 α \alpha α 小于阈值 ϵ α \epsilon_{\alpha} ϵα)以限制高斯模型的总数量。
五. 快速可微光栅化
直接 Splatting 显然没法实现高帧率的渲染效果,下面介绍文中是如何进行光栅化的。Gaussians 快速可微光栅化是为了快速实现整体渲染和排序,从而实现近似 α \alpha α-blending 并且不再限制能够接收梯度的 splats 的数量。为了达到目的,对 Gaussian splats 进行分块 (tile) 处理,将该光栅化过程命名为 基于分块的光栅化 (tile-based rasterization)。
-
首先将 2D 屏幕分割成 16×16 个 tile,然后为每个 tile 筛选视锥体 (view frustum) 内的 3D Gaussian:
- 每个视锥体内只保留置信度大于 99% 的高斯模型;
- 设置一个保护带 (guard band) 剔除位于极端位置的高斯模型,如均值接近近平面或在视锥体之外;
-
根据每个 Gaussian 重叠的 tile 数量来实例化,为其分配 key 值(key 值结合了该 Gaussian 所在 tile 的 ID 和对应视域的深度);
-
使用 GPU Radix sort 根据 key 值对 Gaussians 进行排序(其实就是按高斯模型到图像平面的深度值);
传统光栅化渲染管线只能逐像素进行,将三角网格分解为像素,并经过颜色插值、深度测试等一系列的像素处理步骤,最终将渲染结果呈现在屏幕上。
-
将排好序的 Gaussians 从近到远向对应 tile 上做 Splatting。然后在每个 tile 上对高斯模型留下的 splat 做堆叠(类似 α \alpha α-blending,累积 α \alpha α 和 c \bold c c),直到所有像素的不透明度都饱和( α \alpha α=1);
为每个 tile 都单独开了一个线程快,因此每个 tile 上的光栅化过程可以并行执行。图像中某一个像素不透明度达到饱和后,线程块就停止对该像素的处理。
-
优化参数时,按每个 tile 堆叠的 splat 对应的 Gaussians 的顺序反向传播;
六. 实验结果
1. 数据集
实验中使用了 13 个真实场景,来自以下数据集:
- NeRF-Synthetic dataset:Mildenhall 等人在论文《Nerf: Representing scenes as neural radiance fields for view synthesis》中采样得到的数据集;
- Mip-Nerf360 dataset:Barron 等人在论文《Mip-NeRF 360: Unbounded Anti-Aliased Neural Radiance Fields》中采样得到的数据集;
- Tanks&Temples dataset: Knapitsch 等人在论文《Tanks and temples: Benchmarking large-scale scene reconstruction》中采样得到的数据集;
- Deep Blending dataset:Hedman 等人在论文《Deep blending for free-viewpoint image-based rendering》中采样得到的数据集;
2. 对比实验
文中使用 PSNR、L-PIPS、SSIM 作为模型的评价指标,将 3D Gaussian Splatting 和 Mip-Nerf360、InstantNGP、Plenoxels 做了对比。定量结果见下表:

定性结果如图:

3. 实验细节
图像质量随迭代轮次逐渐提高,背景中伪影逐渐减少:

不同细节处理对应 PSNR 指标:

初始化 SfM 点云和随机初始化的效果对比:

自适应控制 Gaussians 的 densification 操作效果对比:

各向同性和各向异性 Gaussian 效果对比:

七. 总结
3D Gaussian Splatting 是一种用于实时渲染的光栅化技术,同 NeRF 一样,可以对从小图像样本集中学习到的逼真场景进行极其快速的渲染。但 3D Gaussian Splatting 本质与 NeRF 还是有比较大的区别,前者更偏向于光栅化的渲染,后者则有点类似于 ray tracing 的渲染方式。
3D Gaussian Splatting 无疑是继 InstantNGP 后,一种更高效的显 - 隐式相结合的 3D 空间表达方式。它的优势在于可以提供类似于点云的可存储的显式表达,对于各种设备更加友好。并且光栅化的渲染方式不需要光线追踪、路径追踪、Diffusion 等技术,就可以直接将模型信息转换为图像,相较于 ray tracing 的渲染方式也更加快。
但 3D Gaussian Splatting 也存在一些缺点:视角不足区域和反光区域容易出现伪影、未使用正则化、数百万个高斯需要几十个 G 的显存。
八. 复现
3D Gaussian Splatting 使用 Pytorch 框架,并自定义 CUDA 核用于光栅化,以及使用 NVIDIA CUB 排序例程进行快速基数排序。
- 平台:AutoDL
- 显卡:RTX A5000 24G
- 镜像:PyTorch 2.0.0、Python 3.8(ubuntu20.04)、Cuda 11.8
- 源码:https://github.com/graphdeco-inria/gaussian-splatting
实验记录:
- 克隆仓库时,因为使用了
--recursive选项递归处理目录,因此费时较长,耐心等待即可; - 执行
environment.yml脚本创建完虚拟环境后,使用conda activate指令无法激活环境。改为source activate即可; - 如果想要训练时呈现交互式可视化效果,需要执行 Interactive Viewers 下 SIBR 相关配置,略过;
- 训练完成后,output 文件夹下会生成
.ply文件,使用 打开即可查看渲染效果;
实验结果:
实验证明,3D Gaussian Splatting 确实又快又准。经过十几分钟 3w 轮迭代,生成

Siggraph 2023 有什么值得关注的论文 ? ↩︎
怪异魔幻!人类早期3D恐怖开放世界游戏是啥样子? ↩︎
多元高斯分布完全解析 ↩︎
计算机图形学基础2——光栅化 ↩︎
Games101计算机图形学入门基础之二:光栅化 ↩︎
光栅化过程 (顶点片元着色) ↩︎
GAMES101现代计算机图形学入门——光栅化成像之着色 ↩︎
RTR4 第二章图形渲染管线 ↩︎
【射影几何08】仿射映射 ↩︎
相关文章:
3D Gaussian Splatting:用于实时的辐射场渲染
Kerbl B, Kopanas G, Leimkhler T, et al. 3d gaussian splatting for real-time radiance field rendering[J]. ACM Transactions on Graphics (ToG), 2023, 42(4): 1-14. 3D Gaussian Splatting 是 Siggraph 2023 的 Best Paper,法国团队在会议上展示了其实现的最…...
【nlp】文本处理的基本方法
文本处理的基本方法 1 什么是分词2 什么是命名实体识别3 什么是词性标准1 什么是分词 分词就是将连续的字序列按照一定的规范重新组合成词序列的过程。在英文的行文中,单词之间是以空格作为自然分界符的,而中文只是字、句和段能通过明显的分界符来简单划界,唯独词没有一个形…...
C++17 std::filesystem
std::filesystem 是 C17 标准引入的文件系统库,提供了一套用于处理文件和目录的 API。它主要包括以下几个核心类: std::filesystem::path:用于表示文件系统路径。它提供了一系列方法,允许你对路径进行各种操作,如拼接…...
JVM在线分析-解决问题的工具一(jinfo,jmap,jstack)
1. jinfo (base) PS C:\Users\zishi\Desktop> jinfo Usage:jinfo <option> <pid>(to connect to a running process)where <option> is one of:-flag <name> to print the value of the named VM flag #输出对应名称的参数-flag [|-]<n…...
[深度学习]不平衡样本的loss
不平衡样本的loss ”softmax“、”weighted softmax“、”focal“、”class-balanced“ 和 ”balanced softmax“ 都是用于多类分类任务的损失函数。它们之间的区别在于如何处理类别不均衡的问题。 Softmax 是常用的多类分类损失函数。它将输出分布转换为概率分布,…...
【MySQL】表的增删改查(强化)
作者主页:paper jie_博客 本文作者:大家好,我是paper jie,感谢你阅读本文,欢迎一建三连哦。 本文录入于《MySQL》专栏,本专栏是针对于大学生,编程小白精心打造的。笔者用重金(时间和精力)打造&a…...
MyBatis-Plus--在xml中使用wrapper的方法
原文网址:MyBatis-Plus--在xml中使用wrapper的方法_IT利刃出鞘的博客-CSDN博客 简介 本文介绍MyBatis-Plus如何在xml中使用wrapper。 Service QueryWrapper<T> wrapper new QueryWrapper<T>(); wrapper.eq("r.room_id", vo.getRoomId())…...
Oracle RAC是啥?
Oracle RAC,全称是Oracle Real Application Cluster,翻译过来为Oracle真正的应用集群,它是Oracle提供的一个并行集群系统,由 Oracle Clusterware(集群就绪软件) 和 Real Application Cluster(RA…...
springboot中定时任务cron不生效,fixedRate指定间隔失效,只执行一次的问题
在调试计算任务的时候,手动重置任务为初始状态,但是并没有重新开始计算,检查定时任务代码: 从Scheduled(fixedRate 120000)可以看到,应该是间隔120秒执行一次该定时任务,查看后台日志,并没有重…...
苹果手机发热发烫是什么原因?看完这篇你就知道了!
苹果手机以其卓越的用户体验和优秀的性能得到了广大用户的喜爱和追捧。在日常使用苹果手机时,我们可能会遇到手机发热发烫的情况。那么,苹果手机发热发烫是什么原因呢?小编将为大家解析这一问题的原因,并为您提供相应的解决方案&a…...
民安智库(第三方满意度调研公司):助力健身房提升客户满意度的秘密武器
在当今的健身行业,客户满意度已经成为衡量健身房竞争力的关键因素。为了准确了解客户的需求和反馈,某健身房委托民安智库对其进行客户满意度调查。 本次调查的主要目的是了解客户对健身房的满意度,包括对设施、课程、教练和服务的评价。调查…...
2011年09月01日 Go生态洞察:Go语言词法扫描与App Engine演示
🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…...
pytorch搭建squeezenet网络的整套工程(升级版)
上一篇当中,使用pytorch搭建了一个squeezenet,效果还行。但是偶然间发现了一个稍微改动的版本,拿来测试一下发现效果会更好,大概网络结构还是没有变,还是如下的第二个版本: 具体看网络结构代码:…...
222. 完全二叉树的节点个数
题目链接:222. 完全二叉树的节点个数 需复刷 全代码: class Solution { public:int getnums(TreeNode* Node){if(Node NULL){return 0;}int leftnums getnums(Node ->left);int rightnums getnums(Node ->right);int cns 1 leftnums righ…...
adb and 软件架构笔记
Native Service,这是Android系统里的一种特色,就是通过C或是C代码写出来的,供Java进行远程调用的Remote Service,因为C/C代码生成的是Native代码(机器代码),于是叫Native Service。 native服务…...
算术运算符、自增自减运算符、赋值运算符、关系运算符、逻辑运算符、三元运算符
1.算术运算符 public class OperatorDemo1 {public static void main(String[] args) {int a 10;int b 2;System.out.println(a b);System.out.println(a - b);System.out.println(a * b);System.out.println(a / b);System.out.println(5 / 2);System.out.println(5.0 / 2);…...
k8s 配置资源管理
配置资源管理 //Secret Secret 是用来保存密码、token、密钥等敏感数据的 k8s 资源,这类数据虽然也可以存放在 Pod 或者镜像中,但是放在 Secret 中是为了更方便的控制如何使用数据,并减少暴露的风险。 有三种类型: ●kubernetes.…...
expo + react native项目隐藏状态栏踩坑
我的app.tsx文件内容如下: import MainPage from "./screens/Main/index";export default function App() {return (<MainPage />); }需求:当屏幕方向旋转90度后,状态栏所在位置是处于顶部安全区域所在位置。需要忽略顶部安…...
若依:用sqlite3随便掰饬掰饬
“若依”这个开源项目,感觉是外包公司标配了啊,都在用。从README感觉像是某位阿里员工的工作之余的小整理。对于SprintBoot,个人感觉太重型,不过人家生态起来了,不是那么容易玩完。但是随着VMware被博通收购࿰…...
刚安装的MySQL使用Navicat操作数据库遇到的问题
刚安装的MySQL使用Navicat操作数据库遇到的问题 一、编辑连接保存报错二、打开数据表很慢三、MySQL的进程出现大量“sleep”状态的进程四、执行sql脚本报错,部分表导不进去五、当前MySQL配置文件 一、编辑连接保存报错 连接上了数据库,编辑连接保存报错…...
TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
day52 ResNet18 CBAM
在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...
Oracle查询表空间大小
1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...
ElasticSearch搜索引擎之倒排索引及其底层算法
文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...
前端开发面试题总结-JavaScript篇(一)
文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包(Closure)?闭包有什么应用场景和潜在问题?2.解释 JavaScript 的作用域链(Scope Chain) 二、原型与继承3.原型链是什么?如何实现继承&a…...
华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建
华为云FlexusDeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色,华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型,能助力我们轻松驾驭 DeepSeek-V3/R1,本文中将分享如何…...
如何在网页里填写 PDF 表格?
有时候,你可能希望用户能在你的网站上填写 PDF 表单。然而,这件事并不简单,因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件,但原生并不支持编辑或填写它们。更糟的是,如果你想收集表单数据ÿ…...
RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill
视觉语言模型(Vision-Language Models, VLMs),为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展,机器人仍难以胜任复杂的长时程任务(如家具装配),主要受限于人…...
【Elasticsearch】Elasticsearch 在大数据生态圈的地位 实践经验
Elasticsearch 在大数据生态圈的地位 & 实践经验 1.Elasticsearch 的优势1.1 Elasticsearch 解决的核心问题1.1.1 传统方案的短板1.1.2 Elasticsearch 的解决方案 1.2 与大数据组件的对比优势1.3 关键优势技术支撑1.4 Elasticsearch 的竞品1.4.1 全文搜索领域1.4.2 日志分析…...
6.计算机网络核心知识点精要手册
计算机网络核心知识点精要手册 1.协议基础篇 网络协议三要素 语法:数据与控制信息的结构或格式,如同语言中的语法规则语义:控制信息的具体含义和响应方式,规定通信双方"说什么"同步:事件执行的顺序与时序…...
