当前位置: 首页 > news >正文

【CameraPoseRefinement】以BARF为例介绍三维重建中的位姿优化

文章目录

  • Introduction
  • Approach
    • Planar Image Alignment(2D)
    • Neural Radiance Fields (3D)
    • Bundle-Adjusting Neural Radiance Fields
  • Experiment
    • 平面图像对齐的定性实验
    • 合成场景上的定量实验


Introduction

在计算机视觉三维重建中,求解3D场景的表示和定位给定的相机帧的相机位姿是两个非常重要的任务,这两个问题互为依赖,一方面,恢复3D场景的表示需要使用已知的相机位姿进行观察;另一方面,定位相机需要来自特征点的可靠对应。

错误的相机位姿会对重建的输出和性能产生一系列负面影响,包括:

  1. 图像合成质量下降

    • 当相机位姿不准确时,生成的视角合成图像可能会出现明显的畸变或模糊,导致最终图像的质量较差。
  2. 三维场景表示不准确

    • 错误的位姿会导致三维场景中的几何结构和深度信息的错误重建,使得模型无法正确理解场景的空间布局。
  3. 影像重叠和视差问题

    • 不准确的位姿可能会造成图像重叠区域的视差不一致,进而导致合成图像中的物体位置、大小等出现明显的不自然或错位现象。
  4. 优化过程的困难

    • 由于相机位姿的误差,优化算法(如Adam)可能会在优化过程中陷入局部最优解,无法收敛到正确的场景表示和相机位置。
  5. 训练效率降低

    • 不准确的相机位姿会使得训练过程变得更加复杂,模型需要更多的迭代才能调整出合理的场景表示,从而延长训练时间。
  6. 潜在的视觉伪影

    • 由于误差,合成图像可能出现视觉伪影(artifacts),如不连贯的阴影、错误的光照等,使得生成的图像看起来不真实。

红框是伪影,蓝框是错位。

在《3D Gaussian Splatting for Real-Time Radiance Field Rendering》发布后,很多重建方法都尝试在3D表征上进行创新,它们普遍使用预输入的相机位姿进行重建,而不同时考虑相机位姿的校准,这些预输入的相机位姿通常是由colmap软件估计得到的。此次介绍的两篇文章《BARF》和《HGSLoc》在进行场景重建的同时进行相机位姿的优化,它们使用一些来自不同视角的图像和这些图像的粗略位姿作为输入,并且在相机位姿优化的方法上做出了改进。

Approach

Planar Image Alignment(2D)

首先,BARF考虑2D的平面图像对齐问题。

设 x ∈ R 2 为像素坐标系下的一个坐标, W : R 2 → R 2 是与相机参数 p 有关的几何变换, I : R 2 → R 3 是我们的图像生成过程(图像的 3 个通道,所以是 R 2 → R 3 ), \begin{array}{c} 设\mathbf{x} \in \mathbb{R}^2为像素坐标系下的一个坐标, \mathcal{W}: \mathbb{R}^2 \rightarrow \mathbb{R}^2 是与相机参数\mathbf{p}有关的几何变换,\\ \mathcal{I}: \mathbb{R}^2 \rightarrow \mathbb{R}^3是我们的图像生成过程(图像的3个通道,所以是\mathbb{R}^2 \rightarrow \mathbb{R}^3), \end{array} xR2为像素坐标系下的一个坐标,W:R2R2是与相机参数p有关的几何变换,I:R2R3是我们的图像生成过程(图像的3个通道,所以是R2R3),

我们的目标是使得生成的图片与原图片尽可能地相似,这个联合优化的目标用最小二乘来表达,就是:

min ⁡ p ∑ x ∥ I 1 ( W ( x ; p ) ) − I 2 ( x ) ∥ 2 2 \min _{\mathbf{p}} \sum_{\mathbf{x}}\left\|\mathcal{I}_{1}(\mathcal{W}(\mathbf{x} ; \mathbf{p}))-\mathcal{I}_{2}(\mathbf{x})\right\|_{2}^{2} pminxI1(W(x;p))I2(x)22

相机参数的维度可以记作

p ∈ R P \mathbf{p} \in \mathbb{R}^P pRP

这个最小二乘问题的基础迭代步骤可以记作:

Δ p = − A ( x ; p ) ∑ x J ( x ; p ) ⊤ ( I 1 ( W ( x ; p ) ) − I 2 ( x ) ) \Delta \mathbf{p}=-\mathbf{A}(\mathbf{x} ; \mathbf{p}) \sum_{\mathbf{x}} \mathbf{J}(\mathbf{x} ; \mathbf{p})^{\top}\left( \mathcal{I}_{1}(\mathcal{W}(\mathbf{x} ; \mathbf{p})) - \mathcal{I}_{2}(\mathbf{x}) \right) Δp=A(x;p)xJ(x;p)(I1(W(x;p))I2(x))

其中,

J 是从输出到待优化变量求导的雅克比矩阵, I 2 是给定的 g r o u n d t r u t h , I 1 是我们想要优化的。而 A ( x ; p ) 取决于我们选择的优化策略。 \begin{array}{c} \mathbf{J}是从输出到待优化变量求导的雅克比矩阵,\mathcal{I}_2是给定的ground truth,\\ \mathcal{I}_1是我们想要优化的。而\mathbf{A}(\mathbf{x} ; \mathbf{p})取决于我们选择的优化策略。 \end{array} J是从输出到待优化变量求导的雅克比矩阵,I2是给定的groundtruthI1是我们想要优化的。而A(x;p)取决于我们选择的优化策略。

J ( x ; p ) = ∂ I 1 ( W ( x ; p ) ) ∂ W ( x ; p ) ∂ W ( x ; p ) ∂ p \mathbf{J}(\mathbf{x};\mathbf{p})=\frac{\partial\mathcal{I}_1(\mathcal{W}(\mathbf{x};\mathbf{p}))}{\partial\mathcal{W}(\mathbf{x};\mathbf{p})}\frac{\partial\mathcal{W}(\mathbf{x};\mathbf{p})}{\partial\mathbf{p}} J(x;p)=W(x;p)I1(W(x;p))pW(x;p)

残差:

r ( x ) = I 2 ( x ) − I 1 ( W ( x ; p ) ) 有的资料中把 J 看作是残差对待优化变量的导数,即, ∂ r ∂ p ,因此, Δ p 也可以写成: \begin{array}{c} \mathbf{r}(\mathbf{x})=\mathcal{I}_{2}(\mathbf{x}) - \mathcal{I}_{1}(\mathcal{W}(\mathbf{x} ; \mathbf{p}))\\ 有的资料中把\mathbf{J}看作是残差对待优化变量的导数,即,\frac{\partial\mathbf{r}}{\partial\mathbf{p}},因此,\Delta \mathbf{p}也可以写成: \end{array} r(x)=I2(x)I1(W(x;p))有的资料中把J看作是残差对待优化变量的导数,即,pr,因此,Δp也可以写成:

Δ p = − A ( x ; p ) ∑ x J ( x ; p ) ⊤ r ( x ) \Delta \mathbf{p}=-\mathbf{A}(\mathbf{x} ; \mathbf{p}) \sum_{\mathbf{x}} \mathbf{J}(\mathbf{x} ; \mathbf{p})^{\top} \mathbf{r}(\mathbf{x}) Δp=A(x;p)xJ(x;p)r(x)

如果选择一阶优化方法, A 就是一个标量,也就是学习率; 如果选择二阶优化方法,有时 A ( x ; p ) = ( ∑ x J ( x ; p ) ⊤ J ( x ; p ) ) − 1 ,这取决于具体的优化策略。 \begin{array}{c} 如果选择一阶优化方法,\mathbf{A}就是一个标量,也就是学习率;\\ 如果选择二阶优化方法,有时\mathbf{A}(\mathbf{x};\mathbf{p})=(\sum_\mathbf{x}\mathbf{J}(\mathbf{x};\mathbf{p})^\top\mathbf{J}(\mathbf{x};\mathbf{p}))^{-1},这取决于具体的优化策略。 \end{array} 如果选择一阶优化方法,A就是一个标量,也就是学习率;如果选择二阶优化方法,有时A(x;p)=(xJ(x;p)J(x;p))1,这取决于具体的优化策略。

以上是对这个最小二乘问题的概述。这种基于梯度的优化策略的核心在于输入信号是否足够平滑,否则,很容易陷入局部次优解。输入信号的平滑程度等价于:

∂ I ( x ) ∂ x ,亦即图像梯度 \frac{\partial\mathcal{I}(\mathbf{x})}{\partial\mathbf{x}},亦即图像梯度 xI(x),亦即图像梯度

为了避免局部最优,通常在优化的前期对图像进行模糊处理。图像梯度通过数值差分方法得出,而并非解析的。

B A R F 并没有采用模糊操作,它用神经网络作为 I ,优化目标就可以写成: min ⁡ p i , Θ ∑ i = 1 M ∑ x ∥ f ( W ( x ; p i ) ; Θ ) − I i ( x ) ∥ 2 2 其中, f : R 2 → R 3 , Θ 是网络的参数, M 是图像个数。 然后,图像梯度就变为可解析的 ∂ f ( x ) ∂ x ,而不是数值差分的估计。 \begin{array}{c} BARF并没有采用模糊操作,它用神经网络作为\mathcal{I},优化目标就可以写成:\\ \min_{\mathbf{p}_i,\boldsymbol{\Theta}}\sum_{i=1}^M\sum_\mathbf{x}\left\|f(\mathcal{W}(\mathbf{x};\mathbf{p}_i);\boldsymbol{\Theta})-\mathcal{I}_i(\mathbf{x})\right\|_2^2\\ 其中,f:\mathbb{R}^2 \rightarrow \mathbb{R}^3,\boldsymbol{\Theta}是网络的参数,M是图像个数。\\ 然后,图像梯度就变为可解析的\frac{\partial{f}(\mathbf{x})}{\partial\mathbf{x}},而不是数值差分的估计。 \end{array} BARF并没有采用模糊操作,它用神经网络作为I,优化目标就可以写成:minpi,Θi=1Mxf(W(x;pi);Θ)Ii(x)22其中,f:R2R3Θ是网络的参数,M是图像个数。然后,图像梯度就变为可解析的xf(x),而不是数值差分的估计。

通过操纵网络f,还可以对对齐的信号平滑度进行更原则性的控制,而不必依赖于图像的启发式模糊,从而使这些形式可推广到3D场景表示。稍后,将会介绍barf如何操作f对信号进行平滑度控制。

Neural Radiance Fields (3D)

接下来,BARF将以上过程拓展为3D,具体如下:

多层感知机: f : R 3 → R 4 M L P 参数: Θ 3 D 点坐标: x ∈ R 3 3 D 点坐标对应的颜色: c ∈ R 3 体素密度: σ ∈ R 相机位姿变换: W ,其有 6 个自由度 x , y , z , ϕ , θ , ψ , 故 p ∈ R 6 且, [ c ; σ ] ⊤ = f ( x ; Θ ) 像素齐次坐标: u ˉ = [ u ; 1 ] ⊤ ∈ R 3 , 深度: z i , x i = z i u ˉ \begin{array}{c} 多层感知机:f:\mathbb{R}^3 \rightarrow \mathbb{R}^4\\ MLP参数:\boldsymbol{\Theta}\\ 3D点坐标:\mathbf{x} \in \mathbb{R}^3\\ 3D点坐标对应的颜色:\mathbf{c} \in \mathbb{R}^3\\ 体素密度:\sigma \in \mathbb{R}\\ 相机位姿变换:\mathcal{W},其有6个自由度{x,y,z,\phi,\theta,\psi},故\mathbf{p}\in \mathbb{R}^6\\ 且,[\mathbf{c};\sigma]^{\top}=f(\mathbf{x};\boldsymbol{\Theta})\\ 像素齐次坐标:\bar{\mathbf{u}}=[\mathbf{u};1]^{\top} \in \mathbb{R}^3,深度:z_i,\\ \mathbf{x}_i=z_i\bar{\mathbf{u}} \end{array} 多层感知机:f:R3R4MLP参数:Θ3D点坐标:xR33D点坐标对应的颜色:cR3体素密度:σR相机位姿变换:W,其有6个自由度x,y,z,ϕ,θ,ψ,pR6且,[c;σ]=f(x;Θ)像素齐次坐标:uˉ=[u;1]R3,深度:zi,xi=ziuˉ

体渲染表达式:

I ^ ( u ) = ∫ z n e a r z f a r T ( u , z ) σ ( z u ˉ ) c ( z u ˉ ) d z , 其中, z n e a r 和 z f a r 是感兴趣的深度上下限, I 仍然是 R 2 → R 3 , 表示这个像素坐标对应的 R G B 数值。 T ( u , z ) = exp ⁡ ( − ∫ z m a x z σ ( z ′ u ˉ ) d z ′ ) \begin{array}{c} \hat{\mathcal{I}}(\mathbf{u})=\int_{z_{\mathrm{near}}}^{z_{\mathrm{far}}}T(\mathbf{u},z)\sigma(z\bar{\mathbf{u}})\mathbf{c}(z\bar{\mathbf{u}})\mathrm{d}z ,\\ 其中,z_{\mathrm{near}}和z_{\mathrm{far}}是感兴趣的深度上下限,\mathcal{I}仍然是\mathbb{R}^2 \rightarrow \mathbb{R}^3,\\ 表示这个像素坐标对应的RGB数值。\\ T(\mathbf{u},z)=\exp\bigl(-\int_{z_{\mathrm{max}}}^{z}\sigma(z^{\prime}\bar{\mathbf{u}})\mathrm{d}z^{\prime}\bigr) \end{array} I^(u)=znearzfarT(u,z)σ(zuˉ)c(zuˉ)dz,其中,znearzfar是感兴趣的深度上下限,I仍然是R2R3表示这个像素坐标对应的RGB数值。T(u,z)=exp(zmaxzσ(zuˉ)dz)

T对应3dgs中的透射率。这两个式子和3dgs的体渲染公式也是极为接近的:

C i = ∑ n ≤ N c n ⋅ α n ⋅ T n , where  T n = ∏ m < n ( 1 − α m ) , α n = o n ⋅ exp ⁡ ( − σ n ) , σ n = 1 2 Δ n ⊤ Σ ′ − 1 Δ n . C_i=\sum_{n\leq N}c_n\cdot\alpha_n\cdot T_n,\text{ where }T_n=\prod_{m<n}(1-\alpha_m),\\ \alpha_n=o_n\cdot\exp(-\sigma_n),\quad\sigma_n=\frac12\Delta_n^\top\Sigma^{\prime{-1}}\Delta_n. Ci=nNcnαnTn, where Tn=m<n(1αm),αn=onexp(σn),σn=21ΔnΣ1Δn.

区别在于,3dgs中的T是通过累乘得出,体素密度则取决于椭球投影到平面的形状再乘以不透明度。而nerf中的颜色值和体素密度是通过MLP直接得出。

令 y = [ c ; σ ] ⊤ = f ( x ; Θ ) 继续改写: I ^ ( u ) = g ( y 1 , … , y N ) , g : R 4 N → R 3 I ^ ( u ; p ) = g ( f ( W ( z 1 u ˉ ; p ) ; Θ ) , … , f ( W ( z N u ˉ ; p ) ; Θ ) ) , W : R 3 → R 3 \begin{array}{c} 令\mathbf{y}=[\mathbf{c};\sigma]^{\top}=f(\mathbf{x};\boldsymbol{\Theta})\\ 继续改写:\hat{\mathcal{I}}(\mathbf{u})=g\left(\mathbf{y}_1,\ldots,\mathbf{y}_N\right),g:\mathbb{R}^{4N} \rightarrow \mathbb{R}^3\\ \hat{\mathcal{I}}(\mathbf{u};\mathbf{p})=g\Big(f(\mathcal{W}(z_1\bar{\mathbf{u}};\mathbf{p});\boldsymbol{\Theta}),\ldots,f(\mathcal{W}(z_N\bar{\mathbf{u}};\mathbf{p});\boldsymbol{\Theta})\Big),\mathcal{W}:\mathbb{R}^{3} \rightarrow \mathbb{R}^3 \end{array} y=[c;σ]=f(x;Θ)继续改写:I^(u)=g(y1,,yN),g:R4NR3I^(u;p)=g(f(W(z1uˉ;p);Θ),,f(W(zNuˉ;p);Θ)),W:R3R3

最后,这个联合优化问题变为:
min ⁡ p 1 , . . . , p M , Θ ∑ i = 1 M ∑ u ∥ I ^ ( u ; p i , Θ ) − I i ( u ) ∥ 2 2 \min_{\mathbf{p}_1,...,\mathbf{p}_M,\boldsymbol{\Theta}}\sum_{i=1}^M\sum_\mathbf{u}\left\|\hat{\mathcal{I}}(\mathbf{u};\mathbf{p}_i,\boldsymbol{\Theta})-\mathcal{I}_i(\mathbf{u})\right\|_2^2 p1,...,pM,Θmini=1Mu I^(u;pi,Θ)Ii(u) 22

Bundle-Adjusting Neural Radiance Fields

barf与Nerf差异最大的一点在于,barf需要在优化网络参数的同时考虑到相机参数。而barf认为直接使用nerf的位置编码方案使得相机参数优化变得困难,对此,barf做出了改进,提出了捆绑优化的动态调整策略,这也是这篇文献最大的贡献之一。

Nerf最初的位置编码方案为:

γ ( x ) = [ x , γ 0 ( x ) , γ 1 ( x ) , … , γ L − 1 ( x ) ] ∈ R 3 + 6 L \gamma(\mathbf{x})=\begin{bmatrix}\mathbf{x},\gamma_0(\mathbf{x}),\gamma_1(\mathbf{x}),\ldots,\gamma_{L-1}(\mathbf{x})\end{bmatrix}\in\mathbb{R}^{3+6L} γ(x)=[x,γ0(x),γ1(x),,γL1(x)]R3+6L

这里的L是超参数。

γ k ( x ) = [ cos ⁡ ( 2 k π x ) , sin ⁡ ( 2 k π x ) ] ∈ R 6 \gamma_k(\mathbf{x})=\begin{bmatrix}\cos(2^k\pi\mathbf{x}),\sin(2^k\pi\mathbf{x})\end{bmatrix}\in\mathbb{R}^6 γk(x)=[cos(2kπx),sin(2kπx)]R6

那么,k阶位置编码的雅克比矩阵为:
∂ γ k ( x ) ∂ x = 2 k π ⋅ [ − sin ⁡ ( 2 k π x ) , cos ⁡ ( 2 k π x ) ] \frac{\partial\gamma_k(\mathbf{x})}{\partial\mathbf{x}}=2^k\pi\cdot\left[-\sin(2^k\pi\mathbf{x}),\cos(2^k\pi\mathbf{x})\right] xγk(x)=2kπ[sin(2kπx),cos(2kπx)]

它将来自MLP的梯度信号放大,并且其方向以相同频率变化。这使得预测有效更新Δp变得困难,因为来自采样的3D点的梯度信号在方向和幅度方面是不相干的,并且很容易相互抵消。因此,对于barf的联合优化来说,不能直接应用位置编码。


barf的做法是从低频段到高频段逐步激活位置编码:
γ k ( x ; α ) = w k ( α ) ⋅ [ cos ⁡ ( 2 k π x ) , sin ⁡ ( 2 k π x ) ] , w k ( α ) = { 0 if  α < k 1 − cos ⁡ ( ( α − k ) π ) 2 if  0 ≤ α − k < 1 1 if  α − k ≥ 1 ∂ γ k ( x ; α ) ∂ x = w k ( α ) ⋅ 2 k π ⋅ [ − sin ⁡ ( 2 k π x ) , cos ⁡ ( 2 k π x ) ] . α ∈ [ o , L ] 是与优化进度成正比的可控的一个超参数。 \begin{array}{c} \gamma_k(\mathbf{x};\alpha)=w_k(\alpha)\cdot\left[\cos(2^k\pi\mathbf{x}),\sin(2^k\pi\mathbf{x})\right], \\ w_k(\alpha)=\begin{cases}0 & \text{if }\alpha<k \\ \frac{1-\cos((\alpha-k)\pi)}{2}& \text{if }0\leq\alpha-k<1 \\ 1&\text{if }\alpha-k\geq1&\end{cases}\\ \frac{\partial\gamma_k(\mathbf{x};\alpha)}{\partial\mathbf{x}}=w_k(\alpha)\cdot2^k\pi\cdot\left[-\sin(2^k\pi\mathbf{x}),\cos(2^k\pi\mathbf{x})\right]. \end{array}\\ \alpha \in [o,L] 是与优化进度成正比的可控的一个超参数。 γk(x;α)=wk(α)[cos(2kπx),sin(2kπx)],wk(α)= 021cos((αk)π)1if α<kif 0αk<1if αk1xγk(x;α)=wk(α)2kπ[sin(2kπx),cos(2kπx)].α[o,L]是与优化进度成正比的可控的一个超参数。

从原始3D输入x(α=0)开始,barf逐渐激活较高频段的编码,直到启用完整位置编码(α=L),相当于原始 NeRF 模型。这使得 BARF 能够通过最初平滑的信号发现正确的Δp,然后将重点转移到学习高保真场景表示。

Experiment

平面图像对齐的定性实验

给定图像块,barf的目标是恢复整个图像的对齐和神经网络重建,其中初始化为(b)中所示的中心裁剪,而相应的真实变换(ground-truth warps)如(c)所示。

实验结果:(a)为直接使用位置编码,(b)为不使用位置编码,©是barf的结果。

合成场景上的定量实验

SceneCamera pose registrationView synthesis quality
Rotation (°) ↓Translation ↓PSNR ↑SSIM ↑LPIPS ↓
full pos.enc.w/o pos.enc.BARFfull pos.enc.w/o pos.enc.BARFfull pos.enc.w/o pos.enc.BARFref. NeRFfull pos.enc.w/o pos.enc.BARFref. NeRFfull pos.enc.w/o pos.enc.BARFref. NeRF
Chair7.1860.1100.09616.6380.5550.42819.0230.2231.1631.910.8040.9420.9540.9610.2230.0650.0440.036
Drums3.2080.0570.0437.3220.2550.22520.8323.5623.9123.960.8400.8930.9000.9020.1660.1160.0990.095
Ficus9.3680.0950.08510.1350.4300.47419.7525.5826.2626.580.8360.9260.9340.9410.1820.0700.0580.051
Hotdog3.2900.2250.2486.3441.1221.30828.1534.0034.5434.910.9230.9670.9700.9730.0830.0400.0320.029
Lego3.2520.1080.0824.8410.3910.29124.2326.3528.3329.280.8760.8800.9270.9420.1020.1120.0500.037
Materials6.9710.8450.84415.1882.6782.69216.5126.8627.4828.060.7470.9260.9360.9420.2940.0680.0580.049
Mic10.5540.0810.07522.7240.3560.30115.1030.9331.1831.830.7880.9660.9690.9710.3340.0560.0490.046
Ship5.5060.0950.0747.2320.3540.32622.1226.7827.5028.000.7550.8330.8490.8580.2550.1750.1320.118
Mean6.167<0.202<0.19311.3030.7680.75622.1226.7827.5029.400.8210.9170.9300.9360.2050.0870.0650.057

本文由博客一文多发平台 OpenWrite 发布!

相关文章:

【CameraPoseRefinement】以BARF为例介绍三维重建中的位姿优化

文章目录 IntroductionApproachPlanar Image Alignment(2D)Neural Radiance Fields (3D)Bundle-Adjusting Neural Radiance Fields Experiment平面图像对齐的定性实验合成场景上的定量实验 Introduction 在计算机视觉三维重建中&#xff0c;求解3D场景的表示和定位给定的相机帧…...

大语言模型压缩技术;推理优化技术;SparseGPT算法;GPTQ算法

目录 大语言模型落地的成本、效率与效果 模型压缩技术 推理优化技术 SparseGPT算法 GPTQ算法 大语言模型落地的成本、效率与效果 模型压缩技术 模型压缩技术是大语言模型轻量化的关键。介绍了多种模型压缩方法,其中权重量化和模型稀疏化是两种主要的技术。 权重量化:权重…...

ctrl键和大写键互换解决方法

电脑卡住之后突然发现Ctrl键和大小写键&#xff08;CapsLock&#xff09;互换了&#xff0c;后面试了几种方法都没解决这个问题&#xff0c;最后在万能的贴吧中找到解决方法——键位复位。 108和87键位复位操作&#xff1a; 1.先按住FN不放&#xff0c; 然后&#xff0c;再按住…...

spring boot mapper测试类优化

spring boot mapper测试类优化 有些时候我们只需要测试在 mybatis 写的mapper 是否正确&#xff0c;在注入mapper的时候&#xff0c; SpringBootTest 会启动整个容器&#xff0c;包括servlet容器和spring 容器&#xff0c;随着项目文件数逐渐增加&#xff0c;测试一个类会启动…...

k8s集成skywalking

如果能科学上网的话&#xff0c;安装应该不难&#xff0c;如果有问题可以给我留言 本篇文章我将给大家介绍“分布式链路追踪”的内容&#xff0c;对于目前大部分采用微服务架构的公司来说&#xff0c;分布式链路追踪都是必备的&#xff0c;无论它是传统微服务体系亦或是新一代…...

贪心算法理论

系列博客目录 文章目录 系列博客目录贪心算法 (Greedy Algorithm)贪心算法的特点贪心算法的适用条件常见的贪心算法问题贪心算法的步骤贪心算法示例&#xff1a;活动选择问题贪心算法的优缺点 贪心算法 (Greedy Algorithm) 贪心算法是一种在每一步选择中都采取当前状态下最优的…...

前端项目扫描漏洞整改的解决方案,附带部分漏洞的解决方法。

天崩开局 最近项目开始了漏洞扫描&#xff0c;于是乎 哎嘿嘿。。。 我直接彻底疯狂&#xff01;&#xff01;&#xff01;&#xff01; 我真的受不了了&#xff0c;这破班谁爱上谁上&#xff01;依赖开发的锅&#xff0c;为什么要我来背。 在这里点名批评一下 inflight&#…...

brew安装NVM新手教程

首先确保macos下已安装好brew&#xff0c;搜索nvm资源代码&#xff1a; brew search nvm 演示效果图如下&#xff1a; 安装命令 brew install nvm 卸载命令 brew uninstall node 安装完成后提示如下&#xff1a; 直接命令行执行下代码的代码 export NVM_DIR"$HOME/.…...

Open3D (C++) 生成任意2D椭圆点云

目录 一、算法原理二、代码实现三、结果展示一、算法原理 椭圆标准参数方程为: x = a ∗ c o s ( t ) y = b ∗...

前端框架Vue3项目实战(基于Vue3实现一个小相册)

下面是是对Vue3操作的一个项目实战 下面代码是html的基本骨架&#xff08;没有任何的功能&#xff09;&#xff1a; <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <title>相册</title> <style&…...

【Git系列】利用 Bash 脚本获取 Git 最后一次非合并提交的提交人

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...

启动tomcat报错./startup.sh: Permission denied

报错解释&#xff1a; 这个错误表明你正在尝试启动Tomcat服务器&#xff0c;但是没有足够的权限来执行startup.sh脚本。 解决方法&#xff1a; 使用chmod命令修改脚本的权限&#xff0c;使得用户具有执行权限。 chmod x /path/to/tomcat/bin/startup.sh 或者 chmod x /path…...

【开篇】.NET开源 ORM 框架 SqlSugar 系列

.NET开源 ORM 框架 SqlSugar 系列 【开篇】.NET开源 ORM 框架 SqlSugar 系列【入门必看】.NET开源 ORM 框架 SqlSugar 系列【实体配置】.NET开源 ORM 框架 SqlSugar 系列【Db First】.NET开源 ORM 框架 SqlSugar 系列【Code First】.NET开源 ORM 框架 SqlSugar 系列【数据事务…...

【机器学习】支持向量机SVR、SVC分析简明教程

关于使用SVM进行回归分析的介绍很少&#xff0c;在这里&#xff0c;我们讨论一下SVR的理论知识&#xff0c;并对该方法有一个简明的理解。 1. SVC简单介绍 SVR全称是support vector regression&#xff0c;是SVM&#xff08;支持向量机support vector machine&#xff09;对回…...

EasyDSS视频推拉流技术的应用与安防摄像机视频采集参数

安防摄像机的视频采集参数对于确保监控系统的有效性和图像质量至关重要。这些参数不仅影响视频的清晰度和流畅度&#xff0c;还直接影响存储和网络传输的需求。 安防摄像机图像效果的好坏&#xff0c;由DSP处理器和图像传感器sensor决定&#xff0c;如何利用好已有的硬件资源&…...

【详细介绍及演示】Flink之checkpoint检查点的使用

目录 一、介绍 二、 设置checkpoint检查点演示 1、 代码演示 2、测试代码效果 3、查看快照情况 ​编辑 三、在集群上运行 1、第一次运行 2、第二次运行 四、自定义检查点savePoint 1、提交一个flink job 打成jar包 2、输入一些数据&#xff0c;观察单词对应的数字的…...

使用uni-app进行开发前准备

使用uni-app进行开发&#xff0c;需要遵循一定的步骤和流程。以下是一个详细的指南&#xff0c;帮助你开始使用uni-app进行开发&#xff1a; 一、开发环境搭建 安装Node.js&#xff1a; 首先&#xff0c;从Node.js的官方网站&#xff08;https://nodejs.org/&#xff09;下载并…...

deepin 安装 chrome 浏览器

deepin 安装 chrome 浏览器 最近好多小伙伴儿和我说 deepin 无法安装最新的谷歌浏览器 其实是因为最新的 谷歌浏览器 其中的一个依赖需要提前安装 提前安装依赖然后再安装谷歌浏览器就可以了 安装 fonts-liberationsudo apt -y install fonts-liberation安装 chrome 浏览器sudo…...

Vue-01

Vue框架 Vue官网&#xff1a; Vue.js 框架 数据模型和view的通信就是依靠viewmodel的关键。 目前主流版本仍然是vue2版本。 Vue快速入门 1.新建一个HTML文件&#xff0c;引入Vue.js文件。Vue.js文件是官方引入的一个文件&#xff0c;我们如果要使用Vue就必须引入这个文件。…...

【Oracle】个人收集整理的Oracle常用SQL及命令

【建表】 create table emp( id number(12), name nvarchar2(20), primary key(id) ); 【充值一】 insert into emp select rownum,dbms_random.string(*,dbms_random.value(6,20)) from dual connect by level<101; 【充值二】 begin for i in 1..100 loop inser…...

11.28.2024刷华为OD

文章目录 C-100-5键键盘&#xff08;extend来加入list后尾&#xff09;题目2语法知识记录 C-100-5键键盘&#xff08;extend来加入list后尾&#xff09; 考虑所有情况extend来加入clip数组内容到screen 【】 题目2 链接 代码 语法知识记录...

【S500无人机】--地面端下载

之前国庆的时候导师批了无人机&#xff0c;我们几个也一起研究了几次&#xff0c;基本把无人机组装方面弄的差不多了&#xff0c;还差个相机搭载&#xff0c;今天我们讲无人机的调试 硬件配置如下 首先是地面端下载&#xff0c;大家可以选择下载&#xff1a; Mission Planne地…...

Redis2——协议与异步方式

文章目录 Redis2——协议与异步方式1. Redis Pipeline2. Redis事务2.1 无锁事务控制&#xff08;乐观事务控制&#xff09;2.2 事务语句与lua脚本2.3 事务特性ACID 3. 通信方式3.1 hiredis库3.2 同步连接3.3 异步连接3.3.1 hiredis管理监听事件接口3.3.2 hiredis libevent3.3.…...

面向下一代技术,遨游通讯如何助力北斗规模化应用提速?

近日&#xff0c;纪念北斗卫星导航系统工程建设三十周年座谈会在北京隆重召开&#xff0c;据悉&#xff0c;我国计划在2035年完成下一代北斗系统的建设。“北斗牵手&#xff0c;守护永久”北斗三号短报文公众应用商用试验启动仪式也于本月在雄安新区举行&#xff0c;会上透露&a…...

vue实现echarts饼图自动轮播

echarts官网&#xff1a;Examples - Apache ECharts echartsFn.ts 把echarts函数封装成一个文件 import * as echarts from "echarts";const seriesData [{"value": 12,"name": "过流报警"},{"value": 102,"name&qu…...

数据分析的尽头是web APP?

数据分析的尽头是web APP&#xff1f; 在做了一些数据分析的项目&#xff0c;也制作了一些数据分析相关的web APP之后&#xff0c;总结自己的一些想法和大家分享。 1.web APP是呈现数据分析结果的另外一种形式。 数据分析常见的结果是数据分析报告&#xff0c;可以是PPT或者…...

windows电脑上安装树莓派操作系统

在Windows电脑上安装树莓派通常涉及以下几个步骤:准备安装工具、下载树莓派系统镜像、烧录系统到SD卡、配置树莓派以及远程连接(如果需要无显示器操作)。以下是详细的步骤说明: 一、准备安装工具 安装树莓派官方烧录工具: 下载并安装Raspberry Pi Imager。这是一个官方的…...

openssl编译安装升级为新版本

文章目录 1、下载版本2、上传并解压3、编译安装4、验证 1、下载版本 https://www.openssl.org/source/old/1.1.1/ 2、上传并解压 tar zxvf openssl-1.1.1s.tar.gz 3、编译安装 注意&#xff1a;要提前安装好 gcc perl cd openssl-1.1.1s ./config --prefix/usr/local/open…...

监控视频汇聚平台:Liveweb视频监控管理平台方案详细介绍

Liveweb国标视频综合管理平台是一款以视频为核心的智慧物联应用平台。它基于分布式、负载均衡等流媒体技术进行开发&#xff0c;提供广泛兼容、安全可靠、开放共享的视频综合服务。该平台具备多种功能&#xff0c;包括视频直播、录像、回放、检索、云存储、告警上报、语音对讲、…...

【论文复现】基于BERT的语义分析实现

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; ❀ WRN: 宽度残差网络 概述语义分类文本分类情感分类 实现原理 核心逻辑pre_deal.pytrain.pytest_demo.py 实现方式&演示效果训练阶段测试阶…...

SMOTE | 使用SMOTE算法来处理不平衡数据的问题

需求 在学习机器学习识别信用卡欺诈交易这个项目的时候&#xff0c;样本数据集非常不平衡&#xff1a; data_df_new[Class].value_counts()0&#xff1a; 正常 1&#xff1a;欺诈 在这里了解到了SMOTE算法&#xff1a; 过采样&#xff08;Oversampling&#xff09; 过采样是…...

week 9 - Entity-Relationship Modelling

一、数据库设计的重要性 • 设计数据库可使查询更高效、简洁。 • 减少数据冗余&#xff08;data redundancy&#xff09;&#xff0c;提升表的整洁性。 二、Key Components of ER Modelling 实体-关系建模的基本构成 1. 实体&#xff08;Entity&#xff09;&#xff1a;表…...

彻底理解如何保证ElasticSearch和数据库数据一致性问题

一.业务场景举例 需求&#xff1a; 一个卖房业务&#xff0c;双十一前一天&#xff0c;维护楼盘的运营人员突然接到合作开发商的通知&#xff0c;需要上线一批热门的楼盘列表&#xff0c;上传完成后&#xff0c;C端小程序支持按楼盘的名称、户型、面积等产品属性全模糊搜索热门…...

JS基础知识05-对象、Ajax、JSON

目录 一、对象 1.1.对象&#xff08;Object&#xff09; 1.创建对象 对象的常用方法 1.2.Math对象 1.数学常数 2.数学函数 3.随机数生成 4.对数方法 1.3.Date对象 创建Date对象 获取日期和时间的方法 设置日期和时间的方法 日期的格式化方法 二、Ajax 1.创建XM…...

pandas 读写excel

在Python中&#xff0c;使用Pandas库读写Excel文件是一个常见的操作。Pandas提供了read_excel和to_excel方法来分别实现读取和写入Excel文件的功能。以下是一些基本的示例&#xff1a; ### 读取Excel文件 python import pandas as pd # 读取Excel文件 df pd.read_excel(pat…...

Windows加固脚本

echo off REM 清屏 cls title 安全策略设置批处理 color f0 echo **************************************** echo write by afei echo https://www.jianshu.com/u/ea4c85fbe8c7 echo **************************************** pause cls color 3f echo ********************…...

28.100ASK_T113-PRO Linux+QT 显示一张照片

1.添加资源文件 2. 主要代码 #include "mainwindow.h" #include "ui_mainwindow.h" #include <QImage> #include <QPixmap>MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow) {ui->setupUi(this);QIm…...

Vue中的计算属性和监听属性

在Vue中&#xff0c;计算属性和监听属性是两种非常有用的功能&#xff0c;它们可以帮助我们更好地管理数据和响应数据的变化。 计算属性 计算属性是基于它们的依赖进行缓存的。只有当依赖发生变化时&#xff0c;计算属性才会重新计算。这使得计算属性非常适合用于执行昂贵的计…...

基于vite创建的react18项目的单元测试

题外话 最近一个小伙伴进了字节外包&#xff0c;第一个活就是让他写一个单元测试。 嗯&#xff0c;说实话&#xff0c;在今天之前我只知道一些理论&#xff0c;但是并没有实操过&#xff0c;于是我就试验了一下。 通过查询资料&#xff0c;大拿们基本都说基于vite的项目&…...

网络——HTTP与HTTPS三次握手和四次挥手

HTTP协议本身并不直接处理TCP连接的建立和关闭&#xff0c;这些是由底层的TCP协议来完成的。但是&#xff0c;由于HTTP通常运行在TCP之上&#xff0c;因此理解TCP的三次握手&#xff08;用于建立连接&#xff09;和四次挥手&#xff08;用于关闭连接&#xff09;对于理解HTTP通…...

自然语言处理:第六十六章 17 种 prompt engineering 方法大集合

本人项目地址大全&#xff1a;Victor94-king/NLP__ManVictor: CSDN of ManVictor 原文地址&#xff1a;17 种 prompt engineering 方法大集合 写在前面: 笔者更新不易&#xff0c;希望走过路过点个关注和赞&#xff0c;笔芯!!! 写在前面: 笔者更新不易&#xff0c;希望走过路…...

MySQL —— MySQL 程序

目录 前言 一、MySQL 程序简介 二、mysqld -- MySQL 服务器 三、mysql -- MySQL 客户端 1. mysql 客户端简介 2. mysql 客户端选项 &#xff08;1&#xff09;指定选项的方式 &#xff08;2&#xff09;mysql 客户端命令常用选项 &#xff08;3&#xff09;在命令行中使…...

AI蛋白质设计与人工智能药物设计

AI蛋白质设计与人工智能药物设计 AI蛋白质设计 一、蛋白质相关的深度学习简介 1.基础概念 1.1.机器学习简介&#xff1a;从手写数字识别到大语言模型 1.2.蛋白质结构预测与设计回顾 1.3.Linux简介 1.4.代码环境&#xff1a;VS code和Jupyter notebook* 1.5.Python关键概…...

Java基础之控制语句:开启编程逻辑之门

一、Java控制语句概述 Java 中的控制语句主要分为选择结构、循环结构和跳转语句三大类&#xff0c;它们在程序中起着至关重要的作用&#xff0c;能够决定程序的执行流程。 选择结构用于根据不同的条件执行不同的代码路径&#xff0c;主要包括 if 语句和 switch 语句。if 语句有…...

安装Fcitx5输入框架和输入法自动部署脚本(来自Mark24)-Ubuntu通用

在Ubuntu22.04上安装rime中文输入法的基本教程 上述文章接近废弃。 使用新逻辑配置基本的Fcitx5的输入法。 安装 第一步&#xff0c;下载相关组件 sudo nala install vim sudo nala install ruby sudo nala install fcitx5-rime第二步&#xff0c;设置语言为Fcitx5 而非 默认…...

软件无线电(SDR)的架构及相关术语

今天简要介绍实现无线电系统调制和解调的主要方法&#xff0c;这在软件定义无线电(SDR)的背景下很重要。 外差和超外差 无线电发射机有两种主要架构——一种是从基带频率直接调制到射频频率&#xff08;称为外差&#xff09;&#xff0c;而第二种超外差是通过两个调制阶段来实…...

刷题分享11_30

刷题分享 1.(力扣216)这是一道回溯算法的经典题目。对于回溯算法&#xff0c;一般backtracking是没有返回值的&#xff0c;参数也比较不固定&#xff0c;需要根据每个题的特点来具体分析。这道题因为不能取到重复元素&#xff0c;所以需要额外加一个参数startindex&#xff0c;…...

Java技术复习提升 17反射

本章涉及到框架开发中必用的反射以及常用方法 很重要 注重理解并实践 第17章 反射 17.1 一个需求引出反射 package com.fsl; public class Cat {private String name "招财猫";public int age 10; //public的public Cat() {} //无参构造器public Cat(String name)…...

Python中的字符串

Python中的字符串 在Python中&#xff0c;字符串是用于表示文本数据的基本数据类型。字符串可以包含字母、数字、符号和空格等字符。Python提供了多种方式来定义和操作字符串。 字符串的定义 在Python中&#xff0c;字符串可以用单引号 或双引号 "" 括起来。例如…...

B站狂神说Mybatis+Spring+SpringMVC整合理解(ssm框架整合)

文章目录 0.写在前面(对mybatis,spring的理解)&#xff08;不看可跳过&#xff09;0.1 为什么需要mybatis0.2 为什么需要spring0.3为什么需要springmvc 1.新建ssmbuild数据库2.新建Maven项目3.初始化步骤3.1 配置下载maven依赖&#xff0c;构建资源导出3.2 连接数据库3.3建包&a…...