【CameraPoseRefinement】以BARF为例介绍三维重建中的位姿优化
文章目录
- Introduction
- Approach
- Planar Image Alignment(2D)
- Neural Radiance Fields (3D)
- Bundle-Adjusting Neural Radiance Fields
- Experiment
- 平面图像对齐的定性实验
- 合成场景上的定量实验
Introduction
在计算机视觉三维重建中,求解3D场景的表示和定位给定的相机帧的相机位姿是两个非常重要的任务,这两个问题互为依赖,一方面,恢复3D场景的表示需要使用已知的相机位姿进行观察;另一方面,定位相机需要来自特征点的可靠对应。
错误的相机位姿会对重建的输出和性能产生一系列负面影响,包括:
-
图像合成质量下降:
- 当相机位姿不准确时,生成的视角合成图像可能会出现明显的畸变或模糊,导致最终图像的质量较差。
-
三维场景表示不准确:
- 错误的位姿会导致三维场景中的几何结构和深度信息的错误重建,使得模型无法正确理解场景的空间布局。
-
影像重叠和视差问题:
- 不准确的位姿可能会造成图像重叠区域的视差不一致,进而导致合成图像中的物体位置、大小等出现明显的不自然或错位现象。
-
优化过程的困难:
- 由于相机位姿的误差,优化算法(如Adam)可能会在优化过程中陷入局部最优解,无法收敛到正确的场景表示和相机位置。
-
训练效率降低:
- 不准确的相机位姿会使得训练过程变得更加复杂,模型需要更多的迭代才能调整出合理的场景表示,从而延长训练时间。
-
潜在的视觉伪影:
- 由于误差,合成图像可能出现视觉伪影(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} 设x∈R2为像素坐标系下的一个坐标,W:R2→R2是与相机参数p有关的几何变换,I:R2→R3是我们的图像生成过程(图像的3个通道,所以是R2→R3),
我们的目标是使得生成的图片与原图片尽可能地相似,这个联合优化的目标用最小二乘来表达,就是:
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} pminx∑∥I1(W(x;p))−I2(x)∥22
相机参数的维度可以记作
p ∈ R P \mathbf{p} \in \mathbb{R}^P p∈RP
这个最小二乘问题的基础迭代步骤可以记作:
Δ 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)x∑J(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是给定的groundtruth,I1是我们想要优化的。而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))∂p∂W(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看作是残差对待优化变量的导数,即,∂p∂r,因此,Δ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)x∑J(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}},亦即图像梯度 ∂x∂I(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=1M∑x∥f(W(x;pi);Θ)−Ii(x)∥22其中,f:R2→R3,Θ是网络的参数,M是图像个数。然后,图像梯度就变为可解析的∂x∂f(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:R3→R4MLP参数:Θ3D点坐标:x∈R33D点坐标对应的颜色:c∈R3体素密度:σ∈R相机位姿变换:W,其有6个自由度x,y,z,ϕ,θ,ψ,故p∈R6且,[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,其中,znear和zfar是感兴趣的深度上下限,I仍然是R2→R3,表示这个像素坐标对应的RGB数值。T(u,z)=exp(−∫zmaxzσ(z′uˉ)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=n≤N∑cn⋅αn⋅Tn, where Tn=m<n∏(1−αm),αn=on⋅exp(−σ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:R4N→R3I^(u;p)=g(f(W(z1uˉ;p);Θ),…,f(W(zNuˉ;p);Θ)),W:R3→R3
最后,这个联合优化问题变为:
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=1∑Mu∑ 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),…,γL−1(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(α)=⎩ ⎨ ⎧021−cos((α−k)π)1if α<kif 0≤α−k<1if α−k≥1∂x∂γ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的结果。
合成场景上的定量实验
Scene | Camera pose registration | View synthesis quality | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Rotation (°) ↓ | Translation ↓ | PSNR ↑ | SSIM ↑ | LPIPS ↓ | ||||||||||||||
full pos.enc. | w/o pos.enc. | BARF | full pos.enc. | w/o pos.enc. | BARF | full pos.enc. | w/o pos.enc. | BARF | ref. NeRF | full pos.enc. | w/o pos.enc. | BARF | ref. NeRF | full pos.enc. | w/o pos.enc. | BARF | ref. NeRF | |
Chair | 7.186 | 0.110 | 0.096 | 16.638 | 0.555 | 0.428 | 19.02 | 30.22 | 31.16 | 31.91 | 0.804 | 0.942 | 0.954 | 0.961 | 0.223 | 0.065 | 0.044 | 0.036 |
Drums | 3.208 | 0.057 | 0.043 | 7.322 | 0.255 | 0.225 | 20.83 | 23.56 | 23.91 | 23.96 | 0.840 | 0.893 | 0.900 | 0.902 | 0.166 | 0.116 | 0.099 | 0.095 |
Ficus | 9.368 | 0.095 | 0.085 | 10.135 | 0.430 | 0.474 | 19.75 | 25.58 | 26.26 | 26.58 | 0.836 | 0.926 | 0.934 | 0.941 | 0.182 | 0.070 | 0.058 | 0.051 |
Hotdog | 3.290 | 0.225 | 0.248 | 6.344 | 1.122 | 1.308 | 28.15 | 34.00 | 34.54 | 34.91 | 0.923 | 0.967 | 0.970 | 0.973 | 0.083 | 0.040 | 0.032 | 0.029 |
Lego | 3.252 | 0.108 | 0.082 | 4.841 | 0.391 | 0.291 | 24.23 | 26.35 | 28.33 | 29.28 | 0.876 | 0.880 | 0.927 | 0.942 | 0.102 | 0.112 | 0.050 | 0.037 |
Materials | 6.971 | 0.845 | 0.844 | 15.188 | 2.678 | 2.692 | 16.51 | 26.86 | 27.48 | 28.06 | 0.747 | 0.926 | 0.936 | 0.942 | 0.294 | 0.068 | 0.058 | 0.049 |
Mic | 10.554 | 0.081 | 0.075 | 22.724 | 0.356 | 0.301 | 15.10 | 30.93 | 31.18 | 31.83 | 0.788 | 0.966 | 0.969 | 0.971 | 0.334 | 0.056 | 0.049 | 0.046 |
Ship | 5.506 | 0.095 | 0.074 | 7.232 | 0.354 | 0.326 | 22.12 | 26.78 | 27.50 | 28.00 | 0.755 | 0.833 | 0.849 | 0.858 | 0.255 | 0.175 | 0.132 | 0.118 |
Mean | 6.167< | 0.202< | 0.193 | 11.303 | 0.768 | 0.756 | 22.12 | 26.78 | 27.50 | 29.40 | 0.821 | 0.917 | 0.930 | 0.936 | 0.205 | 0.087 | 0.065 | 0.057 |
本文由博客一文多发平台 OpenWrite 发布!
相关文章:
【CameraPoseRefinement】以BARF为例介绍三维重建中的位姿优化
文章目录 IntroductionApproachPlanar Image Alignment(2D)Neural Radiance Fields (3D)Bundle-Adjusting Neural Radiance Fields Experiment平面图像对齐的定性实验合成场景上的定量实验 Introduction 在计算机视觉三维重建中,求解3D场景的表示和定位给定的相机帧…...
YOLO系列论文综述(从YOLOv1到YOLOv11)【第13篇:YOLOv10——实时端到端物体检测】
YOLOv10 1 摘要2 网络结构3 YOLOv1-v10对比 YOLO系列博文: 【第1篇:概述物体检测算法发展史、YOLO应用领域、评价指标和NMS】【第2篇:YOLO系列论文、代码和主要优缺点汇总】【第3篇:YOLOv1——YOLO的开山之作】【第4篇:…...
多数元素
多数元素 给定一个大小为 n 的数组 nums ,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的,并且给定的数组总是存在多数元素。 示例 1: 输入:nums [3,2,3] 输出ÿ…...
EasyDSS视频推拉流技术的应用与安防摄像机视频采集参数
安防摄像机的视频采集参数对于确保监控系统的有效性和图像质量至关重要。这些参数不仅影响视频的清晰度和流畅度,还直接影响存储和网络传输的需求。 安防摄像机图像效果的好坏,由DSP处理器和图像传感器sensor决定,如何利用好已有的硬件资源&…...
在CentOS7上更换为阿里云源
在CentOS 7上更换为阿里云YUM源可以通过以下步骤进行: 备份当前的YUM源配置文件 sudo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup 下载阿里云的YUM源配置文件 sudo curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirr…...
小程序跳转到本页面并传参
const pages getCurrentPages(); const currentPage pages[pages.length - 1]; // 当前页面路由 const route currentPage.route; // 当前页面参数 const options currentPage.options;// 构建新的 URL 参数 const newOptions {...options,// newParam: newValue }; // 你…...
Vim操作
1. Vim的模式 2.正常模式->编辑模式 在上⽅插⼊⼀⾏: O在下⽅插⼊⼀⾏: o (open)在当前光标前插⼊: i在⾏⾸插⼊: I在当前光标后插⼊: a在⾏尾插⼊: A 3.常见命令行 1、拷贝当前行 yy ,拷贝当前行向下…...
金碟云星空-企微通知
需求背景: 通过企业微信,及时发送金碟云星空消息,比如流程异常、审批节点、等需要关注数据和信息点 需求目的: 及时告警、高响应、自动化 技能要求: 前后端开发工具的运用与开发,本实例使用IDEA 企业…...
Java中的运算符“instanceof“详解
在Java中,instanceof运算符用于检查一个对象是否是某个特定类的实例,或者是否实现了某个特定接口。它返回一个布尔值(true或false),用于在运行时进行类型检查。这在处理多态性时尤其有用,可以帮助我们确定对…...
SVG无功补偿装置MATLAB仿真模型
“电气仔推送”获得资料(专享优惠) 模型简介 SVG(又称ASVG 或STATCOM)是Static Var Generator 的缩写,叫做静止无功发生器。也是做无功补偿的,比SVC 更加先进。其基本原理是将自换相桥式电路通过电抗器或…...
Java 虚拟机:承载 Java 生态的神奇魔盒
在软件开发的世界里,Java 虚拟机(JVM)就像一位智慧的管家,默默守护着 Java 生态系统的运行。它不仅让 Java 实现了"一次编写,到处运行"的梦想,更是成为了多种编程语言的运行平台。让我们一起走进…...
多输入多输出 | Matlab实现TCN-LSTM时间卷积神经网络结合长短期记忆神经网络多输入多输出预测
多输入多输出 | Matlab实现TCN-LSTM时间卷积神经网络结合长短期记忆神经网络多输入多输出预测 目录 多输入多输出 | Matlab实现TCN-LSTM时间卷积神经网络结合长短期记忆神经网络多输入多输出预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 多输入多输出 | Matlab实现…...
快速排序算法讲解(c基础)
一、快速排序的基本原理 快速排序是一种基于分治策略的高效排序算法。它的基本思想是: 选择一个基准元素(pivot),通过一趟排序将待排序序列分割成两部分,其中一部分的所有元素都比基准元素小,另一部分的所有…...
数据结构--二叉树的创建和遍历
目录 引入 定义 性质 二叉树的创建 迭代法 注意事项: 递归法 注意事项: 二叉树的遍历 深度优先 广度优先 先序遍历(前序遍历) 中序遍历 后序遍历 层序遍历 查找树结构中是否存在某数值 方法一: 方法…...
2024143读书笔记|《遇见》——立在城市的飞尘里,我们是一列忧愁而又快乐的树
2024143读书笔记|《遇见》——立在城市的飞尘里,我们是一列忧愁而又快乐的树 第1章 年年岁岁岁岁年年第2章 遇见第3章 有个叫“时间”的家伙走过第4章 初雪第6章 回首风烟 《华语散文温柔的一支笔:张晓风作品集(共5册)》作者张晓风…...
计算机毕业设计Python+卷积神经网络股票预测系统 股票推荐系统 股票可视化 股票数据分析 量化交易系统 股票爬虫 股票K线图 大数据毕业设计 AI
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...
leetcode hot100【LeetCode 48.旋转图像】java实现
LeetCode 48.旋转图像 题目描述 给定一个 n x n 的二维矩阵 matrix,表示一个图像。请你将该图像顺时针旋转 90 度。 说明: 你必须在 原地 修改输入的二维矩阵。你可以假设矩阵的所有元素将会是整数。 示例 1: 输入: [[1, 2, 3],[4, 5, 6],[7, 8, …...
力扣1382:将二叉搜索树便平衡
给你一棵二叉搜索树,请你返回一棵 平衡后 的二叉搜索树,新生成的树应该与原来的树有着相同的节点值。如果有多种构造方法,请你返回任意一种。 如果一棵二叉搜索树中,每个节点的两棵子树高度差不超过 1 ,我们就称这棵二…...
ElasticSearch学习篇19_《检索技术核心20讲》搜推广系统设计思想
目录 主要是包含搜推广系统的基本模块简单介绍,另有一些流程、设计思想的分析。 搜索引擎 基本模块检索流程 查询分析查询纠错 广告引擎 基于标签倒排索引召回基于向量ANN检索召回打分机制:非精确打分精准深度学习模型打分索引精简:必要的…...
实战ansible-playbook:Ansible Vault加密敏感数据(三)
在实际生产环境中,使用 Ansible Vault 来加密敏感数据是一种常见的做法。以下是一个详细的步骤和实际生产环境的使用案例,展示如何使用 Ansible Vault 来加密和管理敏感数据。 1. 安装 Ansible 确保你已经安装了 Ansible。如果还没有安装,可以使用以下命令进行安装: # 在…...
Python 视频合并工具
Python 视频合并工具 1.简介: 这是一个使用 moviepy 和 tkinter 创建的简单图形用户界面(GUI)应用程序,用于合并两个视频文件,并在两个视频之间添加淡入淡出过渡效果。程序的功能是: 选择两个视频&#…...
JavaScript实用工具lodash库
Lodash中文文档: Lodash 简介 | Lodash中文文档 | Lodash中文网 Lodash是一个功能强大、易于使用的JavaScript实用工具库,它提供了丰富的函数和工具,能够方便地处理集合、字符串、数值、函数等多种数据类型。通过使用Lodash,开发者可以大幅…...
mapstruct DTO转换使用
定义一个基础接口 package com.example.mapstruct;import org.mapstruct.Named;import java.time.LocalDate; import java.time.LocalDateTime; import java.time.ZoneId; import java.time.ZonedDateTime; import java.util.Date; import java.util.List;/*** Author zmn Dat…...
Linux(Centos7)---安装nginx(很简单)
安装 sudo yum install nginx -y开机启动与开启服务 sudo systemctl enable nginx sudo systemctl start nginx...
【接口调试】OpenAI ChatGPT API
【接口调试】AbortController 发出请求finish_reason 参数细节 – Openai ChatGPT 文档 发出请求 可以将以下命令粘贴到终端中以运行第一个API请求。 请确保用您的秘密API密钥替换$OPENAI_API_KEY。 curl https://api.openai.com/v1/chat/completions \-H "Content-Ty…...
云轴科技ZStack助力 “上科大智慧校园信创云平台”入选上海市2024年优秀信创解决方案
近日,为激发创新活⼒,促进信创⾏业⾼质量发展,由上海市经济信息化委会同上海市委网信办、上海市密码管理局、上海市国资委等主办的“2024年上海市优秀信创解决方案”征集遴选活动圆满落幕。云轴科技ZStack支持的“上科大智慧校园信创云平台”…...
CPU性能优化-CPU特性
现代CPU持续的添加新特性,使用这些特性可以大大简化找到底层问题的方法。 1 自顶向下微架构分析TMA,是一种识别应用程序低效使用CPU微架构的强大技术,识别负载的瓶颈,定位出现问题的代码具体位置,封装了CPU微架构中复杂…...
Idea使用Maven连接MySQL数据库
1.首先创建Maven文件 2.在pom.xml里添加代码,配置连接MySQL数据库所需要的配置文件。 <dependencies><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.49</version&…...
《深入浅出HTTPS》读书笔记(13):块密码算法之迭代模式(续)
CTR模式 每次迭代运算的时候要生成一个密钥流(keystream)。 各个密钥流之间是有关系的,最简单的方式就是密钥流不断递增,所以才叫作计数器模式。 ◎在处理迭代之前,先生成每个密钥流,有n个数据块࿰…...
使用Cmake导入OpenCV库的大坑记录
CMakeLists.txt cmake_minimum_required(VERSION 3.20)set(OpenCV_DIR D:/Package/opencv4/opencv/mingw-build/install) #这里根据自己OpenCV位置设定find_package(OpenCV REQUIRED)project(PROJ1 CXX)add_executable(PROJ1 main.cpp)target_include_directories(PROJ1 PR…...
免费网站建设视频教程/怎么创建网页
安全模式是hadoop的一种保护机制,用于保证集群中的数据块的安全性。 当集群启动的时候,会首先进入安全模式。当系统处于安全模式时会检查数据块的完整性。假设我们设置的副本数(即参数dfs.replication)是5,那么在data…...
安康网站建设电话/微信指数官网
我不能告诉你如何确定应该阅读lang_perl或lang_ruby 。 但是看一下autocommand文档会给gzip文件带来一个例子( :he gzip-example ):augroup gzipautocmd!autocmd BufReadPre,FileReadPre *.gz set binautocmd BufReadPost,FileReadPost *.gz [,]!gunzipautocmd BufR…...
多梦wordpress主题/长春网站制作系统
《信条》打造的光影奇观让观众眼前一亮,其展现出的时间逆行和顺行的人互相战斗的场面让人感到震撼和惊奇,然而这部电影却也令很多观众感觉想不通,觉得BUG太多。而深究这些BUG的原因,绝大多数都是由于电影中引入了“熵减”的概念&a…...
建网站的书籍/互联网营销主要学什么
经常有小伙伴做了一段时间功能测试后,想转做接口测试,但是又没有头绪。今天我们就来聊聊如何学习接口测试。 其实,我们都知道,学完软件测试的前三年,我们大致能做的工作方向就这么几个:功能测试、接口测试…...
网站开发前期需要啥/上海网络关键词优化
1. 问题描述: 公司里有 n 名员工,每个员工的 ID 都是独一无二的,编号从 0 到 n - 1。公司的总负责人通过 headID 进行标识。 在 manager 数组中,每个员工都有一个直属负责人,其中 manager[i] 是第 i 名员工的直属负责…...
做网站和做网页有什么区别/宁波seo托管公司
使用 get() 来处理返回的对象以得到基础的数组...