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

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

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)。性能在没有光照约束的情况下会下降,这表明光照约束能够进一步增强恢复结果的光照一致性。

相关文章:

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

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、方…...

PyCharm+RobotFramework框架实现UDS自动化测试- (四)项目实战0x10

1.环境搭建 硬件环境:CANoe、待测设备(包含UDS诊断模块) 2.pythonPyCharm环境 pip install robotframework pip install robotframework-ride pip install openpyxl pip install udsoncan pip install python-can pip install can-isotp3…...

基于java实现规则引擎设计思路

背景 去年底换了公司,目前在做HR招聘系统,产品要求:管理端手动配置发布招聘要求(支持多个招聘条件AND与OR关系编排);当C端用户报名该职位时,系统执行该规则,返回报名成功或失败。根据技术调研,采用db存规则…...

TCP协议:互联网数据传输的守护者

在互联网的浩瀚海洋中,数据如同涓涓细流,无时无刻不在流动。而这些数据的稳定、可靠传输,离不开一个重要的协议——TCP(Transmission Control Protocol,传输控制协议)。TCP协议作为互联网协议族中的核心成员…...

2025美国大学生数学建模竞赛(美赛)B题完整思路分析论文(35页)(含模型、可运行代码和运行结果)

2025美国大学生数学建模竞赛B题完整思路分析论文 目录 摘要 一、问题重述 二、问题分析 三、模型假设 四、模型建立与求解 4.1问题1 4.1.1问题1思路分析 4.1.2问题1模型建立 4.1.3问题1样例代码(仅供参考) 4.1.4问题1样例代码运行结…...

InceptionV1_V2

目录 不同大小的感受野去提取特征 经典 Inception 网络的设计思路与运行流程 背景任务:图像分类(以 CIFAR-10 数据集为例) Inception 网络的设计思路 Inception 网络的运行流程 打个比方 多个损失函数的理解 1. 为什么需要多个损失函数&#…...

面向对象设计原则

面向对象最大的优势是抵御变化 理解隔离变化: 从宏观面来看,面向对象构建方式更能适应软件的变化,能将变化所带来的影响减为最少。 各司其职:从微观层面来看,面向对象的方式更强调各个类的责任。由于需求变化导致的新…...

近年流行的开发技术

Web 开发领域 前端技术 HTML5、CSS3 和 JavaScript HTML5&#xff1a;作为网页结构的基础&#xff0c;引入了新的语义化标签&#xff08;如<header>、<nav>、<article>等&#xff09;&#xff0c;增强了网页的可读性和搜索引擎优化效果&#xff0c;同时支持…...

Go语言中的Select

Select 在 Go 语言中&#xff0c;select 是一种用于处理多个通道操作的控制结构。它允许你同时监听多个通道上的通信操作&#xff08;发送或接收&#xff09;&#xff0c;并根据哪个操作先完成来执行相应的代码块。select 是 Go 并发编程中的一个重要工具&#xff0c;常用于实…...

SQL调优讨论

说明&#xff1a;狭义的SQL调优&#xff0c;指对慢SQL&#xff08;一般是Select语句&#xff0c;或包含Select的语句&#xff09;优化&#xff0c;在不改变查询结果的情况下提高SQL执行效率。广义上的SQL调优&#xff0c;指对某个慢查询优化&#xff0c;通过一些类操作提高查询…...

【STM32】-TTP223B触摸开关

前言 本文章旨在记录博主STM32的学习经验&#xff0c;我自身也在不断的学习当中&#xff0c;如果文章有写的不对的地方&#xff0c;欢迎各位大佬批评指正。 准备工作 今天这篇文章介绍的是触摸开关这一外围硬件。 ST-link调试器STM32最小系统板单路TTP223B触摸传感器模块LE…...

华为数据之道-读书笔记

内容简介 关键字 数字化生产 已经成为普遍的商业模式&#xff0c;其本质是以数据为处理对象&#xff0c;以ICT平台为生产工具&#xff0c;以软件为载体&#xff0c;以服务为目的的生产过程。 信息与通信技术平台&#xff08;Information and Communication Technology Platf…...

Zookeeper(28)Zookeeper的线性化写入和顺序一致性读是什么?

Zookeeper 是一个分布式协调服务&#xff0c;它在设计上提供了强一致性的保证&#xff0c;其中包括线性化写入和顺序一致性读。这两种一致性模型确保了在分布式系统中数据的一致性和操作的确定性。 线性化写入&#xff08;Linearizable Writes&#xff09; 线性化写入保证在任…...

Ubuntu安装GitLab

在 Ubuntu 上安装 GitLab 的步骤如下。这里以 GitLab Community Edition&#xff08;CE&#xff09;为例&#xff1a; 前提条件 确保你的 Ubuntu 系统是 20.04 或更高版本。确保你的系统满足 GitLab 的硬件要求。 步骤 更新系统包&#xff1a; sudo apt update sudo apt upg…...

Stable Diffusion 3.5 介绍

Stable Diffusion 3.5 是由 Stability AI 推出的最新一代图像生成模型&#xff0c;是 Stable Diffusion 系列的重要升级版本。以下是关于 Stable Diffusion 3.5 的详细信息&#xff1a; 版本概述 Stable Diffusion 3.5 包含三个主要版本&#xff1a; Stable Diffusion 3.5 L…...

力扣hot100-->滑动窗口、贪心

你好呀&#xff0c;欢迎来到 Dong雨 的技术小栈 &#x1f331; 在这里&#xff0c;我们一同探索代码的奥秘&#xff0c;感受技术的魅力 ✨。 &#x1f449; 我的小世界&#xff1a;Dong雨 &#x1f4cc; 分享我的学习旅程 &#x1f6e0;️ 提供贴心的实用工具 &#x1f4a1; 记…...

### 2.5.3 二叉树的基本操作

2.5.3 二叉树的基本操作 // 获取树中节点的个数 int size(Node root);// 获取叶子节点的个数 int getLeafNodeCount(Node root);// 子问题思路-求叶子结点个数// 获取第K层节点的个数 int getKLevelNodeCount(Node root,int k);// 获取二叉树的高度 int getHeight(Node root);…...

GAEA 社区:从用户到共同创造者

GAEA 模型最引人注目的方面之一是&#xff0c;它将用户视为共同创造者&#xff0c;而不仅仅是被动的消费者。在许多中心化平台中&#xff0c;用户就是用户。但在 GAEA 的生态系统中&#xff0c;每个人都在推动进步。无论您是贡献计算能力、分享有价值的数据还是帮助改进模型&am…...

记录一个连不上docker中的mysql的问题

引言 使用的debian12,不同发行版可能有些许差异&#xff0c;连接使用的工具是navicat lite 本来是毫无思绪的&#xff0c;以前在云服务器上可能是防火墙的问题&#xff0c;但是这个桌面环境我压根没有使用防火墙。 直到 ying192:~$ mysql -h127.0.0.1 -uroot ERROR 1045 (28…...

doris:MySQL Load

Doris 兼容 MySQL 协议&#xff0c;可以使用 MySQL 标准的 LOAD DATA 语法导入本地文件。MySQL Load 是一种同步导入方式&#xff0c;执行导入后即返回导入结果。可以通过 LOAD DATA 语句的返回结果判断导入是否成功。一般来说&#xff0c;可以使用 MySQL Load 导入 10GB 以下的…...

使用vitepress搭建自己的博客项目

一、介绍can-vitepress-blog 什么是CAN BLOG CAN BLOG是基于vitepress二开的个人博客系统&#xff0c;他能够方便使用者快速构建自己的博客文章&#xff0c;无需繁琐的配置和复杂的代码编写。 CAN BLOG以antdv为UI设计基础&#xff0c;简洁大方&#xff0c;界面友好&#xf…...

Yii框架中的扩展:如何使用外部库

在Yii框架中&#xff0c;扩展功能的一种常见且有效的方式是使用外部库。这些外部库可以帮助开发者实现特定的功能&#xff0c;如调用第三方API、处理图片、生成PDF文件或发送邮件等。以下是使用外部库扩展Yii框架的详细步骤&#xff1a; 一、安装外部库 使用Composer&#xff…...

【Elasticsearch】inference ingest pipeline

Elasticsearch 的 Ingest Pipeline 功能允许你在数据索引之前对其进行预处理。通过使用 Ingest Pipeline&#xff0c;你可以执行各种数据转换和富化操作&#xff0c;包括使用机器学习模型进行推理&#xff08;inference&#xff09;。这在处理词嵌入、情感分析、图像识别等场景…...

Linux的基本指令(上)

1.ls指令 语法&#xff1a;ls [选项] [目录或文件] 功能&#xff1a;对于⽬录&#xff0c;该命令列出该⽬录下的所有⼦⽬录与⽂件。对于⽂件&#xff0c;将列出⽂件名以及其他信息。 常用选项&#xff1a; -a 列出⽬录下的所有⽂件&#xff0c;包括以 . 开头的隐含⽂件。 -d 将…...

【贪心算法】洛谷P1106 - 删数问题

2025 - 01 - 22 - 第 46 篇 【洛谷】贪心算法题单 - 【贪心算法】 - 【学习笔记】 作者(Author): 郑龙浩 / 仟濹(CSND账号名) 目录 文章目录 目录P1106 删数问题题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示思路代码 P1106 删数问题 题目描述 键盘输入一个高…...

【人工智能】Python中的知识图谱构建与应用

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 随着人工智能技术的不断发展,知识图谱已成为信息检索、推荐系统、自然语言处理等领域的重要技术之一。本文将详细介绍如何使用Python构建知…...

Spring WebSocket 与 STOMP 协议结合实现私聊私信功能

目录 后端pom.xmlConfig配置类Controller类DTO 前端安装相关依赖websocketService.js接口javascripthtmlCSS 效果展示简单测试连接&#xff1a; 报错解决方法1、vue3 使用SockJS报错 ReferenceError: global is not defined 功能补充拓展1. 安全性和身份验证2. 异常处理3. 消息…...

【Matlab高端绘图SCI绘图模板】第05期 绘制高阶折线图

1.折线图简介 折线图是一个由点和线组成的统计图表&#xff0c;常用来表示数值随连续时间间隔或有序类别的变化。在折线图中&#xff0c;x 轴通常用作连续时间间隔或有序类别&#xff08;比如阶段1&#xff0c;阶段2&#xff0c;阶段3&#xff09;。y 轴用于量化的数据&#x…...

java后端之事务管理

Transactional注解&#xff1a;作用于业务层的方法、类、接口上&#xff0c;将当前方法交给spring进行事务管理&#xff0c;执行前开启事务&#xff0c;成功执行则提交事务&#xff0c;执行异常回滚事务 spring事务管理日志&#xff1a; 默认情况下&#xff0c;只有出现Runti…...

常见的多媒体框架(FFmpeg GStreamer DirectShow AVFoundation OpenMax)

1.FFmpeg FFmpeg是一个非常强大的开源多媒体处理框架&#xff0c;它提供了一系列用于处理音频、视频和多媒体流的工具和库。它也是最流行且应用最广泛的框架&#xff01; 官方网址&#xff1a;https://ffmpeg.org/ FFmpeg 的主要特点和功能&#xff1a; 编解码器支持: FFmpe…...

如何移植ftp服务器到arm板子?

很多厂家提供的sdk&#xff0c;一般都不自带ftp服务器功能&#xff0c; 需要要发人员自己移植ftp服务器程序。 本文手把手教大家如何移植ftp server到arm板子。 环境 sdk&#xff1a;复旦微 Buildroot 2018.02.31. 解压 $ mkdir ~/vsftpd $ cp vsftpd-3.0.2.tar.gz ~/vs…...

牛批,吾爱出品

可能是因为从事IT的原因&#xff0c;我身边的大多数朋友也是从事相关工作的&#xff0c;而IT工作往往需要长时间对着电脑。这样就很容易眼睛疲劳。今天给大家推荐几款&#xff0c;希望有对有需要的小伙伴有所帮助&#xff0c;大家可以收藏以来哦。 CareUEyes CareUEyes是一款绿…...

基于 Android 的日程管理系统的设计与实现

标题:基于 Android 的日程管理系统的设计与实现 内容:1.摘要 基于 Android 的日程管理系统旨在帮助用户更高效地管理个人日程安排。该系统采用了 Android 平台的优势&#xff0c;结合了简洁的界面设计和强大的功能&#xff0c;为用户提供了便捷的日程管理体验。 在设计与实现过…...

Kubectl 与 Helm 详解

在 Kubernetes 生态中,kubectl 和 Helm 是两个核心工具,分别用于直接管理 Kubernetes 资源和简化应用的部署与管理。本文将深入探讨 kubectl 和 Helm 的功能、使用场景、部署与更新方式,并对比它们的优缺点。 1. Kubectl 详解 1.1 什么是 Kubectl? kubectl 是 Kubernetes…...

centos搭建docker registry镜像仓库

centos搭建docker registry镜像仓库 简介 Docker Registry是一个存储和分发Docker镜像的服务。它允许用户上传、下载和管理 Docker 镜像&#xff0c;为容器化应用的部署提供了便利。 拉取镜像 docker image pull registry证书配置 创建镜像仓库的镜像数据目录和证书目录&…...

Pyecharts之饼图与多饼图的应用

在数据可视化领域&#xff0c;饼图是一种常用的图表类型&#xff0c;特别适合展示数据的比例关系。Pyecharts 为我们提供了强大的饼图绘制功能&#xff0c;不仅可以轻松绘制各种饼图&#xff0c;还能对饼图的样式和数据标签进行深度定制&#xff0c;并且可以组合多个饼图以满足…...

51单片机入门_01_单片机(MCU)概述(使用STC89C52芯片;使用到的硬件及课程安排)

文章目录 1. 什么是单片机1.1 微型计算机的组成1.2 微型计算机的应用形态1.3 单板微型计算机1.4 单片机(MCU)1.4.1 单片机内部结构1.4.2 单片机应用系统的组成 1.5 80C51单片机系列1.5.1 STC公司的51单片机1.5.1 STC公司单片机的命名规则 2. 单片机的特点及应用领域2.1 单片机的…...

蓝桥杯LQ1044 求完数

题目描述 因子&#xff1a;因子也叫因数&#xff0c;例如3515&#xff0c;那么3和5是15的因子。 同时15115&#xff0c;那么1和15也是15的因子。 1&#xff0c;3&#xff0c;5&#xff0c;15 这四个因子是15的所有因子。 完数&#xff1a;如果一个数等于不含它本身的其他因子之…...

Django 日志配置实战指南

日志是 Django 项目中不可或缺的一部分,它帮助我们记录应用程序的运行状态、调试信息、错误信息等。通过合理配置日志,我们可以更好地监控和调试应用程序。本文将详细介绍如何在 Django 项目中实现日志文件分割、日志级别控制以及多环境日志配置,并结合最佳实践和代码示例,…...

[笔记] 极狐GitLab实例 : 手动备份步骤总结

官方备份文档 : 备份和恢复极狐GitLab 一. 要求 为了能够进行备份和恢复&#xff0c;请确保您系统已安装 Rsync。 如果您安装了极狐GitLab&#xff1a; 如果您使用 Omnibus 软件包&#xff0c;则无需额外操作。如果您使用源代码安装&#xff0c;您需要确定是否安装了 rsync。…...

php代码审计2 piwigo CMS in_array()函数漏洞

php代码审计2 piwigo CMS in_array()函数漏洞 一、目的 本次学习目的是了解in_array()函数和对项目piwigo中关于in_array()函数存在漏洞的一个审计并利用漏洞获得管理员帐号。 二、in_array函数学习 in_array() 函数搜索数组中是否存在指定的值。 in_array($search,$array…...

随机矩阵投影长度保持引理及其证明

原论文中的引理 2 \textbf{2} 2 1. \textbf{1. } 1. 引理 1 \textbf{1} 1(前提之一) 1.1. \textbf{1.1. } 1.1. 引理 1 \textbf{1} 1的内容 &#x1f449;前提&#xff1a; X ∼ N ( 0 , σ ) X\sim{}N(0,\sigma) X∼N(0,σ)即 f ( x ) 1 2 π σ e – x 2 2 σ 2 f(x)\text{}…...

蓝桥杯真题 - 三国游戏 - 题解

题目链接&#xff1a;https://www.lanqiao.cn/problems/3518/learning/ 个人评价&#xff1a;难度 2 星&#xff08;满星&#xff1a;5&#xff09; 前置知识&#xff1a;贪心 整体思路 先假设魏蜀吴中的某一个势力最终获胜的情况下&#xff0c;如何求出事件发生的最大数量&a…...

Spring 源码学习(七)——注解后处理器-2

五 InitDestroyAnnotationBeanPostProcessor 类 1 属性 InitDestroyAnnotationBeanPostProcessor 类用于处理初始化与销毁注解&#xff1b;其中第一个属性为用于标识初始化方法与销毁方法注解类型的 initAnnotationType 与 destroyAnnotationType 属性、还有一个用于标识执行顺…...

即梦(Dreamina)技术浅析(一)

1.技术架构与核心组件 2.生成模型的具体实现 3.多模态融合技术 4.训练数据与模型优化 5.用户交互与创作流程 6.技术挑战与解决方案 7.未来发展方向 1. 技术架构与核心组件 即梦的技术架构可以分为以下几个核心组件: 1.1 前端用户界面(UI) 功能模块: 文字输入框:用…...

Spring MVC(二)

介绍 Cookie 与 Session Session 类似哈希表&#xff0c;存储了一些键值对结构&#xff0c;Key 就是 SessionID&#xff0c;Vaule 就是用户信息&#xff0c;客户端发起会话的时候&#xff0c;服务器一旦接收&#xff0c;就会创建会话【也就是 Session】&#xff0c;通过 Sessi…...

java求职学习day15

多线程 1 基本概念 1.1 程序和进程的概念 &#xff08;1&#xff09;程序 - 数据结构 算法&#xff0c;主要指存放在硬盘上的可执行文件。 &#xff08;2&#xff09;进程 - 主要指运行在内存中的可执行文件。 &#xff08;3&#xff09;目前主流的操作系统都支持多进程&a…...

Typesrcipt泛型约束详细解读

代码示例&#xff1a; // 如果我们直接对一个泛型参数取 length 属性, 会报错, 因为这个泛型根本就不知道它有这个属性 (() > {// 定义一个接口,用来约束将来的某个类型中必须要有length这个属性interface ILength{// 接口中有一个属性lengthlength:number}function getLen…...

[操作系统] 进程地址空间管理

虚拟地址空间的初始化 缺页中断 缺页中断的概念 缺页中断&#xff08;Page Fault Interrupt&#xff09; 是指当程序访问的虚拟地址在页表中不存在有效映射&#xff08;即该页未加载到内存中&#xff09;时&#xff0c;CPU 会发出一个中断信号&#xff0c;请求操作系统加载所…...

【fly-iot飞凡物联】(20):2025年总体规划,把物联网整套技术方案和实现并落地,完成项目开发和课程录制。

前言 fly-iot飞凡物联专栏&#xff1a; https://blog.csdn.net/freewebsys/category_12219758.html 1&#xff0c;开源项目地址进行项目开发 https://gitee.com/fly-iot/fly-iot-platform 完成项目开发&#xff0c;接口开发。 把相关内容总结成文档&#xff0c;并录制课程。…...