优化 | 随机原始对偶混合梯度(SPDHG)算法及在图像处理中的应用

news2025/1/21 12:54:16

论文解读者:陈宇文,胡明杰,史铭伟,赵田田

许多实际问题都可以建模为凸优化问题。相比于直接求解原问题,将问题转化为鞍点问题往往会带来好处。求解鞍点问题的一种常用算法是原对偶混合梯度算法 (PDHG),它在各类问题问题当中均得到了广泛应用。然而,实际应用中遇到的大规模问题会面临较高的计算成本。本文[1]针对对偶变量可分离的鞍点问题提出了PDHG的随机扩展 (SPDHG)。在迭代过程中,可以通过不断积累来自以前迭代的信息来减小方差,进而减少随机性的负面影响。本文分析了一般的凸凹鞍点问题 (convex-concave saddle point problems) 和部分光滑/强凸或完全光滑/强凸问题。本文对任意采样 (arbitrary samplings) 的对偶变量进行分析,并获得已知的确定性结果作为特殊情况。在实验中,本文的多种随机方法在各种成像任务上显著优于确定性变体。

第一部分:问题模型和PDHG算法

1.1 问题形式

X \mathbb{X} X Y i   ( i = 1 , … , n ) \mathbb{Y}_i ~(i=1, \ldots, n) Yi (i=1,,n)是实希尔伯特空间,并定义 Y : = ∏ i = 1 n Y i \mathbb{Y}:=\prod_{i=1}^n \mathbb{Y}_i Y:=i=1nYi。此时我们可以根据 Y i \mathbb{Y}_i Yi的维数,将 y ∈ Y y\in\mathbb{Y} yY对应写作 y = ( y 1 , y 2 , … , y n ) y=\left(y_1, y_2, \ldots, y_n\right) y=(y1,y2,,yn)。设 f : Y → R ∞ : = R ∪ { + ∞ } f: \mathbb{Y} \rightarrow \mathbb{R}_{\infty}:=\mathbb{R} \cup\{+\infty\} f:YR:=R{+} g : X → R ∞ g: \mathbb{X} \rightarrow \mathbb{R}_{\infty} g:XR是凸函数,且 f f f是可分的,可写作 f ( y ) = ∑ i = 1 n f i ( y i ) f(y)=\sum_{i=1}^n f_i\left(y_i\right) f(y)=i=1nfi(yi)。设 A : X → Y \mathbf{A}: \mathbb{X} \rightarrow \mathbb{Y} A:XY是有界线性算子, A x = ( A 1 x , ⋯   , A n x ) \mathbf{A} x=(\mathbf{A}_1 x,\cdots,\mathbf{A}_n x) Ax=(A1x,,Anx)。问题可写为
min ⁡ x ∈ X { Φ ( x ) : = ∑ i = 1 n f i ( A i x ) + g ( x ) } . \min _{x \in \mathbb{X}}\left\{\Phi(x):=\sum_{i=1}^n f_i\left(\mathbf{A}_i x\right)+g(x)\right\}. xXmin{Φ(x):=i=1nfi(Aix)+g(x)}.
如果 f f f满足适当的条件,则它相当于求解鞍点问题
min ⁡ x ∈ X sup ⁡ y ∈ Y { Ψ ( x , y ) : = ∑ i = 1 n ⟨ A i x , y i ⟩ − f i ∗ ( y i ) + g ( x ) } , \min _{x \in \mathbb{X}}\sup _{y \in \mathbb{Y}}\left\{\Psi(x, y):=\sum_{i=1}^n\left\langle\mathbf{A}_i x, y_i\right\rangle-f_i^*\left(y_i\right)+g(x)\right\}, xXminyYsup{Ψ(x,y):=i=1nAix,yifi(yi)+g(x)},
其中 f i ∗ f_i^* fi f i f_i fi的Fenchel共轭函数,而 f ∗ ( y ) = ∑ i = 1 n f i ∗ ( y i ) f^*(y)=\sum_{i=1}^n f_i^*\left(y_i\right) f(y)=i=1nfi(yi) f f f的共轭函数。设 W : = X × Y \mathbb{W}:=\mathbb{X} \times \mathbb{Y} W:=X×Y,我们假设上述问题有最优解$w^{\sharp}\in\mathbb{W} ,并将其写作 ,并将其写作 ,并将其写作w{\sharp}=\left(x{\sharp}, y{\sharp}\right)=\left(x{\sharp}, y_1^{\sharp}, \ldots, y_n{\sharp}\right)$。鞍点$w{\sharp}$满足最优性条件
A i x ♯ ∈ ∂ f i ∗ ( y i ♯ ) , i = 1 , … , n , − A ∗ y ♯ ∈ ∂ g ( x ♯ ) . \mathbf{A}_i x^{\sharp} \in \partial f_i^*\left(y_i^{\sharp}\right), \quad i=1, \ldots, n, \quad-\mathbf{A}^* y^{\sharp} \in \partial g\left(x^{\sharp}\right). Aixfi(yi),i=1,,n,Ayg(x).

1.2 PDHG算法

对于正常数 τ \tau τ,可定义 W \mathbb{W} W上的带权范数 ∥ x ∥ τ − 1 2 = ⟨ τ − 1 x , x ⟩ \|x\|_{\tau^{-1}}^2=\left\langle\tau^{-1} x, x\right\rangle xτ12=τ1x,x。由此可给出邻近点算子的定义
prox ⁡ f τ ( y ) : = arg ⁡ min ⁡ x ∈ X { 1 2 ∥ x − y ∥ τ − 1 2 + f ( x ) } \operatorname{prox}_f^\tau(y):=\arg \min _{x \in \mathbb{X}}\left\{\frac{1}{2}\|x-y\|_{\tau^{-1}}^2+f(x)\right\} proxfτ(y):=argxXmin{21xyτ12+f(x)}
类似地,我们可将 τ \tau τ换成对称正定的矩阵。则PDHG算法可写作
x ( k + 1 ) = prox ⁡ g T ( x ( k ) − T A ∗ y ˉ ( k ) ) , y i ( k + 1 ) = prox ⁡ f i ∗ S i ( y i ( k ) + S i A i x ( k + 1 ) ) , i = 1 , … , n , y ˉ ( k + 1 ) = y ( k + 1 ) + θ ( y ( k + 1 ) − y ( k ) ) , \begin{aligned} & x^{(k+1)}=\operatorname{prox}_g^{\mathbf{T}}\left(x^{(k)}-\mathbf{T A}^* \bar{y}^{(k)}\right), \\ & y_i^{(k+1)}=\operatorname{prox}_{f_i^*}^{\mathbf{S}_i}\left(y_i^{(k)}+\mathbf{S}_i \mathbf{A}_i x^{(k+1)}\right), \quad i=1, \ldots, n, \\ & \bar{y}^{(k+1)}=y^{(k+1)}+\theta\left(y^{(k+1)}-y^{(k)}\right) , \end{aligned} x(k+1)=proxgT(x(k)TAyˉ(k)),yi(k+1)=proxfiSi(yi(k)+SiAix(k+1)),i=1,,n,yˉ(k+1)=y(k+1)+θ(y(k+1)y(k)),

其中 S = diag ⁡ ( S 1 , … , S n ) \mathbf{S}=\operatorname{diag}\left(\mathbf{S}_1, \ldots, \mathbf{S}_n\right) S=diag(S1,,Sn) S 1 , … , S n \mathbf{S}_1, \ldots, \mathbf{S}_n S1,,Sn T \mathbf{T} T都是对称正定的矩阵。

第二部分:Stochastic PDHG

2.1 随机PDHG算法

在PDHG算法中,每一次迭代都需要更新所有 y i ( i = 1 , ⋯   , n ) y_i (i=1,\cdots,n) yi(i=1,,n)的值。我们现在考虑每次抽取 { 1 , ⋯   , n } \{1,\cdots,n\} {1,,n}的一个子集 S \mathbb{S} S,然后只更新满足 i ∈ S i\in\mathbb{S} iS y i y_i yi。其中 S \mathbb{S} S的选取满足:对于每次迭代,任意的指标 i i i都以 p i > 0 p_i>0 pi>0的概率被包含在 S \mathbb{S} S中(这样的条件不难满足,常见的选取方式包括:全采样,即 S \mathbb{S} S以1的概率取到 { 1 , ⋯   , n } \{1,\cdots,n\} {1,,n}; 连续采样,即 S \mathbb{S} S p i p_i pi的概率取到 { i } \{i\} {i})。设 Q : = diag ⁡ ( p 1 − 1 I , … , p n − 1 I ) \mathbf{Q}:=\operatorname{diag}\left(p_1^{-1} \mathbf{I}, \ldots, p_n^{-1} \mathbf{I}\right) Q:=diag(p11I,,pn1I),则随机PDHG算法可写作

可以看出,SPDHG与PDHG的不同点在于 y i k + 1 , y ˉ k + 1 y_i^{k+1}, \bar{y}^{k+1} yik+1,yˉk+1的更新。SPDHG采用降采样对部分 y i k + 1 y_i^{k+1} yik+1进行更新,同时 y ˉ k + 1 \bar{y}^{k+1} yˉk+1的更新需要乘上新的系数矩阵 Q \mathbf{Q} Q

2.2 ESO条件

在随机PDHG算法的收敛性分析中,经常用到ESO条件。 S \mathbb{S} S p i ( i = 1 , ⋯   , n ) p_i (i=1,\cdots,n) pi(i=1,,n)如上文定义。设 C : X → Y \mathbf{C}: \mathbb{X} \rightarrow \mathbb{Y} C:XY是有界线性算子, C x = ( C 1 x , ⋯   , C n x ) \mathbf{C} x=(\mathbf{C}_1 x,\cdots,\mathbf{C}_n x) Cx=(C1x,,Cnx)。我们说 { v i } ⊂ R n \left\{v_i\right\} \subset \mathbb{R}^n {vi}Rn满足ESO条件,当且仅当对任意 z ∈ Y z \in \mathbb{Y} zY
E S ∥ ∑ i ∈ S C i ∗ z i ∥ 2 ≤ ∑ i = 1 n p i v i ∥ z i ∥ 2 . \mathbb{E}_{\mathbb{S}}\left\|\sum_{i \in \mathbb{S}} \mathbf{C}_i^* z_i\right\|^2 \leq \sum_{i=1}^n p_i v_i\left\|z_i\right\|^2. ES iSCizi 2i=1npivizi2.

这样的条件也不难满足。对于全采样,我们可取 C i = S i 1 / 2 A i T 1 / 2 \mathbf{C}_i=\mathbf{S}_i^{1 / 2} \mathbf{A}_i \mathbf{T}^{1 / 2} Ci=Si1/2AiT1/2 v i = ∥ C ∥ 2 v_i=\|\mathbf{C}\|^2 vi=C2;对于连续采样,我们可以取相同的 C i \mathbf{C}_i Ci以及 v i = ∥ C i ∥ 2 v_i=\left\|\mathbf{C}_i\right\|^2 vi=Ci2

2.3 收敛速度

在考虑SPDHG收敛性之前,我们首先简单介绍一下Bregman距离 D h ( w , v ) D_h(w, v) Dh(w,v)和对偶间隙 G ( x , y ) G(x,y) G(x,y)(duality gap)。

1)Bregman距离 D h ( w , v ) D_h(w, v) Dh(w,v)的作用与范数 (norm) 类似:

D h ( w , v ) : = h ( w ) − h ( v ) − ⟨ ∇ h ( v ) , w − v ⟩ . \begin{equation}D_h(w,v) := h(w)-h(v)-\langle \nabla h(v), w-v \rangle. \end{equation} Dh(w,v):=h(w)h(v)h(v),wv.

如果选取 h ( w ) = ∥ w ∥ 2 h(w) = \|w\|^2 h(w)=w2,那么此时有 D h ( w , v ) = ∥ w − v ∥ 2 D_h(w,v)=\|w-v\|^2 Dh(w,v)=wv2,也就是2-范数。其中,对于本文的minimax问题,作者定义 w : = ( x , y ) w := (x,y) w:=(x,y),并选取 h ( w ) : = g ( x ) + ∑ i = 1 n f ∗ ( y i ) h(w):= g(x) + \sum_{i=1}^n f^*(y_i) h(w):=g(x)+i=1nf(yi)

2)与此同时,对偶间隙 G ( x , y ) G(x,y) G(x,y)通常可用来进行收敛性分析,定义如下

G B 1 × B 2 ( x , y ) : = sup ⁡ y ~ ∈ B 2 Ψ ( x , y ~ ) − inf ⁡ x ~ ∈ B 1 Ψ ( x ~ , y ) . \begin{equation} G_{\mathbb{B}_1 \times \mathbb{B}_2}(x, y):=\sup _{\tilde{y} \in \mathbb{B}_2} \Psi(x, \tilde{y})-\inf _{\tilde{x} \in \mathbb{B}_1} \Psi(\tilde{x}, y). \end{equation} GB1×B2(x,y):=y~B2supΨ(x,y~)x~B1infΨ(x~,y).

minmax问题最优解 ( x ∗ , y ∗ ) (x^*,y^*) (x,y)满足对偶间隙 G ( x ∗ , y ∗ ) = 0 G(x^*,y^*) = 0 G(x,y)=0

对于收敛速度,文章中考虑了对应一般凸 (convex),半强凸 (semi-strongly convex) 和强凸 (strongly convex) 三类情况下Bregman距离 D h ( w k , w ∗ ) D_h(w^k, w^*) Dh(wk,w)与对偶间隙 G ( w ) G(w) G(w)的收敛速度。

一般凸问题

此时Bregman距离 D h ( w k , w ∗ ) D_h(w^k, w^*) Dh(wk,w)与对偶间隙 G ( w ) G(w) G(w)的收敛速度为 O ( 1 K ) O\left(\frac{1}{K}\right) O(K1)(见文中定理4.3)。需要注意的是,此时Bregman距离中 h ( w ) h(w) h(w)不是强凸,它的收敛性质和通常我们理解的范数是有区别的!!! (感兴趣的同学可以参考原论文中的Remark 4)

半强凸问题

半强凸问题被定义成 g ( x ) g(x) g(x)或者 f i ∗ ( y ) f^*_i(y) fi(y)中存在其中一个是强凸的。文章中假设 f i ∗ ( y ) f^*_i(y) fi(y)是强凸的 ( g ( x ) g(x) g(x)一般凸),那么对偶空间中的Bregman距离性质就会和正常的范数一致,对偶序列 { y k } \{y^k\} {yk}最终能收敛到对偶最优解 y ∗ y^* y。同时,当我们采用自适应的缩放矩阵 (adaptive scaling),那么序列速度将改进为 O ( 1 K 2 ) O\left(\frac{1}{K^2}\right) O(K21)(见文中定理5.1)。改进后的Algorithm 3如下所示:

同理,如果假设 g ( x ) g(x) g(x)是强凸的 ( f i ∗ ( y ) f^*_i(y) fi(y)一般凸),那么原始空间中的Bregman距离性质就会和正常的范数一致,原始序列 { x k } \{x^k\} {xk}最终能收敛到对偶最优解 x ∗ x^* x。并且在论文中Algorithm 2下,序列速度将改进为 O ( 1 K 2 ) O\left(\frac{1}{K^2}\right) O(K21)

强凸问题

如果问题中 g ( x ) g(x) g(x) f i ∗ ( y ) f^*_i(y) fi(y)都是强凸的,那么原始空间和对偶空间中的Bregman距离性质都会和正常的范数一致,序列 { ( x k , y k ) } \{(x^k,y^k)\} {(xk,yk)}最终能收敛到对偶最优解 ( x ∗ , y ∗ ) (x^*,y^*) (x,y)。并且对于Algorithm 1,序列 { ( x k , y k ) } \{(x^k,y^k)\} {(xk,yk)}将以线性速度收敛 (见文中定理6.1)。

另外的证明思路:​

值得一提的是,最近研究人员又发现了另外一种基于随机算子理论 (stochastic operator) 来分析SPDHG收敛速度的方法。感兴趣的同学可以阅读这篇论文[2]。

第三部分:数值实验

本章有四个例子关于total variation,我们选取Huber-TV deblurring (对应Sec 7.3的Algorithm 3实验) 展开说明,剩下的三个例子原理类似。我们首先介绍一下TV operator的基本概念,方便读者理解。

对于 x ∈ R d 1 × d 2 x\in\mathbb{R}^{d_1 \times d_2} xRd1×d2,TV算子定义如下:

R V β ( x ) = ∑ i , j ( ( x i , j + 1 − x i j ) 2 + ( x i + 1 , j − x i j ) 2 ) β 2 . \mathcal{R}_{V^\beta}(\mathbf{x})=\sum_{i, j}\left(\left(x_{i, j+1}-x_{i j}\right)^2+\left(x_{i+1, j}-x_{i j}\right)^2\right)^{\frac{\beta}{2}}. RVβ(x)=i,j((xi,j+1xij)2+(xi+1,jxij)2)2β.

上述方程的意思是: 计算每一个像素和横向下一个像素的差的平方,加上纵向下一个像素的差的平方; 然后开 β / 2 \beta/2 β/2次根。在这个例子中,我们考虑一个去模糊的卷积核,它有前向操作符 A 1 \mathbf{A}_1 A1类似于执行卷积 用一个移动的卷积核15*15像素的在长408,宽544像素的图片上。图片中的噪声用泊松方法在恒定的200像素的背景下,去估计数据的均值694.3。我们进一步假设有知道重建的图像应该是非负的和有上限的100倍。根据正向运算符的性质,只要 x ≥ 0 , A x ≥ 0 x \ge 0, \mathbf{A} x \geq 0 x0,Ax0。此时对偶问题下新的KL散度是

f i ∗ ( z ) = ∑ i = 1 N { r i 2 2 b i z i 2 + ( r i − r i 2 b i ) z i + r i 2 2 b i + 3 b i 2 − 2 r i − b i log ⁡ ( b i r i ) ,  if  z i < 1 − b i r i , − r i z i − b i log ⁡ ( 1 − z i ) ,  if  1 − b i r i ≤ z i < 1 , ∞ ,  if  z i ≥ 1. f_i^*(z)=\sum_{i=1}^N \begin{cases}\frac{r_i^2}{2 b_i} z_i^2+\left(r_i-\frac{r_i^2}{b_i}\right) z_i+\frac{r_i^2}{2 b_i}+\frac{3 b_i}{2}-2 r_i-b_i \log \left(\frac{b_i}{r_i}\right), & \text { if } z_i<1-\frac{b_i}{r_i}, \\ -r_i z_i-b_i \log \left(1-z_i\right), & \text { if } 1-\frac{b_i}{r_i} \leq z_i<1, \\ \infty, & \text { if } z_i \geq 1.\end{cases} fi(z)=i=1N 2biri2zi2+(ribiri2)zi+2biri2+23bi2ribilog(ribi),rizibilog(1zi),, if zi<1ribi, if 1ribizi<1, if zi1.

之后,我们可以进行实验前的参数设计。在这个实验中,我们选择 γ = 0.99 \gamma =0.99 γ=0.99考虑均匀采样,即 p i = 1 / n p_i = 1/n pi=1/n。在确定性情况下,子集的数量为 n = 1 n=1 n=1或者在随机情况下 n = 3 n=3 n=3。初始步长参数被选择为

PDHG: σ i = τ = γ / ∥ A ∥ ≈ 0.095 \sigma_i=\tau=\gamma /\|\mathbf{A}\| \approx 0.095 σi=τ=γ/∥A0.095;
DA-PDHG: σ ~ i ( 0 ) = μ f / ∥ A ∥ ≈ 0.096 , τ ( 0 ) = γ / ∥ A ∥ ≈ 0.095 \tilde{\sigma}_i^{(0)}=\mu_f /\|\mathbf{A}\| \approx 0.096, \tau^{(0)}=\gamma /\|\mathbf{A}\| \approx 0.095 σ~i(0)=μf/∥A0.096,τ(0)=γ/∥A0.095;
DA-SPDHG: σ ~ ( 0 ) = min ⁡ i μ i p i 2 τ 0 ∥ A i ∥ 2 + 2 μ i p i ( 1 − p i ) ≈ 0.073 \tilde{\sigma}^{(0)}=\min _i \frac{\mu_i p_i^2}{\tau^0\left\|\mathbf{A}_i\right\|^2+2 \mu_i p_i\left(1-p_i\right)} \approx 0.073 σ~(0)=miniτ0Ai2+2μipi(1pi)μipi20.073, τ ( 0 ) = 1 / ( n max ⁡ i ∥ A i ∥ ) ≈ 0.032 \tau^{(0)}=1 /\left(n \max _i\left\|\mathbf{A}_i\right\|\right) \approx 0.032 τ(0)=1/(nmaxiAi)0.032

图1 Huber-TV 去模糊双加速 (左图是对偶变量 y y y,右图为原始变量 x x x)

图1的定量结果表明算法收敛确实有 O ( 1 K 2 ) O\left(\frac{1}{K^2}\right) O(K21)的比率,如定理 5.1 所证明的。此外,他们还表明随机化和加速可以结合使用以进一步加速。

在另外一篇论文中[3], 采用确定性PDHG的2000次迭代结果(近似)作为视觉和定量比较的鞍点。我们首先看从 3 中 100 次预期算子评估后的重建图像可以看出,SPDHG比确定性PDHG快得多 (下图2)。虽然使用 PDHG 的重建仍然存在伪影,但使用 SPDHG 重建的图像在 100 次迭代后在视觉上与鞍点非常相似。

图2. 不同子集SPDGH 和PDGH比较 (横轴是不同数量操作符评估,纵轴是主要鞍点的相对距离)

另外,从图3中看,具有21和252个子集的SPDHG与仅经过 20 次预期操作员评估后的PDHG的比较。PDHG的结果在临床上无用,因为主要的解剖结构尚不可见。 另一方面,随着越来越多的子集,即使付出一点点努力,也可以重建一个合理的 (虽然不完美) 图像。与之相对的SPDHG,随着将像素点分割成越来越多的子集,即使付出⼀点点努力,也可以重建⼀个合理的 (虽然不完美) 图像 (如图3所示)。同时,还很容易看出,随着⼦集越多,伪影越少,这表明随着⼦集越多,算法收敛得越快。

图3: TV先验PET重建, 20个迭代周期下的结果

参考文献:

[1] Chambolle, Ehrhardt, Richtárik & Schönlieb (2018). Stochastic Primal-Dual Hybrid Gradient Algorithm with Arbitrary Sampling and Imaging Applications. SIAM Journal on Optimization, 28(4), 2783–2808.

[2] Ahmet Alacaoglu, Olivier Fercoq, and Volkan Cevher (2022). On the Convergence of Stochastic Primal-Dual Hybrid Gradient. SIAM Journal on Optimization, 32(2), 1288-1318.

[3] Ehrhardt, Matthias & Markiewicz, Pawel & Richtárik, Peter & Schott, Jonathan & Chambolle, Antonin & Schönlieb, Carola-Bibiane. (2017). Faster PET reconstruction with a stochastic primal-dual hybrid gradient method. SPIE Proc (2017).

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

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

相关文章

ubuntu-server22.04编译Redis7.0.11源码支持TLS

1.克隆redis源码: git clone https://github.com/redis/redis.git 编译前确认已安装GCC11与G++11和cmake及make及pkg-config 安装命令如下: apt install gcc -y apt install g++ -y apt install cmake -y apt install pkg-config 因为要支持TLS所以要安装OPENSSL开发库 ap…

阿里云CPFS与OSS之间数据双向流动机制

随着云上对象存储成本的逐渐降低&#xff0c;越来越多的企业利用阿里云OSS存储他们的大量数据并构建数据湖。现在阿里云文件存储CPFS与对象存储OSS实现了深度集成&#xff0c;客户可以在三十分钟内创建一个高性能CPFS文件系统并链接到他们的OSS bucket。当链接到OSS bucket以后…

实验二 ROS结合OpenCV示例——人脸识别

ROS结合OpenCV示例——人脸识别 一、实验原理&#xff1a;二、实验步骤&#xff1a;<1> 安装opencv 以及串口功能包<2> 测试opencv串口是否安装成功 三、程序分析&#xff1a; 一、实验原理&#xff1a; Opencv库是一个基于BSD许可发行的跨平台开源计算机视觉库&a…

STM32WB55_NUCLEO开发(9)----接收手机数据点亮LED

概述 本篇文章主要介绍如何使用STM32CubeMX对生成STM32WB工程&#xff0c;并通过与STM32WB配对&#xff0c;向该特征写入一个任意字节&#xff0c;绿色LED会切换。 硬件准备 首先需要准备一个开发板&#xff0c;这里我准备的是NUCLEO-WB55RG 的开发板&#xff1a; 选择芯片…

加拿大各省接受公立教育的初始年龄汇总 — 供携子女赴加的访学、博后参考

近年来到加拿大从事访问学者和博士后研究的申请者日益增多&#xff0c;有些申请者想带孩子同去上公立学校。因为加拿大各省教育局政策有差异&#xff0c;所以入学&#xff08;包括学前班&#xff09;年龄不同&#xff0c;为此知识人网小编整理本文为大家解惑答疑。 加拿大为本国…

GitHub Actions自动发布Package到Pub.dev

一、创建package或plugin 先创建一个package或者plugin 二、手动上传第一个版本到pub.dev flutter packages pub publish --serverhttps://pub.dartlang.org 三、在admin配置自动化发布 打开pub.dev中的对应的package按照以下图片配置 四、在项目跟目录配置发布脚本 1、在…

XMLMapperBuilder解析*mapper.xml

springboot的MybatisAutoConfiguration自动配置类会创建SqlSessionFactory&#xff0c;创建过程就是填充configuration属性&#xff0c;调用buildSqlSessionFactory()方法完成SqlSessionFactory创建&#xff0c;这其中就会创建XMLMapperBuilder解析mapper.xml和XMLConfigBuilde…

UHD在DPDK下进行编译

1.安装choco windows环境,用管理员权限打开 powershell 命令行界面。 输入命令:Set-ExecutionPolicy AllSigned 继续输入命令:Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]…

C++---区间DP/高精度计算---凸多边形的划分(每日一道算法2023.4.27)

注意事项&#xff1a; 本题是"区间DP—能量项链"的扩展题&#xff0c;可以先理解下那道题。 本题使用了"高精度乘法"和"高精度加法"&#xff0c;可以去这两篇文章看&#xff0c;有详解。 题目&#xff1a; 给定一个具有 N 个顶点的凸多边形&…

什么是SSO?

SSO&#xff08;Single Sign On&#xff09;单点登录。SSO是在多个应用系统中&#xff0c;用户只需要登录一次就可以访问所有相互信任的应用系统。它包括可以将这次主要的登录映射到其他应用中用于同一个用户的登录的机制。它是目前比较流行的企业业务整合的解决方案之一。 当…

中山大学_程序设计新手赛2023_4题的小朋友_总结

送自己一句话&#xff1a;即使生活很不顺利&#xff0c;也不要成为一个连自己都讨厌的人 那样&#xff0c;当你有一天回首过往&#xff0c;只不过是在演戏中匆匆做过这一生 题目&#xff1a;见我上传的资源 A:关于时间复杂度 解&#xff1a; 1.关键&#xff1a; 法一&…

前端开发之axios请求封装详细讲解

前端开发之axios请求封装 前言1、安装axios2、创建公共文件request3、导入axiso4、初始化axios5、axios请求拦截器6、axios响应拦截器7、handleData&#xff1a;处理请求后来的response8、CODE_MESSAGE&#xff1a;code信息 前言 在vue项目中&#xff0c;和后台交互获取数据这…

openEuler社区人才评定考试流程指引

最近因为公司工作的需要参加考试了openEuler社区人才评定考试&#xff0c;本次考试题型主要包括单选、多选、判断三类题型。考试内容基本都是操作系统使用相关的内容。 考试需要注意事项&#xff1a; 1.考试为线上答题考试&#xff0c;需开启摄像头。 2.考试期间请保持周围环…

SQL server增删改查(1)

SQL server数据类型 整数型: BIGINT INT SMALLINT 小数型: FLOAT DOUBLE 文本型: CHAR VARCHAR NCHAR NVARCHAR TEXT 日期和时间类型 DATE TIME DATETIME 布尔型: BIT 数据类型含义INT长整数(也可以写作INTEGER)SMALLINT短整数CHAR(n)长度为n的定长字符串, 不足n个字符的空白部…

Scala语言入门以及基本语法

文章目录 前言1.环境搭建1) IDEA中插件下载2) SDK下载配置 2.基本使用1&#xff09;var与val的区别2) .基本数据类型3).字符串的基本用法4) 控制结构1) if else2) for 循环3) while循环 5)类6) 函数 前言 scala在一种简洁的高级语言中结合了面向对象和函数式编程。Scala的静态…

8个免费的PNG素材网站推荐

很多设计小白都不知道什么是PNG。事实上&#xff0c;PNG是一种支持透明度的图像格式。当你想在设计中将图像与背景或文本混合时&#xff0c;它就会派上用场。 如果你没有时间为你正在处理的设计创建透明的PNG图像&#xff0c;你也可以使用我收集的PNG素材网站&#xff0c;以便…

【Linux从入门到精通】Linux常用基础指令(中)

本篇文章接上篇文章&#xff08;【Linux从入门到精通】Linux常用基础指令&#xff08;上&#xff09;&#xff09;进行详解。本章的指令相对较为重要&#xff0c;使用频率较高&#xff0c;难度相对上篇文章较难&#xff0c;也较为复杂。希望能对你的理解有所帮助。 文章目录 一…

(Open AI 极简教程)ChatGPT注册登录常见问题及其解决方法最全总结

好久没有更新过技术类的文章了&#xff0c;临近五一假期&#xff0c;首先祝大家假期游玩愉快&#xff0c;也希望本篇文章能够对你有所帮助&#xff0c;今天这篇博客将会把ChatGPT注册中可能遇到的问题彻头彻尾的讲一下&#xff0c;如果感觉有帮助的话就动动你发财的小手点个收藏…

蓝奥声核心技术分享——一种无线低功耗配置技术

1.技术背景 无线低功耗配置技术指基于对目标场景状态变化的协同感知而获得触发响应并进行智能决策&#xff0c;属于蓝奥声核心技术--边缘协同感知(EICS&#xff09;技术的关键支撑性技术之一。该项技术涉及物联网边缘域的无线通信技术领域&#xff0c;具体主要涉及网络服务节点…

3.龙芯2k1000 builroot文件系统编译过程

3.龙芯2k1000 builroot文件系统编译过程 文章目录 3.龙芯2k1000 builroot文件系统编译过程&#xff08;一&#xff09;、在Ubuntu环境下载并配置交叉编译链&#xff08;与内核编译工具链相同&#xff09;&#xff08;二&#xff09;、下载buildroot源码&#xff08;三&#xff…