《边界感知的分而治之方法:基于扩散模型的无监督阴影去除解决方案》学习笔记

paper:Boundary-Aware Divide and Conquer: A Diffusion-Based Solution for Unsupervised Shadow Removal

目录

摘要 

 1、介绍

2、相关工作

2.1 阴影去除

2.2 去噪扩散概率模型(Denoising Diffusion Probabilistic Models, DDPM)

3、方法

3.1 动机

3.2 边界感知条件扩散方法

3.2.1 上下文条件生成 (Context Conditioned Generation)

3.2.2 光照一致性约束 (Illumination-Consistency Constraint)

3.2.3 迭代反射率保持 (Iterative Reflectance Maintenance)

3.3 影子不变的内在分解(SIID)

3.4 损失函数

4. 实验

4.1 数据集与评估指标

4.2 实验设置

4.3 对比实验

4.4 消融实验

扩散模型的效果

迭代反射率维护的效果

模拟图像集合的效果

光照一致性约束的效果


 

摘要 

近年来,深度学习方法在阴影去除任务中取得了卓越的成果。然而,大多数这些有监督方法依赖于在大量阴影与无阴影的成对图像上进行训练,这需要繁重的标注工作,并可能导致模型泛化性能较差。实际上,阴影只会对图像形成部分退化,而非阴影区域提供了丰富的结构信息,潜在地适合用于无监督学习。在本文中,我们提出了一种基于扩散模型的无监督阴影去除新方法,该方法分别对阴影区域、非阴影区域及其边界区域进行建模。我们使用一个预训练的无条件扩散模型,并融合非受损区域的信息以生成自然的无阴影图像。尽管扩散模型可以通过利用相邻的未受损上下文信息恢复边界区域的清晰结构,但由于缺乏未受损上下文,它无法处理阴影内部区域。为此,我们进一步提出了一个阴影不变的内在分解模块,以利用阴影区域中的潜在反射率,从而在扩散采样过程中保持结构一致性。在多个公开阴影去除数据集上的广泛实验表明,所提方法相比现有无监督方法取得了显著改进,甚至在某些情况下可与现有的有监督方法媲美。

 1、介绍

问题背景与挑战

阴影是由于光被部分遮挡而形成的一种普遍现象。移除阴影对于许多计算机视觉任务(如目标检测和跟踪)至关重要。然而,从单张图像中移除阴影仍然是一个开放的问题,主要原因是阴影形状和背景结构的多样性,使得难以找到通用的解决方案。传统方法通常依赖手工设计的统计特征(如光照、梯度和区域一致性)来构建优化函数,用于移除阴影区域。然而,这些方法忽略了自然图像的先验知识,其假设往往过于理想化,导致在现实场景中生成的结果不自然,并且容易产生伪影。

现有深度学习方法的局限性

近年来,基于深度学习的阴影移除方法取得了显著进展。这些方法通过监督学习,在阴影图像与无阴影图像的像素级对应关系上进行训练。然而,这类方法需要大量标注数据,并且容易导致过拟合,从而在测试集上泛化能力较差。此外,阴影移除是一个区域性退化的问题,存在丰富的上下文和结构先验。这些信息为基于无监督学习的方法提供了强大的潜力。然而,当前的一些无监督方法(如基于GAN的工作)依赖无配对的阴影和无阴影图像进行训练,由于缺乏像素级的标注,生成器可能会产生虚假的内容和伪影。

方法概述

本文提出了一种新颖的基于扩散模型的无监督阴影移除方法,仅使用带阴影的图像,而无需参考图像。我们将阴影图像中的退化区域分为两类:

  1. 阴影区域:结构信息被低光照模糊。
  2. 边界区域:包含噪声结构,但具有丰富的相邻无退化上下文信息。

我们的方法通过整合扩散模型的生成能力和内在分解的细节保留能力,对两种区域进行统一恢复,从而实现互补。具体而言,我们利用一个预训练的无条件扩散模型,以非退化区域信息为指导,生成自然的无阴影图像,并抑制伪影。虽然扩散模型可以利用相邻的非退化上下文信息,有效恢复边界区域的清晰结构和标准光照,但对孤立的阴影区域却表现不佳。为了解决这一问题,我们提出了一种阴影不变内在分解模型,确保扩散采样过程中所有中间结果的反射率一致性,从而揭示阴影区域中的结构细节。实验表明,该方法在多个广泛使用的阴影移除数据集上性能优越,不仅显著超过现有无监督方法,还在某些情况下与监督方法的性能相当。

主要贡献

  1. 提出了基于扩散模型的无监督阴影移除新方法,将退化区域分为阴影区域和边界区域,通过扩散和内在分解的结合,实现两者的统一恢复。
  2. 提出了阴影不变内在分解模型,保证扩散采样过程中反射率的一致性,有效恢复阴影区域的结构细节。
  3. 在多个公开数据集上进行了广泛的实验,证明了该方法在无监督方法中具有显著优势,并在部分场景下与监督方法相当。

2、相关工作

2.1 阴影去除

传统阴影去除方法依赖于先验信息,例如梯度、光照以及区域一致性等。这些方法基于理想条件假设构建,但在实际应用中会导致明显的阴影边界伪影。
近年来,基于深度学习的阴影去除方法通过大规模成对数据集(阴影图像与无阴影图像)提升了去除性能。然而,这些方法面临标注难度大且模型容易过拟合的问题。

受无监督或弱监督图像转换方法启发,部分研究开始利用生成对抗网络(GAN)在无配对的阴影和无阴影图像上生成无阴影图像。例如:

  • Hu 等人提出基于掩码的循环一致性约束,学习同时生成阴影和去除阴影的能力。
  • Jin 等人提出 DC-ShadowNet,利用无监督域分类器处理软阴影和硬阴影的去除问题。
  • Liu 等人设计了一种方法,通过生成配对的阴影和无阴影图像,训练去阴影子网络。

然而,这些技术通常会面临颜色失真和伪造内容(如伪影)的风险。

2.2 去噪扩散概率模型(Denoising Diffusion Probabilistic Models, DDPM)

生成模型已经广泛应用于图像超分辨率、图像修复、低光增强和去模糊等任务。最近,扩散概率模型通过建模从标准正态分布到数据分布的过程,在生成高质量图像方面表现优异。然而,直接从头训练特定任务的条件扩散模型需要大量的计算资源和时间。
为解决该问题,另一种研究方向是通过引导预训练的无条件扩散模型的采样过程来生成具有特定语义的图像。例如:

  • Choi 等人通过参考图像的低频分量控制扩散模型的采样过程,生成高质量图像。
  • Wang 等人采用一种范围-零空间分解技术,在采样过程中保持数据一致性,并迭代优化零空间内容。
  • Chung 等人引入流形约束项,通过交替投影的方法指导采样路径,在多种逆问题中表现优异。

现有工作主要集中于特定退化场景的图像修复任务,而本文探索了在退化不确定情况下的扩散模型应用于阴影去除问题的潜力。

3、方法

3.1 动机

我们设计阴影去除算法的动机如下所述。假设阴影图像为 x,对应的阴影掩码为m,而无阴影图像为 y。我们定义一个边界提取器B(\cdot),用以通过膨胀和腐蚀操作的残差提取阴影边界区域(半影),从而得到边界掩码 m_b = B(m)。阴影图像可以被分为三个区域:阴影区域(全影)x_s、边界区域(半影)x_b和无阴影区域 x_{ns},如图所示。

 

阴影去除作为区域依赖的修复问题

阴影去除是一个修复任务,其面临区域依赖的退化问题,可将其视为一个条件区域化的图像修复问题:

区域间信息的差异性利用:

对于不同的区域,阴影去除所依赖的信息有所不同。非阴影区域 x_{ns} 的上下文信息和阴影区域x_s​ 的潜在结构信息可以提高对退化区域(即x_b + x_s)的预测能力。

不同区域对阴影去除贡献的信息量不同。例如,边界区域由于邻近丰富的信息具有较低的预测不确定性,而内层阴影区域由于距离有效区域较远,具有较高的不确定性。因此,在恢复内层阴影区域时需要引入更多的信息和约束。

Retinex 模型的启发:

Retinex 理论能够很好地分离阴影区域的光照变化,同时保持图像的内在结构不变。根据 Retinex 理论,一幅输入图像可以分解为反射图(reflectance image)和光照图(illumination image)的乘积。

如上图所示,在阴影区域中,从阴影图像到无阴影图像的光照变换是一个简单的线性过程,而在边界区域,建模阴影边界的复杂且快速变化则更加困难。

理想情况下,阴影退化只影响光照图,而反射图在不同阴影区域保持恒定。因此,反射图为推断采样动态中的结构细节提供了可靠的线索。

3.2 边界感知条件扩散方法

我们提出了一种无监督边界感知条件扩散方法 (BCDiff) 来解决阴影去除问题,其流程如图所示。本方法将阴影去除重新表述为一种基于条件的区域修复问题,通过将预训练的无条件去噪扩散概率模型与内在分解相结合,引入更多信息和约束以更好地恢复阴影内部区域。

3.2.1 上下文条件生成 (Context Conditioned Generation)

直观上,非阴影区域 (x^{ns}​) 是未受污染的,因此可以在任意时间步t下直接采样其中间图像 x^{ns}_t

x^{ns}_{t-1} \sim \mathcal{N}\left(\sqrt{\bar{\alpha}_t}x, (1-\bar{\alpha}_t)I\right)

而对于受污染区域(即边界和阴影区域,记作 x^{b+s}),可以通过进行采样:

x^{b+s}_{t-1} \sim \mathcal{N}\left(\mu_\theta(x_t, t), \Sigma_\theta(x_t, t)\right)

为了得到整体的中间图像 x'_{t-1},我们利用掩码m^{b+s}将受污染区域和未受污染区域空间组合起来:

x'_{t-1} = m^{b+s} \circ x^{b+s}_{t-1} + (1 - m^{b+s}) \circ x^{ns}_{t-1}

其中,m^{b+s} 表示受污染区域的掩码。

3.2.2 光照一致性约束 (Illumination-Consistency Constraint)

在扩散采样过程中,我们约束阴影和非阴影区域之间的光照一致性。为了实现这一点,我们计算 x_t中阴影区域和非阴影区域的均值,作为光照近似值。

通过分类器梯度调节扩散生成,我们引入用于计算阴影和非阴影区域光照均值差异的损失梯度,并扩展:

\hat{\epsilon} = \epsilon_\theta(x_t, t) - \sqrt{\bar{\alpha}_t} \nabla_{x_t} \left| u^s_t - u^{ns}_t \right|

x^{b+s}_{t-1} = \frac{1}{\sqrt{\alpha_t}}(x_{t}-\frac{\beta _{t}}{\sqrt{\alpha_{t-1}}}\hat\epsilon)+ \sigma_t z, \quad z \sim \mathcal{N}(0, I)

其中,u^s_tu^{ns}_t分别表示x_t 中阴影和非阴影区域的光照均值。通过采样过程中引入梯度,我们可以使预训练扩散模型生成的结果具有一致的光照。

3.2.3 迭代反射率保持 (Iterative Reflectance Maintenance)

阴影去除的另一个关键点是生成过程中保留阴影图像的结构信息。与边界区域丰富的邻近非污染信息不同,阴影内部区域往往孤立。因此,我们利用隐藏在阴影区域中的结构信息作为辅助,以进一步约束保真度。

如图所示,我们引入一个阴影不变内在分解模型 (SIID) D,将原始阴影图像x和中间图像x'_{t-1} 分解为反射率和光照图 \{r, l\}\{r_{t-1}, l_{t-1}\}

x'_{0|t-1} = \frac{1}{\sqrt{\bar{\alpha}_t}} x'_{t-1} - \hat{\epsilon} \sqrt{1 - \bar{\alpha}_t}

r, l = D(x), \quad r_{t-1}, l_{t-1} = D(x'_{0|t-1})

由于阴影理想情况下仅影响光照图,因此在扩散采样的迭代过程中,我们要求x_{t-1}的反射率与原始阴影图像 x 在阴影区域内保持一致。基于边界掩码 m^b,我们通过以下公式分别恢复边界和阴影区域:

\hat{x}_{0|t-1} = m_b \circ r_{t-1} \circ l_{t-1} + (1 - m_b) \circ r \circ l_{t-1}

最终,通过从p(x_{t-1} | x_t, \hat{x}_{0|t-1}) 中采样得到x_{t-1}

3.3 影子不变的内在分解(SIID)

内在图像分解任务

内在图像分解(Intrinsic Image Decomposition)是将输入图像分解为反射率图(reflectance map, rrr)和光照图(illumination map, lll)的乘积:

v = r \circ l

影子不变内在分解(SIID)模型的核心思想是,借助该分解来揭示影子区域的内部结构,从而在扩散采样过程中更好地还原影子区域的真实信息。

影子图像集的模拟

为了构造具有相同场景但不同影子条件的图像数据集 X,本文采用了一种基于影子模拟的方法:

给定一张影子图像 x 和对应的影子掩码 m,首先得到没有影子的背景图像x^{(0)} = (1 - m) \circ x

使用随机预定义参数\theta^{(i)}和外部掩码集中的二值化模式 m^{(i)} 生成带有不同影子条件的图像: x^{(i)} = \phi(x^{(0)}, m^{(i)}, \theta^{(i)}), \quad i \in \{1, 2, \dots, n\}其中,\phi(\cdot)  是影子合成算法。

最终生成的数据集包含n+1张图像:\{x^{(i)}\}_{i=0}^n

然后,SIID 模型在合成图像集上进行训练,得到反射率集 \{r^{(i)}\}_{i=0}^n和光照集\{l^{(i)}\}_{i=0}^n​。

3.4 损失函数

(1)重建损失(Reconstruction Loss, LreconL_{\text{recon}}Lrecon​)
根据反射率的影子不变性,当图像x^{(i)} 的反射率 r^{(i)}与另一图像 x^{(j)}的光照l^{(j)}配对时,应能够重建 x^{(j)}

L_{\text{recon}} = \sum_{i=1}^n \sum_{j=1}^n \| r^{(i)} \circ l^{(j)} - x^{(j)} \|_1

(2)一致性损失(Consistency Loss, LconsL_{\text{cons}}Lcons​)
假设无影区域的反射率为真实值(即r^{(0)})。模型预测的所有反射率 r^{(i)}应接近于 r^{(0)}

L_{\text{cons}} = \sum_{i=1}^n \| r^{(i)} - r^{(0)} \|_1

平滑损失(Smoothness Loss, LsmoL_{\text{smo}}Lsmo​)
假设光照图l^{(i)}的变化在物体表面是局部连续的,因此通过全变分正则化(TV)约束其梯度(边界区域除外):

L_{\text{smo}} = \sum_{i=1}^n \| \nabla l^{(i)} \circ (1 - B(m^{(i)})) \|_1

其中,B(m^{(i)})表示边界掩码。

边界平滑损失(Boundary Smoothness Loss, LbounL_{\text{boun}}Lboun​)
约束反射率图r^{(i)}在边界区域应尽量保持平滑:

L_{\text{boun}} = \sum_{i=1}^n \| \nabla r^{(i)} \circ B(m^{(i)}) \|_1

4. 实验

4.1 数据集与评估指标

数据集
ISTD数据集包含1,870组三元组,分别由阴影图像、阴影掩码和无阴影图像组成,分辨率为480×640。其中,1,330组三元组用于训练,540组用于测试。由于无监督方法无法从真实的无阴影样本中学习标准光照,我们使用调整后的测试集,以减少原始数据集中阴影和无阴影图像之间非阴影区域的光照差异。

评估指标
按照之前的工作,我们使用均方根误差(RMSE)、峰值信噪比(PSNR)和结构相似性(SSIM)作为评估指标。RMSE在LAB颜色空间计算,而PSNR和SSIM在RGB颜色空间计算。更低的RMSE值表示恢复输出与真实值之间的重建误差更小,而更高的PSNR和SSIM值表示结果更优。

4.2 实验设置

我们的方法使用PyTorch实现,并在一块NVIDIA RTX A5000 GPU上运行。

我们的阴影去除方法无需训练,依赖于一个预训练的无条件扩散模型。

在所有实验中,我们设置扩散步数 T=250。

采样批量大小为3。

B(\cdot)中的膨胀和腐蚀操作核为半径为8像素的圆盘。

分解模型基于最新的Transformer架构图生图模型进行修改。

我们的分解模型训练中的损失权重 \{\lambda_1, \lambda_2, \lambda_3\}经经验设置为 \{1, 1, 0.1\}

模拟阴影图像的数量设置为 n=4。

4.3 对比实验

我们将提出的无监督方法与多种最新的方法进行了比较,包括:

传统方法:Gong et al.、Yang et al.  和 Guo et al.;

有监督方法(使用配对的阴影和无阴影图像进行训练):DSC、DHAN、SP+M-Net 、Fu et al. 、BMNet  和 SG-ShadowNet ;

无监督方法(不使用配对的阴影和无阴影图像进行训练):MaskShadow-GAN 、LG-ShadowNet 、DC-ShadowNet 、Le et al.  和 G2R 。

所有对比方法的阴影去除结果均引用自原论文或使用其官方实现复现。我们按照大多数先前研究 ,以 256 × 256 的分辨率进行评估。

表展示了 ISTD 数据集测试集的定量结果。Gong et al.通过一系列预定义先验来处理任务,然而这些先验过于严格,难以扩展到现实场景。对于有监督方法,它们共享相同类型的训练数据,包括阴影和无阴影图像对,通过训练数据学习从阴影图像到无阴影图像的映射。但在扩展到某些未见场景时,它们的性能可能会大幅下降。相比之下,我们提出的无监督方法利用了上下文的非阴影区域,并将分解模型适配于测试数据,即使在训练阶段没有使用真实数据(GT),也能取得比部分有监督方法更好的结果。此外,一些无监督方法(如 MaskShadow-GAN 、LG-ShadowNet 和 DC-ShadowNet )使用未配对的阴影和无阴影图像进行训练,而我们的模型仅通过阴影图像学习,仍能优于这些方法。Le et al.和 G2R  的设置与我们一致,均不需要无阴影图像。在与最新的无监督方法 G2R [29] 的对比中,我们在阴影区域的 PSNR 上提高了约 2.5dB。此外,我们验证了使用检测得到的阴影掩膜作为输入时的性能,结果标注为“w/ detected mask”。使用检测掩膜时,我们的方法性能会略微下降。

图展示了我们方法和其他最新方法在 ISTD 数据集上的定性结果。在第一行的小阴影区域示例中,由于阴影图像中丰富的上下文信息,无监督方法表现更好。我们的方法在保持结构信息和抑制边界伪影方面优于 SP+M-Net(有监督方法)。此外,与其他方法相比,我们的方法恢复的结果更加自然。例如,SP+M-Net 、Le et al. 和 G2R 的结果虽然变亮了,但与周围颜色和光照不一致,而我们的方法则能够获得更高一致性的结果。

4.4 消融实验

为了验证所提方法中每个关键组件的有效性,我们在ISTD数据集上针对几个模型变体进行了实验。同时,我们还在补充材料中提供了分解模型中损失函数的消融研究结果。

扩散模型的效果

我们提出使用扩散模型(采样过程)作为一种自然图像先验,来抑制生成结果中的伪影,并根据上下文信息校正阴影区域的光照。我们在ISTD数据集上进行了实验以验证扩散模型的效果。在表中,我们提供了没有扩散模型时的阴影去除性能,其中我们仅保留分解模型,并将分解得到的反射率图视为恢复后的无阴影结果。我们发现,所有指标的性能均有所下降,特别是SSIM指标从0.962降至0.952。

迭代反射率维护的效果

为了生成包含阴影区域隐藏的结构信息的无阴影图像,我们提出在扩散采样过程中进行迭代反射率维护。我们进行了实验,将每次迭代中的反射率替换去除,即在采样阶段丢弃。我们发现所有指标的性能明显下降,这表明生成的无阴影图像失去了大量的真实性。

模拟图像集合的效果

我们探索了用于同一场景的模拟图像集合是否能相比于单一模拟阴影图像提高分解性能。具体来说,我们将模拟阴影图像的数量设置为n=1(在表2中表示为“w/o simulated set”),性能会有所下降,特别是在阴影区域。在训练阶段未学习到各种光照条件时,由于模拟和真实阴影图像之间的域间差异,分解模型容易错误地将某些结构和颜色组件排除在反射率之外,从而导致结果中出现严重的伪影。

光照一致性约束的效果

我们还进行了实验,以验证扩散采样过程中光照一致性约束的有效性(在表2中表示为“w/o illumination constraint”)。具体而言,我们用DDPM中的原始去噪步骤替换公式(8)和(9):

x_{t-1} = \frac{1}{\sqrt{\bar{\alpha}_t}} \left( x_t - \frac{\beta_t}{\sqrt{\bar{\alpha}_{t-1}}} \epsilon_\theta(x_t, t) \right) + \sigma_t z

其中 z \sim N(0, I)。性能在没有光照约束的情况下会下降,这表明光照约束能够进一步增强恢复结果的光照一致性。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

linux-mysql在centos7安装和基础配置

1.安装mysql数据库 1.使用官网安装 1.检查是否存在mysql的分支mariadb [rootlocalhost ~]# rpm -qa |grep mariadb mariadb-libs-5.5.64-1.el7.x86_64 [rootlocalhost ~]# 2.卸载这个分支包 [rootlocalhost ~]# rpm -qa | grep mariadb mariadb-libs-5.5.64-1.el7.x86_64 …

Python!从0开始学爬虫:(一)HTTP协议 及 请求与响应

前言 爬虫需要基础知识,HTTP协议只是个开始,除此之外还有很多,我们慢慢来记录。 今天的HTTP协议,会有助于我们更好的了解网络。 一、什么是HTTP协议 (1)定义 HTTP(超文本传输协议&#xff…

MySQL数据库笔记——最左前缀原则原理及其注意事项

大家好,这里是Good Note,关注 公主号:Goodnote,专栏文章私信限时Free。本文详细介绍MySQL索引的关键潜规则——最左前缀原则。 文章目录 图示单值索引和联合索引单值索引联合索引 最左前缀原则示例分析1. 全值匹配查询时2. 匹配左…

Java数据结构 (链表反转(LinkedList----Leetcode206))

1. 链表的当前结构 每个方框代表一个节点,每个节点包含两个部分: 左侧的数字:节点存储的值,例如 45、34 等。右侧的地址(如 0x90):表示该节点 next 指针指向的下一个节点的内存地址。 例子中&a…

IMX6ull项目环境配置

文件解压缩: .tar.gz 格式解压为 tar -zxvf .tar.bz2 格式解压为 tar -jxvf 2.4版本后的U-boot.bin移植进SD卡后,通过串口启动配置开发板和虚拟机网络。 setenv ipaddr 192.168.2.230 setenv ethaddr 00:04:9f:…

git基础指令大全

版本控制 git管理文件夹 进入要管理的文件夹 — 进入 初始化(提名) git init 管理文件夹 生成版本 .git ---- git在管理文件夹时,版本控制的信息 生成版本 git status 检测当前文件夹下的文件状态 (检测,检测之后就要管理了…

[高等数学学习记录]函数的极值与最大值最小值

1 知识点 1.1 函数的极值及其求法 定义 设函数 f ( x ) f(x) f(x) 在点 x 0 x_0 x0​ 的某邻域 U ˚ ( x 0 ) \mathring{U}(x_0) U˚(x0​) 内有定义&#xff0c;如果对于去心邻域 U ˚ ( x 0 ) \mathring{U}(x_0) U˚(x0​) 内的任一 x x x&#xff0c;有 f ( x ) <…

docker 简要笔记

文章目录 一、前提内容1、docker 环境准备2、docker-compose 环境准备3、流程说明 二、打包 docker 镜像1、基础镜像2、国内镜像源3、基础的dockerfile4、打包镜像 四、构建运行1、docker 部分2、docker-compose 部分2.1、构建docker-compose.yml2.1.1、同目录构建2.1.2、利用镜…

JVM常见知识点

在《深入理解Java虚拟机》一书中&#xff0c;介绍了JVM的相关特性。 1、JVM的内存区域划分 在真实的操作系统中&#xff0c;对于地址空间进行了分区域的设计&#xff0c;由于JVM是仿照真实的机器进行设计的&#xff0c;那么也进行了分区域的设计。核心区域有四个&#xff0c;…

电脑系统bcd文件损坏修复方法:小白也会的修复方法

电脑系统bcd文件损坏怎么办?当电脑开机时出现bcd文件损坏&#xff0c;一般情况是由于电脑系统的引导坏了&#xff0c;需要进行修复。现在越来越多的小伙伴遇到电脑引导丢失或者安装后无法正常引导的问题&#xff0c;我们现在一般是pe下进行修复引导&#xff0c;那么电脑系统bc…

Flutter_学习记录_导航和其他

Flutter 的导航页面跳转&#xff0c;是通过组件Navigator 和 组件MaterialPageRoute来实现的&#xff0c;Navigator提供了很多个方法&#xff0c;但是目前&#xff0c;我只记录我学习过程中接触到的方法&#xff1a; Navigator.push(), 跳转下一个页面Navigator.pop(), 返回上一…

【架构面试】二、消息队列和MySQL和Redis

MQ MQ消息中间件 问题引出与MQ作用 常见面试问题&#xff1a;面试官常针对项目中使用MQ技术的候选人提问&#xff0c;如如何确保消息不丢失&#xff0c;该问题可考察候选人技术能力。MQ应用场景及作用&#xff1a;以京东系统下单扣减京豆为例&#xff0c;MQ用于交易服和京豆服…

Git 如何将旧仓库迁移新仓库中,但不显示旧的提交记录

一、异常错误 场景&#xff1a;我想把旧仓库迁移新仓库中&#xff0c;放进去之后&#xff0c;新仓库会显示这个项目之前的所有提交&#xff0c;如何不显示这些旧的提交&#xff1f; 二、原因 我们需要将旧仓库迁移新仓库中&#xff0c;但是又不想在新仓库中显示旧的提交记录…

02-AD-绘制原理图(画示意图+添加已有P封装)

画示意图添加已有P封装 画原理示意图绘制原理图:电容绘制原理图:晶体绘制发光二极管绘制TVS二极管绘制按键绘制拨码开关绘制双排针绘制单排针绘制TYPE母座画图技巧:按顺序递增,删除不用的先画线,再画框 绘制AMS芯片填充框透明显示:防止遮挡其他部分不需要添加其他内容 绘制STM3…

C++红黑树详解

文章目录 红黑树概念规则为什么最长路径不超过最短路径的二倍&#xff1f;红黑树的时间复杂度红黑树的结构插入叔叔节点情况的讨论只变色(叔叔存在且为红)抽象的情况变色单旋&#xff08;叔叔不存在或叔叔存在且为黑&#xff09;变色双旋&#xff08;叔叔不存在或叔叔存在且为黑…

LLaMA-Factory 微调LLaMA3

LLaMA-Factory 框架 首先需要通过vscode连接远程服务器哦 如果是租赁的AutoDL服务器&#xff0c;一定要将模型下载到数据盘。 git clone https://github.com/hiyouga/LLaMA-Factory.git cd LLaMA-Factory pip install -e . 准备训练数据 训练数据&#xff1a; fintech.json …

FFmpeg 头文件完美翻译之 libavcodec 模块

前言 众所周知&#xff0c;FFmpeg 的代码开发上手难度较高&#xff0c;源于官方提供的文档很少有包含代码教程相关的。要想熟练掌握 FFmpeg 的代码库开发&#xff0c;需要借助它的头文件&#xff0c;FFmpeg 把很多代码库教程都写在头文件里面。因此&#xff0c;熟读头文件的内…

IDEA工具下载、配置和Tomcat配置

1. IDEA工具下载、配置 1.1. IDEA工具下载 1.1.1. 下载方式一 官方地址下载 1.1.2. 下载方式二 官方地址下载&#xff1a;https://www.jetbrains.com/idea/ 1.1.3. 注册账户 官网地址&#xff1a;https://account.jetbrains.com/login 1.1.4. JetBrains官方账号注册…

AMQP是什么

文章目录 AMQP是什么一、引言二、AMQP的核心概念1、协议定义2、消息传递模型 三、AMQP的工作原理1、消息路由机制2、消息确认机制 四、使用示例1、Java代码示例1.1、项目依赖1.2、配置文件1.3、消息配置1.4、消息生产者1.5、消息消费者 五、总结 AMQP是什么 一、引言 在现代分…

ESP32基于ESPIDF I2C设备探测和使用

ESP32基于ESPIDF I2C设备探测和使用 &#x1f4cd;I2C接口介绍和参考&#xff1a;https://docs.espressif.com/projects/esp-idf/zh_CN/stable/esp32/api-reference/peripherals/i2c.html &#x1f4d3;I2C 主机探测 主要主要利用 i2c_master_probe() 函数&#xff0c;来检测…