清华联合北航提出全新多模态融合方法SkipcrossNets,更快更强!!

多模态融合越来越多地用于自动驾驶任务,因为来自不同模态的图像为特征提取提供了独特的信息。然而,现有的双流网络只在特定的网络层次进行融合,这需要大量手动尝试来设置。随着卷积神经网络的深入,两种模态的特征变得越来越高级和抽象,融合发生在特征级别,并存在很大的差距,这很容易损害性能。

在本研究中提出了一种称为" skip-cross networks"(SkipcrossNets)的新型融合架构,它能够自适应地结合LiDAR点云和摄像机图像,而不受特定融合时期的限制。

具体而言, skip-cross networks以前馈方式将每一层连接到每一层,对于每一层,所有先前层的特征图都用作其输入,它自己的特征图则用作其他模态的所有后续层的输入,增强了特征传播和多模态特征融合。这种策略有助于从两个数据流中选择最相似的特征层,为融合过程中的稀疏点云特征提供了互补效应。网络还分为多个块,以减少特征融合的复杂性和模型参数的数量。

通过应用 skip-cross 融合技术,在KITTI和A2D2数据集上取得了显著的优势,达到了KITTI数据集上的96.85%的最大F-Score和A2D2数据集上的84.84%的F1-Score。该模型参数仅需要2.33 MB的内存,速度为68.24 FPS,可在移动终端和嵌入式设备上使用。

1、简介
道路检测不仅是车辆轨迹规划和决策制定的重要前提条件,还是自动驾驶的关键技术。最近的研究通常使用像素级别的语义分割进行道路检测,这可以在像素级别提供有效的道路信息。

摄像机获取环境中的光以获取图像信息,提供高分辨率的图像,可以识别目标的外观、形状、颜色和纹理等特征。许多基于摄像机的方法取得了显著的进展并取得了良好的结果。然而,在低光环境下,摄像机的性能较差,并且难以用于距离和深度感知。

相比之下,激光雷达基于周围障碍物的反射,并提供了不受环境光影响的补充的3D点云信息。尽管激光雷达点云数据通常是稀疏的,但它们可以用于准确测量距离,并且不受照明的影响较小。然而,激光雷达的成本较高,而且在下雨和下雪等恶劣天气下,激光雷达的性能会降低,从而减小了其应用范围。总之,激光雷达和摄像机都具有各自独特的优势和局限性,考虑将这两种数据类型进行融合可以提供更多互补信息,并提高道路检测的整体可靠性。

不幸的是,由于不同模态的数据空间和特征空间存在差异,融合LiDAR和摄像机图像是多模态融合的挑战。对于数据空间,整合这两种数据类型的难度在于激光雷达在3D空间中操作,而摄像机在2D空间中操作,这使得定义一个合适的空间来整合这两种数据类型具有挑战性。不一致的数据空间可能导致模型性能较差。对于特征空间,大多数现有的多模态方法关注于“如何融合”,并关注于融合方式,但没有更好地解释“何时融合”的融合时期。融合时期是指在两流网络实施融合步骤并转换为单流网络的时间段,这对算法性能有重要影响。

现有的策略已用于在不同融合时期融合源数据、特征图或输出,分别对应于早期、中期和晚期融合。早期融合要求在原始数据中具有高度的时空对齐。在中期融合中,难以确定在Backbone的哪个特征层中选择执行融合步骤。晚期融合侧重于决策层两流网络融合的结果,可能忽略了中间语义特征。随着神经网络变得更深,特征变得更抽象和高级,整合这些数据的可行性在很大程度上取决于两个来源的特征是否存在于相同的层次上。由于不同融合周期的独特性,有必要手动确定在哪个阶段融合多模态信息是最佳的,这需要进行大量实验证明。

本文提出了一种新颖的融合策略,称为"skip-cross 融合",用于点云和视觉图像。skip-cross 将每种模态的特征图连接到另一种模态的相应位置之后的所有特征图,实现了密集的跨模态连接。在这个过程中,使用 skip-cross 块来自适应地识别LiDAR点云和视觉图像的最佳时期组合。然后,skip-cross 融合网络(SkipcrossNets)充分利用了编码器阶段的多模态信息,从而实现了对稀疏点云的卓越性能。

同时,还在解码器中使用跨模态融合,以便在恢复分辨率的过程中,每个特征图都使用另一种模态的特征图。对于数据空间,通过将激光雷达投影为高度差异图像(ADI)来减小激光雷达和视觉数据空间之间的差距,因为在城市场景中,道路与高度信息相关。

图1提供了各种技术的比较,从性能和模型参数数量的角度进行评估。SkipcrossNets-R和SkipcrossNets-D分别表示使用ResNet34和DenseNet作为Backbone结构的模型。早期融合是最轻量级的模型,但其性能不如许多现有方法。PSPNet和DeepLabv3+包括MobileNet和Resnet101作为Backbone。

性能比较表明,对于KITTI数据集,SkipcrossNets-R和逐步激光雷达适应道路检测(PLARD)已足够具有竞争力,其中PLARD排名最高。然而,与PLARD相比,SkipcrossNets-R所需的参数数量和计算仅为其的59%和57%。因此,当考虑性能和复杂性同等重要时,SkipcrossNets优于其他模型。

此外,SkipcrossNets系列模型在A2D2数据集上实现了最佳性能。SkipcrossNets还采用了类似于DenseNets的两种模态之间的密集结构,这显著减少了参数数量(2.33 MB)。这进而改善了网络中的信息流和梯度,简化了训练。

在本研究中,SkipcrossNets与其他融合策略和应用于两个基准数据集(KITTI和A2D2)的最新技术(SOTA)方法进行了比较。如图2的列(b)、(c)和(d)所示,与相应的真实情况存在某些差异。SkipcrossNets和SkipcrossNets-R的结果表现出更好的性能,结果沿着物体边缘(例如汽车)更加平滑,这表明了 skip-cross 融合策略的优势。总的来说,SkipcrossNets在大多数基准任务中明显优于当前最先进的算法,并在自动驾驶应用中具有巨大潜力。

这项研究的贡献可以描述如下:

提出了一种新颖的 skip-cross 融合策略,用于在两流网络的每一层执行融合,并自适应地选择最佳融合时期,而不像以前只发生在特定的时期。

由于3D空间中的道路、车辆和建筑物的高度不同,将激光雷达投影到图像平面以生成高度差异图像,以更好地区分道路区域并减少由空间差异引起的融合问题。

提出的模型体积小(2.33 MB)且速度快(68.24 FPS)。高端激光雷达成本较高,这个模型实现了对稀疏点云数据的更好处理性能,更适合满足自动驾驶的实际需求。

2、相关工作
2.1 传统道路检测
现有的车道检测算法通常利用几何信息和图像处理(例如,HSI颜色模型和边缘提取)通过使用视觉线索增强道路的连通性,并结合来自先前条件的上下文,包括道路几何、高阶CRF公式、标记点过程和规划问题解决方案。Qi Wang等人提出了一种上下文感知的道路检测模型,将深度线索与时间MRF模型相结合,利用传统的RGB颜色和标签转移进行高效的最近邻搜索过程,可以区分道路和非道路区域。

此外,马尔可夫和条件随机场也用于后处理步骤。然而,这些方法需要手动设计特征和人工设置阈值,高度经验性,对复杂场景中的道路检测效果不佳。

2.2 基于视觉图像的道路检测
不断增强的计算能力使高精度的道路检测成为可能,从而将其部署在自动驾驶领域。以前的道路检测研究主要是基于深度学习的像素级语义分割。例如,Teichmann等人采用卷积神经网络(CNN)对单目摄像机图像进行道路检测。

然而,这种方法容易受到动态光照条件的影响。Long等人提出了一个完全卷积和上采样层来解决像素级语义分割问题。Lee等人提出了一个VPGNet,研究了各种弱光照条件和有阴影的区域的检测,考虑了数据中的上下文信息。Zou等人提出了ConvLSTM来提高特定情况下的检测性能,例如,车辆遮挡和树枝阴影。Alvarez等人使用了道路检测的上下文线索,包括地平线、消失点、车道标线和道路几何信息,这些线索对不同的条件具有鲁棒性。Yang等人使用了横跨360度图像的跨远程依赖关系,并利用先验上下文知识(基于注意力机制)来改善模型训练。

道路检测还可以被视为全景语义分割的特殊情况。例如,Yang等人提出了一种全景环状语义分割模型,以感知整个环境,解决了边界不连续性和重叠语义问题。Yang等人提出了一种基于高效CNN的全方位监督学习框架,该框架在全景图像中实现了显著的通用性增益。

但是,单一模型方法容易受到外部条件的影响,稳定性差。尽管摄像头提供高分辨率图像,在光线不足、夜间和曝光等恶劣场景中无法正常工作。传感器本身带来的限制很难通过方法的设计来解决,因此需要考虑引入其他模态的数据来协助。

2.3 多模态融合
传统的道路分割算法使用LiDAR和摄像机融合来改善分割效果,并补偿单一数据源固有的缺陷。然后,主要的技术问题涉及在实时中实现有效的多传感器融合。大多数技术涉及数据预处理和将LiDAR投影到2D格式,使摄像机和LiDAR在数据空间(即BEV、高度图和轮廓图)中保持一致。Xiao等人提出了一种新颖的混合条件随机场(CRF)模型,该模型接受对齐像素和LiDAR点的标签(道路或背景)作为随机变量,通过最小化混合能量函数来推断标签。Caltagirone等人提出了一个用于道路检测的全卷积网络,输入是从LiDAR点云变换而来的2D俯视图图像。Wang等人提出了一种Siamese全卷积网络,用于处理RGB图像和语义轮廓,利用位置线的先验知识来改善最终的车道检测效果。Caltagirone等人提出了一个网络,在其中交叉融合发生在相同的层级,而不同层级的特征可能未完全用于道路检测,该网络胜过了可比较的融合策略。Chen等人使用传输函数将LiDAR特征空间调整为视觉特征空间,以更好地补充和改进特征。

然后,将视觉信息与调整后的LiDAR信息相结合。Zhang等人提出了一种通道注意机制,用于获得跨通道的局部交互信息。为LiDAR和摄像机的不同特征通道分配权重,以表示不同特征通道对两者的贡献。Samal等人提出了一种时空采样算法,通过分析视觉输入识别出感兴趣区域,并仅在这些区域激活LiDAR。该算法显著降低了LiDAR的使用率。Zhou等人开发了一个分层多模态融合模块,以增强特征融合,并构建了一个高级语义模块,用于提取语义信息,以与不同抽象层次的粗糙特征融合。RangeSeg使用一个共享的编码器Backbone和两个与范围相关的解码器。较重的解码器仅计算距离和小物体位于距离图的顶部,以提高小目标的检测精度,而较轻的解码器则仅计算整个距离图,以减少计算成本。

通过将案例分割与车道中心估计相结合,Sun等人提出了一种基于实例分割的智能车辆自适应多车道检测方法,该方法将余弦测量纳入损失函数,以便提取更具判别性的前景特征。

这些融合方法大多在特定时期进行融合,不同时期都是人为设置的,非常经验性。因此,作者提出了一种自适应的skip-cross融合策略,嵌入在Backbone的每一层之间,以避免上述融合时期的问题,这显著增加了融合信息的比例,提高了道路检测的准确性和稳健性。

3、本文方法
3.1 数据空间
LiDAR点云和视觉图像跨足不同的维度,常见的融合方法是将点云数据投影到2D平面上,以便与视觉图像像素更简单地结合。然而,这个投影过程通常会导致高度和深度信息的损失,尤其是在诸如车道检测等精细任务中。

为了使道路特征更加明显,我们生成了单通道的高度差图像(ADIs),这些图像是从LiDAR点云转换而来的。如图3所示,LiDAR数据以3D坐标向量的形式可以使用提供的校准参数投影到2D图像平面上。然后,2D图像像素的强度表示了规范化的X、Y和Z坐标。然后,从LiDAR数据中计算了两个位置之间的空间偏移的高度差异(和),以获得用于道路特征的ADIs。这个过程可以表示为:

其中是投影到上的LiDAR点的高度,是在邻域内的位置,是处的像素值,M是考虑的邻域位置的总数。在ADIs中,背景最暗,障碍物最亮,而车道区域通常位于图像下半部分较暗的区域。像素值表示相对于道路平面的物体高度,可以用于区分道路区域和非道路区域。

3.2 网络架构
在这里插入图片描述

本研究中使用的基本网络由一个全卷积编码器-解码器组成,kernel为3×3,如图4所示。该网络包括23层,包括编码器和解码器。编码器包括一个带有Stride=2的卷积层和3个融合阶段,每个融合阶段包括几个ResNet的BasicBlock,并以2×2最大池化层结束。编码模块下采样4次,解码模块包括4个转置卷积层,用于上采样并将特征图恢复到其原始输入大小。包含的转置卷积层设置为3×3的内核大小和Stride=2。

然后,每个卷积层后面都跟着一个修正线性单元(ReLU)层。激活函数执行梯度下降和反向传播,避免了梯度爆炸和梯度消失的问题。此外,在编码器和解码器步骤中使用了跳跃连接,以恢复详细特征并恢复分辨率。

3.3 Skip-cross融合
多模态融合时间不确定性引起的特征抽象程度不同,使用特定的LiDAR点云和视觉图像融合类型仅实现稳健的道路检测变得困难,如图5所示。为了克服这个问题并改善道路检测,本文提出了一种自适应的skip-cross融合,有效地整合了LiDAR数据和视觉信息。

SkipcrossNets的整体设计遵循常见的编码器-解码器结构。编码器阶段对于多模态信息融合过程更为重要。在编码器阶段,必须确保充分的融合,以生成更好的中间特征图,并恢复图像的分辨率和详细特征。编码器包括3个融合阶段,每个阶段包含指定数量的残差块。采用了基本的ResNet结构,即2个3×3卷积层和1个identity。第一个融合阶段由两个残差块和一个最大池化层组成,而其他两个融合阶段由3个残差块和一个最大池化层组成。图4中的SkipcrossNets的基本结构包括3个阶段,每个阶段包括多个密集连接的块。

为了避免由不同融合周期引起的问题,在两流网络中执行跨模态密集连接,并通过可学习因子将每个模态的特征映射传递给另一模态的所有特征映射。不同于以前只在某个网络层进行融合,skip-cross融合策略增加了不同模态的特征交互。多模态融合发生的具体层取决于跨模态可学习因子的学习,而不是人为设置,这样的融合网络具有更好的性能。

因此,传统的两流卷积网络具有2L层,有2L个连接,每个层与其后续层之间都有一个连接,而网络有(L + 1)L个直接连接,出现在其所有后续层中。由于考虑了一个更复杂的学习模型,在每个阶段都采用了更密集的连接,每个层都与其他层进行前向连接。在解码器结构中,使用跨融合来对融合的特征映射执行加权交叉连接,以提高上采样并恢复原始分辨率。所提出的融合模型还可以提供更有效和更深入的训练,从而增强特征传递并提高特征重用率。

第一个融合阶段,详细的架构如图4所示,包括LiDAR和RGB分支。2个LiDAR和RGB块分别表示为和。在以下表示中,表示从第个LiDAR块到第个RGB块的权重,表示从第个RGB块到第个LiDAR块的权重。其他阶段与第一个融合阶段类似,第一个融合阶段的详细内容如下:

早期融合、中期融合和晚期融合(参见图5)是skip-cross融合的特殊情况。这种策略背后的基本原理是允许全卷积网络(FCN)处理任何深度信息,而不是像之前提到的那样将其限制在某个特定级别。

在训练过程中,使用损失函数来学习这些融合参数,以更好地整合LiDAR和视觉图像。高级特征包括丰富的语义信息,可以提高分类准确性。低级特征包括详细信息,可以提高定位准确性。

Skip-cross融合充分考虑了不同级别之间的特征融合,从而增加了信息流量并充分重用了这些特征。它还将融合方法的选择转化为网络参数的学习,使网络能够灵活自主地学习融合方法。通过引入密集结构,SkipcrossNets与更复杂的融合模型兼容,从而减少了参数数量,使网络更容易训练。

4、实验
4.1、KITTI中其他融合策略的比较
使用KITTI验证集以MaxF为主要度量标准,对比了几种融合算法的性能。其中,PLARD使用数据空间和特征适应,并且目前在KITTI中排名第一。而在SkipcrossNets中引入的网络结构,比PLARD要小得多(298 MB),网络大小仅为2.32 MB。

考虑到特征提取网络的层数相对较低(浅层),在SkipcrossNets-R和SkipcrossNets-D变体的跨层结构中选择了ResNet34和DenseNet作为Backbone。

表1显示了在3个独立的KITTI场景中各种融合策略的测试结果。如图所示,大多数多模态模型的MaxF都在95%以上,而视觉方法表现不佳。这可能是因为稠密的KITTI点云包含了不受不良光照条件影响的额外信息,为融合提供了有用的指导。

在未标记的城市道路场景和标记的城市道路场景中,skip-cross融合的MaxF值最高。skip-cross融合在标记的城市道路场景和多个标记的城市道路场景中表现良好,优于其他方法。

此外,观察到skip-cross融合的FNR相对较低,这主要是由于本文的网络结构采用了密集的块连接模式,在多个阶段等效于来自较早帧的信息融合。因此,在多个场景中,SkipcrossNets通过实现较低的FNR(即将车道错误标记为背景)超过其他方法,这对于自动驾驶至关重要。

表2显示了综合城市场景的结果,这是上面讨论的3个场景的组合。PLARD和SkipcrossNets都取得了良好的性能,通过AP和FPR(PLARD)以及MaxF、REC和FNR(SkipcrossNets)来衡量。然而,SkipcrossNets-D的参数数量和计算量仅为PLARD的11.4%和14.9%。

SkipcrossNets还比PLARD快33倍,并提供了更高的对比度。正如假设的那样,将SkipcrossNets结构添加到ResNet34和DenseNet中进一步改善了结果。与其他单模态方法或多模态融合方法相比,SkipcrossNets及其变体具有更好的性能。

此外,SkipcrossNets还具有高度的适应性,可以插入其他Backbone结构中。

4.2、A2D2中其他融合策略的比较
使用上面讨论的技术,对A2D2数据集进行了多次实验。在下面的描述中,LiDAR设备的价格对应于记录点云的密度。128和64线的LiDAR价格相对较高,而且并不广泛使用(即大多数汽车制造商使用16或32线的LiDAR作为主要传感器)。因此,对于稀疏点云,算法性能成为一个关键问题。

表3将多个算法的结果进行了比较,以F1为主要指标,表明SkipcrossNets在A2D2数据集中取得了最佳性能。当A2D2点云数据稀疏时,基于PLARD的特征提取性能较差。这是因为PLARD是使用TransNet进行修改的,而质量差的点云图像在调整后不会提供良好的辅助特征效果。

相反,SkipcrossNets通过使用密集块叠加相邻帧特征来增强稀疏点云,更适合这种情景。对于稀疏点云数据,SkipcrossNets-R也表现出色,这对于低成本自动驾驶应用至关重要。与其他单模态方法或多模态融合方法相比,SkipcrossNets及其变体具有更好的性能。

图6的左3列和右3列显示了应用于KITTI和A2D2的各种融合技术的实验结果。第1行显示原始图像,第2行显示地面真值,其他行显示各种融合策略的结果。

在第1列中,只有SkipcrossNets-R与GT一致,因为它避免将右车道误判为道路。
在第2列中,只有交叉融合和PLARD表现不佳,错过了一小部分道路。
在第3列中,大多数技术表现出色,但SkipcrossNets和SkipcrossNets-R的结果边缘略显平滑。
在第4列中,只有SkipcrossNet-R的结果没有噪音。
在第5列中,底部5行表现最佳。
在第6列中,SkipcrossNets-R的结果更加平滑,没有噪音。
总体而言,SkipcrossNets-R产生的噪音较低,性能更好,更适合适应复杂模型和将点云与视觉图像融合。

4.3、Cross-dataset knowledge

通过使用KITTI和A2D2数据进行实验,评估了知识传递的好处。如表4所示,基于KITTI训练的模型直接在A2D2上进行测试,产生了仅有1.95%的极低的F1-Score。

相反,当在A2D2上训练的模型在KITTI上进行测试时,该模型学到了更困难的场景(稀疏点云),在密集点云下取得了良好的性能,产生了78.09%的MAXF和63.3%的AP值。这个结果是由两个数据集的不同特征所促成的,主要是因为KITTI使用64线LiDAR,而A2D2只使用了一根8线和两根16线的LiDAR,导致两个数据集之间的点云密度存在显著差异。

此外,作者对相应的测试数据进行了微调,并观察到最终效果略逊于单一数据集。这证实了在低点云密度下学到的信息对于密集点云具有更高的鲁棒性。

4.4、消融实验

4.6.1 不同模态性能比较
通过使用KITTI和A2D2数据对模型进行训练和测试,验证了不同模态的性能。在表5中,每个子表中的前3行显示了使用仅LiDAR、仅摄像头和两种融合信息源的模型性能,分别对应于LiDAR和摄像头的性能,这两者在KITTI上表现大致相同。然而,在A2D2上,LiDAR数据的性能不如摄像头数据,因为A2D2中的点云数据更稀疏,包含的信息更少。

在某些情况下,融合模型的性能甚至不如单模型。正如在表5的KITTI结果中所示,融合模型不如仅使用图像(例如,-1.24%)。稀疏点云和视觉图像输入的融合进一步降低了性能,主要受到两个因素的影响。首先,由于将点云数据从3D投影到2D空间,输入数据会受到信息丢失的影响。

因此,正如第4.1.3节所讨论的那样,使用ADI来增强车道特征。其次,特征空间的差异使得在融合过程中难以确保两种模态的特征位于相同的级别。因此,我们专注于改善融合模型的性能,并提出了skip-cross融合策略。

4.6.2 不同因素的比较
为了进一步探索最佳融合模型的性能,使用了4种不同的策略,包括:

skip-cross融合
解码器融合(与skip-cross融合一起使用)
ResNet34
跳跃连接
如表5所示,skip-cross在KITTI和A2D2的情况下分别将MaxF提高了1.11%和F1提高了1.18%。skip-cross融合能够自适应调整两种数据源的权重,产生比其他策略更好的融合结果。当解码器被用于频繁调整数据源以恢复图像细节和分辨率时,skip-cross融合也会对KITTI和A2D2产生改进。由于更深的模型意味着更好的非线性表达能力,可以学习更复杂的变换,适应更复杂的特征输入,因此采用ResNet34作为Backbone来加深网络并实现skip-cross融合,从而将MaxF提高了1.32%和F1提高了1.27%。

此外,添加了跳跃连接以直接传递来自编码器的特征图,获得了更好的性能。这种skip-cross融合策略也具有很强的通用性,经过插入ResNet34进行验证,可以类似地应用到其他网络结构(例如DenseNet)中。

5、总结
提出了一种新的skip-cross融合网络结构,将LiDAR点云的高度差异图像与摄像头图像相结合,以提高道路检测性能。所提出的skip-cross融合在训练过程中持续调整融合率,以识别最佳的整合时间和级别,充分考虑不同级别之间的特征融合,使这些特征能够得到充分重用。

在一定程度上,SkipcrossNets有助于在先前帧中预测车道,从而为稀疏点云数据提供了更好的性能。在所展示的实验中,与现有的融合策略相比,SkipcrossNets在KITTI道路数据集和A2D2数据集上取得了卓越的性能优势,达到了最先进的性能水平。

此外,SkipcrossNets体积小(仅2.32MB)且具有接近实时的计算速度,达到了68.24 FPS。还提出了SkipcrossNets-R和SkipcrossNets-D变种,以提高检测精度,具有更深的模型层次和更好的性能。

6、参考
[1].SkipcrossNets: Adaptive Skip-cross Fusion for Road Detection.

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Dockerfile 使用教程

1.Dockerfile 1.1 什么是Dockerfile Dockerfile可以认为是 Docker镜像的描述文件,是由一系列命令和参数构成的脚本 。主要作用是 用来构建docker镜像的构建文件 。 通过架构图可以看出通过DockerFile可以直接构建镜像 1.2 Dockerfile解析过程 构建镜像步骤&#xf…

【核磁共振成像】相位差重建

目录 一、相位差map重建一般步骤和反正切函数主值范围二、反正切运算三、可预期相位误差和伴随场的校正四、图形变形校正 一、相位差map重建一般步骤和反正切函数主值范围 MRI是一个相敏成像模态,MR原始数据傅里叶变换后的复数图像中每个像素值有模和相位。标准模重…

Spring与Mybatis整合aop整合pageHelper分页插件

前言 Spring与MyBatis整合的意义在于提供了一种结合优势的方式,以便更好地开发和管理持久层(数据库访问)代码。 这里也是总结了几点主要意义 简化配置:Spring与MyBatis整合后,可以通过Spring的配置文件来管理和配置M…

C语言之数组题

目录 1.使用函数实现数组操作 2.冒泡排序 3.三子棋 4.【一维数组】交换数组 5.扫雷 6.概念辨析tips 我又来了,今天是数组题,本人还在补军训真的热!🆗 1.使用函数实现数组操作 2.冒泡排序 3.三子棋 4.【一维数组】交换数组 …

自定义spring-boot-start的jar包被引用时,提示找不到bean

类似这个报错: 重点要看一下我们自定义的start包下的config配置 BeanConditionalOnProperty(prefix "file", value "iSenable", havingValue "true")public FileServiceTemplate fileServiceTemplate(){return new FileServiceTe…

app加固怎么做?

app加固是一种保护应用程序免受攻击的技术,可以防止未经授权的访问、数据泄露和其他安全问题。下面是一些app加固的最佳实践: 1.加密和数据保护:对应用程序的数据进行加密和保护,以防止未经授权的访问和数据泄露。您可以使用AES、…

【ES6】—【新特性】—Symbol详情

一、一种新的原始数据类型 定义:独一无二的字符串 二、 声明方式 1. 无描述声明 let s1 Symbol() let s2 Symbol() console.log(s1, s2) // Symbol() Symbol() console.log(s1 s2) // falsePS: Symbol 声明的值是独一无二的 2. 有描述的声明 let s1 Symb…

玩转 PI 系列-看起来像服务器的 ARM 开发板矩阵-Firefly Cluster Server

前言 基于我个人的工作内容和兴趣,想要在家里搞一套服务器集群,用于容器/K8s 等方案的测试验证。 考虑过使用二手服务器,比如 Dell R730, 还搞了一套配置清单,如下: Dell R7303.5 尺寸规格硬盘CPU: 2686v4*2 内存&a…

大语言模型之六- LLM之企业私有化部署

数据安全是每个公司不得不慎重对待的,为了提高生产力,降本增效又不得不接受新技术带来的工具,私有化部署对于公司还是非常有吸引力的。大语言模型这一工具结合公司的数据可以大大提高公司生产率。 私有化LLM需要处理的问题 企业内私有化LLM…

深入解析Kotlin类与对象:构造、伴生、单例全面剖析

前言 本篇文章将带您了解Kotlin编程中的重要概念:类及构造函数、访问修饰符、伴生对象和单例模式。就像搭积木一样,我们会逐步揭开这些概念的面纱,让您轻松理解它们的作用和用法。无论您是编程新手还是有经验的开发者,本文都将为…

GPU编程(基于Python和CUDA)(一)——零基础安装pycuda

系列文章目录 GPU编程(基于Python和CUDA)(一)——零基础安装pycuda GPU编程(基于Python和CUDA)(二)——显示GPU信息 零基础安装pycuda 系列文章目录前言安装Visual Studio安装C/C环…

【附源码】Python-3.9.5安装教程

软件下载 软件:Python版本:3.9.5语言:英文大小:26.9M安装环境:Win11/Win10/Win8/Win7硬件要求:CPU2.5GHz 内存2G(或更高)下载通道①百度网盘丨64位下载链接:https://pan.baidu.com/…