VINS-Mono-后端优化 (二:预积分残差雅可比推导)


这里是求预积分对约束的参数块进行求导,有这个雅可比矩阵才能进行优化步长的计算,这个是预积分这个约束因子对各个优化变量的求导,后面还有相机的观测

残差块中的 θ \theta θ 是3维的,但是参数块中的四元数是4维的,因为相减后残差只剩虚部了,但是参数是从4个参数变过来的

预积分的残差具体如下,总共有15维的自由度,即y有15维
在这里插入图片描述
而参数块 x x x , 维护的是 k k k k + 1 k+1 k+1 时刻的 P , Q , V , B a , B g P,Q,V,Ba,Bg P,Q,V,Ba,Bg
P是3维,Q是四元数有4维,因为是过参数化的形式,而 V , B a , B g V,Ba,Bg V,Ba,Bg 总共是9维的参数块
所以整个参数块 x x x 的大小为 7+9

残差对残差参数块的求导
[ ∂ e ∂ P k ∂ e ∂ V k ∂ e ∂ P k + 1 ∂ e ∂ V k + 1 ∂ e 1 ∂ P k ∂ e 1 ∂ V k ∂ e 1 ∂ P k + 1 ∂ e 1 ∂ V k + 1 ⋮ ] \begin{bmatrix} \frac{\partial e}{\partial P_{k}} &\frac{\partial e}{\partial V_{k}}&\frac{\partial e}{\partial P_{k+1}}&\frac{\partial e}{\partial V_{k+1}}\\ \frac{\partial e_{1}}{\partial P_{k}} &\frac{\partial e_{1}}{\partial V_{k}}&\frac{\partial e_{1}}{\partial P_{k+1}}&\frac{\partial e_{1}}{\partial V_{k+1}}\\ \vdots \end{bmatrix} PkePke1VkeVke1Pk+1ePk+1e1Vk+1eVk+1e1
这个矩阵有15行,因为误差矩阵 e e e 是15维的(残差分别是 α , β , θ , B a , B g 构成,各自都是 3 个维度 \alpha,\beta,\theta,B_{a},B_{g}构成,各自都是3个维度 α,β,θ,Ba,Bg构成,各自都是3个维度),参数块 P P P 是7维,参数块 V V V 是9维
所以把这个雅可比矩阵分块成了 15 × 7 15×7 15×7 15 × 9 15×9 15×9 15 × 7 15×7 15×7 15 × 9 15×9 15×9 的形式
误差矩阵的维度和参数是不同的,求导就是对构成这个误差函数的里面的全部变量进行求导

由于我们维护的是 R w c R_{wc} Rwc ,所以我们的扰动是右乘的,十四讲里面维护的是 R c w R_{cw} Rcw 所以才使用左乘

对这个误差矩阵进行求导的时候,也可以按照误差参数块进行分别求导的,15=3*5,前三行雅可比使用位移的函数对 P k , V k , P k + 1 , V k + 1 P_{k},V_{k},P_{k+1},V_{k+1} Pk,Vk,Pk+1,Vk+1 进行求导

对位置 δ α \delta\alpha δα 进行求导

以下示例都是对 k k k 时刻的状态量进行求导, k + 1 k+1 k+1 时刻的同理
使用 δ α b k + 1 b k = … \delta\alpha^{b_{k}}_{b_{k+1}}=\dots δαbk+1bk= 分别对 P , Q , V , B a , B g P,Q,V,Ba,Bg P,Q,V,Ba,Bg 进行求导

位置误差 δ α \delta\alpha δα 对平移 P b k w P^{w}_{b_{k}} Pbkw 的求导

代码中的 Q i Q_{i} Qi R b k w R^{w}_{b_{k}} Rbkw ,所以代码中要取逆

∂ δ α b k + 1 b k ∂ P b k w = − R w b k \frac{\partial\delta\alpha^{b_{k}}_{b_{k+1}}}{\partial P^{w}_{b_{k}}}=-R^{b_{k}}_{w} Pbkwδαbk+1bk=Rwbk

位置 δ α \delta\alpha δα 对旋转 R w b k R^{b_{k}}_{w} Rwbk 进行求导

接下来是对旋转 R w b k R^{b_{k}}_{w} Rwbk 进行求导,由于代码中维护的是 R b k w R^{w}_{b_{k}} Rbkw ,所以这里的公式推导要取逆,方便代码的维护,这样是一个旋转方向的问题,如果直接左乘的话旋转方向就是反过来的了,这样操作的话旋转方向就是按照代码中维护的量的方向来进行操作

后面一串相乘后就是一个向量,当作向量 a a a
∂ δ α b k + 1 b k ∂ R w b k = l i m ϕ → 0 ( R b k w e x p ( ϕ ∧ ) ) − 1 ⋅ a − R w b k ⋅ a ϕ \frac{\partial\delta\alpha^{b_{k}}_{b_{k+1}}}{\partial R^{b_{k}}_{w}}=lim_{\phi\rightarrow0}\frac{(R^{w}_{b_{k}}exp(\phi^{\wedge}))^{-1}·a-R^{b_{k}}_{w}·a}{\phi} Rwbkδαbk+1bk=limϕ0ϕ(Rbkwexp(ϕ))1aRwbka

有公式 ( A ⋅ B ) − 1 = B − 1 ⋅ A − 1 (A·B)^{-1}=B^{-1}·A^{-1} (AB)1=B1A1
对旋转向量 ϕ \phi ϕ 取逆,相当于是换了一个旋转方向,所以 ϕ − 1 = − ϕ \phi^{-1}=-\phi ϕ1=ϕ
= ( I − ϕ ∧ ) R w b k ⋅ a − R w b k ⋅ a =(I-\phi^{\wedge})R^{b_{k}}_{w}·a-R^{b_{k}}_{w}·a =(Iϕ)RwbkaRwbka
= − ϕ ∧ ⋅ R w b k ⋅ a =-\phi^{\wedge}·R^{b_{k}}_{w}·a =ϕRwbka

叉乘有一个性质, a ⃗ × b ⃗ = − b ⃗ × a ⃗ \vec{a}×\vec{b}=-\vec{b}×\vec{a} a ×b =b ×a
a ⃗ × b ⃗ = a ∧ ⋅ b \vec{a}×\vec{b}=a^{\wedge}·b a ×b =ab
− b ⃗ × a ⃗ = − b ∧ ⋅ a -\vec{b}×\vec{a}=-b^{\wedge}·a b ×a =ba
a ∧ ⋅ b = − b ∧ ⋅ a a^{\wedge}·b=-b^{\wedge}·a ab=ba

则上面有
= ( R w b k ⋅ a ) ∧ ⋅ ϕ =(R^{b_{k}}_{w}·a)^{\wedge}·\phi =(Rwbka)ϕ

然后约掉分母上的 ϕ \phi ϕ
∂ δ α b k + 1 b k ∂ R w b k = ( R w b k ⋅ a ) ∧ \frac{\partial\delta\alpha^{b_{k}}_{b_{k+1}}}{\partial R^{b_{k}}_{w}}=(R^{b_{k}}_{w}·a)^{\wedge} Rwbkδαbk+1bk=(Rwbka)

对速度 δ β \delta\beta δβ 进行求导

也是使用 δ β b k + 1 b k = … \delta\beta^{b_{k}}_{b_{k+1}}=\dots δβbk+1bk= 分别对 P , Q , V , B a , B w P,Q,V,Ba,Bw P,Q,V,Ba,Bw 进行求导

速度 δ β \delta\beta δβ 对位置 P b k w P^{w}_{b_{k}} Pbkw 求导

由于公式里面不含位置,所以这块导数 = 0

速度 δ β \delta\beta δβ 对旋转 R w b k R^{b_{k}}_{w} Rwbk 求导

整体公式结构和上面的位移对旋转求导一致,所以求导结果也是 ( R w b k ⋅ a ) ∧ (R^{b_{k}}_{w}·a)^{\wedge} (Rwbka)

对旋转 δ θ \delta\theta δθ 进行求导

分别对 P , Q , V , B a , B g P,Q,V,Ba,Bg P,Q,V,Ba,Bg 进行求导

由于公式中不包含平移和速度量,所以对应的雅可比也为0
δ θ = 2 ⋅ ( γ b k + 1 b k ) − 1 ⊗ ( q b k w ) − 1 ⊗ q b k + 1 w \delta\theta=2·(\gamma^{b_{k}}_{b_{k+1}})^{-1}\otimes(q^{w}_{b_{k}})^{-1}\otimes q^{w}_{b_{k+1}} δθ=2(γbk+1bk)1(qbkw)1qbk+1w
k对应代码中的 i ,k+1对应代码中的 j

旋转 δ θ \delta\theta δθ q b k w q^{w}_{b_{k}} qbkw 进行求导

就是在右边加一个扰动,扰动为 [ 1 θ 2 ] T [1 \ \frac{\theta}{2}]^{T} [1 2θ]T
∂ δ θ ∂ q b k w = ( γ b k + 1 b k ) − 1 ⊗ ( q b k w ⊗ [ 1 θ 2 ] ) − 1 ⊗ q b k + 1 w − ( γ b k + 1 b k ) − 1 ⊗ ( q b k w ) − 1 ⊗ q b k + 1 w θ \frac{\partial \delta\theta}{\partial q^{w}_{b_{k}}}=\frac{(\gamma^{b_{k}}_{b_{k+1}})^{-1}\otimes(q^{w}_{b_{k}}\otimes\begin{bmatrix}1\\\frac{\theta}{2} \end{bmatrix})^{-1}\otimes q^{w}_{b_{k+1}}-(\gamma^{b_{k}}_{b_{k+1}})^{-1}\otimes(q^{w}_{b_{k}})^{-1}\otimes q^{w}_{b_{k+1}}}{\theta} qbkwδθ=θ(γbk+1bk)1(qbkw[12θ])1qbk+1w(γbk+1bk)1(qbkw)1qbk+1w

把逆乘进去,对于扰动那里其实就是把虚部 n ⃗ \vec n n 变一个旋转方向,所以是取个负号
= ( γ b k + 1 b k ) − 1 ⊗ [ 1 − θ 2 ] ⊗ q b k w − 1 ⊗ q b k + 1 w − ( γ b k + 1 b k ) − 1 ⊗ ( q b k w ) − 1 ⊗ q b k + 1 w =(\gamma^{b_{k}}_{b_{k+1}})^{-1}\otimes\begin{bmatrix}1\\-\frac{\theta}{2} \end{bmatrix}\otimes q^{w-1}_{b_{k}}\otimes q^{w}_{b_{k+1}}-(\gamma^{b_{k}}_{b_{k+1}})^{-1}\otimes(q^{w}_{b_{k}})^{-1}\otimes q^{w}_{b_{k+1}} =(γbk+1bk)1[12θ]qbkw1qbk+1w(γbk+1bk)1(qbkw)1qbk+1w

这里会用一个四元数的性质
a ⊗ b = [ a ] L ⋅ b = [ b ] R ⋅ a a\otimes b=[a]_{L}·b=[b]_{R}·a ab=[a]Lb=[b]Ra
具体看这篇文章讲解VINS-Mono-IMU预积分 (二:连续时间的PVQ积分+四元数求导)

公式变成
= 2 [ q b k w − 1 ⊗ q b k + 1 w ] R ⋅ [ [ ( γ b k + 1 b k ) − 1 ] L ⋅ [ 1 − θ 2 ] ] − [ q b k w − 1 ⊗ q b k + 1 w ] R ⋅ [ [ ( γ b k + 1 b k ) − 1 ] L ⋅ [ 1 0 ⋮ ] ] =2[q^{w-1}_{b_{k}}\otimes q^{w}_{b_{k+1}}]_{R}·\begin{bmatrix}[(\gamma^{b_{k}}_{b_{k+1}})^{-1}]_{L}·\begin{bmatrix}1\\-\frac{\theta}{2} \end{bmatrix}\end{bmatrix}-[q^{w-1}_{b_{k}}\otimes q^{w}_{b_{k+1}}]_{R}·\begin{bmatrix}[(\gamma^{b_{k}}_{b_{k+1}})^{-1}]_{L}·\begin{bmatrix}1\\ 0 \\\vdots \end{bmatrix}\end{bmatrix} =2[qbkw1qbk+1w]R[[(γbk+1bk)1]L[12θ]][qbkw1qbk+1w]R [(γbk+1bk)1]L 10
= 2 [ q b k w − 1 ⊗ q b k + 1 w ] R ⋅ [ ( γ b k + 1 b k ) − 1 ] L ⋅ [ [ 1 − θ 2 ] − [ 1 0 ⋮ ] ] =2[q^{w-1}_{b_{k}}\otimes q^{w}_{b_{k+1}}]_{R}·[(\gamma^{b_{k}}_{b_{k+1}})^{-1}]_{L}·\begin{bmatrix} \begin{bmatrix}1\\-\frac{\theta}{2} \end{bmatrix} - \begin{bmatrix}1\\ 0 \\\vdots \end{bmatrix}\end{bmatrix} =2[qbkw1qbk+1w]R[(γbk+1bk)1]L [12θ] 10
= [ q b k w − 1 ⊗ q b k + 1 w ] R ⋅ [ ( γ b k + 1 b k ) − 1 ] L ⋅ [ 0 − θ ] x y z θ =\frac{[q^{w-1}_{b_{k}}\otimes q^{w}_{b_{k+1}}]_{R}·[(\gamma^{b_{k}}_{b_{k+1}})^{-1}]_{L}· \begin{bmatrix}0\\-\theta \end{bmatrix}_{xyz}}{\theta} =θ[qbkw1qbk+1w]R[(γbk+1bk)1]L[0θ]xyz

θ \theta θ 约掉

= − [ q b k w − 1 ⊗ q b k + 1 w ] R ⋅ [ ( γ b k + 1 b k ) − 1 ] L =-[q^{w-1}_{b_{k}}\otimes q^{w}_{b_{k+1}}]_{R}·[(\gamma^{b_{k}}_{b_{k+1}})^{-1}]_{L} =[qbkw1qbk+1w]R[(γbk+1bk)1]L

这里乘完后的结果只有四元数的虚部 x y z xyz xyz
所以把四元数进行矩阵化的公式会有点变动
原本的
[ q ] L = q w ⋅ I + [ 0 − q T q q × ] [q]_{L}=q_{w}·I+\begin{bmatrix}0&-q^{T}\\q&q_{×} \end{bmatrix} [q]L=qwI+[0qqTq×]
[ q ] R = q w ⋅ I + [ 0 − q T q − q × ] [q]_{R}=q_{w}·I+\begin{bmatrix}0&-q^{T}\\q&-q_{×} \end{bmatrix} [q]R=qwI+[0qqTq×]
当只取虚部的时候
[ q ] L = q w ⋅ I + q × [q]_{L}=q_{w}·I+q_{×} [q]L=qwI+q×
[ q ] R = q w ⋅ I − q × [q]_{R}=q_{w}·I-q_{×} [q]R=qwIq×

对于一个四元数取逆的时候
q = [ c o s θ 2 n ⃗ ⋅ s i n θ 2 ] q=\begin{bmatrix}cos\frac{\theta}{2}\\\vec n·sin\frac{\theta}{2}\end{bmatrix} q=[cos2θn sin2θ]
其实就是把旋转轴的方向换成反方向,实部是不变的,只有虚部会反方向
q − 1 = [ c o s θ 2 − n ⃗ ⋅ s i n θ 2 ] q^{-1}=\begin{bmatrix}cos\frac{\theta}{2}\\-\vec n·sin\frac{\theta}{2}\end{bmatrix} q1=[cos2θn sin2θ]

[ q − 1 ] L = q w ⋅ I − q × = [ q ] R [q^{-1}]_{L}=q_{w}·I-q_{×}=[q]_{R} [q1]L=qwIq×=[q]R
[ q − 1 ] R = q w ⋅ I + q × = [ q ] L [q^{-1}]_{R}=q_{w}·I+q_{×}=[q]_{L} [q1]R=qwI+q×=[q]L

我们推导的公式是这样的
= − [ q b k w − 1 ⊗ q b k + 1 w ] R ⋅ [ ( γ b k + 1 b k ) − 1 ] L =-[q^{w-1}_{b_{k}}\otimes q^{w}_{b_{k+1}}]_{R}·[(\gamma^{b_{k}}_{b_{k+1}})^{-1}]_{L} =[qbkw1qbk+1w]R[(γbk+1bk)1]L

代码中用了上面的变换关系,代码中的公式是这样的
其实就是对四元数取个逆就可以进行左右乘矩阵的变换

= − [ q b k + 1 w − 1 ⊗ q b k w ] L ⋅ [ ( γ b k + 1 b k ) ] R =-[q^{w-1}_{b_{k+1}}\otimes q^{w}_{b_{k}}]_{L}·[(\gamma^{b_{k}}_{b_{k+1}})]_{R} =[qbk+1w1qbkw]L[(γbk+1bk)]R

γ \gamma γ 是预积分量来的
在计算这个雅可比前也还是会用实时修正的零偏对预积分量进行调整,调整后才进入雅可比的计算

对零偏进行求导

上面的公式中没有包含零偏的项,这里要用到预积分一阶近似更新公式
在这里插入图片描述
用这个近似公式代替前面的预积分,再对零偏进行求导

平移 δ α \delta\alpha δα 对 k/i 时刻的 b a 、 b w b_{a}、b_{w} babw的扰动

其实就是对预积分量进行一个扰动,此时预积分量前面的参数都等于是常数直接为0
公式为
− [ ( α ^ b k + 1 b k + J b a α Δ b a ) − α b k + 1 b k ] Δ b a = − J b a α \frac{-[(\hat \alpha^{b_{k}}_{b_{k+1}}+J^{\alpha}_{b_{a}}\Delta b_{a})-\alpha^{b_{k}}_{b_{k+1}}]}{\Delta b_{a}}=-J^{\alpha}_{b_{a}} Δba[(α^bk+1bk+JbaαΔba)αbk+1bk]=Jbaα

b g b_{g} bg 求导也是同理的, α 和 β 都是一样的建模方式 \alpha 和 \beta 都是一样的建模方式 αβ都是一样的建模方式,结果也是一样的
上面是对 i / k 时刻的零偏的求导,这里的零偏也是第 i 时刻的

δ b a \delta b_{a} δba 对 i时刻ba的求导就是 − I -I I b g b_{g} bg 同理

由于预积分量中零偏的建模中都是假设零偏与 k k k 时刻有关,与 k + 1 k+1 k+1 时刻无关的,因为假设预积分过程中零偏是不会变的,虽然有联合优化零偏,但是零偏是通过一阶近似的方式加入到第 k k k 时刻的零偏中,所以 α , β , θ \alpha,\beta,\theta α,β,θ 对于 k + 1 k+1 k+1 时刻的零偏求导都是 0

θ \theta θ 对陀螺仪零偏求导

2 ( γ b k + 1 b k [ 1 1 2 J b w γ δ b w k ] ) − 1 ⊗ ( q b k w ) − 1 ⊗ q b k + 1 w − 2 ( γ b k + 1 b k ) − 1 ⊗ ( q b k w ) − 1 ⊗ q b k + 1 w 2(\gamma^{b_{k}}_{b_{k+1}}\begin{bmatrix}1\\\frac{1}{2}J^{\gamma}_{b_{w}}\delta b_{w_{k}} \end{bmatrix})^{-1}\otimes(q^{w}_{b_{k}})^{-1}\otimes q^{w}_{b_{k+1}}-2(\gamma^{b_{k}}_{b_{k+1}})^{-1}\otimes(q^{w}_{b_{k}})^{-1}\otimes q^{w}_{b_{k+1}} 2(γbk+1bk[121Jbwγδbwk])1(qbkw)1qbk+1w2(γbk+1bk)1(qbkw)1qbk+1w

解开逆
= 2 [ 1 − 1 2 J b w γ δ b w k ] ⊗ ( γ b k + 1 b k ) − 1 ⊗ ( q b k w ) − 1 ⊗ q b k + 1 w − 2 ( γ b k + 1 b k ) − 1 ⊗ ( q b k w ) − 1 ⊗ q b k + 1 w =2\begin{bmatrix}1\\-\frac{1}{2}J^{\gamma}_{b_{w}}\delta b_{w_{k}} \end{bmatrix}\otimes(\gamma^{b_{k}}_{b_{k+1}})^{-1}\otimes(q^{w}_{b_{k}})^{-1}\otimes q^{w}_{b_{k+1}}-2(\gamma^{b_{k}}_{b_{k+1}})^{-1}\otimes(q^{w}_{b_{k}})^{-1}\otimes q^{w}_{b_{k+1}} =2[121Jbwγδbwk](γbk+1bk)1(qbkw)1qbk+1w2(γbk+1bk)1(qbkw)1qbk+1w

= [ 0 − J b w γ δ b w k ] ⊗ ( γ b k + 1 b k ) − 1 ⊗ ( q b k w ) − 1 ⊗ q b k + 1 w =\begin{bmatrix}0\\-J^{\gamma}_{b_{w}}\delta b_{w_{k}} \end{bmatrix}\otimes(\gamma^{b_{k}}_{b_{k+1}})^{-1}\otimes(q^{w}_{b_{k}})^{-1}\otimes q^{w}_{b_{k+1}} =[0Jbwγδbwk](γbk+1bk)1(qbkw)1qbk+1w

= [ ( γ b k + 1 b k ) − 1 ⊗ ( q b k w ) − 1 ⊗ q b k + 1 w ] R ⋅ [ 0 − J b w γ δ b w k ] ∂ b w k =\frac{\begin{bmatrix} (\gamma^{b_{k}}_{b_{k+1}})^{-1}\otimes(q^{w}_{b_{k}})^{-1}\otimes q^{w}_{b_{k+1}} \end{bmatrix}_{R}·\begin{bmatrix}0\\-J^{\gamma}_{b_{w}}\delta b_{w_{k}} \end{bmatrix}}{\partial b_{w_{k}}} =bwk[(γbk+1bk)1(qbkw)1qbk+1w]R[0Jbwγδbwk]

约掉 b w k b_{w_{k}} bwk
= [ ( γ b k + 1 b k ) − 1 ⊗ ( q b k w ) − 1 ⊗ q b k + 1 w ] R ⋅ − J b w γ =\begin{bmatrix} (\gamma^{b_{k}}_{b_{k+1}})^{-1}\otimes(q^{w}_{b_{k}})^{-1}\otimes q^{w}_{b_{k+1}} \end{bmatrix}_{R}·-J^{\gamma}_{b_{w}} =[(γbk+1bk)1(qbkw)1qbk+1w]RJbwγ

= − [ ( ⊗ q b k + 1 w ) − 1 ⊗ q b k w ⊗ γ b k + 1 b k ] L ⋅ J b w γ =-\begin{bmatrix} (\otimes q^{w}_{b_{k+1}})^{-1}\otimes q^{w}_{b_{k}}\otimes \gamma^{b_{k}}_{b_{k+1}} \end{bmatrix}_{L}·J^{\gamma}_{b_{w}} =[(qbk+1w)1qbkwγbk+1bk]LJbwγ

最后这样的形式就和代码中的公式一致了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/138658.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言 每日一题 PTA 11.7 day13

1.求e的近似值 自然常数 e 可以用级数 1 1 / 1! 1 / 2! ⋯ 1 / n! ⋯ 来近似计算。 本题要求对给定的非负整数 n&#xff0c;求该级数的前 n 1 项和。 代码实现 #include<stdio.h> void main() {int a, i, j; double b 1; double c 1;printf("请输入一个数\n…

Linux RPM包安装、卸载和升级

我们以安装 apache 程序为例。因为后续章节还会介绍使用源码包的方式安装 apache 程序&#xff0c;读者可以直观地感受到源码包和 RPM 包的区别。 RPM包默认安装路径 通常情况下&#xff0c;RPM 包采用系统默认的安装路径&#xff0c;所有安装文件会按照类别分散安装到表 1 所…

如何使用 GTX750 或 1050 显卡安装 CUDA11+

前言 由于兼容性问题&#xff0c;使得我们若想用较新版本的 PyTorch&#xff0c;通过 GPU 方式训练模型&#xff0c;也得更换较新版本得 CUDA 工具包。然而 CUDA 的版本又与电脑显卡的驱动程序版本关联&#xff0c;如果是低版本的显卡驱动程序安装 CUDA11 及以上肯定会失败。 比…

Java TCP服务端多线程接收RFID网络读卡器上传数据

本示例使用设备介绍&#xff1a;WIFI/TCP/UDP/HTTP协议RFID液显网络读卡器可二次开发语音播报POE-淘宝网 (taobao.com) import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; impor…

抢量双11!抖音商城「官方立减」 缘何成为“爆单神器”?

10月20日抖音商城双11好物节正式开跑&#xff0c;仅仅三天&#xff0c;抖音商城整体GMV对比去年同期提升了200%&#xff0c;而在开跑一周后&#xff0c;一些品牌的销售额已经超过了今年整个618&#xff0c;可谓增势迅猛。其中&#xff0c;平台官方特别推出的「官方立减」玩法&a…

计算机网络技术

深入浅出计算机网络 微课视频_哔哩哔哩_bilibili 第一章概述 1.1 信息时代的计算机网络 1. 计算机网络各类应用 2. 计算机网络带来的负面问题 3. 我国互联网发展情况 1.2 因特网概述 1. 网络、互连网&#xff08;互联网&#xff09;与因特网的区别与关系 如图所示&#xff0…

【机器学习2】模型评估

模型评估主要分为离线评估和在线评估两个阶段。 针对分类、 排序、 回归、序列预测等不同类型的机器学习问题&#xff0c; 评估指标的选择也有所不同。 1 评估指标 1.1准确率 准确率是指分类正确的样本占总样本个数的比例 但是准确率存在明显的问题&#xff0c;比如当负样本…

【React】05.JSX语法使用上的细节

JSX构建视图的基础知识 JSX&#xff1a;javascript and xml&#xff08;html&#xff09;把JS和HTML标签混合在了一起[并不是我们之前玩的字符串标签] 1、vscode如何支持JSX语法[格式化、快捷提示…] 创建的js文件&#xff0c;把后缀名设置为jsx即可&#xff0c;这样js文件中就…

单词规律问题

给定一种规律 pattern 和一个字符串 s &#xff0c;判断 s 是否遵循相同的规律。 这里的 遵循 指完全匹配&#xff0c;例如&#xff0c; pattern 里的每个字母和字符串 s 中的每个非空单词之间存在着双向连接的对应规律。 示例1: 输入: pattern “abba”, s “dog cat cat d…

可以体现Python语法精妙的十个例子!

文章目录 前言1.for - else2.一颗星*和两颗星**3.三元表达式4.with - as5.列表推导式6.列表索引的各种骚操作7.lambda函数8.yield 以及生成器和迭代器9.装饰器10.巧用断言assertPython技术资源分享1、Python所有方向的学习路线2、学习软件3、精品书籍4、入门学习视频5、实战案例…

“目标值排列匹配“和“背包组合问题“的区别和leetcode例题详解

1 目标值排列匹配 1.1 从目标字符串的角度来看&#xff0c;LC139是一个排列问题&#xff0c;因为最终目标子串的各个字符的顺序是固定的&#xff1f; 当我们从目标字符串 s 的角度来看 LC139 “单词拆分” 问题&#xff0c;确实可以认为它涉及到排列的概念&#xff0c;但这种…

MySQL -- mysql connect

MySQL – mysql connect 文章目录 MySQL -- mysql connect一、Connector/C 使用1.环境安装2.尝试链接mysql client 二、MySQL接口1.初始化2.链接数据库3.下发mysql命令4.获取执行结果5.关闭mysql链接6.在C语言中连接MySQL 三、MySQL图形化界面推荐 使用C接口库来进行连接 一、…

基于springboot实现致远汽车租赁平台管理系统项目【项目源码+论文说明】

基于springboot实现致远汽车租赁平台系统演示 摘要 首先,论文一开始便是清楚的论述了系统的研究内容。其次,剖析系统需求分析,弄明白“做什么”,分析包括业务分析和业务流程的分析以及用例分析,更进一步明确系统的需求。然后在明白了系统的需求基础上需要进一步地设计系统,主要…

防火防盗防小人 使用 Jasypt 库来加密配置文件

⚔️ 项目配置信息存放在哪&#xff1f; 在日常开发工作中&#xff0c;我们经常需要使用到各种敏感配置&#xff0c;如数据库密码、各厂商的 SecretId、SecretKey 等敏感信息。 通常情况下&#xff0c;我们会将这些敏感信息明文放到配置文件中&#xff0c;或者放到配置中心中。…

macOS Sonoma 14.2beta2(23C5041e)发布(附黑白苹果镜像地址)

系统介绍 黑果魏叔11 月 10 日消息&#xff0c;今日向 Mac 电脑用户推送了 macOS 14.2 开发者预览版 Beta 2 更新&#xff08;内部版本号&#xff1a;23C5041e&#xff09;&#xff0c;本次更新距离上次发布隔了 14 天。 macOS Sonoma 14.2 添加了 Music 收藏夹播放列表&…

2000-2022年上市公司数字化转型同群效应数据

2000-2022年上市公司数字化转型同群效应数据 1、时间&#xff1a;2000-2022年 2、指标&#xff1a;股票代码、年份、行业代码、行政区划代码、数字化转型程度-A、数字化转型程度-B、同行业同群-数字化转型程度-A_均值、同行业同群-数字化转型程度-A_中位数、同省份同群-数字化…

专业128分总分390+上岸中山大学884信号与系统电通院考研经验分享

专业课884 信号系统 过年期间开始收集报考信息&#xff0c;找到了好几个上岸学姐和学长&#xff0c;都非常热情&#xff0c;把考研的准备&#xff0c;复习过程中得与失&#xff0c;都一一和我分享&#xff0c;非常感谢。得知这两年专业课难度提高很多&#xff0c;果断参加了学长…

transformers安装避坑

1.4 下载rust编辑器 看到这里你肯定会疑惑了&#xff0c;我们不是要用python的吗&#xff1f; 这个我也不知道&#xff0c;你下了就对了&#xff0c;不然后面的transformers无法安装 因为是windows到官网选择推荐的下载方式https://www.rust-lang.org/tools/install。 执行文…

写一下关于部署项目到服务器的心得(以及遇到的难处)

首先要买个服务器(本人的是以下这个) 这里我买的是宝塔面板的,没有宝塔面板的也可以自行安装 点击登录会去到以下页面 在这个界面依次执行下面命令会看到账号和密码和宝塔面板内外网地址 sudo -s bt 14点击地址就可以跳转宝塔对应的内外网页面 然后使用上述命令提供的账号密…

RK3568平台 查看内存的基本命令

一.free命令 free命令显示系统使用和空闲的内存情况&#xff0c;包括物理内存、交互区内存(swap)和内核缓冲区内存。共享内存将被忽略。 Mem 行(第二行)是内存的使用情况。 Swap 行(第三行)是交换空间的使用情况。 total 列显示系统总的可用物理内存和交换空间大小。 used 列显…