论文精读:基于概率教师学习的跨域自适应目标检测(ICML2022)
原文标题:Learning Domain Adaptive Object Detection with Probabilistic Teacher
中文标题:基于概率教师学习的域自适应目标检测
代码地址: GitHub - hikvision-research/ProbabilisticTeacher: An official implementation of ICML 2022 paper "Learning Domain Adaptive Object Detection with Probabilistic Teacher"."
论文地址: https://arxiv.org/abs/2206.06293
1、摘要
无监督域自适应目标检测的自训练是一项具有挑战性的任务,其性能在很大程度上取决于伪标签框(pseudo boxes)的质量。 尽管取得了令人鼓舞的结果,但之前的工作在很大程度上忽略了自我训练过程中伪标签框的不确定性。 在本文中,作者提出了一个简单而有效的框架,称为概率教师(PT,Probabilistic Teacher),旨在从逐渐发展的教师中捕捉未标记目标数据的不确定性,并以互惠互利的方式指导学生的学习。具体来说,作者建议利用不确定性指导的一致性训练来促进分类适应和定位适应,而不是通过精心设计的置信度阈值来过滤伪标签框。此外,作者将锚点自适应与定位自适应并行进行,因为锚点可以看作是一个可学习的参数。与此框架一起,作者还提出了一种新的熵焦点损失(EFL),以进一步促进不确定性引导的自我训练。配备了EFL后,PT比以前的所有基线都要好得多,达到了最新的水平。
2、Introduction
2.1、跨域目标检测面临的需求与挑战
当在大规模和高质量的带标注数据上进行训练时,卷积神经网络在目标检测方面表现出了卓越的性能;然而,当部署到模型事先未曾见过的数据时,检测器会由于天气变化、光照条件变化或图像损坏等领域变化导致性能显著降低。为了解决这个问题,提出了无监督域自适应目标检测(UDA-OD)方法,其目标是将预训练模型从已标记源域转移到具有不同数据分布的未标记目标域。最近,UDA-OD方法在自动驾驶和边缘人工智能等现实场景中提出了强烈的需求,这些场景中不同领域之间的转移很常见,并且收集高质量的带标注信息的目标数据成本很高。
2.2、现有的解决方法
针对该任务提出了各种方法,它们可以分为领域对齐、领域翻译和自训练方法。领域对齐旨在使用域分类器和梯度反转层学习域的特征不变表示。另一方面,领域翻译试图将已标记的源数据翻译成类似目标域的样式,以驱动自适应训练。最近,自我训练方式的提出,是通过利用师生相互学习来逐步提高未标记目标数据的性能;具体来说,自我训练消除了额外训练范例的必要性,如对抗性训练和风格转移,并且最近展现出有希望的结果。如下图1所示,不同模型在正常天气和大雾天气下的适应性能比较,作者的框架通过简单地采用自我训练机制就达到了最先进的结果。
2.3、自训练方式面临的问题和挑战
自我训练的关键在于伪标签;一种流行的解决方案是通过精心设计类别置信度阈值来过滤伪框。然而,这种模式存在两个固有的挑战;1)依赖性挑战,此范例中的性能在很大程度上取决于阈值的选择,而在许多情况下,难以获得带标注信息的目标数据用于置信度阈值调优;2)性能挑战,由于只考虑了类别置信度,而不考虑定位置信度,这种简单的解决方案无法保证伪盒的质量。
2.4、伪标签框的不确定性
伪标签框的不确定性是指在无监督学习或半监督学习中,由模型自身预测生成的标签(而非由人工标注)的可信度问题。在目标检测任务中,模型通常会对未标记的数据生成预测结果,即伪标签框,但这些预测结果可能不完全准确,因此存在不确定性。如果直接使用不准确的伪标签进行训练,可能会误导模型,导致性能下降。同时,伪标签的不确定性相当于引入了噪声,需要通过特定策略来减少其对训练的负面影响。在本文中,作者将预测结果表示为概率分布,而不是确定性的标签;例如,使用高斯分布来表示定位预测的不确定性。通过比较教师模型和学生模型的预测分布,利用两者之间的不确定性差异来引导训练,从而提高学生模型的预测准确性。
2.5、本文提出的方法
为了以上问题,作者从不确定性的角度出发,提出了一个无阈值框架,称为概率教师(PT),这与传统方法不同,传统方法通常需要预先设定一个阈值来决定哪些预测框足够“好”以至于可以被用作训练数据。它不依赖于固定的置信度阈值,而是利用预测的不确定性来改进跨域目标检测任务中的自训练过程。为了做到这一点,作者对传统的Faster-RCNN模型进行了扩展,使其能够输出类别和定位的概率分布形式的预测结果,从而让教师模型能够以一种包含不确定性的方式为未标记的目标域样本生成伪标签。这种方法为教师模型和学生模型之间的一致性训练提供了基础,使得学生模型能够在训练过程中更好地适应目标域;教师模型生成伪标签以训练学生模型,而学生模型的预测又可以用来更新教师模型。
2.5.1、锚框自适应(anchor adaptation)
此外,先前工作中的另一个问题是锚框。锚框形状作为对场景敏感的参数,必须通过手动调整以提高基于锚点的检测器对特定目标检测数据集的准确性。在现有的工作中,源域和目标域通常共享相同的锚点;然而,由于域的转变,源域和目标域通常具有不同的边界框 (bbox) 大小分布。在本文中,作者提出了定位自适应与锚框自适应并行进行的方法,从而将分类、定位和锚点适应统一到一个框架中。
2.5.2、熵焦点损失(Entropy Focal Loss, EFL)
为了进一步促进不确定性引导自训练,作者还设计了一个熵焦点损失(Entropy Focal Loss, EFL),通过在分类和定位两个分支上推动一致性训练来引导模型更关注那些不确定性较低(即熵较低)的伪标签框,因为这些标签代表了更可靠的预测,这样模型可以更有效地从高质量的伪标签中学习,同时减少错误标签的负面影响。熵是信息论中的一个概念,用来衡量随机变量的不确定性或复杂度。在这里,熵越低表示预测结果的不确定性越小,预测越自信。在实际应用中,EFL会计算每个预测的熵,并使用这个熵值来加权损失函数。对于那些熵值较低的预测,损失函数会赋予更高的权重,使得模型在优化时更加重视这些预测。相反,对于那些熵值较高的预测,损失函数会赋予较低的权重,从而减少它们在训练过程中的影响。
2.6、取得的效果
与现有的自训练方法相比,作者的方法不需要使用精心调整的置信度阈值来过滤目标伪框。这使得作者的模型特别适合于难以获得带标注信息的目标数据用于置信度阈值调优的无监督域自适应目标检测(UDA-OD)场景。最重要的是,与之前的方法相比,作者的 PT 方法可以无缝且毫不费力地扩展到只有未标记的目标域数据被用于自训练而不使用源域数据的无源 UDA-OD 场景(隐私关键场景),从而达到保护隐私,防止数据泄露或滥用的目的。
2.7、本文贡献
1)提出了一个无阈值框架,该框架不依赖于固定的置信度阈值来选择用于训练的伪标签,而是通过不确定性驱动的自我训练来探索跨域目标检测。它将分类、定位以及锚点适应统一到一个框架中。
2)为 PT 框架设计了 EFL 损失,有助于模型更加关注那些不确定性较低的预测,以进一步促进不确定性引导的跨域自我训练。
3)作者提出的框架在多个基于源的/无源的 UDA-OD 基准测试中取得了最先进的结果,并大幅超越了以前的方法。
3、Preliminary
Faster-RCNN是一种用于UDA-OD任务的基准检测器,它将目标检测解耦为基于交叉熵的分类分支和基于L1正则的bbox定位回归分支。在分类分支中,标签空间上的预测概率分布能够很自然地捕捉到分类的不确定性,而基于Dirac delta建模的bbox回归分支则无法获得定位的不确定性。为了解决这个问题,在本节中,作者将现有的 Faster-RCNN 检测器增强为概率检测器,称为Probabilistic Faster-RCNN,其中类别和定位标签都表示为概率分布,而不是一个确定的标签值。
具体来说,每个 bbox 的坐标(tx、ty、tw、th)都可以被建模为单个高斯模型;设坐标 t 为单变量高斯分布随机变量,由均值 µ 和方差 σ2 参数化,表示为:t ∼ N(µ, σ2),并且σ2 被 sigmoid 函数限制为 0 到 1 之间的值。这样,bbox的回归损失可以通过真实分布 tGT (Dirac delta one)和预测分布 t (Gaussian one)之间的交叉熵函数来实现;狄拉克δ分布是一种理想化的分布,其中所有概率质量都集中在一个点上,这对应于边界框的真实坐标。边界框回归的损失函数公式如下:
其中,H(tGTi , ti)表示预测坐标 ti 和真实坐标 tGT 之间的标准交叉熵;tGTi 是与第 i 个预测 bbox ti 相关的真实 bbox 坐标;Nbbox 是边界框bbox的数量;‖fg(·)是一个符号函数,用于指示预测的bbox是否与真实边界框匹配,如果预测的边界框 ti 是前景(即与真实边界框匹配),则值为1,否则为0;µi 和 σ2i 是预测的坐标均值和方差;N(tGTi ; µi ; σ2i ) 表示 tGTi 在高斯分布中的概率;公式中的 * 表示交叉熵可以展开为预测高斯分布的概率密度函数的对数。
通过对 bbox 回归的概率建模,Probabilistic Faster-RCNN 能够捕获每个预测的分类和定位的不确定性。因此,总体训练目标函数可以重新表述为:以下四项都是交叉熵损失,并且按照原始 Faster-RCNN 进行同等加权。
第一项是区域提议网络(Region Proposal Network, RPN)中的分类损失。RPN负责生成可能包含目标的候选区域(proposals),分类损失衡量RPN产生的proposals中每个anchor是否正确分类为前景或背景,预测是否有框住物体。
第二项是感兴趣区域(Region of Interest, ROI)池化层后的分类损失。ROI层从RPN生成的proposals中提取特征,并进行进一步的分类,这个损失衡量模型对每个ROI是否正确分类为目标类别,预测RPN输出的候选区域中物体的类别。
第三项是RPN中的边界框回归损失。它衡量RPN生成的proposals的边界框坐标与真实边界框坐标之间的差异,旨在快速粗略地调整候选区域,生成高质量的proposals,经过NMS(非极大值抑制)处理后用于ROI层。
第四项是ROI层后的边界框回归损失。它衡量模型对每个ROI预测的边界框坐标与真实边界框坐标之间的差异,旨在进行更精细的调整,精确最终的目标检测坐标
4、Probabilistic Teacher 概率老师
4.1、Overview
下图描绘了概率教师的概述,其主要思想是从逐渐优化的概率教师那里捕捉未标记目标数据的不确定性,并以互惠互利的方式指导学生模型的学习。Probabilistic Teacher包含两个训练步骤,预训练和相互学习。
1)Pretraining,先使用已标记的源数据训练检测器作为检测器的初始化,然后将训练好的权重复制到教师和学生模型中。
2)Mutual learning,教师模型接收经过弱增强未标记的目标域数据(Unlabeled Target Data (T)),生成伪标签框,每个伪框的类别和位置分别是在标签空间上的一般分布形式和四个高斯分布形式;然后使用这些伪框通过不确定性指导的一致性训练来训练分类分支和定位分支;学生模型使用教师模型生成的伪标签框和经过强增强已标记的源域数据进行训练;最后学生模型通过指数移动平均线(EMA)方式将所学知识传递给教师。EMA是一种权重更新方法,使得教师模型可以缓慢地向学生模型的权重靠拢;通过这种方式,教师模型和学生模型可以共同演化,不断互相改进,从而提高模型的整体性能。
4.2、Mutual Learning
4.2.1、Uncertainty-Guided Consistency Training(不确定性引导的一致性训练)
学生模型在已标记的源数据和未标记的目标数据上进行优化,并使用从教师模型生成的伪框进行优化。训练目标函数如下:
其中,LS 是已标记源数据的监督损失,对应于方程2的公式;LT 是对未标记目标数据的自监督损失,它在教师和学生模型之间添加了不确定性引导的一致性;λT 是目标域的损失权重,默认设置为1。
为了优化第二项,将经过弱增强未标记的目标域数据输入教师模型以生成伪框,其包含分类概率分布 pPL 和 bbox 坐标概率分布 tPL。两种分布都经过“锐化”以指导学生训练,sharpened用于增强教师模型输出的概率分布的置信度,使其更加尖锐和极端化;具体来说,就是提高概率分布中最高概率值,使得模型对其预测更加自信,并且减少熵值使得分布更集中,减少预测的不确定性。
具体来说,LT 由四个训练损失组成,包括 RPN 和 ROIhead 中的两个分类损失和两个 bbox 回归损失:
前两项又可以被表述为:
其中,pPLi 是教师模型预测的第 i 个分类概率分布;pRPNi 和 pROIi 是学生预测的 RPN 和 ROIhead 中的第 i 个分类概率分布;Scls(·,τcls)是锐化函数,其中 τcls 是温度因子,用于控制锐化的强度;M(⋅)是合并操作,将所有前景类别的概率相加,以获得前景/背景概率分布来指导RPN训练;H(⋅,⋅)是交叉熵损失函数,用于计算锐化后的教师预测和学生预测之间的差异;NRPNcls 和 NROIcls 分别是 RPN 和 ROIhead 中的批量大小。
提问:为什么第一项有求和操作但是第二项却有锐化操作?
1)在RPN层,求和操作是将所有可能的前景类别概率加起来,形成一个通用的前景指示器。RPN的主要任务是生成大量的候选区域,这些区域可能包含不同的对象类别。因此,RPN的输出是多个前景类别的概率,需要将这些概率合并成一个二分类问题(前景 vs 背景,是否包含目标)。
2)在ROI层,每个候选区域已经由RPN选定为可能包含特定对象的区域,因此ROI层的任务是确定这些区域内的具体对象类别。这里使用锐化操作是为了增强模型对其分类预测的置信度。锐化操作通过增加最高预测概率的值并降低其他概率的值,使得模型对某个类别的预测更加自信。这在ROI层尤其重要,因为我们需要从较少的候选区域中精确地识别出具体的类别。
3)RPN的目的是生成高质量的候选区域,它需要区分前景和背景,而不是确定具体的类别。因此要将所有前景类别合并为一个统一的前景概率。ROI的目的是精确分类,在已经确定为前景的候选区域中,需要精确地识别出对象的具体类别。因此要使用锐化操作来增强对特定类别的置信度。
后两项可以统一为一般形式:
其中, tPLi 是教师模型预测的第 i 个 bbox 坐标概率分布(这两项都是在 ROIhead 中预测);ti 是学生在 RPN 或 ROIhead 中预测的 bbox 坐标概率分布,并与 tPLi 相关联;Sbbox(·, τbbox) 是bbox 回归的锐化函数,τbbox 是温度因子。
4.2.2、Sharpening Functions(锐化函数)
对于分类分支,Scls(·, τcls) 被定义为温度为 τcls 的 SoftMax 函数。
对于bbox回归分支,高斯分布的熵是其方差σ2的函数。当τ=1(包括τcls和τbbox)时,锐化函数相当于原来的SoftMax或Gaussian函数。当τ→0或τ→+∞时,趋于狄拉克δ分布或均匀分布,分别对应最低熵或最高熵情况,本文设置 τ < 1。因此Sbbox(·, τbbox) 设计为:
通过这种专门用于 bbox 回归的锐化函数,公式6 LT−bbox 可以详细的表示为:
其中,(μPLi , σPLi ) 和 (μi, σi) 分别是教师模型和学生模型预测的 bbox 坐标的第 i 个均值和方差;C是常数。
4.2.3、Teacher Updating(教师模型的更新)
为了获得更准确的伪框,学生模型通过EMA的正反馈逐步更新教师模型。给定学生 θS 的权重,教师 θT 的计算公式如下:
θT = αθT + (1 −α)θS,其中 α 是 EMA 比率。逐步更新的教师模型可以被视为不同训练时间戳下的学生模型集合。
4.2.4、Anchor Adaptation(锚框自适应)
在当前工作中,源域和目标域通常共享相同的锚点。 然而由于领域的变化,源域和目标域通常具有不同的bbox大小分布。作者提出在师生通过EMA机制相互学习过程中缓慢地调整锚点形状,以匹配目标域中bbox的分布。总体优化目标为:
其中,{(wk, hk)}Ak=1 表示所有可能的锚框宽度和高度的集合,A为锚框的总数。
4.3、Entropy Focal Loss(熵焦损失)
虽然PT模型已经逐步利用了伪框,使得预测逐渐趋向于低熵,但现有的有噪声的伪框不可避免地会对性能造成损害。由于所提出的框架可以获得每个bbox(类别加四个坐标)的不确定性,因此可以应用这些不确定性信息来提高性能。作者使用类别和位置的熵来描述每个bbox的不确定性,并引入熵焦点损失以进一步促进分类和定位分支的不确定性引导一致性训练。
分类和回归分支的熵焦点损失可以统一为通用形式:
其中,λ 是超参数;E 是教师的预测熵;Enorm 是范数项,在本文被设置为熵的最大值。理论上,分类时 Enorm 等于 log(n + 1),位置回归时 Enorm 等于 1/2*log(2π) + 1/2,n 是前景类的数量 。利用获得的类别和伪框每个坐标的不确定性,熵焦点损失鼓励模型更多地关注分类分支中噪声较小的类别预测和回归分支中更准确的坐标个体。
5、Strong Augmentation for UDA-OD(无监督域自适应目标检测的强数据增强)
5.1、Intra-Domain Gap(域内差距)
作者在下图中可视化了只在源数据训练的模型在目标域上预测的真阳性 (TP,绿色) 和假阴性 (FN,金色)。可以观察到,较小、较严重模糊和遮挡的物体往往具有较差的适应性能,反之亦然,作者将这种现象称为域内差距。下图展示了“正常城市景观到白雾城市景观”适应任务中的域内差距,h和w分别表示预测边界框的高度和宽度。
5.2、Intra-Domain Alignment via Strong Augmentation(通过强增强进行域内对齐)
由于大尺寸、明显的对象通常能在伪标记生成中获得较高的置信度分数,因此作者通过强大的数据增强(随机调整大小、高斯模糊、颜色抖动等)将它们转换为类似那些小规模、模糊和受遮挡的对象。通过这种办法,这些具有低熵伪标签的变换对象将引导模型更加关注小尺度、模糊和遮挡的对象。从这个角度来看,强数据增强实际上是一种隐式的域内对齐方法,以弥合域内差距。
6、Experiments
6.1、Experimental Settings
6.1.1、Datasets(数据集)
作者对以下四种不同类型的域转换的多个基准进行了广泛的实验
1) C2F:从正常天气到大雾天气的适应 2) C2B:从小规模数据集到大规模数据集的适应
3) K2C:跨摄像机的适应 4)S2C:从合成图像到真实图像的适应
在本次实验,使用了5种公共数据集
1)城市景观Cityscapes(C):包含2,975张训练图像和500张带有像素级注释的验证图像。
2)大雾城市景观Foggy Cityscapes (F):由三个级别的大雾天气(0.005,0.01,0.02)的城市景观渲染的合成数据集,分别对应于600,300和150米的能见度范围。
3)BDD100k (B):由100k张图像组成的大规模数据集。白天场景的图像具有标注信息,包括36,728张训练图像和5,258张验证图像。
4)Sim10k (S):由游戏引擎渲染的 10k 图像组成,在10,000 张训练图像中提供了 58,701 辆汽车的边界框。
5)KITTI (K):由自动驾驶平台收集,包括 14999 张图像和 80256 个边界框。本实验仅使用火车组。
6.1.2、Network Architecture(网络架构)
作者将 Faster-RCNN 作为基础检测器(Chen et al., 2018),并使用在 ImageNet 上预训练的 VGG16 作为检测器的主干。通过将每个图像的短边设置为 600 来重新缩放所有图像,同时保持长宽比不变。
6.1.3、Strong Augmentation(强力数据增强)
除了 RandomResizedCrop 之外,还在(Chen et al., 2020b)中使用相同的数据增强策略。弱增强是指随机水平翻转。
6.1.4、Optimization(优化)
在单个 GPU 上对源域数据和目标域数据使用 16 的批量大小,并以 0.016 的固定学习率训练 30k 迭代,包括用于预训练的 4k 迭代和用于互相学习的 26k 迭代。检测器使用 SGD 优化器训练,动量为 0.9,权重衰减为 10−4。EMA 比率 α 设置为 0.9996。本文中的损失权重均设置为1。此外,EFL中的 λ 以及温度 τcls 和 τbbox 都简单地设置为0.5。
6.1.5、Evaluation Protocol and Comparison Baselines(评估方案和基线对比)
根据现有的工作,作者在 IOU 阈值为 0.5 的前提下使用标准平均精度(mAP)进行评估。在实验中,作者观察到强力增强和Probabilistic Faster-RCNN 都对基线性能有贡献。
6.2、C2F:从正常天气到大雾天气的适应
在现实场景中,例如自动驾驶,目标检测器可能会被用在不同的天气条件下。为了研究从正常天气到雾天的适应性,作者使用已标记的Cityscapes和未标记的Foggy Cityscapes(训练集)进行跨域自训练,然后报告Foggy Cityscapes验证集的评估结果。如下表所示:
1)“†”表示在对应方法的基础上增加了本文提出的强力增强和Probabilistic Faster-RCNN;
2)“Source only” and “Oracle”分别是指仅使用已标记的源域数据和已标记的目标域数据进行训练的模型;
3)“FR”代表经典单纯的 Faster-RCNN;“UN”代表未知
4)“split”列中的“0.01”、“0.02”和“ALL”分别表示雾度为0.01、0.02和所有三个雾度。
由表可知,强力增强将0.02级和所有三个级别的“Source only”模型分别提高了+4.8和+6.2 mAP。与其他方法相比,作者的方法在0.02级达到42.7 mAP,在所有三个级别达到47.1 mAP,远优于最佳基线MeGA (VS et al., 2021)(+0.9/+5.3)。
6.3、C2B:从小规模数据集到大规模数据集的适应
目前,大量收集和标注具有不同场景布局的图像数据成本极高,例如,从一个城市到另一个城市的自动驾驶。为了研究本文方法对不同场景布局的大规模数据集的适应性,作者使用 Cityscapes 作为较小的源域数据集,使用包含不同属性的 BDD100k 作为大型未标记目标域数据集。在ICR-CCR(徐等人,2020a)和SFOD(Li等人,2020a)之后,报告了两个数据集上七个常见类别的结果。下表显示了这个实验的结果,其中作者的方法优于所有基线,实现了34.9 mAP,与ICR-CCR相比,有很大的进步(+5.4)。
6.4、K2C:跨摄像机的适应
现实世界中广泛存在不同的相机设置(例如角度,分辨率,质量和类型),这会导致领域漂移。在本实验中,作者研究了两个真实数据集之间的自适应。KITTI 和 Cityscapes 数据集分别用作源域和目标域。结果如下表所示。作者提出的方法比最佳方法GPA (Xu et al., 2020b)提高了+12.7 mAP。并且也优于最近的工作 SimROD,该工作以YOLOv5 (Jocher等人,2021)作为基础检测器,并依赖于大规模教师模型。
6.5、S2C:从合成图像到真实图像的适应
合成图像提供了一种缓解数据收集和注释问题的替代方案。然而合成数据和真实数据之间存在分布差距。为了使合成场景适应真实场景,作者利用整个 Sim10k 数据集作为源域数据,使用 Cityscapes 训练集作为目标域数据,由于两个域中都只标注了汽车类别,因此只报告了 Cityscapes 测试集中汽车的 AP。如下表所示,作者的方法大大优于现有方法,比当前最佳方法提高了 +3.0 mAP。
7、Conclusions
在本文中,作者提出了一个简单而有效的框架,概率教师,来研究跨领域自训练过程中不确定性的利用。该框架配备了新颖的熵焦点损失,可以在多个基于源的/无源的 UDA-OD 基准测试上实现新的最先进的结果。
相关文章:

论文精读:基于概率教师学习的跨域自适应目标检测(ICML2022)
原文标题:Learning Domain Adaptive Object Detection with Probabilistic Teacher 中文标题:基于概率教师学习的域自适应目标检测 代码地址: GitHub - hikvision-research/ProbabilisticTeacher: An official implementation of ICML 2022 p…...

thinkphp 学习记录
1、PHP配置 (点开链接后,往下拉,找到PHP8.2.2版本,下载的是ZIP格式,解压即用) PHP For Windows: Binaries and sources Releases (这里是下载地址) 我解压的地址是:D:\…...

Leetcode 24 Swap Nodes in Pairs
题意:给定一个list of nodes,要求交换相邻的两个节点 https://leetcode.com/problems/swap-nodes-in-pairs/description/ Input: head [1,2,3,4] Output: [2,1,4,3] 首先你需要思考,我要交换两个节点,对于每个节点,向…...

选择 PDF 编辑器时要考虑什么?如何选择适用于 Windows 10 的 PDF 编辑器
选择 PDF 编辑器时要考虑什么? 随着技术的出现,您在网上浏览时肯定会遇到一些 PDF 软件。但是,选择PDF 编辑器时需要考虑什么?如果您是重度用户并将在您的工作场所使用它,建议您找到专业、使用方便且能够帮助您完成任…...

33-Golang开发入门精讲
├──33-Golang开发入门精讲 | └──1-Golang语法精讲 | | ├──1-介绍-go语言 | | ├──2-介绍-go语言中的面向对象 | | ├──3-第1阶段:走进Golang | | ├──4-第1阶段:走进Golang | | ├──5-第2阶段:变量与…...

研发中台拆分之路:深度剖析、心得总结与经验分享
背景在 21 年,中台拆分在 21 年,以下为中台拆分的过程心得,带有一定的主观,偏向于中小团队中台建设参考(这里的中小团队指 3-100 人的团队),对于大型团队不太适用,毕竟大型团队人中 …...

SWIFT Payment
SWIFT stands for Society for Worldwide Interbank Financial Telecommunication SWIFT——环球银行金融电信协会 SWIFT Payment Useful Link ISO 20022https://www.iso20022.org/https://www.swift.com/standards/iso-20022MT and MX Equivalence Tableshttps://www2.swift…...

数据结构之红黑树实现(全)
一、红黑树 红黑树是一种自平衡的二叉搜索树,它通过约束节点的颜色和结构来保持平衡。红黑树是由 Rudolf Bayer 在1972年发明的,被认为是一种优秀的平衡树结构,广泛应用于各种数据结构和算法中。 1.红黑树的性质 1. 每个结点是红的或者黑的…...

冷热数据分离
优质博文:IT-BLOG-CN 一、背景 随着机票业务的快速发展,订单量持续增长对业务性能带来影响,需要进行冷热数据分离。目前机票订单模块主要使用Mysql(InnoDB)作为数据库存储,历史订单信息状态修改频率低并占用大量数据库存储空间&…...

朝花夕拾:多模态图文预训练的前世今生
Diffusion Models专栏文章汇总:入门与实战 前言:时间来到2024年,多模态大模型炙手可热。在上一个时代的【多模态图文预训练】宛若时代的遗珠,本文的时间线从2019年到2022年,从BERT横空出世讲到ViT大杀四方,…...

亳州自闭症寄宿制学校,关注孩子的学习和生活
在特殊教育领域,自闭症儿童的教育与成长一直是社会各界关注的焦点。近年来,随着对自闭症认识的加深,越来越多的寄宿制学校应运而生,致力于为这些特殊的孩子提供全面、个性化的教育服务。在安徽亳州,这样的学校正努力为…...

Root me CTF all the day靶场ssrf+redis漏洞
Rootme CTF all the day靶场ssrfredis漏洞 一、环境介绍1、漏洞地址2、漏洞介绍 二、 搭建环境三、测试过程3.1 读取系统文件3.2 探测开放的服务器端口(dict协议)3.3 redis未授权访问3.3.1 利用redis来写ssh密钥(gopher协议写入)3.3.2 利用redis写定时任…...

C#中Json序列化的进阶用法
本文所有json序列化,都使用的Newtonsoft.Json包 1 JsonIgnore 在 Newtonsoft.Json 中,如果你不想将某些属性转换为 JSON 字符串,可以使用多种方法来实现。以下是几种常见的方法: 1.1 使用 [JsonIgnore] 特性 [JsonIgnore] 特性…...

IO相关的常用工具包
常用工具包Commons-io Commons-io是apache开源基金组织提供的一组有关IO操作的开源工具包。 作用:提高IO流的开发效率。 使用步骤: 1、在项目中创建一个文件夹:lib 2、将jar包复制粘贴到lib文件夹 3、右键点击jar包,选择Add as Library--->点击OK …...

Spring Boot集成RBloomFilter快速入门Demo
在大数据处理和缓存优化的场景中,布隆过滤器(Bloom Filter)因其高效的空间利用和快速的查询性能而被广泛应用。RBloomFilter是布隆过滤器的一种实现,通常用于判断一个元素是否存在于一个集合中,尽管它存在一定的误判率…...

布局性能优化
布局使用不当回导致卡顿、掉帧、响应慢等问题 一、布局流程 1、应用侧会根据前端UI描述创建后端的页面节点树,其中包含了处理UI组件属性更新、布局测算、事件处理等逻辑 2、页面节点树创建完成后,UI线程会对每个元素进行测算(Measure&#…...

智云人才推荐与管理系统
1.产品介绍 产品名称:智云人才推荐与管理系统 主要功能: 智能人才匹配引擎 功能描述:利用先进的人工智能算法,根据企业岗位需求(如技能要求、工作经验、教育背景等)自动从海量人才库中筛选并推荐最合适的…...

git在远程分支上新建分支
需求: 在远程分支release/test的基础上创建一个新的分支test_20241009 确保本地仓库的信息是最新的 git fetch origin执行了 git fetch,本地仓库已经包含了 origin/release/test 的最新信息。当基于这个远程跟踪分支创建新分支时,会得到一个包…...

用Python实现的高校教师资格考试题库程序
最近朋友参加了高校教师资格考试,在考试前需要刷题来保证通过。但是教资网站上的题库只有接近考试才更新,并且官方题库的刷题效率还是有点低。 👆官方题库的样子 于是想到了是否能够将官方题库内容记录下来,然后自己创建一个高效…...

OpenVINO基本操作流程
环境配置: conda env list:可以查看有哪些环境 conda activate intel:启动某个环境 pip list:可以查看此环境下都下载了哪些软件包 from openvino.inference_engine import IEcore#从OpenVINO推理引擎中导入IECore类 import numpy as np import cv2 1&…...

Spring MVC 注解详解:@RequestBody,@RequestParam 和 @PathVariable
Spring MVC 提供了一系列注解,用于简化请求数据的获取和处理。了解并掌握这些注解的使用,对于开发RESTful API和处理HTTP请求至关重要。本文将详细介绍 RequestBody,RequestParam 和 PathVariable 注解,并附带具体的代码示例&…...

MySQL 8 中的 sql_mode
MySQL 8 中的 sql_mode 设置:提升数据库安全性与性能 在现代数据库管理中,MySQL 是一个广泛使用的开源关系型数据库。随着数据的增长和复杂性增加,良好的数据库配置显得尤为重要。sql_mode 是 MySQL 提供的一个强大功能,它可以帮…...

13种pod的状态
13种pod的状态 生命周期 Pending:Pod被创建后进入调度阶段,k8s调度器依据pod声明的资源请求量和调度规则,为pod挑选一个适合运行的节点。当集群节点不满足pod调度需求时,pod将会处于pending状态。Running:Pod被调度到节点上,k8s将pod调度到节点上后,进入running状态。S…...

2025考研今天开始预报名!攻略请查收
2025年全国硕士研究生招生考试 今天起开始预报名 有什么流程?需要准备哪些信息? 这份考研报名攻略速查收 ↓↓↓ 全国硕士研究生招生考试报名包括网上报名和网上确认两个阶段: 网上预报名时间为10月9日至10月12日(每日9࿱…...

JS中的Promise经典题目解析
这段代码很有代表性,涵盖了多个 JavaScript 知识点,特别是不同异步操作的执行优先级。 async function async1() {console.log(async1 start);await async2();console.log(async1 end); }async function async2() {console.log(async2); }console.log(s…...

【机器学习】金融预测 —— 风险管理与股市预测
我的主页:2的n次方_ 在金融领域,机器学习(ML)已经成为了不可或缺的工具。金融预测,尤其是风险管理和股市预测,涉及海量数据和复杂模式的分析,而这些正是机器学习擅长处理的领域。通过分析历…...

Bootstrap 5 分页组件使用教程
Bootstrap 5 分页组件使用教程 引言 Bootstrap 5 是一个流行的前端框架,它提供了一套丰富的组件和工具,用于快速开发响应式和移动优先的网页。分页组件是 Bootstrap 5 中用于分割长列表或数据集的重要部分,它可以帮助用户更容易地浏览内容。本文将详细介绍如何在您的项目中…...

Linux 安装 NVM 并配置 npm 加速,开发 node 项目不再愁
由于需要在 linux 机器上完成 node 项目的构建,需要安装 nodejs, 想着不同项目需要使用不同的版本,索性安装一下 nvm 吧,因为之前在 windows 上已经安装过 nvm-windows, 应该很容易上手,我尝试了官网提供的几种方式,最…...

MySQL 多条件查询
在 MySQL 中,多条件查询通常使用 WHERE 子句来指定多个条件。这些条件可以通过逻辑运算符(如 AND、OR、NOT)进行组合,以实现复杂的查询需求。以下是一些常见的多条件查询示例: 使用 AND 运算符 AND 运算符用于组合多…...

深度学习模型
1. 引言 在过去的十年间,深度学习的崛起引发了人工智能领域的革命,深刻影响了多个行业。深度学习是一种模仿人脑神经元的工作方式,通过多层神经网络进行数据处理与特征学习。其应用范围从简单的图像识别到复杂的自然语言处理、自动驾驶和医疗…...