【CVPR2024】基于小波的傅里叶信息交互与频率扩散调整的水下图像恢复
论文信息
题目: Wavelet-based Fourier Information Interaction with Frequency Diffusion Adjustment for Underwater Image Restoration
基于小波的傅里叶信息交互与频率扩散调整的水下图像恢复
源码:https://github.com/ChenzhaoNju/WF-Diff
论文创新点
- 基于频域信息的探索与利用:论文首次深入探索了水下图像在频域中的特性,特别是通过傅里叶变换和小波变换,发现水下图像的退化信息主要包含在幅度分量中,尤其是低频子图像的幅度分量。
- WFI2-net网络设计:论文提出了一种新颖的Wavelet-based Fourier信息交互网络(WFI2-net),该网络通过结合Transformer和傅里叶先验信息,分别增强图像的高频和低频分量。特别是设计了宽Transformer块(WTB)和空间-频率融合块(SFFB),有效提升了图像的质量。
- 频率残差扩散调整模块(FRDAM):论文提出了一个创新的频率残差扩散调整模块(FRDAM),该模块通过在小波空间中使用两个扩散模型,分别学习高频和低频信息的残差分布,进一步细化图像的细节和纹理。
- 跨频率调节器(CFC):论文设计了一个跨频率调节器(CFC),用于实现高频和低频信息之间的交互。通过CFC,高频和低频特征能够相互增强,从而提升整体图像的表示能力。
摘要
水下图像通常受到复杂且多样化的退化影响,这不可避免地影响了水下视觉任务的效果。然而,大多数方法主要在图像的原始像素空间中进行操作,限制了对水下图像频率特性的探索,导致深度模型在生成高质量图像时的表示能力未能得到充分利用。本文提出了一种新颖的水下图像增强(UIE)框架,名为WF-Diff
,旨在充分利用频域信息和扩散模型的特性。WF-Diff由两个可分离的网络组成:基于小波的傅里叶信息交互网络(WFI2-net)和频率残差扩散调整模块(FR-DAM)。通过对频域信息的全面探索,WFI2-net旨在在小波空间中对频率信息进行初步增强。作者提出的FR-DAM可以进一步细化初始增强图像的高频和低频信息,可以视为一个即插即用的通用模块,用于调整水下图像的细节。通过上述技术,作者的算法在真实世界的水下图像数据集上展示了最先进的性能,并在视觉质量上具有竞争力。’
关键字
- 水下图像增强
- 频域信息
- 扩散模型
- 小波变换
- 傅里叶变换
3.方法
3.1整体框架
给定一幅水下图像作为输入,作者的目标是学习一个网络来生成消除输入图像颜色偏差并增强图像细节的输出
。WF-Diff旨在充分利用频域信息的特性和扩散模型的强大能力。具体来说,WF-Diff由两个可分离的网络组成:基于小波的傅里叶信息交互网络(WFI2-net)和频率残差扩散调整模块(FRDAM)。作者首先使用离散小波变换(DWT)将输入图像转换到小波空间,获得一个低频系数和三个高频系数。WFI2-net致力于实现频率信息的初步增强。作者充分整合了Transformer和傅里叶先验信息的特性,并设计了宽Transformer块(WTB)和空间-频率融合块(SFFB)来分别增强高频和低频内容。FRDAM由低频扩散分支(LDFB)和高频扩散分支(HDFB)组成,旨在进一步调整初始增强图像的高频和低频信息。需要注意的是,作者提出的FRDAM使用两个扩散模型分别学习真实图像和初始增强结果之间的高频和低频信息的残差分布。此外,作者提出的跨频率调节器(CFC)旨在实现高频和低频信息之间的跨频率交互。
3.2 离散小波和傅里叶变换
离散小波变换(DWT)已广泛应用于低级视觉任务。我们首先使用DWT将输入分解为多个频率子带,以便我们可以分别实现低频信息的颜色校正和高频信息的细节增强。给定一幅水下图像输入(I \in \mathbb{R}^{H ×W ×c}),我们使用带有Haar小波的DWT对输入进行分解。Haar小波由低通滤波器(L)和高通滤波器(H)组成,如下所示:
L = 1 2 [ 1 , 1 ] T , H = 1 2 [ 1 , − 1 ] T L=\frac{1}{\sqrt{2}}[1,1]^{T}, H=\frac{1}{\sqrt{2}}[1,-1]^{T} L=21[1,1]T,H=21[1,−1]T
我们可以获得四个子带,可表示为:
I L L , { I L H , I H L , I H H } = D W T ( I ) I_{LL},\left\{I_{LH}, I_{HL}, I_{HH}\right\}=DWT(I) ILL,{ILH,IHL,IHH}=DWT(I)
其中(I_{LL},{I_{LH}, I_{HL}, I_{HH}} \in \mathbb{R}^{\frac{H}{2} ×\frac{W}{2} ×c})分别表示输入的低频分量以及垂直、水平和对角方向的高频分量
。更具体地说,低频分量包含输入图像的内容和颜色信息,而其他三个高频系数包含全局结构和纹理的细节信息。子带被下采样到输入分辨率的一半,但由于DWT的双正交性,不会导致信息丢失。对于低频分量(I_{LL}),我们将在傅里叶空间中探索其特性。
然后,我们介绍傅里叶变换的操作
。给定一幅图像(x \in \mathbb{R}^{H ×W ×1}),其形状为(H ×W),将(x)转换到傅里叶空间(X)的傅里叶变换(\mathcal{F})可以表示为:
F ( x ) ( u , v ) = X ( u , v ) = 1 H W ∑ h = 0 H − 1 ∑ w = 0 W − 1 x ( h , w ) e − j 2 π ( h H u + w W v ) \mathcal{F}(x)(u, v)=X(u, v)=\frac{1}{\sqrt{H W}} \sum_{h=0}^{H-1} \sum_{w=0}^{W-1} x(h, w) e^{-j 2 \pi\left(\frac{h}{H} u+\frac{w}{W} v\right)} F(x)(u,v)=X(u,v)=HW1h=0∑H−1w=0∑W−1x(h,w)e−j2π(Hhu+Wwv)
其中(h),(w)是空间空间中的坐标,(u),(v)是傅里叶空间中的坐标。( F − 1 \mathcal{F}^{-1} F−1)表示( F \mathcal{F} F)的逆变换。傅里叶空间中的复分量(X(u, v))可以由幅度分量( A ( X ( u , v ) ) \mathcal{A}(X(u, v)) A(X(u,v)))和相位分量( P ( X ( u , v ) ) \mathcal{P}(X(u, v)) P(X(u,v)))表示如下:
A ( X ( u , v ) ) = R 2 ( X ( u , v ) ) + I 2 ( X ( u , v ) ) P ( X ( u , v ) ) = arctan [ I ( X ( u , v ) ) R ( X ( u , v ) ) ] \begin{aligned} &\mathcal{A}(X(u, v))=\sqrt{R^{2}(X(u, v))+I^{2}(X(u, v))}\\ &\mathcal{P}(X(u, v))=\arctan \left[\frac{I(X(u, v))}{R(X(u, v))}\right] \end{aligned} A(X(u,v))=R2(X(u,v))+I2(X(u,v))P(X(u,v))=arctan[R(X(u,v))I(X(u,v))]
其中(R(x))和(I(x))分别表示(X(u, v))的实部和虚部。请注意,傅里叶操作可以在特征图的每个通道中单独计算。
从图表中我们得出结论,水下图像的颜色退化信息主要包含在低频子带的幅度分量中,而纹理和细节退化信息主要包含在高频子带中。
3.3 频率初步增强
基于上述分析,在频率初步增强阶段,我们设计了一个简单但有效的WFI2-net,采用并行编码器 - 解码器(类似U - Net)的格式,分别恢复低频信息的幅度分量和高频分量。
我们还利用跳跃连接来连接编码器和解码器中相同级别的特征。对于高频分支,我们利用Transformer建模全局信息的优势来增强高频系数。我们使用多尺度信息设计了宽Transformer块(WTB),旨在建模长程依赖关系。我们的低频分支旨在恢复傅里叶空间中的幅度分量。为了获得丰富的频率和空间信息,我们设计了空间 - 频率融合块(SFFB)。
3.3.1 宽Transformer块
WTB如图3(a)所示。给定(I_{LH}),(I_{HL}),(I_{HH} \in \mathbb{R}^{\frac{H}{2} ×\frac{W}{2} ×c}),WTB首先通过卷积投影获得它们的嵌入特征(T_{in } \in \mathbb{R}^{3 ×\frac{H}{2} ×\frac{W}{2} ×C})。具体来说,WTB由一个注意力(Atten)模块和一个前馈网络(FFN)模块组成,其计算可以在WTB中表示为:
T ^ i = S A ( Q , K , V ) + C A ( L ) + T i − 1 \hat{T}_{i}=SA(Q, K, V)+CA(L)+T_{i-1} T^i=SA(Q,K,V)+CA(L)+Ti−1
Q , K , V , L = S p l i t ( W d W p ( N o r m ( T i − 1 ) ) ) Q, K, V, L=Split\left(W_{d}W_{p}\left(Norm\left(T_{i-1}\right)\right)\right) Q,K,V,L=Split(WdWp(Norm(Ti−1)))
T i = F F N ( N o r m ( T ^ i ) ) + T ^ i T_{i}=FFN\left(Norm\left(\hat{T}_{i}\right)\right)+\hat{T}_{i} Ti=FFN(Norm(T^i))+T^i
其中(SA)和(CA)分别指自注意力和通道注意力。Norm指归一化。(T_{i-1})表示当前WTB的输入嵌入。(W_{d})和(W_{p})分别表示1×1逐点卷积和多尺度内核深度卷积;(Split)指分割操作。(L)旨在关注局部信息。
3.3.2 空间 - 频率融合块
我们在图3(b)中展示了SFFB的结构,它有一个空间域单元(SDU)和一个频率域单元(FDU)用于双域表示的交互。在空间域单元中,我们采用多尺度卷积核以扩大有限的空间感受野。在获得空间嵌入(F_{S})后,我们首先利用FFT获得幅度(A(F_{s}))和相位(P(F_{s}))分量。然后,将(A(F_{s}))和(P(F_{s}))输入到两层1×1卷积中,得到(A’(F_{s}))和(P’(F_{s}))。最后,我们使用IFFT算法将(A’(F_{s}))和(P’(F_{s}))映射到图像空间,得到频率嵌入(F_{f})。空间域和频率域的融合嵌入可以表示为:
F s f = F s + F f F_{sf}=F_{s}+F_{f} Fsf=Fs+Ff
3.3.3 损失函数
我们将低频分支的输出表示为(I_{LL}‘),高频分支的输出表示为(I_{LH}’),(I_{HL}‘)和(I_{HH}’)。真实图像(G)可以通过DWT分解为(G_{LL}),(G_{LH}),(G_{HL}),(G_{HH})。高频损失可以表示为:
L h = ∥ I ( i ) ′ − G ( i ) ∥ 2 \mathcal{L}_{h}=\left\| I_{(i)}'-G_{(i)}\right\| _{2} Lh= I(i)′−G(i) 2
其中(i \in{LH, HL, HH})。对于低频信息,我们仅约束幅度分量。因此,低频损失可以表示为:
L a = ∥ A ( I L L ′ ) − A ( G L L ) ∥ 1 \mathcal{L}_{a}=\left\| \mathcal{A}\left(I_{LL}'\right)-\mathcal{A}\left(G_{LL}\right)\right\| _{1} La=∥A(ILL′)−A(GLL)∥1
其中(\mathcal{A}())指傅里叶变换中的幅度分量。最后,我们进一步使用Wasserstein GAN中的对抗损失作为重建损失(L_{rec})。
3.4 跨频率调节器
CFC的详细结构如图3(c)所示。CFC旨在实现跨频率交互。我们将 T i n T_{in} Tin和 F i n F_{in} Fin表示为CFC的输入特征,分别代表高频和低频嵌入。
对于高频嵌入特征 T i n ∈ R 3 × H 2 × W 2 × C T_{in} \in \mathbb{R}^{3 ×\frac{H}{2} ×\frac{W}{2} ×C} Tin∈R3×2H×2W×C,我们可以通过拆分操作得到 T L H T_{LH} TLH、 T H L T_{HL} THL、 T H H ∈ R H 2 × W 2 × c T_{HH} \in \mathbb{R}^{\frac{H}{2} ×\frac{W}{2} ×c} THH∈R2H×2W×c。
通过将这些提取的系数相加,我们得到聚合的高频嵌入。我们在CFC中使用不同的线性投影来构建Q和K:
Q = C o n v 1 × 1 ( T L H + T H L + T H H ) Q = Conv_{1×1}(T_{LH} + T_{HL} + T_{HH}) Q=Conv1×1(TLH+THL+THH)
K = C o n v 1 × 1 ( F i n ) K = Conv_{1×1}(F_{in}) K=Conv1×1(Fin)
类似地,可以得到高频嵌入的 V T V_T VT和低频嵌入的 V F V_F VF:
V T = C o n v 1 × 1 ( T L H + T H L + T H H ) V_T = Conv_{1×1}(T_{LH} + T_{HL} + T_{HH}) VT=Conv1×1(TLH+THL+THH)
V F = C o n v 1 × 1 ( F i n ) V_F = Conv_{1×1}(F_{in}) VF=Conv1×1(Fin)
然后,输出特征图 T o u t T_{out} Tout和 F o u t F_{out} Fout可以通过以下公式获得:
T o u t = R ( S o f t m a x ( Q K T d k ) V T ) T_{out} = R(Softmax(\frac{QK^T}{\sqrt{d_k}})V_T) Tout=R(Softmax(dkQKT)VT)
F o u t = S o f t m a x ( Q K T d k ) V F F_{out} = Softmax(\frac{QK^T}{\sqrt{d_k}})V_F Fout=Softmax(dkQKT)VF
其中 R R R表示复制操作, d k \sqrt{d_k} dk是矩阵 Q Q Q的列数。
我们优化网络估计的噪声与LDFB中实际添加的噪声 ϵ ( l ) \epsilon^{(l)} ϵ(l)之间的目标函数。因此,扩散损失过程为:
L d m ( θ ) = ∥ ϵ ( l ) − ϵ θ ( α ‾ t x 0 + 1 − α ‾ t ϵ ( l ) , x c ( l ) , t ) ∥ L_{dm}(\theta) = \left\| \epsilon^{(l)} - \epsilon_{\theta}(\sqrt{\overline{\alpha}_{t}} x_{0} + \sqrt{1 - \overline{\alpha}_{t}} \epsilon^{(l)}, x_{c}^{(l)}, t) \right\| Ldm(θ)= ϵ(l)−ϵθ(αtx0+1−αtϵ(l),xc(l),t)
一般来说,频率扩散调整过程是对初始增强的高频和低频分量进行细化。整个扩散过程可以表示为:
I ^ ( i ) = F H D F B ( ϵ s ( h ) , I ( i ) ′ ) , i ∈ { L H , H L , H H } \hat{I}_{(i)} = \mathcal{F}_{HDFB}(\epsilon_{s}^{(h)}, I_{(i)'}), i \in \{LH, HL, HH\} I^(i)=FHDFB(ϵs(h),I(i)′),i∈{LH,HL,HH}
I ^ L L = F L D F B ( ϵ s ( l ) , I L L ′ ) \hat{I}_{LL} = \mathcal{F}_{LDFB}(\epsilon_{s}^{(l)}, I_{LL}') I^LL=FLDFB(ϵs(l),ILL′)
其中 ϵ s ( h ) ∈ R 3 × H 2 × W 2 × 3 \epsilon_{s}^{(h)} \in \mathbb{R}^{3 ×\frac{H}{2} ×\frac{W}{2} ×3} ϵs(h)∈R3×2H×2W×3和 ϵ s ( l ) ∈ R H 2 × W 2 × 3 \epsilon_{s}^{(l)} \in \mathbb{R}^{\frac{H}{2} ×\frac{W}{2} ×3} ϵs(l)∈R2H×2W×3是高斯噪声。
3.5 频率扩散调整
FRDAM旨在利用扩散模型强大的表示能力进一步调整高频和低频信息。一般来说,FRDAM可以分为两个分支,即低频扩散分支(LDFB)和高频扩散分支(HDFB)。我们采用DDPM中提出的扩散过程为每个分支构建高频和低频信息的残差分布,这可以描述为正向扩散过程和反向扩散过程。
3.5.1 正向扩散过程
正向扩散过程可以看作是一个马尔可夫链,逐步向数据中添加高斯噪声。给定初始增强的频率分量 I i ′ I_{i}' Ii′及其真实值 G i G_{i} Gi, i ∈ { L L , L H , H L , H H } i \in \{LL, LH, HL, HH\} i∈{LL,LH,HL,HH},我们计算它们的残差分布 x 0 = G i − I i ′ x_{0} = G_{i} - I_{i}' x0=Gi−Ii′,然后根据时间步引入高斯噪声,如下所示:
q ( x t ∣ x t − 1 ) = N ( x t ; 1 − β t x t − 1 , β t I ) q(x_{t} | x_{t - 1}) = \mathcal{N}(x_{t}; \sqrt{1 - \beta_{t}} x_{t - 1}, \beta_{t} I) q(xt∣xt−1)=N(xt;1−βtxt−1,βtI)
其中 β t \beta_{t} βt是一个控制噪声方差的变量。引入 α t = 1 − β t \alpha_{t} = 1 - \beta_{t} αt=1−βt,这个过程可以描述为:
x t = α t x t − 1 + 1 − α t ϵ t − 1 , ϵ t − 1 ∼ N ( 0 , Z ) x_{t} = \sqrt{\alpha_{t}} x_{t - 1} + \sqrt{1 - \alpha_{t}} \epsilon_{t - 1}, \epsilon_{t - 1} \sim \mathcal{N}(0, \mathcal{Z}) xt=αtxt−1+1−αtϵt−1,ϵt−1∼N(0,Z)
随着高斯分布的合并,我们可以得到:
q ( x t ∣ x 0 ) = N ( x t ; α t x 0 , ( 1 − α ‾ t ) I ) q(x_{t} | x_{0}) = \mathcal{N}(x_{t}; \sqrt{\alpha_{t}} x_{0}, (1 - \overline{\alpha}_{t}) I) q(xt∣x0)=N(xt;αtx0,(1−αt)I)
3.5.2 反向扩散过程
反向扩散过程旨在从高斯噪声中恢复残差分布。反向扩散可以表示为:
p θ ( x t − 1 ∣ x t , x c ( l ) ) = N ( x t − 1 ; μ θ ( x t , x c ( l ) , t ) , σ t 2 Z ) p_{\theta}(x_{t - 1} | x_{t}, x_{c}^{(l)}) = \mathcal{N}(x_{t - 1}; \mu_{\theta}(x_{t}, x_{c}^{(l)}, t), \sigma_{t}^{2} \mathcal{Z}) pθ(xt−1∣xt,xc(l))=N(xt−1;μθ(xt,xc(l),t),σt2Z)
这里我们以LDFB为例, x c ( l ) x_{c}^{(l)} xc(l)指的是条件图像 I L L ′ I_{LL}' ILL′ 。 μ θ ( x t , x c ( l ) , t ) \mu_{\theta}(x_{t}, x_{c}^{(l)}, t) μθ(xt,xc(l),t)和 σ t 2 \sigma_{t}^{2} σt2分别是步骤 t t t估计的均值和方差。在LDFB和HDFB中,我们遵循文献[33]的设置,它们可以表示为:
μ θ ( x t , x c ( l ) , t ) = 1 α t ( x t − β t ( 1 − α ‾ t ) ϵ θ ( x t , x c ( l ) , t ) ) \mu_{\theta}(x_{t}, x_{c}^{(l)}, t) = \frac{1}{\sqrt{\alpha}_{t}}(x_{t} - \frac{\beta_{t}}{(1 - \overline{\alpha}_{t})} \epsilon_{\theta}(x_{t}, x_{c}^{(l)}, t)) μθ(xt,xc(l),t)=αt1(xt−(1−αt)βtϵθ(xt,xc(l),t))
σ t 2 = 1 − α ‾ t − 1 1 − α ‾ t β t \sigma_{t}^{2} = \frac{1 - \overline{\alpha}_{t - 1}}{1 - \overline{\alpha}_{t}} \beta_{t} σt2=1−αt1−αt−1βt
其中 ϵ θ ( x t , x c ( l ) , t ) \epsilon_{\theta}(x_{t}, x_{c}^{(l)}, t) ϵθ(xt,xc(l),t)是由U - net估计的值。
最终,经过细化的频率分量通过扩散生成的残差分布与初始增强的频率分量相加得到。然后,我们使用IDWT获得最终生成的图像:
I f i n a l = I D W T ( I ( i ) ′ + I ^ ( i ) , I L L ′ + I ^ L L ) , i ∈ { L H , H L , H H } I_{final} = IDWT(I_{(i)}' + \hat{I}_{(i)}, I_{LL}' + \hat{I}_{LL}), i \in \{LH, HL, HH\} Ifinal=IDWT(I(i)′+I^(i),ILL′+I^LL),i∈{LH,HL,HH}
4.实验
总结
小波变换:构建损失函数
频域空域混合增强:空域进行多尺度卷积核以扩大有限的空间感受野,频域使用傅里叶变换,1*1卷积以及逆傅里叶来获取频域信息。
相关文章:
【CVPR2024】基于小波的傅里叶信息交互与频率扩散调整的水下图像恢复
论文信息 题目: Wavelet-based Fourier Information Interaction with Frequency Diffusion Adjustment for Underwater Image Restoration 基于小波的傅里叶信息交互与频率扩散调整的水下图像恢复 源码:https://github.com/ChenzhaoNju/WF-Diff 论文创新点 基于频…...
《今日AI-编程-人工智能日报》
一、AI编程工具与行业动态 OpenAI推出GPT-4.5“猎户座”研究预览版 OpenAI发布了迄今为止“最大、最有知识”的模型GPT-4.5“猎户座”,面向Pro用户开放,并计划下周向Plus用户开放。该模型在自然对话中展现出情感智能,但在编程性能上不及深度研…...
计算机网络---SYN Blood(洪泛攻击)
文章目录 三次握手过程SYN Flood攻击原理防御措施协议层优化网络层拦截系统配置调整 TCP协议是 TCP/IP 协议栈中一个重要的协议,平时我们使用的浏览器,APP等大多使用 TCP 协议通讯的,可见 TCP 协议在网络中扮演的角色是多么的重要。 TCP 协议…...
DeepSeek教unity------UI元素长按响应
主要功能说明: 长按检测:通过记录指针按下的时间,判断是否达到 longClickTime,从而触发长按事件。状态管理:使用 StateEnum 枚举管理点击项的当前状态(未按下、按下等待长按、长按已触发)。…...
virtualbox安装ubuntu,配置静态ip
一.安装virtualbox和ubuntu 在VirtualBox中安装无界面版Ubuntu(即Ubuntu Server)的步骤如下: 准备工作 下载Ubuntu Server镜像:从Ubuntu官网 https://ubuntu.com/download/server 下载ISO文件。 安装VirtualBox:确保…...
比较Spring AOP和AspectJ
1. 介绍 当前有多个可用的AOP库,这些库必须能够回答许多问题: 它与我现有的或新的应用程序兼容吗?在哪里可以实施AOP?它与我的应用程序集成的速度有多快?性能开销是多少? 在本文中,我们将着眼…...
DeepSeek掘金——DeepSeek R1驱动的PDF机器人
DeepSeek掘金——DeepSeek R1驱动的PDF机器人 本指南将引导你使用DeepSeek R1 + RAG构建一个功能性的PDF聊天机器人。逐步学习如何增强AI检索能力,并创建一个能够高效处理和响应文档查询的智能聊天机器人。 本指南将引导你使用DeepSeek R1 + RAG构建一个功能性的PDF聊天机器人…...
大模型能给舆情分析带来哪些突破?
大模型在舆情分析领域带来了多方面的突破,具体体现在以下几个方面: 1.提升分析精度与效率 大模型通过深度学习和自然语言处理技术,能够高效地处理海量数据,并从中提取关键信息。例如,大模型可以自动识别文本中的情感倾…...
C++实现3D(EasyX)详细教程
一、关于3D 我们看见,这两个三角形是相似的,因此计算很简单 若相对物体的方向是斜的,计算三角函数即可 不会的看代码 二、EasyX简介 initgraph(长,宽) 打开绘图 或initgraph(长,宽…...
Mysql100道高频面试题
一、基础概念 1. 什么是数据库?DBMS的作用是什么? 数据库:是按照数据结构来组织、存储和管理数据的仓库。它允许用户高效地访问和管理数据。 DBMS(数据库管理系统):是一种软件系统,用于创建和…...
TCP长连接与短连接
TCP长连接与短连接 TCP(传输控制协议)中的长连接和短连接是两种不同的连接管理方式,各有优缺点: 短连接 短连接是指客户端与服务器完成一次数据交换后就断开连接。下次需要通信时,再重新建立连接。 特点࿱…...
【ISP】AF自动对焦
自动对焦方案主要有两种: 主动式对焦:通过TOF、双目进行主动测距,然后使用tuning数据进行对焦。 被动式对焦:利用sensor内容算法进行对焦。 被动式对焦有两种主要的方法: 反差对焦:通过前后推拉镜头找到…...
基于Python Django的人脸识别上课考勤系统(附源码,部署)
博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…...
探索Elasticsearch:认识与安装
目录 Elasticsearch的简介 Elasticsearch的定位 安装Elasticsearch 安装Kibana Elasticsearch的简介 Elasticsearch 是一款基于Apache Lucene的开源搜索引擎,在现代数据管理和分析领域占据重要地位。它以其高效的全文搜索、实时数据分析能力和灵活的分布式架构著…...
什么是DevOps
**DevOps** 是一种结合软件开发(**Development)和运维(**Operations)的方法论和文化,旨在通过自动化、协作和持续改进,缩短软件交付周期,提高系统可靠性和团队效率。其核心目标是打破开发与运维…...
Java类加载机制 双亲委派机制 八股速记版
JVM类加载机制是Java实现跨平台特性的核心机制之一,整个过程可分为以下五个阶段: 一、类加载流程 加载(Loading) 通过全限定名获取二进制字节流将字节流转换为运行时数据结构生成对应的java.lang.Class对象 验证(V…...
DeepSeek开源周Day6:DeepSeek V3、R1 推理系统深度解析,技术突破与行业启示
DeepSeek 在开源周第六天再次发文,中文原文、官方号在知乎 DeepSeek - 知乎DeepSeek-V3 / R1 推理系统概览 - 知乎deepseek-ai/open-infra-index: Production-tested AI infrastructure tools for efficient AGI development and community-driven innovation 引言 …...
校园快递助手小程序毕业系统设计
系统功能介绍 管理员端 1)登录:输入账号密码进行登录 2)用户管理:查看编辑添加删除 学生信息 3)寄件包裹管理:查看所有的包裹信息,及物流信息 4)待取件信息:查看已到达的…...
macOS - 使用 tmux
文章目录 安装 tmux使用更多快捷键说明 安装 tmux brew install tmux使用 在终端输入 tmux 进入 tmux 界面,然后 输入 Control Option B 进入交互模式 输入 % 左右分栏," 上下分割 上一个窗格:{,下一个:} PS…...
【网络安全 | 渗透测试】GraphQL精讲一:基础知识
未经许可,不得转载, 文章目录 GraphQL 定义GraphQL 工作原理GraphQL 模式GraphQL 查询GraphQL 变更(Mutations)查询(Queries)和变更(Mutations)的组成部分字段(Fields)参数(Arguments)变量别名(Aliases)片段(Fragments)订阅(Subscriptions)自省(Introspecti…...
配置后端验证功能之validation
哈喽,好久不见。最近项目内网开发导致断更了好久。今天介绍一个简单且有意思的开发技巧吧。之前用过validation后端验证功能但没进一步了解,都只是简单用一下。假如开发中要求传参必须按照规则 不能毫无底线什么都能传,本篇介绍的就是针对此功…...
C# 多线程
概述 进程和线程 进程:指在系统中运行的一个应用程序。 线程:进程中的一个执行任务。一个进程至少有一个线程,一个进程可以有多个线程,多个线程可共享数据。 多线程 多线程:在一个程序中同时运行多个线程࿰…...
钉钉MAKE AI生态大会思考
1. 核心特性 1.1 底层模型开放 除原有模型通义千问外,新接入猎户星空、智普、MinMax、月之暗面、百川智能、零一万物。 1.2 AI搜索 AI搜索贯通企业和个人散落在各地的知识(聊天记录、文档、会议、日程、知识库、项目等),通过大模型对知识逻辑化,直接生成搜索的答案,并…...
自然语言处理:文本表示
介绍 大家好,博主又来给大家分享知识了。今天给大家分享的内容是自然语言处理中的文本表示。 在当今数字化信息爆炸的时代,自然语言处理作为人工智能领域的重要分支,发挥着越来越关键的作用。 而文本表示,则是自然语言处理的基…...
flutter 网络请求封装与json序列化与反序列化
一、用到的工具库 网络请求库 dioflutter pub add diojson序列化与反序列化库 json_annotation//终端直接键入下命令安装 flutter pub add json_annotation dev:build_runner dev:json_serializable二、返回结果泛化封装 以 https://www.wanandroid.com/ api 接口返回结果为例…...
生成网页链接二维码
<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>生成二维码</title><script src"http…...
java关键字-instanceof
主要作用 A instanceof B主要判断以下三个内容(即左边的类型A能否转换为右边的B): 判断对象A是否是B类的对象;判断对象A实现了B接口;判断对象A是否继承了B类; A表示对象,B表示接口/类&#x…...
验证码识别:一文掌握手机验证码的自动化处理
文章目录 一、获取手机验证码1.1 通过短信接收验证码1.2 使用第三方短信接收服务1.3 使用ADB读取手机短信1.4 通过API获取验证码1.5 通过邮件接收验证码二、解析和提取验证码2.1 正则表达式提取2.2 JSON解析三、自动化输入验证码3.1 使用Selenium自动化Web应用3.2 使用Appium自…...
Uppy - 免费开源、功能强大的新一代 web 文件上传组件,支持集成到 Vue 项目
Uppy 这个优质的前端组件,可以解决几乎所有的文件上传问题,最近发布了 TS 重写的 4.0 新版本,实用性更强了。 Uppy 是一个 UI 外观时尚、模块化的 JavaScript 文件上传组件,这个组件可以与任何 web 技术栈集成,不仅轻…...
神经网络参数量计算
算一个只有两层的神经网络的参数量,我们需要考虑两层之间的连接权重和偏置项。以下是详细的计算步骤: 网络结构 输入层(第一层): 有 2 个神经元。 输出层(第二层): 有 3 个神经元。…...
如何为Java面试准备项目经验
1 提出问题 应届生朋友或Java程序员在找Java方面的工作时,一定会需要准备Java项目经验,但事实上不少求职者,是没有项目经验,或者只具有开源社区等的学习项目经验,这样的话,就很有可能在面试时无法有效地证…...
DeepSeek 与云原生后端:AI 赋能现代应用架构
📝个人主页🌹:一ge科研小菜鸡-CSDN博客 🌹🌹期待您的关注 🌹🌹 1. 引言 在当今快速发展的互联网时代,云原生(Cloud Native)架构已成为后端开发的主流趋势。云…...
自定义异常
在 Java 中,自定义异常是指根据特定需求创建的异常类。通过自定义异常,可以更好地表示应用程序中的特定错误情况,并提供更清晰的错误信息。以下是关于自定义异常的详细介绍和实现方法: 一、为什么需要自定义异常? 明确…...
题解:洛谷 P2199 最后的迷宫
题目https://www.luogu.com.cn/problem/P2199 显然,数据最大 ,数组我们开不下,动态开数组。 对于每一个查询,从起点开始,走一步判断是否能看到火焰杯。 如果已经没法走了,直接拆墙,输出 Poor…...
JDK包含内容的正确说法及API文档下载
JDK包含内容的正确说法及API文档下载 正确说法:JDK包含JRE和JDK开发工具,而JRE主要包含JVM和核心类库。 因为 旧版 JRE(Java 8 及之前):确实包含 Java 插件(Applet) 和 Java Web Start…...
CTF-web: 查看python代码抽象语法树
抽象语法树(Abstract Syntax Tree,简称 AST)是源代码的树状表示,展示了代码的语法结构。在 Python 中,ast 模块可以帮助你解析和操作 Python 代码的 AST。 1. 使用 ast 模块解析 Python 代码 我们可以使用 ast.parse …...
前端学习——HTML
VSCode常用快捷键 代码格式化:ShiftAltF 向上或向下移动一行:AltUp或AltDown 快速复制一行代码:ShiftAltUp或者ShiftAltDown 快速替换:CtrlH HTML标签 文本标签 定义着重文字 定义粗体文字 定义斜体文字 加重语气 删除字 无特…...
Ubuntu 下 nginx-1.24.0 源码分析 - ngx_open_file
ngx_open_file 定义在src/os/unix/ngx_files.h #define ngx_open_file(name, mode, create, access) \open((const char *) name, mode|create, access)#define NGX_FILE_RDONLY O_RDONLY #define NGX_FILE_WRONLY O_WRONLY #de…...
Window C++模拟单片机控制TFT屏幕和SD卡
因为每次都要做大量的测试,上传到单片机实在是太费事,所以写了这个模拟项目用来测试 很多方法我没有补充进去,因为太多了,如果有需要请自行补充 stdafx.h #pragma once#include<iostream> #include<atlimage.h> #in…...
记录一次FastDFS内部文件迁移过程
场景:dockr部署下的一个DFS环境,切换环境将原DFS内的所有文件全部迁移走,老版本的镜像包现不可使用,所以重新搭建并迁移外挂包下的所有文件 一、定位存储路径及备份 确定容器内存储路径 根据使用的Docker镜像不同࿰…...
【数据挖掘】Matplotlib
Matplotlib 是 Python 最常用的 数据可视化 库之一,在数据挖掘过程中,主要用于 数据探索 (EDA)、趋势分析、模式识别 和 结果展示。 📌 1. Matplotlib 基础 1.1 安装 & 导入 # 如果未安装 Matplotlib,请先安装 # pip instal…...
Python数据序列化技术:高效存储与传输的最佳实践
在现代软件开发中,数据序列化是一个关键环节,它允许我们将复杂的数据结构转换为可存储或可传输的格式,以便在不同的系统或程序之间共享和持久化。Python提供了多种数据序列化技术,每种技术都有其独特的性能优势和适用场景。本文将…...
大模型function calling:让AI函数调用更智能、更高效
大模型function calling:让AI函数调用更智能、更高效 随着大语言模型(LLM)的快速发展,其在实际应用中的能力越来越受到关注。Function Calling 是一种新兴的技术,允许大模型与外部工具或API进行交互,从而扩…...
HarmonyOS学习第12天:解锁表格布局的奥秘
表格布局初相识 不知不觉,我们在 HarmonyOS 的学习旅程中已经走到了第 12 天。在之前的学习里,我们逐步掌握了 HarmonyOS 开发的各种基础与核心技能,比如组件的基本使用、布局的初步搭建等,这些知识就像一块块基石,为我…...
基于 MetaGPT 自部署一个类似 MGX 的多智能体协作框架
MGX(由 MetaGPT 团队开发的 mgx.dev)是一个收费的多智能体编程平台,提供从需求分析到代码生成、测试和修复的全流程自动化功能。虽然 MGX 本身需要付费,但您可以通过免费服务和开源项目搭建一个类似的功能。以下是一个分步骤的实现…...
Cargo, the Rust package manager, is not installed or is not on PATH.
今天在Windows操作系统上通过pip 安装jupyter的时候遇到这个报错,Cargo, the Rust package manager, is not installed or is not on PATH.。 解决办法 官网:https://rustup.rs/# 下载:https://win.rustup.rs/x86_64 安装完成之后,…...
Spring AI:开启Java开发的智能新时代
目录 一、引言二、什么是 Spring AI2.1 Spring AI 的背景2.2 Spring AI 的目标 三、Spring AI 的核心组件3.1 数据处理3.2 模型训练3.3 模型部署3.4 模型监控 四、Spring AI 的核心功能4.1 支持的模型提供商与类型4.2 便携 API 与同步、流式 API 选项4.3 将 AI 模型输出映射到 …...
华为昇腾910b服务器部署DeepSeek翻车现场
最近到祸一台HUAWEI Kunpeng 920 5250,先看看配置。之前是部署的讯飞大模型,发现资源利用率太低了。把5台减少到3台,就出了他 硬件配置信息 基本硬件信息 按照惯例先来看看配置。一共3块盘,500G的系统盘, 2块3T固态…...
c++ 文件及基本读写总结
在 C 中,文件操作是非常重要的一部分,主要用于将数据存储到文件中,或者从文件中读取数据。C 标准库提供了fstream头文件,其中包含了用于文件操作的类,主要有ifstream(用于输入文件流,即从文件读…...
千峰React:组件与逻辑封装(上)
UI组件库及antd安装 UI组件库就是把页面的组件写好了,用的时候直接调用好了 进行一个安装的动作: 总之就是搭积木,可以调用里面写好的组件库拼接,也可以结合使用 antd布局和导航组件 组件总览 - Ant Design 这是通用部分 在用…...