《从因果关系的角度学习失真不变表示以用于图像恢复》学习笔记
paper:2303.06859
GitHub:lixinustc/Causal-IR-DIL: Distortion invariant feature learning for image restoration from a causality perspective
2023 CVPR
目录
摘要
1、介绍
1.1 图像修复任务
1.2 失真不变表示学习
1.3 因果效应估计的挑战与方法
1.4 贡献
2、相关工作
2.1 图像恢复
2.2 因果推断
3、方法
3.1 从因果视角看图像恢复
3.2 反事实失真增强
3.3 失真不变表示学习
3.4 基于元学习的失真不变学习(DIL)实现
4、实验
4.1. 实现细节
4.2. 跨失真度实验
4.2.1 图像去噪实验结果
4.2.2 图像去噪的重建图像可视化
4.2.3 图像去模糊实验结果
4.2.4 混合失真图像恢复实验结果
4.3. 跨失真类型实验
4.3.1 真实图像超分辨率(RealSR)实验结果
4.3.2 图像去噪实验结果
4.3.3 图像去雨实验结果
4.4. 消融研究
摘要
近年来,我们见证了深度神经网络(DNNs)在图像恢复领域的巨大进步。然而,一个关键的局限性是它们无法很好地泛化到具有不同程度或类型的真实世界退化。在本文中,我们首次从因果关系的角度提出了一种新的图像恢复训练策略,以提高DNNs对未知退化的泛化能力。我们的方法称为失真不变表示学习(Distortion Invariant representation Learning, DIL),将每种失真类型和程度视为一个特定的混杂因子(confounder),并通过消除每种退化的有害混杂效应来学习失真不变表示。我们从优化的角度建模不同失真的干预,并基于因果关系的后门准则(back-door criterion)推导出DIL。特别地,我们引入了反事实失真增强(counterfactual distortion augmentation)来模拟虚拟的失真类型和程度作为混杂因子。然后,我们基于相应的失真图像,通过虚拟模型更新(virtually model updating)实例化每种失真的干预,并从元学习(meta-learning)的角度消除它们。大量实验证明了我们的DIL在未见过的失真类型和程度上的泛化能力的有效性。
1、介绍
1.1 图像修复任务
图像恢复(Image Restoration, IR)任务,包括图像超分辨率(image super-resolution)、去模糊(deblurring)、去噪(denoising)、压缩伪影去除(compression artifacts removal)等,在深度学习的推动下取得了令人瞩目的性能。一系列精心设计的骨干网络被用于提升特定退化场景下的恢复性能。卷积神经网络(CNNs)和Transformer是图像恢复任务中常用的骨干网络设计选择。然而,如图所示,当这些方法遇到未见过的退化类型时,性能会显著下降。
在训练中,恢复程度对应于标准差为20的噪声,而在测试中,退化程度不同。图像恢复中常用的训练范式,即经验风险最小化(Empirical Risk Minimization, ERM),在处理分布外退化时表现不佳。具体来说,使用ERM训练的恢复网络仅通过最小化理想重建图像 与对应干净图像
之间的距离,挖掘失真图像
与理想重建图像
之间的相关性。然而,这种方法也会捕捉到虚假相关性(spurious correlation),从而引入特定退化dd的有害混杂效应。这意味着条件概率
也受到失真类型或程度
的影响(即
)。
一个鲁棒的、具有良好泛化能力的恢复网络应该是失真不变的(即 不影响
)。例如,给定两个失真类型相同但退化不同的图像,如果它们包含相同的内容
,那么理想的恢复网络应该能够从这两个失真图像中恢复出相同的理想重建图像
(即
)。以往的研究在恢复网络的鲁棒性方面可以大致分为两类:基于失真适应的方案和基于领域适应/转换的方案。基于失真适应的方案旨在估计失真类型或表示,并通过自适应调整恢复网络来处理不同的退化类型。基于领域适应/转换的方案则将不同的退化视为不同的领域,并引入领域适应或领域转换策略。然而,这些研究忽略了对恢复网络泛化能力差的根本原因进行探索。
1.2 失真不变表示学习
相关性并不等于因果关系。学习图像恢复的失真不变表示需要获取失真图像与理想重建图像之间的因果效应,而不仅仅是它们之间的相关性。我们从因果推断的角度构建了图像恢复过程的因果图(Causal Graph)。如图所示,图像恢复中的失真 (包括失真类型
或程度
)是混杂因素,它会引入有害的偏差,并使得恢复过程
依赖于
,因为通过
建立了虚假的关系路径。我们希望恢复过程中失真图像Id与理想重建图像Io之间的因果关系是
,其条件概率可以表示为
。这里,采用“do”操作来切断从失真
到
的连接,从而去除失真
对路径
的负面混杂效应,学习失真不变的特征表示(即
不影响
)。
1.3 因果效应估计的挑战与方法
因果效应估计有两个典型的调整标准:后门准则(Back-door Criterion)和前门准则(Front-door Criterion)。后门准则旨在通过遍历已知的混杂因素来去除负面的混杂效应,而前门准则则用来解决无法识别混杂因素的挑战。为了提高恢复网络的泛化能力,我们提出了失真不变表示学习(DIL)方法,并通过从优化的角度实现后门准则来解决这一问题。实现这一目标面临两个挑战:第一个挑战是如何构建混杂因素集(即失真集)。从因果推断的角度看,最好保持失真图像中其他因素不变,仅改变失真类型。然而,在现实中,收集具有相同内容但不同失真类型的图像对是不现实的。受到因果反事实和失真模拟的启发,我们提出了反事实失真增强方法,从常用数据集中选择高质量图像,并在这些图像上模拟不同的失真类型或程度,作为混杂因素。
第二个挑战是如何为后门准则找到一个稳定且合适的实例化方案。以往的研究已将因果推断应用于高层次任务中,并通过注意力干预、特征干预等方法实例化了后门准则,但在图像恢复这一低级任务中,这些方法难以实现。在本文中,我们从优化角度理论上推导出了失真不变表示学习(DIL),通过虚拟更新恢复网络并结合元学习优化策略来消除失真带来的混杂效应。通过这种方式,我们能够实现图像恢复中的因果学习,并基于后门准则实例化DIL。
1.4 贡献
本文的贡献总结如下:
- 我们从因果推断的角度重新审视了图像恢复任务,并指出恢复网络泛化能力差的原因是因为恢复网络并未独立于训练数据中的失真。
- 基于因果推断中的后门准则,我们提出了一种新的训练范式——失真不变表示学习(DIL),该方法通过反事实失真增强和元学习优化策略实例化了因果干预,并消除了退化带来的负面混杂效应。
- 在不同的图像恢复任务上的广泛实验表明,我们的DIL方法能够有效提高恢复网络对未见过的失真类型和程度的泛化能力。
2、相关工作
2.1 图像恢复
图像恢复(Image Restoration, IR)旨在从对应的失真图像中恢复高质量图像,这在提升人类视觉体验方面起着重要作用。随着深度学习的进展,一系列研究在多个图像恢复任务中取得了显著的进展,包括图像去噪、去模糊、超分辨率(SR)等。特别地,大多数研究都致力于根据不同的退化过程精心设计不同图像恢复任务的框架,这些方法大致可以分为两类:基于卷积神经网络(CNN)的框架和基于Transformer的框架。然而,以上的研究仅探讨了如何提高模型对特定退化的归纳偏差能力,而缺乏足够的泛化能力。为提高模型的鲁棒性,一些研究尝试将领域转换或失真自适应学习引入图像恢复任务。与此不同,本文将因果学习引入到图像恢复中,探讨了恢复网络鲁棒性差的原因,并从因果推断的角度提出了失真不变表示学习。
2.2 因果推断
因果推断(Causal Inference)旨在消除混杂因素带来的有害偏差,并发现多个变量之间的因果关系。通过调整标准(如前门准则或后门准则),实现“do”操作以估计因果效应。近年来,深度学习推动了一系列智能任务的广泛发展,例如图像分类、图像分割、目标检测、低级处理等。然而,现有的大量研究集中于拟合输入和输出之间的相关性,而忽略了因果关系。由于混杂因素的存在,网络容易捕捉到输入和输出之间的虚假相关性。例如,如果训练数据中大多数狮子出现在草丛中,模型不可避免地将草丛误认为是狮子。为了消除混杂因素带来的有害偏差,一些研究尝试将因果推断引入到深度学习中。从特征角度对混杂因素的干预进行了建模,从注意力角度将前门准则引入视觉-语言任务中。为了提高泛化能力,将因果学习引入领域适应/泛化任务。然而,上述基于因果推断的方法主要关注于高层次任务。在本文中,我们首次将因果推断应用于图像恢复任务,旨在提高恢复网络在不同失真类型和程度下的泛化能力。
3、方法
3.1 从因果视角看图像恢复
图像恢复旨在恢复失真的图像,图像的退化过程可以表示为一个函数。其中,
和
分别表示干净图像和失真图像,
表示退化。恢复网络
是通过损失函数进行训练,以最小化其理想重建图像
和原始干净图像
之间的差异。我们用因果结构图来建模这个过程。在图中,
表示退化过程,
。
和
表示通过最大化
的概率,
在
的监督下进行学习。
此外,表示从
到
的知识学习过程。
是恢复过程,经过恢复网络
得到。
从因果推断的角度来看,图像恢复的因果表示要求恢复网络 获取
之间的因果关系(即,
)。然而,有两个额外的路径,
和
,它们引入了虚假相关性,其中
和
是因果推断中的混杂因素。值得注意的是,
在数据集中的多样性和为重建图像
带来更多生动纹理的特性,使它成为一种有利的混杂因素。我们在本文中不考虑混杂因素
。
我们旨在提高恢复网络对未知失真的鲁棒性,而这些失真常受到混杂因素 的不良影响。如图所示,
的存在使得恢复网络
学习的条件概率
也会受到失真
的影响,即,
拟合的条件概率实际上是
。因此,恢复网络
对不同失真的鲁棒性较差,因为它并不独立于不同的失真
。
一个鲁棒的恢复网络 应该独立于不同的失真。为了实现这一目标,我们采用了因果推断中的“后门准则”来实现失真不变学习(DIL)。我们将图像恢复中的后门准则公式:
其中,因果条件概率 是恢复网络
在失真不变学习上的优化方向。为了简化优化,我们将每种失真
的概率设为
,其中 n 是混杂因素中存在的失真类型和程度的数量。
实现这一目标面临两个关键挑战:1)在现实世界中收集具有相同内容的不同真实失真图像并不简单。2)如何将不同失真对重建过程的干预(即)实例化到图像恢复中?我们通过反事实失真增强和失真不变表示学习来解决这些问题。
3.2 反事实失真增强
为了让恢复网络学习到失真不变的表示,构建失真集合(即混杂因素)是至关重要的。例如,如果我们希望恢复网络具备针对不同失真度数的泛化能力,就需要构建一个包含不同失真级别的失真集合
。类似地,通过构建包含不同但相关失真类型的
,我们可以提高恢复网络对未知失真类型的泛化能力。此外,为了避免图像内容的影响,每张干净图像最好对应有不同失真类型或度数的失真图像在
中。然而,在现实世界中,收集符合上述原则的数据集并不容易,这既费时又费力。
在本文中,我们通过合成失真来构建失真集合 ,这些失真可以被称为因果推断中的虚拟混杂因素。具体来说,我们收集了一系列高质量的图像
,并通过修改退化过程生成失真图像,表示为
,其中
。
3.3 失真不变表示学习
在构建了虚拟混杂因素/失真集合 后,我们可以通过实现因果推断中的后门准则来实现失真不变的表示学习。首先,我们介绍恢复网络中的条件概率
和常用训练范式——经验风险最小化(ERM)之间的关系。
在图像恢复中,期望通过最大化条件概率来学习理想的重建图像
,其损失函数表示为
。ERM 被用于通过最小化训练数据集
上的损失函数来优化网络
:
该公式使恢复网络 能够最大化
或
。然而,以上训练过程也使得
与训练数据集
中的失真
有关,这会削弱
对不同失真类型(即,
)的泛化能力。为了实现失真不变表示学习,我们的目标是最大化因果条件概率
,而不是
。
实现这一目标的关键挑战在于如何建模条件概率(即,如何建模失真
对恢复过程
的干预)。
本文提出通过优化网络参数来建模失真对恢复过程的干预(即,
。从上述分析中我们知道,在使用经验风险最小化(ERM)训练配对数据(
)时,恢复网络
实际上是以失真
为条件的。这启发我们通过基于 ERM 更新模型参数来实例化不同失真类型或程度
的干预:
其中 表示恢复网络经过一步更新后,条件于混杂因素
的参数。因此,通过最小化损失
,可以获得条件概率
的最大值。最大化因果条件概率
的优化方向为:
其中 表示包含
种失真类型或度数的混杂因素集合。基于以上优化目标,我们从因果推断的角度学习失真不变的表示。
3.4 基于元学习的失真不变学习(DIL)实现
一个有趣的发现是,从因果推断角度得出的失真不变学习(DIL)优化方向与一种典型的元学习策略——MAML(Model-Agnostic Meta-Learning)——是一致的,尽管它们有不同的目的。MAML旨在使网络能够快速适应少样本任务,而我们的目标是提高恢复网络的泛化能力。我们基于这种元学习策略,将DIL应用到图像恢复中。
然而,将优化方向直接融入到实际训练过程中是非常困难的,这在计算上是不可行的。原因在于它需要多次计算和更新梯度,这对于像素级图像恢复任务尤其昂贵。为了简化这一过程,我们利用泰勒展开和逆向展开将公式转化为以下形式:
其中 表示恢复网络
的参数,在所有失真
上进行虚拟更新。我们将这种策略定义为 平行采样,它将DIL的复杂训练过程简化为两步。在本文中,我们称原始采样策略为 串行采样。串行采样和平行采样之间的对比如图所示。
我们还探讨了两种不同的梯度更新策略。根据公式 8 和公式 5,我们可以看到它们都需要二阶梯度,因为梯度是通过两步前向传播计算得到的,如图所示。为了简化计算,Reptile提出了一种替代策略,即通过使用一阶梯度对二阶梯度进行近似。这种优化方向(即梯度)通过计算初始参数和最后一步参数之间的偏差来获得。我们将其集成到我们的DIL中,并称之为 一阶优化。与之对比,公式中的原始优化方法被称为 二阶优化。总之,我们为DIL提出了四种变体,基于上述两种策略:
- DIL_sf 使用串行采样和一阶梯度优化。
- DIL_pf 使用平行采样和一阶优化。
- DIL_ss / DIL_ps 使用二阶优化和串行/平行采样。
4、实验
在这一部分,我们首先描述了实验的实现细节。接着,我们通过两个典型的跨分布场景验证了我们提出的DIL(分布式图像学习)方法的有效性:分别为跨失真度(Cross Distortion Degrees)和跨失真类型(Cross Distortion Types)。特别地,对于跨失真度,我们使用了已见失真度进行训练,并在未见失真度的测试集上进行验证;对于跨失真类型,我们使用合成的失真进行训练,并在真实世界或其他类型的失真上进行验证。
4.1. 实现细节
我们采用了典型的RRDB(残差残差块)作为图像恢复的主干网络,它在各种低层次图像任务中已经展示出了显著的性能。所有实验都在四张NVIDIA 2080Ti GPU上进行。Adam优化器被用来优化ERM和DIL训练框架中的网络参数。
4.2. 跨失真度实验
4.2.1 图像去噪实验结果
在图像去噪任务中,训练数据由带有不同噪声级别的失真图像及其对应的干净图像组成。在训练完恢复网络后,我们在包含未见噪声级别的测试集上进行验证。我们比较了经验风险最小化(ERM)与我们提出的四个DIL变种:DILsf, DILpf, DILss 和 DILps。
实验结果如表1所示。我们可以观察到,所有四个DIL变种在多个未见噪声级别上都表现出了比传统ERM更好的泛化能力。在多个典型场景中,包括自然图像(CBSD68、Kodak24、McMaster)、建筑图像(Urban100)和卡通图像(Manga109),我们的DIL方法甚至比ERM有了高达8.74dB的显著提升。特别地,随着训练和测试数据之间的分布差距增大,DIL能为ERM带来更大的性能提升。进一步地,DILsf在跨失真度任务中表现出了最好的泛化能力,其通过串行采样和一阶优化方法取得了最佳效果。
4.2.2 图像去噪的重建图像可视化
如图4所示,DILsf在未见噪声级别(=30)下,能够恢复更加生动、清晰的图像,而ERM则未能去除噪声,且重建图像明显存在噪声失真。
4.2.3 图像去模糊实验结果
在图像去模糊实验中,我们训练恢复网络,使用不同的高斯模糊级别([1.0, 2.0, 3.0, 4.0]),并在更加严重的模糊级别(4.2、4.4、4.6、4.8、5.0)上验证其泛化能力。结果如表2所示,随着模糊级别的增加,使用ERM训练的网络性能严重下降,因为未见模糊级别与训练时的模糊级别相差较大。而我们的DIL方法则能在每个未见模糊级别上都取得比ERM更好的恢复效果,特别是在卡通场景Manga109上,我们在模糊级别5.0下取得了2.09dB的增益。
4.2.4 混合失真图像恢复实验结果
除了单一的失真,我们还探讨了DIL方法在混合失真图像恢复中的泛化能力。根据设置,混合失真图像分别在轻微、中等和严重失真级别上进行训练和验证。结果如表3所示,DIL在轻度和中度混合失真上的平均增益分别为1.05dB和0.66dB,相较于ERM方法,DIL能够在未见的混合失真级别上保持更好的性能。
4.3. 跨失真类型实验
4.3.1 真实图像超分辨率(RealSR)实验结果
真实图像超分辨率(RealSR)是一个广受关注的任务,特别是在图像包含复杂的混合失真时(如模糊、低分辨率、噪声等)。然而,真实超分辨率图像的失真/干净图像对非常难以收集。因此,我们采用了Real-ESRGAN的真实失真模拟方法来生成训练数据集,并在未见的RealSRV3和DRealSR数据集上进行验证。实验结果如表5所示,DILsf在RealSRV3和DRealSR数据集上分别超越了ERM 0.29dB和0.26dB。特别地,DILps在跨失真类型任务上比DILsf表现更好,分别在RealSRV3和DRealSR数据集上超过ERM 0.47dB和0.85dB。
4.3.2 图像去噪实验结果
我们还研究了DIL在真实图像去噪任务中的泛化能力。具体来说,我们基于相机ISP过程中的四种颜色空间模拟了四种失真,并生成了训练图像对。然后,我们在常用的真实去噪数据集SIDD和DND上进行了验证。实验结果表明,DILps在SIDD数据集上达到了39.92 dB的PSNR,比ERM高出1.02dB。
4.3.3 图像去雨实验结果
作为扩展实验,我们将DIL应用于图像去雨任务。在不同数据集之间,去雨的类型和级别差异很大。我们使用了三个去雨数据集(DID-MDN、Rain14000、Heavy Rain Dataset)来训练恢复网络,并在未见的Rain100L、Rain12和Rain800数据集上进行了验证。实验结果显示,DILps在Rain100L和Rain12数据集上分别取得了0.76dB和1.63dB的增益。
4.4. 消融研究
不同恢复网络的影响
我们展示了DIL在不同网络骨架上的有效性。除了卷积网络RRDB,我们还将DIL引入了基于Transformer的SwinIR。实验结果如表6所示,DIL也能提升基于Transformer骨架的泛化能力。这项研究表明,DIL是一种通用的训练框架,适用于不同的网络骨架。
不同DIL变种的效果
如表1和表4所示,DILsf更适合处理跨失真度的任务,而在跨失真类型的任务中,DILps表现更好。第一阶优化方法相对稳定,但在较大的分布差距下缺乏足够的能力,而第二阶优化方法在处理大分布差距时表现更强。因此,对于跨失真类型任务,DILps优于其他变种。
相关文章:
《从因果关系的角度学习失真不变表示以用于图像恢复》学习笔记
paper:2303.06859 GitHub:lixinustc/Causal-IR-DIL: Distortion invariant feature learning for image restoration from a causality perspective 2023 CVPR 目录 摘要 1、介绍 1.1 图像修复任务 1.2 失真不变表示学习 1.3 因果效应估计的挑战…...
STM32 PWM驱动直流电机
接线图: 代码配置: 根据驱动舵机的代码来写,与舵机不同的是,这次的引脚接到了PA2上,所以需要改一下引脚以及改为OC3通道。 另外还需在配置两个GPIO引脚,来控制电机的旋转方向,这里连接到了PA4与…...
【Hadoop】Hadoop 概述
Hadoop 概述 Hadoop 是什么Hadoop 发展历史Hadoop 三大发行版本Hadoop 优势(4 高)Hadoop 组成(面试重点)HDFS 架构概述YARN 架构概述MapReduce 架构概述HDFS、YARN、MapReduce 三者关系 大数据技术生态体系 Hadoop 是什么 Hadoop…...
【仪器分析】FACTs-幅度
** 当然,这回是一篇没有插图的文章,但是有足够多的描述可以用来想象。 我拿这个系列当作前传试试水 引言。正弦信号可能会发生怎样的变化? ** 近日学FACTs,险些成为传函丁真, 如果从仪器角度考察正弦信号的测量&…...
deepseek R1的确不错,特别是深度思考模式
deepseek R1的确不错,特别是深度思考模式,每次都能自我反省改进。比如我让 它写文案: 【赛博朋克版程序员新春密码——2025我们来破局】 亲爱的代码骑士们: 当CtrlS的肌肉记忆遇上抢票插件,当Spring Boot的…...
Unity敌人逻辑笔记
写ai逻辑基本上都需要状态机。因为懒得手搓状态机,所以选择直接用动画状态机当逻辑状态机用。 架构设计 因为敌人的根节点已经有一个animator控制动画,只能增加一个子节点AI,给它加一个animator指向逻辑“动画”状态机。还有一个脚本&#…...
C++,STL 简介:历史、组成、优势
文章目录 引言一、STL 的历史STL 的核心组成三、STL 的核心优势四、结语进一步学习资源: 引言 C 是一门强大且灵活的编程语言,但其真正的魅力之一在于其标准库——尤其是标准模板库(Standard Template Library, STL)。STL 提供了…...
【事务管理】
目录 一. 介绍与操作二. Spring事务管理三. 事务四大特性 \quad 一. 介绍与操作 \quad \quad 二. Spring事务管理 \quad 推荐加在经常进行增删改的方法上 \quad 三. 事务四大特性 \quad ctrlaltt...
ERP革新:打破数据壁垒,重塑市场竞争
标题:ERP革新:打破数据壁垒,重塑市场竞争 文章信息摘要: Operator和Computer Use等工具通过模拟用户交互和自动化数据提取,绕过了传统ERP系统的API限制,打破了其数据护城河。这种技术革新降低了企业切换软…...
小阿卡纳牌
小阿卡纳牌 风:热湿 火:热干 水:冷湿 土:冷干 火风:温度相同,但是湿度不同,二人可能会在短期内十分热情,但是等待热情消退之后,会趋于平淡。 湿度相同、温度不同&#x…...
android的gradle
资料: GitHub - ChenSWD/CopyGradleInAction: 备份《Gradle IN Action》书中的源码,添加了部分注释 //github上一个开源项目,外加pdf书 Gradle User Manual gradle官网 讲的挺好的博客 Gradle之重新认识Gradle(项目结构、命令行、tas…...
时间轮:XXL-JOB 高效、精准定时任务调度实现思路分析
大家好,我是此林。 定时任务是我们项目中经常会遇到的一个场景。那么如果让我们手动来实现一个定时任务框架,我们会怎么做呢? 1. 基础实现:简单的线程池时间轮询 最直接的方式是创建一个定时任务线程池,用户每提交一…...
【愚公系列】《循序渐进Vue.js 3.x前端开发实践》029-组件的数据注入
标题详情作者简介愚公搬代码头衔华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主&…...
「 机器人 」扑翼飞行器控制的当前挑战与后续潜在研究方向
前言 在扑翼飞行器设计与控制方面,虽然已经取得了显著的进步,但在飞行时间、环境适应性、能量利用效率及模型精度等方面依旧存在亟待解决的挑战。以下内容概括了这些挑战和可能的改进路径。 1. 当前挑战 1.1 飞行时间短 (1)主要原因 能源存储有限(电池容量小)、驱动系…...
ICSE‘25 LLM Assistance for Memory Safety
不知道从什么时候开始,各大技术社区,技术群聊流行着 “用Rust重写!” ,放一张图(笑死… 这不, 随着大模型技术的流行,大家都在探索如何让大模型自动完成仓库级别(全程序)的代码重构,代码变换(Refactor&…...
使用 Docker 运行 Oracle Database 23ai Free 容器镜像并配置密码与数据持久化
使用 Docker 运行 Oracle Database 23ai Free 容器镜像并配置密码与数据持久化 前言环境准备运行 Oracle Database 23ai Free 容器基本命令参数说明示例 注意事项高级配置参数说明 总结 前言 Oracle Database 23ai Free 是 Oracle 提供的免费版数据库,基于 Oracle …...
在Linux系统上安装.NET
测试系统:openKylin(开放麒麟) 1.确定系统和架构信息: 打开终端(Ctrl Alt T),输入cat /etc/os-release查看系统版本相关信息。 输入uname -m查看系统架构。确保你的系统和架构符合.NET 的要求,如果架构…...
C++ unordered_map和unordered_set的使用,哈希表的实现
文章目录 unordered_map,unorder_set和map ,set的差异哈希表的实现概念直接定址法哈希冲突哈希冲突举个例子 负载因子将关键字转为整数哈希函数除法散列法/除留余数法 哈希冲突的解决方法开放定址法线性探测二次探测 开放定址法代码实现 哈希表的代码 un…...
星火大模型接入及文本生成HTTP流式、非流式接口(JAVA)
文章目录 一、接入星火大模型二、基于JAVA实现HTTP非流式接口1.配置2.接口实现(1)分析接口请求(2)代码实现 3.功能测试(1)测试对话功能(2)测试记住上下文功能 三、基于JAVA实现HTTP流…...
数据结构——二叉树——堆(1)
今天,我们来写一篇关于数据结构的二叉树的知识。 在学习真正的二叉树之前,我们必不可少的先了解一下二叉树的相关概念。 一:树的概念 树是一种非线性的数据结构,它是由n(n>0)个有限结点组成一个具有层…...
【HarmonyOS之旅】基于ArkTS开发(三) -> 兼容JS的类Web开发(二)
目录 1 -> HML语法 1.1 -> 页面结构 1.2 -> 数据绑定 1.3 -> 普通事件绑定 1.4 -> 冒泡事件绑定5 1.5 -> 捕获事件绑定5 1.6 -> 列表渲染 1.7 -> 条件渲染 1.8 -> 逻辑控制块 1.9 -> 模板引用 2 -> CSS语法 2.1 -> 尺寸单位 …...
SOME/IP--协议英文原文讲解4
前言 SOME/IP协议越来越多的用于汽车电子行业中,关于协议详细完全的中文资料却没有,所以我将结合工作经验并对照英文原版协议做一系列的文章。基本分三大块: 1. SOME/IP协议讲解 2. SOME/IP-SD协议讲解 3. python/C举例调试讲解 4.1.3 End…...
【AI】【本地部署】OpenWebUI的升级并移植旧有用户信息
【背景】 OpenWebUI的版本升级频率很高,并会修改旧版本的Bug,不过对于已经在使用的系统,升级后现有用户信息都会丢失,于是研究如何在升级后将现有的用户信息移植到升级后版本。 【准备工作】 OpenWebUI的升级步骤在Docker中有现…...
论文笔记(六十三)Understanding Diffusion Models: A Unified Perspective(五)
Understanding Diffusion Models: A Unified Perspective(五) 文章概括基于得分的生成模型(Score-based Generative Models) 文章概括 引用: article{luo2022understanding,title{Understanding diffusion models: A…...
Tableau:为数据科学专家量身定制
Tableau是一款功能强大且广泛应用的数据可视化和商业智能(BI)工具,由斯坦福大学的三位研究者于2003年创立。它旨在通过直观的界面和强大的功能,帮助用户轻松地探索、分析和呈现数据,从而做出更明智的决策。 核心功能与…...
CAG技术:提升LLM响应速度与质量
标题:CAG技术:提升LLM响应速度与质量 文章信息摘要: CAG(Cache-Augmented Generation)通过预加载相关知识到LLM的扩展上下文中,显著减少了检索延迟和错误,从而提升了响应速度和质量。与传统的R…...
飞桨PaddleNLP套件中使用DeepSeek r1大模型
安装飞桨PaddleNLP 首先安装最新的PaddleNLP3.0版本: pip install paddlenlp3.0.0b3 依赖库比较多,可能需要较长时间安装。 安装好后,看看版本: import paddlenlp paddlenlp.__version__ 输出: 3.0.0b3.post2025…...
单片机基础模块学习——NE555芯片
一、NE555电路图 NE555也称555定时器,本文主要利用NE555产生方波发生电路。整个电路相当于频率可调的方波发生器。 通过调整电位器的阻值,方波的频率也随之改变。 RB3在开发板的位置如下图 测量方波信号的引脚为SIGHAL,由上面的电路图可知,NE555已经构成完整的方波发生电…...
php:代码中怎么搭建一个类似linux系统的crontab服务
一、前言 最近使用自己搭建的php框架写一些东西,需要用到异步脚本任务的执行,但是是因为自己搭建的框架没有现成的机制,所以想自己搭建一个类似linux系统的crontab服务的功能。 因为如果直接使用linux crontab的服务配置起来很麻烦࿰…...
Versal - 基础3(AXI NoC 专题+仿真+QoS)
目录 1. 简介 2. 示例 2.1 示例说明 2.2 创建项目 2.2.1 平台信息 2.2.2 AXI NoC Automation 2.2.3 创建时钟和复位 2.3 配置 NoC 2.4 配置 AXI Traffic 2.5 配置 Memory Size 2.6 Validate BD 2.7 添加观察信号 2.8 运行仿真 2.9 查看结果 2.9.1 整体波形 2.9…...
Synology 群辉NAS安装(10)安装confluence
Synology 群辉NAS安装(10)安装confluence 写在前面本着一朝鲜吃遍天的原则,我又去了这个github的作者那里翻车的第一次尝试手工创建数据库制作一个新的docker-compose of confluence 不折腾但成功启动的版本 写在前面 在装完jira之后&#x…...
挂载mount
文章目录 1.挂载的概念(1)挂载命令:mount -t nfs(2)-t 选项:指定要挂载的文件系统类型(3)-o选项 2.挂载的目的和作用(1)跨操作系统访问:将Windows系统内容挂载到Linux系统下(2)访问外部存储设备(3)整合不同的存储设备 3.文件系统挂载要做的事…...
NLP深度学习 DAY4:Word2Vec详解:两种模式(CBOW与Skip-gram)
用稀疏向量表示文本,即所谓的词袋模型在 NLP 有着悠久的历史。正如上文中介绍的,早在 2001年就开始使用密集向量表示词或词嵌入。Mikolov等人在2013年提出的创新技术是通过去除隐藏层,逼近目标,进而使这些单词嵌入的训练更加高效。…...
SQL注入漏洞之基础数据类型注入 字符 数字 搜索 XX 以及靶场实例哟
目录 基础数据类型SQL注入 字符类型注入 单引号双引号解释 案例练习: 数字类型注入 案例 搜索性注入: 案例 XX性注入: 语句 案例 基础SQL注入类型分类 基础数据类型SQL注入 字符类型注入 xxx or 11 # select id,email from member where usernamexx or 11 # --…...
苹果AR眼镜:产品规划与战略路线深度解析
随着增强现实(AR)技术的不断发展,苹果公司正逐步推进其AR智能眼镜项目。尽管Vision Pro作为一款高端混合现实设备已经面世,但苹果真正的目标是开发出一款轻便、全天候佩戴且能够取代智能手机功能的AR眼镜。本文将梳理苹果在AR领域的探索历程,并分析其当前的产品状态及未来…...
HashMap讲解
在Java开发中,HashMap 是最常用的数据结构之一,它不仅提供了键值对的快速存储和检索功能,还具备较高的性能和较低的空间占用。但很多开发者对其底层原理并不清楚,今天我们将详细解析HashMap的内部结构,并用通俗的方式解…...
MySQL的复制
一、概述 1.复制解决的问题是让一台服务器的数据与其他服务器保持同步,即主库的数据可以同步到多台备库上,备库也可以配置成另外一台服务器的主库。这种操作一般不会增加主库的开销,主要是启用二进制日志带来的开销。 2.两种复制方式…...
Android View 的事件分发机制解析
前言:当一个事件发生时(例如触摸屏幕),事件会从根View(通常是Activity的布局中的最顶层View)开始,通过一个特定的路径传递到具体的View,这个过程涉及到三个关键的阶段:事…...
240. 搜索二维矩阵||
参考题解:https://leetcode.cn/problems/search-a-2d-matrix-ii/solutions/2361487/240-sou-suo-er-wei-ju-zhen-iitan-xin-qin-7mtf 将矩阵旋转45度,可以看作一个二叉搜索树。 假设以左下角元素为根结点, 当target比root大的时候ÿ…...
Linux C++
一、引言 冯诺依曼架构是现代计算机系统的基础,它的提出为计算机的发展奠定了理论基础。在学习 C 和 Linux 系统时,理解冯诺依曼架构有助于我们更好地理解程序是如何在计算机中运行的,包括程序的存储、执行和资源管理。这对于编写高效、可靠的…...
docker安装emqx
emqx安装 拉取emqx镜像 docker pull emqx/emqx:v4.1.0 运行docker容器 docker run -tid --name emqx -p 1883:1883 -p 8083:8083 -p 8081:8081 -p 8883:8883 -p 8084:8084 -p 18083:18083 emqx/emqx:v4.1.0 放行端口 1、如果要是自己的虚拟机,并且关闭了防火墙&a…...
Docker 仓库管理
Docker 仓库管理 引言 随着容器技术的兴起,Docker 已成为最流行的容器化平台之一。在Docker的生态系统中,仓库(Repository)是至关重要的组成部分。一个有效的仓库管理策略可以帮助开发者更高效地构建、测试、部署和管理容器应用。本文将深入探讨Docker仓库管理的相关知识…...
预测不规则离散运动的下一个结构
有一个点在19*19的平面上运动,运动轨迹为 一共移动了90步,顺序为 y x y x y x 0 17 16 30 10 8 60 15 15 1 3 6 31 10 7 61 14 15 2 12 17 32 9 9 62 16 15 3 4 12 33 10 9 63 18 15 4 3 18 34 15 12 6…...
DVC - 数据版本和机器学习实验的命令行工具和 VS Code 扩展
文章目录 一、关于 DVC二、快速启动三、DVC的工作原理四、VS代码扩展五、安装Snapcraft(Linux)Chocolatey (Windows)Brew (mac OS)Anaconda (Any platform)PyPI(Python)Package (Platform-specific)Ubuntu / Debian (deb)Fedora /…...
[C语言日寄] <stdio.h> 头文件功能介绍
在C语言的世界里,<stdio.h> 是一个极其重要的头文件,它提供了标准输入输出功能,是C语言程序与用户交互的核心工具。今天,我们就来深入探讨 <stdio.h> 的功能、使用注意事项以及它的拓展应用。 功能介绍 <stdio.h…...
c语言中mysql_query的概念和使用案例
在 C 语言中,使用 MySQL 数据库需要用到 MySQL C API。mysql_query() 函数是 MySQL C API 中的一个函数,用于执行 SQL 语句。 概念 mysql_query() 函数的原型如下: int mysql_query(MYSQL *mysql, const char *stmt_str)mysql:…...
「 机器人 」扑翼飞行器的数据驱动建模核心方法
前言 数据驱动建模可充分利用扑翼飞行器的已有运行数据,改进动力学模型与控制策略,并对未建模动态做出更精确的预测。在复杂的非线性飞行环境中,该方法能有效弥补传统解析建模的不足,具有较高的研究与应用价值。以下针对主要研究方向和实现步骤进行整理与阐述。 1. 数据驱动…...
C++ queue
队列用vector<int>好不好 不好 为什么? 因为队列是先进先出 vector没有提供头删(效率太低) 要强制适配也可以 就得用erase函数和begin函数了 库里面的队列是不支持vector<int>的 queue实现 #pragma once #include<vector…...
SpringBoot 配置文件
目录 一. 配置文件相关概念 二. 配置文件快速上手 1. 配置文件的格式 2. properties 配置文件 (1) properties 基本语法 (2) 读取配置文件内容 (3) properties 缺点分析 3. yml配置文件 (1) yml 基本语法 (2) 读取配置文件内容 (3) yml 配置对象 (4) yml 配置集合 …...
【Leetcode 每日一题】119. 杨辉三角 II
问题背景 给定一个非负索引 r o w I n d e x rowIndex rowIndex,返回「杨辉三角」的第 r o w I n d e x rowIndex rowIndex 行。 在「杨辉三角」中,每个数是它左上方和右上方的数的和。 数据约束 0 ≤ r o w I n d e x ≤ 33 0 \le rowIndex \le 33 …...