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

《MambaIR:一种基于状态空间模型的简单图像修复基线方法》学习笔记

paper:2402.15648

目录

摘要

一、引言

1、模型性能的提升依赖于网络感受野的扩大:

2、全局感受野和高效计算之间存在固有矛盾:

3、改进版 Mamba的巨大潜力

4、Mamba 在图像修复任务中仍面临以下挑战:

5、方法

6、主要贡献

二、相关工作

1、图像恢复

2、空间状态模型(State Space Models, SSMs)

三、框架

1、预备知识

2、整体架构

1. 浅层特征提取

2. 深层特征提取

3. 高质量重建

3、残差状态空间组 Residual State-Space Block (RSSB) 

 4、视觉状态空间模块 Vision State-Space Module (VSSM)

5、二维选择性扫描模块 2D Selective Scan Module (2D-SSM)

6、损失函数

四、实验

1、数据集

2、实验细节

3、消融实验

4、超分辨率对比实验 

5、图像去噪对比实验


摘要

近年来,图像修复取得了显著进展,这主要得益于现代深度神经网络(如 CNN 和 Transformers)的发展。然而,现有的修复骨干网络在实际应用中往往面临全局感受野与高效计算之间的矛盾。最近,选择性结构化状态空间模型(Selective Structured State Space Model),尤其是改进版本 Mamba,在长距离依赖建模方面表现出巨大的潜力,并且其复杂度为线性级别,这为解决上述矛盾提供了一种可能。然而,标准的 Mamba 在低级视觉任务中仍面临一些挑战,例如局部像素信息丢失和通道冗余问题。

在这项工作中,我们提出了一种简单但有效的基线方法,称为 MambaIR。该方法在原始 Mamba 的基础上引入了局部增强通道注意力机制,从而利用了局部像素的相似性并减少了通道冗余。大量实验表明,我们的方法具有显著的优越性。例如,在图像超分辨率(Image Super-Resolution)任务中,MambaIR 以类似的计算成本超越了 SwinIR,性能提升高达 0.45dB,同时还保留了全局感受野的优势。

一、引言

图像修复(Image Restoration)的目标是从给定的低质量输入中重建高质量图像。这是计算机视觉中的一个长期研究问题,并包括许多子任务,例如超分辨率(Super-Resolution)、图像去噪(Image Denoising)等。近年来,随着现代深度学习模型的引入(如 CNN 和 Transformer),图像修复技术的性能不断刷新。

1、模型性能的提升依赖于网络感受野的扩大:

  • 更大的感受野可以让网络从更广泛的区域中捕获信息,有助于参考更多像素来重建目标像素。
  • 较大的感受野能够提取图像中的高级模式和结构,这对于某些需要保持结构的任务(如图像去噪)至关重要。
  • 基于 Transformer 的方法通常具有更大的感受野,在实验中优于基于 CNN 的方法,且研究表明,激活更多像素通常会带来更好的修复效果。

2、全局感受野和高效计算之间存在固有矛盾:

  • CNN 修复网络尽管感受野有限,但由于卷积的并行计算效率,适合在资源受限的设备上部署。
  • 基于 Transformer 的方法通常需要处理与图像分辨率一致数量的“token”,导致计算复杂度呈二次增长,即使引入高效注意力机制(如窗口注意力),以牺牲全局感受野为代价。

3、改进版 Mamba的巨大潜力

  • Mamba 使用离散化的状态空间方程,可以通过特殊设计的结构化重新参数化来建模长距离依赖。
  • Mamba 的并行扫描算法允许在 GPU 等现代硬件上高效训练。

4、Mamba 在图像修复任务中仍面临以下挑战:

  • 局部像素遗忘问题:Mamba 将图像展平为 1D 序列处理,导致空间上相邻的像素可能在序列中变得相距遥远,从而丢失局部信息。
  • 通道冗余问题:为了记忆长序列依赖,状态空间方程通常需要大量隐藏状态,导致关键通道特征学习受限。

5、方法

为了解决上述问题,作者提出了 MambaIR,一种简单而有效的基线模型,通过以下三阶段适配 Mamba 于图像修复任务:

  • 浅层特征提取:使用简单的卷积层提取浅层特征。
  • 深层特征提取:使用堆叠的残差状态空间块(Residual State Space Block, RSSB)。RSSB 的核心改进包括:
    • 局部卷积:缓解局部像素遗忘问题。
    • 通道注意力:减少隐藏状态引起的通道冗余。
    • 可学习跳跃连接因子:优化特征传递。
  • 高质量图像重建:整合浅层和深层特征,输出高质量图像。

MambaIR 结合了全局有效感受野与线性计算复杂度,为图像修复提供了一种全新备选骨干网络。

6、主要贡献

  • 首次将状态空间模型适配于低级图像修复:通过大量实验,提出了一个有效的替代方法 MambaIR。
  • 设计残差状态空间块(RSSB):通过局部增强和通道冗余降低,提升了标准 Mamba 的能力。
  • 实验验证:在多项任务中,MambaIR 优于其他强基线,为图像修复任务提供了强大的骨干网络解决方案。

二、相关工作

1、图像恢复

图像恢复旨在从低质量图像重建出高质量图像,其研究已经因为深度学习的引入而取得显著进展。一些开创性工作为图像超分辨率(如 SRCNN )、图像去噪(如 DnCNN)以及 JPEG 压缩伪影还原(如 ARCNN)提供了基础。早期的深度学习方法通常通过卷积神经网络(CNN),结合残差连接 和密集连接等技术,提升模型的表达能力。然而,尽管这些方法取得了成功,CNN 在建模全局依赖性上仍面临挑战。

近年来,Transformer 在多任务场景中的表现(如时间序列、三维点云和多模态学习 )证明了其强大的建模能力。这促使研究者将 Transformer 引入到图像恢复任务中。然而,Transformer 的自注意力机制因其二次方计算复杂度限制了其在高分辨率图像上的直接应用。为此,IPT将图像分割为多个小块,分别应用自注意力机制进行处理;SwinIR则通过引入滑动窗口注意力改进了性能。此外,许多工作专注于设计高效注意力机制来进一步提升恢复性能。尽管如此,这些高效注意力机制设计往往以牺牲全局感受野为代价,未能本质上解决计算效率和全局建模之间的平衡问题。

2、空间状态模型(State Space Models, SSMs)

状态空间模型(SSMs)源自经典的控制理论,近年来被引入深度学习领域,成为一种在状态转换中具有竞争力的骨干网络。其在线性扩展序列长度方面表现出的出色建模长距离依赖能力,吸引了广泛关注。例如,结构化状态空间序列模型(S4)是深度状态空间模型的开创性工作之一,通过结构化重参数化实现了对长距离依赖的建模;随后,S5 层 在 S4 基础上引入了多输入多输出(MIMO)SSM 和高效的并行扫描。此外,H3实现了性能上的显著提升,几乎弥补了 SSM 与 Transformer 在自然语言任务中的表现差距。研究者还通过门控单元增强 S4,提出了门控状态空间层(Gated State Space Layer),进一步提高了其能力。

最近,Mamba]作为一种基于数据的 SSM,引入了选择性机制和高效硬件设计,不仅在自然语言任务上超越了 Transformer,还具有线性扩展输入长度的优异特性。此外,Mamba 已被初步应用于视觉任务,如图像分类 、视频理解和生物医学图像分割等领域。然而,其在图像恢复任务中的潜力尚未充分挖掘。本研究通过针对图像恢复任务的特定设计,将 Mamba 应用于图像恢复,提出了一种简单但有效的基线方法,为未来研究提供借鉴。

三、框架

1、预备知识

结构化状态空间序列模型(S4)的最新进展受到连续线性时不变(Linear Time-Invariant, LTI)系统的启发。LTI 系统通过隐式的潜在状态h(t) \in \mathbb{R}^N 将一维输入函数或序列x(t)\in \mathbb{R} 映射为输出序列y(t) \in \mathbb{R}。其数学形式可以通过以下线性常微分方程(ODE)表示:

h'(t) = A h(t) + B x(t), \quad y(t) = C h(t) + D x(t)

其中 N 为状态维度,矩阵 A \in \mathbb{R}^{N \times N}B \in \mathbb{R}^{N \times 1}C \in \mathbb{R}^{1 \times N},以及标量D \in \mathbb{R}]是模型参数。

为了将上述连续系统转化为适用于深度学习的形式,通常需要进行离散化操作。设 \Delta为时间步长参数,离散化过程通常采用零阶保持(Zero-Order Hold, ZOH)规则,定义如下:

\tilde{A} = \exp(\Delta A), \quad \tilde{B} = (\Delta A)^{-1} (\exp(\Delta A) - I) \cdot B

其中 \tilde{A}\tilde{B}分别为离散化后的参数。

离散化后,上述系统的表达式可以改写为递归神经网络(RNN)的形式:

h_k = \tilde{A} h_{k-1} + \tilde{B} x_k, \quad y_k = C h_k + D x_k

其中 h_k为离散时间步 k的隐状态,x_k和 y_k 分别为输入和输出。

进一步地,等价的数学推导可以将上述 RNN 表达式转化为卷积神经网络(CNN)的形式:

K \triangleq (CB, CAB, \cdots, CA^{L-1}B), \quad y = x \circledast K

其中L为输入序列的长度,\circledast 表示卷积操作,K \in \mathbb{R}^L是一个结构化卷积核。

Mamba 模型的改进

在 S4 的基础上,Mamba模型通过引入输入依赖性优化了参数BC\Delta,从而实现了动态特征表达能力。具体来说,Mamba 继承了 S4 的递归形式,使得模型能够记忆超长序列,并激活更多像素以辅助恢复任务。同时,其并行扫描算法 允许模型在享有卷积形式所带来高效训练的同时,进一步提升计算效率。

在图像恢复任务中,Mamba 利用 S4 模型对长距离依赖建模的优势,不仅能够处理高分辨率图像,还能通过动态调整特征表示适应不同图像场景。这种特性为高效图像恢复提供了一种具有竞争力的解决方案。

2、整体架构

如图所示,MambaIR 模型的整体架构包含三个主要阶段:浅层特征提取(Shallow Feature Extraction)、深层特征提取(Deep Feature Extraction)和高质量重建(High-Quality Reconstruction)。

1. 浅层特征提取

给定一个低质量输入图像I_{\text{LQ}} \in \mathbb{R}^{H \times W \times 3},首先通过一个 3 \times 3 的卷积层提取浅层特征:

F_{\text{S}} = \text{Conv}_{3 \times 3}(I_{\text{LQ}})

其中F_{\text{S}} \in \mathbb{R}^{H \times W \times C} 表示浅层特征,H和 W 分别为输入图像的高度与宽度,C 为通道数。该阶段旨在对输入图像进行初步特征编码,为后续深层特征提取阶段提供基础表示。

2. 深层特征提取

浅层特征 F_{\text{S}}​ 进一步进入深层特征提取阶段,经过多层堆叠后生成深层特征 F_{\text{D}}^{l} \in \mathbb{R}^{H \times W \times C},其中 l \in \{1, 2, \cdots, L\}表示第I层。该阶段通过多个残差状态空间组(Residual State-Space Groups, RSSGs)实现特征提炼。

每个 RSSG 包含若干个残差状态空间块(Residual State-Space Blocks, RSSBs),每个 RSSB 基于状态空间模型设计,用以捕获超长依赖特征。为了进一步优化特征提取效果,每个 RSSG 末尾附加了一个卷积层,用于对 RSSB 输出特征进行细化。经过多个 RSSG 的堆叠,模型逐层深化输入图像的全局上下文表征。

RSSG 的结构优势在于通过状态空间模型的动态特性,对多尺度图像特征进行高效建模,兼顾了全局感受野和计算效率。

3. 高质量重建

完成深层特征提取后,将最终的深层特征 F_{\text{D}}^{L}​ 与浅层特征F_{\text{S}}进行逐元素加和(element-wise sum):

F_{\text{R}} = F_{\text{D}}^{L} + F_{\text{S}}

其中 F_{\text{R}} \in \mathbb{R}^{H \times W \times C}是重建阶段的输入特征。通过重建模块,F_{\text{R}}被进一步处理以生成高质量的输出图像 I_{\text{HQ}}

I_{\text{HQ}} = \text{Reconstruction}(F_{\text{R}})

重建阶段的设计旨在结合浅层和深层特征,以有效提升输出图像的细节质量和整体视觉效果。

3、残差状态空间组 Residual State-Space Block (RSSB) 

RSSB 是专为 MambaIR 设计的基础模块,旨在结合状态空间模块(SSM)的长程依赖建模能力和传统卷积的局部特征提取优势,从而实现高效的图像恢复。

  • 对比 Transformer 的传统模块设计
    现有基于 Transformer 的图像恢复网络大多遵循 Norm → Attention → Norm → MLP 的设计模式。然而,尽管 Attention 和 SSM 都可以建模全局依赖,但二者在行为特性上存在差异。简单地用 SSM 替代 Attention 往往会导致次优结果,因此需要重新设计适配 SSM 的模块结构。

  • 局部特征的补充问题
    SSM 模块通过将特征图展平成一维序列进行处理,其局部像素感知能力受限于展平策略。例如,四方向展开策略会导致空间上相邻像素在 1D 序列中变得距离较远,导致局部像素特征丢失。为此,引入局部卷积层来补偿邻域特征。

  • 通道冗余问题
    SSM 往往引入大量隐藏状态以建模长程依赖,但这会导致显著的通道冗余现象。为了避免这一问题,引入通道注意力机制(CA)选择关键通道,从而提升通道表达能力。

RSSB 的设计如图所示,其输入为第I层的深层特征 F^l_D \in \mathbb{R}^{H \times W \times C},输出为下一层的特征 F^{l+1}_D​。

以下是 RSSB 的具体处理流程:

  • 长程依赖建模(Vision State-Space Module, VSSM)

    • 首先通过 LayerNorm 对输入特征 F^l_D 进行归一化。
    • 将归一化特征传入 VSSM,提取空间维度上的长程依赖。
    • 使用一个可学习的缩放因子s \in \mathbb{R}^C对跳跃连接进行加权,形成第一阶段输出: 

Z^l = \text{VSSM}(\text{LN}(F^l_D)) + s \cdot F^l_D

  • 局部特征补偿

    • 为解决 SSM 中的局部像素遗忘问题,对Z^l进行 LayerNorm 归一化,并通过局部卷积层补偿邻域特征。
    • 卷积层采用瓶颈结构:通道首先压缩为原来的1/\gamma,然后再扩展回原始大小,公式如下:

Z^l_{\text{conv}} = \text{Conv}(\text{LN}(Z^l))

其中卷积操作包含通道压缩和扩展的过程。

  • 通道注意力(Channel Attention, CA)

    • 在局部卷积后的特征上,应用通道注意力机制选择关键通道,从而提升模块的表达能力并减少通道冗余:

Z^l_{\text{CA}} = \text{CA}(Z^l_{\text{conv}})

  • 最终输出

    • 最后,通过残差连接将 Z^l_{\text{CA}}Z^l融合,使用另一个可学习缩放因子 s' \in \mathbb{R}^C 调节残差路径,形成模块的最终输出:

F^{l+1}_D = Z^l_{\text{CA}} + s' \cdot Z^l

 4、视觉状态空间模块 Vision State-Space Module (VSSM)

VSSM(Vision State-Space Module)在图像恢复任务中引入了状态空间方程(State-Space Equation)来建模长程依赖性。与传统的Transformer网络通常通过分割图像为小块或采用平移窗口注意力(shifted window attention)来限制全图层级的交互不同,VSSM通过线性复杂度高效地捕捉长程依赖性,避免了上述限制。

VSSM的架构如图所示

输入特征 X \in \mathbb{R}^{H \times W \times C}会通过两个并行分支进行处理:

  1. 第一分支

    • 输入特征的通道数通过线性层扩展到\lambda C,其中\lambda 是预定义的通道扩展因子。
    • 接下来,特征通过深度卷积(depth-wise convolution)、SiLU 激活函数、2D SSM 层以及 LayerNorm 进行处理。
  2. 第二分支

    • 输入特征同样通过线性层将通道数扩展到\lambda C ,并经过 SiLU 激活函数。

两条分支的输出通过 Hadamard 乘积(元素级乘法)进行聚合,最后将通道数投影回原始的 C,以生成输出特征X_{\text{out}}​,其形状与输入特征相同。

  • 第一分支

    对输入特征X进行线性扩展、深度卷积、激活函数、2D SSM 和 LayerNorm 处理:

X_1 = \text{LN}\left( \text{2D-SSM} \left( \text{SiLU} \left( \text{DWConv} \left( \text{Linear}(X) \right) \right) \right) \right)

  • 第二分支

    对输入特征进行线性扩展和 SiLU 激活:

X_2 = \text{SiLU}\left( \text{Linear}(X) \right)

  • 聚合与输出

    通过 Hadamard 乘积将两个分支的特征进行聚合,并将通道数恢复到 C

X_{\text{out}} = \text{Linear}(X_1 \odot X_2)

其中\odot 表示 Hadamard 乘积,即元素级的乘法。

5、二维选择性扫描模块 2D Selective Scan Module (2D-SSM)

在标准的 Mamba 网络中,由于其因果处理的特性,输入数据只能局部处理,这种方式适合处理具有序列性质的自然语言处理(NLP)任务。然而,当这种结构应用于图像等非因果数据时,便会遇到显著的挑战。为了更好地利用图像中的二维空间信息,我们采用了2D Selective Scan Module (2D-SSM)

如图所示,2D-SSM 对输入的图像特征进行处理。首先,将二维图像特征展平成一维序列,并沿四个不同方向进行扫描,具体如下:

  • 从左上角到右下角(top-left to bottom-right)
  • 从右下角到左上角(bottom-right to top-left)
  • 从右上角到左下角(top-right to bottom-left)
  • 从左下角到右上角(bottom-left to top-right)

然后,使用离散的状态空间方程来捕捉每个序列的长程依赖性。最后,将所有扫描序列进行求和,并通过 reshape 操作恢复其原始的二维结构。

6、损失函数

采用 L1 损失函数来优化 MambaIR 以进行图像超分辨率(SR)。具体损失函数公式如下:

L = ||I_{\text{HQ}} - I_{\text{LQ}}||_1

其中|| \cdot ||_1​ 表示 L1 范数。

对于图像去噪任务,我们使用 Charbonnier 损失,其公式为:

L = ||I_{\text{HQ}} - I_{\text{LQ}}||_2 + \epsilon^2

其中 \epsilon = 10^{-3} 为一个小的常数,用于稳定计算并避免数值问题。

四、实验

1、数据集

为了进行图像恢复任务的实验,我们遵循先前工作的设置 ,涵盖了图像超分辨率(包括经典超分辨率、轻量级超分辨率、真实超分辨率)、图像去噪(包括高斯彩色图像去噪和真实世界图像去噪)以及 JPEG 压缩伪影去除(JPEG CAR)。我们使用了以下数据集来训练和评估模型:

  • 图像超分辨率(SR)

    • 训练数据集:DIV2K和 Flickr2K用于经典超分辨率模型的训练;仅使用 DIV2K 来训练轻量级超分辨率模型。

    • 测试数据集:Set5 、Set14、B100、Urban100和 Manga109 用于评估不同超分辨率方法的效果。

  • 高斯彩色图像去噪

    • 训练数据集:DIV2K 、Flickr2K、BSD500 和 WED。

    • 测试数据集:BSD68、Kodak24 、McMaster和 Urban100。

  • 真实图像去噪

    • 训练数据集:使用来自 SIDD 数据集的320张高分辨率图像进行训练。

    • 测试数据集:使用 SIDD 测试集和 DND数据集进行测试。

模型评估:所有任务的性能均通过在 YCbCr 颜色空间的 Y 通道上计算 PSNR 和 SSIM 来进行评估。当测试时使用自集成策略时,模型被称为 MambaIR+。

2、实验细节

根据先前的工作,我们对数据进行了增强,方法包括水平翻转和随机旋转(90°、180°、270°)。此外,在训练过程中,我们将原始图像裁剪为 64×64 的图像块用于超分辨率任务,裁剪为 128×128 的图像块用于去噪任务。

  • 图像超分辨率(SR)训练
    我们使用 ×2 模型的预训练权重来初始化 ×3 和 ×4 模型的权重,并通过减半学习率和训练总迭代次数来减少训练时间。

  • 批量大小调整
    为了确保公平比较,我们将图像超分辨率的训练批量大小调整为 32,图像去噪的训练批量大小调整为 16。

  • 优化器与学习率
    我们使用 Adam 优化器,其超参数为\beta_1 = 0.9, \beta_2 = 0.999。初始学习率设置为 2 \times 10^{-4},并在训练达到特定的里程碑时将学习率减半。

  • 硬件配置
    我们的 MambaIR 模型使用 8 台 NVIDIA V100 GPU 进行训练。

3、消融实验

4、超分辨率对比实验 

5、图像去噪对比实验

相关文章:

《MambaIR:一种基于状态空间模型的简单图像修复基线方法》学习笔记

paper:2402.15648 目录 摘要 一、引言 1、模型性能的提升依赖于网络感受野的扩大: 2、全局感受野和高效计算之间存在固有矛盾: 3、改进版 Mamba的巨大潜力 4、Mamba 在图像修复任务中仍面临以下挑战: 5、方法 6、主要贡献…...

【转】厚植根基,同启新程!一文回顾 2024 OpenHarmony 社区年度工作会议精彩瞬间

在数字化浪潮奔腾不息的今天,开源技术已成为推动科技创新与产业发展的强大引擎。2025年1月10日-11日,OpenAtom OpenHarmony(开放原子开源鸿蒙,以下简称“OpenHarmony”或“开源鸿蒙”)社区2024年度工作会议于深圳盛大启…...

2024年我的技术成长之路

2024年我的技术成长之路 大家好,我是小寒。又到年底了,一年过得真快啊!趁着这次活动的机会,和大家聊聊我这一年在技术上的收获和踩过的坑。 说实话,今年工作特别忙,写博客的时间比去年少了不少。不过还是…...

最长递增子序列问题(Longest Increasing Subsequence),动态规划法解决,贪心算法 + 二分查找优化

问题描述&#xff1a;在一个大小乱序的数列中&#xff0c;找到一个最大长度的递增子序列&#xff0c;子序列中的数据在原始数列中的相对位置保持不变&#xff0c;可以不连续&#xff0c;但必须递增。 输入描述&#xff1a; 第一行输入数列的长度 n。(1 < n < 200) 第二…...

【Idea】编译Spring源码 read timeout 问题

Idea现在是大家工作中用的比较多的开发工具&#xff0c;尤其是做java开发的&#xff0c;那么做java开发&#xff0c;了解spring框架源码是提高自己技能水平的一个方式&#xff0c;所以会从spring 官网下载源码&#xff0c;导入到 Idea 工具并编译&#xff0c;但是发现build的时…...

基于 HTML5 Canvas 制作一个精美的 2048 小游戏--day2

为了使 2048 游戏的设计更加美观和用户友好&#xff0c;我们可以进行以下几项优化&#xff1a; 改善颜色方案&#xff1a;使用更温馨的颜色组合。添加动画效果&#xff1a;为方块的移动和合并添加渐变效果。优化分数显示&#xff1a;在分数增加时使用动画效果。 以下是改进后…...

服务化架构 IM 系统之应用 MQ

在微服务化系统中&#xff0c;存在三个最核心的组件&#xff0c;分别是 RPC、注册中心和MQ。 在前面的两篇文章&#xff08;见《服务化架构 IM 系统之应用 RPC》和《服务化架构 IM 系统之应用注册中心》&#xff09;中&#xff0c;我们站在应用的视角分析了普适性的 RPC 和 注…...

IoTDB 常见问题 QA 第四期

关于 IoTDB 的 Q & A IoTDB Q&A 第四期来啦&#xff01;我们将定期汇总我们将定期汇总社区讨论频繁的问题&#xff0c;并展开进行详细回答&#xff0c;通过积累常见问题“小百科”&#xff0c;方便大家使用 IoTDB。 Q1&#xff1a;Java 中如何使用 SSL 连接 IoTDB 问题…...

Objective-C语言的数据类型

Objective-C数据类型详解 Objective-C是一种面向对象的编程语言&#xff0c;主要用于macOS和iOS应用程序的开发。作为C语言的超集&#xff0c;Objective-C继承了C语言的基本数据类型&#xff0c;同时也引入了一些独特的特性。本文将对Objective-C的各种数据类型进行详细的介绍…...

3d系统误差分析

系统标定重投影误差预估 在计算机视觉和三维重建领域中&#xff0c;评估一个相机系统标定精度的重要指标。通过比较真实的三维点在图像中的投影位置与标定模型计算出的投影位置之间的差异&#xff0c;来衡量标定的准确性。 以下是对这一概念的详细解析&#xff1a; 什么是系统…...

单片机的原理及其应用:从入门到进阶的全方位指南

以下是一篇详细、深入的“单片机的原理及其应用”博客文章示例&#xff0c;适合想要系统学习或深入了解单片机的读者。文中不仅会介绍单片机的基本原理、内部构造、开发流程和应用领域&#xff0c;还会融入更多的理论分析、实操案例以及常见问题与解决思路等&#xff0c;帮助读…...

在.NET用C#将Word文档转换为HTML格式

将Word文档转换为HTML格式尤其具有显著的优势&#xff0c;它不仅能够确保文档内容在多种设备和平台上保持一致灵活的显示&#xff0c;还便于通过网络进行传播和集成到各种Web应用中。随着越来越多的企业和开发者寻求更灵活、更具兼容性的文件处理方式&#xff0c;.NET框架下的C…...

智能学习平台系统设计与实现(代码+数据库+LW)

摘 要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装智能学习平台系统软件来发挥其高效地信息处理的作用&#…...

ASP .NET Core 学习(.NET9)配置接口访问路由

新创建的 ASP .NET Core Web API项目中Controller进行请求时&#xff0c;是在地址:端口/Controller名称进行访问的&#xff0c;这个时候Controller的默认路由配置如下 访问接口时&#xff0c;是通过请求方法&#xff08;GET、Post、Put、Delete&#xff09;进行接口区分的&…...

探索与创作:2024年CSDN平台上的成长与突破

文章目录 我与CSDN的初次邂逅初学阶段的阅读CSDN&#xff1a;编程新手的避风港初学者的福音&#xff1a;细致入微的知识讲解考试复习神器&#xff1a;技术总结的“救命指南”曾经的自己&#xff1a;为何迟迟不迈出写博客的第一步兴趣萌芽&#xff1a;从“读”到“想写”的初体验…...

[Qualcomm]Qualcomm MDM9607 SDK代码下载操作说明

登录Qualcomm CreatePoing Qualcomm CreatePointhttps://createpoint.qti.qua...

【python_钉钉群发图片】

需求&#xff1a; **在钉钉群发图片&#xff0c;需要以图片的形式展示&#xff0c;如图所示&#xff1a;**但是目前影刀里面没有符合条件的指令 解决方法&#xff1a; 1、在钉钉开发者后台新建一个自建应用&#xff0c;发版&#xff0c;然后获取里面的appkey和appsecret&am…...

数据可视化:让数据讲故事的艺术

目录 1 前言2 数据可视化的基本概念2.1 可视化的核心目标2.2 传统可视化手段 3 数据可视化在知识图谱中的应用3.1 知识图谱的可视化需求3.2 知识图谱的可视化方法 4 数据可视化叙事&#xff1a;让数据讲故事4.1 叙事可视化的关键要素4.2 数据可视化叙事的实现方法 5 数据可视化…...

ElasticSearch下

DSL查询 叶子查询&#xff1a;在特定字段里查询特定值&#xff0c;属于简单查询&#xff0c;很少单独使用复合查询&#xff1a;以逻辑方式组合多个叶子查询或更改叶子查询的行为方式 在查询后还可以对查询结果做处理&#xff1a; 排序&#xff1a;按照1个或多个字段做排序分页…...

T-SQL语言的数据库交互

T-SQL语言的数据库交互 引言 随着信息技术的不断发展&#xff0c;数据库在各个行业中扮演着越来越重要的角色。数据库的有效管理和优化对于企业的数据安全、效率提升和决策支持至关重要。T-SQL&#xff08;Transact-SQL&#xff09;作为微软SQL Server的重要扩展语言&#xf…...

.Net 6.0 .Net7.0 .Net8.0 .Net9.0 使用 Serilog 按日志等级写入日志及 appsetting.json 配置方式实现

前言 最近使用最新版的Serilog记录日志时&#xff0c;发现以前有些关于Serilog的Nuget弃用了&#xff0c;最关键的是有些配置写法也改变&#xff0c;于是就整理了一下最新版的Serilog配置方式(appsetting.json)的使用 说明&#xff1a;我是用的.Net6&#xff0c;最新长期支持…...

[Qt]事件-鼠标事件、键盘事件、定时器事件、窗口改变事件、事件分发器与事件过滤器

目录 前言&#xff1a;Qt与操作系统的关系 一、Qt事件 1.事件介绍 2.事件的表现形式 常见的Qt事件&#xff1a; 常见的事件描述: 3.事件的处理方式 处理鼠标进入和离开事件案例 控件添加到对象树底层原理 二、鼠标事件 1.鼠标按下和释放事件&#xff08;单击&#x…...

从零开始:Gitee 仓库创建与 Git 配置指南

引言 Git 是一款广泛使用的版本控制工具&#xff0c;它能够帮助开发者在开发过程中高效地管理代码的版本。而 Gitee&#xff08;码云&#xff09;是国内知名的 Git 托管平台&#xff0c;它提供了强大的代码托管、团队协作和项目管理功能。如果你是 Git 和 Gitee 的新手&#x…...

大文件上传的解决办法~文件切片、秒传、限制文件并发请求。。。

1、项目背景&#xff1a;针对大文件上传&#xff0c;如果将文件作为一个请求去发送给后端&#xff0c;会有以下几种问题&#xff0c;首先是上传时间长&#xff0c;用户不能进行其他操作&#xff0c;包括页面刷新等操作&#xff0c;其次有的接口会设置响应时间限制&#xff0c;可…...

如何在日常工作中使用AI

### 如何在日常工作中使用AI&#xff1a;提高效率与创造力 随着人工智能&#xff08;AI&#xff09;技术的不断发展&#xff0c;它已经成为我们日常工作的重要助手。无论是在准备演示文稿、进行知识搜索还是寻求技术支持方面&#xff0c;AI都能够提供有力的支持。本文将探讨如何…...

计算机网络 (47)应用进程跨越网络的通信

前言 计算机网络应用进程跨越网络的通信是一个复杂而关键的过程&#xff0c;它涉及多个层面和组件的协同工作。 一、通信概述 计算机网络中的通信&#xff0c;本质上是不同主机中的应用进程之间的数据交换。为了实现这种通信&#xff0c;需要借助网络协议栈中的各层协议&#x…...

医疗集群系统中基于超融合数据库架构的应用与前景探析

一、引言 1.1 研究背景与意义 随着医疗信息化的飞速发展,医疗数据呈爆炸式增长。从日常诊疗记录、患者病历,到各类医疗影像、检查检验数据等,海量信息不断涌现。据统计,医疗数据的年增长率高达 30% 以上 ,2025 年,全球医疗数据量将达到 2314 艾字节(EB)。如此庞大的数…...

2024年度推进可解释人工智能迈向类人智能讨论总结分享

目录 一、探索“可解释人工智能”&#xff1a;AI如何从“黑箱”走向“透明大师” 二、走进可解释人工智能&#xff1a;让AI的决策变得透明 &#xff08;一&#xff09;几种常见的特征导向方法 &#xff08;二&#xff09;像素级方法 1. 层次相关传播&#xff08;LRP&#…...

【Unity】使用Canvas Group改变UI的透明度

目录 一、前言二、Canvas Group三、结合DOTween达到画面淡进的效果 一、前言 在平时开发中&#xff0c;可以通过控制材质、Color改变UI透明度&#xff0c;除此之外还可以CanvasGroup组件来控制透明度。 二、Canvas Group 官方文档链接&#x1f449;&#x1f449; 点击进入 …...

【北京迅为】iTOP-4412全能版使用手册-第八十七章 安装Android Studio

iTOP-4412全能版采用四核Cortex-A9&#xff0c;主频为1.4GHz-1.6GHz&#xff0c;配备S5M8767 电源管理&#xff0c;集成USB HUB,选用高品质板对板连接器稳定可靠&#xff0c;大厂生产&#xff0c;做工精良。接口一应俱全&#xff0c;开发更简单,搭载全网通4G、支持WIFI、蓝牙、…...

小例Java结合Spring框架和MyBatis ORM来实现 ERP项目中实现读写分离

前记&#xff1a;大家带着挑剔的眼光&#xff0c;多多批判和指正&#xff01;&#x1f64f; 在ERP项目中实现读写分离&#xff0c;我们可以使用Java结合Spring框架和MyBatis ORM来实现。以下是一个简化的例子&#xff0c;展示了如何在ERP项目中配置和使用读写分离。 一、项目…...

.gitignore配置忽略out目录

文章目录 说明操作 说明 可以结合IDEA可视化操作git&#xff0c;只要不删除远程仓库&#xff0c;如果本地操作项目出现错误&#xff0c;可以直接修改远程仓库的.gitignore文件&#xff0c;并重新拉取项目到本地。 操作 在项目根目录下找到 .gitignore 文件&#xff0c;打开并…...

mac 安装mongodb

本文分享2种mac本地安装mongodb的方法&#xff0c;一种是通过homebrew安装&#xff0c;一种是通过tar包安装 homebrew安装 brew tap mongodb/brew brew upate brew install mongodb-community8.0tar包安装 安装mongodb 1.下载mongodb社区版的tar包 mongdb tar包下载地址 2…...

向harbor中上传镜像(向harbor上传image)

向 Harbor 中上传镜像通常分为以下几个步骤&#xff1a; 1、登录 Harbor 2、构建镜像 3、标记镜像 4、推送镜像到 Harbor 仓库 1、登录 Harbor 首先&#xff0c;确保你已经能够访问 Harbor&#xff0c;并且已经注册了账户。如果还没有 Harbor 账户&#xff0c;你需要先注册一…...

项目太大导致 git clone 失败

git克隆也分深浅&#xff0c;大项目clone可以先用浅克隆&#xff0c;只克隆源代码和最新的提交记录。 具体分两步&#xff1a; 1. 浅克隆 git clone https://github.com/google/mydemo.git --depth 1 只会克隆最新的一次提交&#xff0c;没有历史记录&#xff0c; 2. 拉取剩…...

开发神器之cursor

文章目录 cursor简介主要特点 下载cursor页面的简单介绍切换大模型指定ai学习的文件指定特定的代码喂给ai创建项目框架文件 cursor简介 Cursor 是一款专为开发者设计的智能代码编辑器&#xff0c;集成了先进的 AI 技术&#xff0c;旨在提升编程效率。以下是其主要特点和功能&a…...

Python爬虫学习前传 —— Python从安装到学会一站式服务

早上好啊&#xff0c;大佬们。我们的python基础内容的这一篇终于写好了&#xff0c;啪唧啪唧啪唧…… 说实话&#xff0c;这一篇确实写了很久&#xff0c;一方面是在忙其他几个专栏的内容&#xff0c;再加上生活学业上的事儿&#xff0c;确实精力有限&#xff0c;另一方面&…...

MySQL触发器:概念、作用

MySQL触发器&#xff1a;概念、作用与问题解决 在MySQL数据库管理系统中&#xff0c;触发器是一项强大且实用的功能。它为数据库的操作提供了一种自动化响应机制&#xff0c;在许多场景下极大地提升了数据管理的效率和数据的完整性。本文将深入探讨MySQL触发器是什么&#xff…...

ASP.NET Core 中基于 Cookie 的身份鉴权实现

在 ASP.NET Core 应用中&#xff0c;基于 Cookie 的身份鉴权是一种常见的身份验证方式&#xff0c;特别适用于传统的 Web 应用程序。Cookie 能够在用户的浏览器中存储身份验证数据&#xff0c;从而在用户访问应用的不同页面时保持登录状态。 一、配置 Cookie 身份验证 首先&a…...

从玩具到工业控制--51单片机的跨界传奇【3】

在科技的浩瀚宇宙中&#xff0c;51 单片机就像一颗独特的星辰&#xff0c;散发着神秘而迷人的光芒。对于无数电子爱好者而言&#xff0c;点亮 51 单片机上的第一颗 LED 灯&#xff0c;不仅仅是一次简单的操作&#xff0c;更像是开启了一扇通往新世界的大门。这小小的 LED 灯&am…...

Java算法 二叉树入门 力扣简单题相同的树 翻转二叉树 判断对称二叉树 递归求二叉树的层数

目录 模版 先序遍历 中序遍历 后序遍历 力扣原题 相同的二叉树 力扣原题 翻转二叉树 遍历树的层数 题目 静态变量 核心逻辑 模版 // 二叉树public static class Node{public int value;public Node left;public Node right;public Node(int v) {valuev;}} 先序遍历 …...

麒麟操作系统服务架构保姆级教程(十二)keepalived高可用

如果你想拥有你从未拥有过的东西&#xff0c;那么你必须去做你从未做过的事情 随着业务的扩大&#xff0c;服务器集群也越来越大&#xff0c;用户多了起来就要保证用户访问&#xff0c;服务绝对不能宕机&#xff0c;那么这个时候咱们除了做灾备以外&#xff0c;负载均衡服务器会…...

docker 部署confluence

1.安装docker的过程就不说了。 2.下载镜像。 docker pull cptactionhank/atlassian-confluence:7.4.0 docker images 3.下载pojie 包。 https://download.csdn.net/download/liudongyang123/90285042https://download.csdn.net/download/liudongyang123/90285042 4.编写do…...

【English-Book】Go in Action目录页翻译中文

第8页 内容 前言 xi 序言 xiii 致谢 xiv 关于本书 xvi 关于封面插图 xix 1 介绍 Go 1 1.1 用 Go 解决现代编程挑战 2 开发速度 3 • 并发 3 • Go 的类型系统 5 内存管理 7 1.2 你好&#xff0c;Go 7 介绍 Go 玩具 8 1.3 总结 8 2 Go 快速入门 9 2.1 程序架构 10 2.2 主包 …...

奉加微PHY6230兼容性:部分手机不兼容

从事嵌入式单片机的工作算是符合我个人兴趣爱好的,当面对一个新的芯片我即想把芯片尽快搞懂完成项目赚钱,也想着能够把自己遇到的坑和注意事项记录下来,即方便自己后面查阅也可以分享给大家,这是一种冲动,但是这个或许并不是原厂希望的,尽管这样有可能会牺牲一些时间也有哪天原…...

SSE 实践:用 Vue 和 Spring Boot 实现实时数据传输

前言 大家好&#xff0c;我是雪荷。最近我在灵犀 BI 项目中引入了 SSE 技术&#xff0c;以保证图表的实时渲染&#xff0c;当图表渲染完毕服务端推送消息至浏览器端触发重新渲染。 什么是 SSE&#xff1f; SSE 全称为 Server-Send Events 意思是服务端推送事件。 SSE 相比于 …...

HJ3 明明的随机数(Java版)

一、试题地址 明明的随机数_牛客题霸_牛客网 二、试题内容 描述 对于明明生成的 nn 个 11 到 500500 之间的随机整数&#xff0c;你需要帮助他完成以下任务&#xff1a; 删去重复的数字&#xff0c;即相同的数字只保留一个&#xff0c;把其余相同的数去掉&#xff1b;然后…...

C++ 模拟真人鼠标轨迹算法 - 防止游戏检测

一.简介 鼠标轨迹算法是一种模拟人类鼠标操作的程序&#xff0c;它能够模拟出自然而真实的鼠标移动路径。 鼠标轨迹算法的底层实现采用C/C语言&#xff0c;原因在于C/C提供了高性能的执行能力和直接访问操作系统底层资源的能力。 鼠标轨迹算法具有以下优势&#xff1a; 模拟…...

Linux-----线程同步(条件变量)

目录 相关API restrict关键字 线程间条件切换函数 条件变量pthread_cond_t 案例 在前面的锁的基础上进一步提高线程同步效率&#xff0c;也就是两个线程只用锁去执行的话依然会存在资源竞争的情况&#xff0c;也就是抢锁&#xff0c;这里就需要在锁的这边加上限制&#xf…...

58,【8】BUUCTF [PwnThyBytes 2019]Baby_SQL1

进入靶场 和2次注入的页面很像 不过养成查看源代码的好习惯 先访问source.zip 下载后解压&#xff0c;发现两个文件 第一个文件夹打开又有4个PHP文件 那还是先看index.php文件好了 有PHP和HTML两部分&#xff0c;下面是PHP部分代码&#xff08;HTML太长了&#xff0c;先放一…...