【无标题】西安交通大学提出少锚点的端到端车道线检测算法Polar R-CNN

Abstract

车道线检测在自动驾驶中是一个关键且充满挑战的任务,特别是在实际场景中,由于车道线可能因其他车辆而被遮挡、形状纤细且长度较长,检测难度增大。现有基于锚点的检测方法通常依赖于预设的锚点来提取特征,并随后对车道线的位置和形状进行优化。然而,这些方法依赖手动设置锚点的方式繁琐,且为了适应不同的数据集通常需要大量密集的锚点。此外,为消除冗余预测而使用的非极大值抑制(NMS)在复杂场景中效果有限,影响实际部署。本文提出了一种新颖的基于锚点的车道检测方法Polar R-CNN。通过引入局部和全局极坐标系统,Polar R-CNN可以灵活地生成锚点,并显著减少锚点数量,同时保持性能。此外,我们设计了一个三重检测头,结合启发式结构支持无NMS的检测模式,在车道线密集的场景中增强了部署效率和性能。实验结果表明,Polar R-CNN在Tusimple、CULane、LLAMAS、CurveLanes和DL-Rail五个主流数据集上均达到了具有竞争力的性能,且具有轻量化设计和简化结构。

代码获取:https://github.com/ShqWW/PolarRCNN

 欢迎加入自动驾驶实战群

Introduction

车道线检测是一项重要的计算机视觉任务,尤其是在自动驾驶领域,目的是识别和跟踪道路上的车道线。尽管理想环境下的检测取得了显著进展,但在夜间驾驶、眩光、拥堵和雨天等恶劣条件下仍具挑战,车道线可能被遮挡或受损。此外,车道线形状细长且拓扑结构复杂,也增加了检测难度。

方法概述

传统车道检测主要依赖手工特征提取和车道形状建模,使用方法包括Canny边缘检测、霍夫变换和可变形模板等,但这些方法在低清晰度或特征不明显的场景下表现不佳。近年来,深度学习技术的进步使得基于卷积神经网络(CNN)和Transformer结构的深度模型在车道检测中获得了显著成功。然而,尽管分割类和参数化模型提供了端到端解决方案,但它们对车道形状的敏感性影响了鲁棒性。

基于目标检测模型(如YOLO、Faster R-CNN)的锚点方法被引入车道检测领域。代表性方法包括LaneATT和CLRNet,通过预定义锚点和扩大特征提取视野,锚点方法在性能上取得了优势,但存在以下缺点:

需要大量的锚点覆盖不同的车道分布,导致冗余锚点;使用NMS消除冗余预测,但在车道线密集的场景中效果不佳,尤其在分叉或多车道情况下。

解决方案:Polar R-CNN

为了解决上述问题,本文提出了Polar R-CNN方法:

局部极坐标模块:基于极坐标系统生成精确的锚点位置,减少了在稀疏场景中所需的锚点数量。与现有方法(如CLRNet)使用的192个锚点相比,Polar R-CNN只需20个锚点即可有效覆盖车道真值。

三重检测头及图神经网络(GNN)模块:为避免NMS后处理,设计了基于图神经网络的检测结构,实现了NMS自由的检测流程,适用于稀疏和密集场景下的车道线检测。

高效的端到端训练:结合极坐标系统和NMS自由检测模式,Polar R-CNN实现了快速且高效的车道线检测。通过在五个主流数据集上的实验验证,该方法在使用更少锚点和无NMS模式下,仍能保持高性能表现。

3.Polar R-CNN

olar R-CNN的整体架构如图3所示。该模型在车道检测中的流程与Faster R-CNN 类似,包括一个骨干网络、特征金字塔网络(FPN)、作为区域提议网络(RPN)的局部极坐标模块(LPM)、以及作为感兴趣区域(RoI)池化模块的全局极坐标模块(GPM)。接下来,我们将首先介绍极坐标下的车道锚表示方式,然后详细描述在Polar R-CNN中设计的LPM和GPM。

图片

A. 车道和车道锚的表示方式

车道通常具有纤细、细长和弯曲的形状。良好的车道先验信息有助于模型进行特征提取和位置预测。

作为射线表示的车道和车道锚。给定宽度为W、高度为H的输入图像,车道可由一组2D点 图片表示,这些点的y坐标等距分布,即图片,其中N为数据点的数量。由于y坐标是固定的,因此一个车道可以通过其x坐标唯一确定。先前的研究引入了车道先验(即车道锚),这些锚在图像平面上表现为直线,并作为参考。从几何角度来看,车道锚可以看作是由起点图片和方向定义的射线。车道检测模型的主要任务是估计从车道锚到车道实例真实位置的x坐标偏移量。

然而,将车道锚表示为射线会带来一些限制,尤其是车道锚的起点可能有无限多个,这使得其定义变得模糊和主观。如图4(a)所示,先前的研究将起点定义为图像的边界,如图4(a)中的绿色点;而[15]中的研究则将起点定义为其在图像中的实际可见位置(如图4(a)中的紫色点)。此外,车道的遮挡和损坏会显著影响这些起点的检测,要求模型具备较大的感受野。基本上,在笛卡尔坐标系下,一条直线仅有两个自由度:斜率和截距,这意味着可以通过两个参数而非射线表示中的三个冗余参数(即两个起点参数和一个方向参数)来描述车道锚。

图片

极坐标表示。如上所述,使用射线表示的车道锚点存在一些缺陷。为了解决这些问题,我们引入了车道锚点的极坐标表示。在数学中,极坐标是一个二维坐标系统,其中平面上的每个点由与参考点(即极点)的距离和与参考方向(即极轴)的夹角θ来确定。图4(b)显示,给定黄色点对应的极点后,可以通过两个参数唯一地定义一条直线的车道锚点:极点的径向距离r和从极轴到车道锚点垂线的逆时针角度θ,其中图片图片

为了更好地利用CNN的局部归纳偏置特性,我们定义了两种类型的极坐标系统:局部极坐标系统和全局极坐标系统。局部极坐标系统用于生成车道锚点,而全局极坐标系统则在整个图像中表达这些锚点并将它们回归到真实的车道实例。鉴于局部和全局系统的不同作用,我们为Polar R-CNN采用了类似于Faster R-CNN 的两阶段框架。

图片

局部极坐标系统旨在预测适用于稀疏和密集场景的车道锚点。在该系统中,极点分布在特征图的格点上,称为局部极点。如图5左侧所示,局部极点分为正极点和负极点。正极点(即蓝点)的半径小于阈值,否则被分类为负极点(即红点)。每个局部极点负责预测一个车道锚点。虽然一个真实的车道可能生成多个车道锚点(如图5所示),绿色车道实例周围有三个正极点,预计生成三个车道锚点。

在局部极坐标系统中,每个车道锚点的参数基于其对应局部极点的位置。然而,在实际操作中,一旦生成车道锚点,其确切位置就变得不可更改且与其原始局部极点无关。为了简化Polar R-CNN第二阶段中车道锚点的表示,设计了一个全局极坐标系统,具有唯一的极点作为整个图像的参考点。该全局极点的位置是手动设定的,位于整个车道图像数据集中观察到的静态消失点附近。这种方法确保了在图像的全局上下文中使用一致的极坐标来表达车道锚点,从而方便了对真实车道实例的精确回归。

B. 局部极坐标模块(LPM)

图片

如图3所示,通过特征金字塔网络(FPN)提取了三个层级的特征图,分别记作 图片。为了在图像中生成高质量的车道锚点,提出了局部极坐标模块(LPM),它将最高层级的特征图 图片作为输入,并输出一组车道锚点及其置信得分。如图6所示,它首先通过下采样操作图片生成尺寸为图片的低维特征图 :

图片

然后将下采样后的特征图输入到两个分支:回归分支图片和分类分支 图片,即:

图片

回归分支包括单个1×1的卷积层,其目标是生成车道锚点,通过输出它们的角度 和半径,即 图片图片,这些量定义在之前介绍的局部极坐标系统中。同样,为了简化,分类分支 图片仅由两个1×1卷积层组成,用于预测局部极点的置信热图 图片,每个局部极点都与一个特征点相关联。通过丢弃低置信度的局部极点,该模块有效提高了选中潜在正前景车道锚点的可能性,同时剔除了背景锚点。

LPM的损失函数。为训练LPM,我们为每个局部极点定义了以下标签:将每个局部极点到对应车道曲线的最小距离作为真实半径 ,并将局部极点到最近曲线点的向量方向作为真实角度。因此,得到局部极点的标签集 图片,其中当第j个局部极点为正时 图片,为负时图片。一旦建立了回归和分类标签,如图5所示,LPM可以使用回归分支的SmoothL1损失 图片和分类分支的二元交叉熵损失 图片进行训练。LPM的损失函数如下:

图片

其中 图片表示LPM中正极点的数量。

Top-K锚点选择。如上所述,在训练阶段,所有图片的锚点(与特征图中的每个局部极点相关)都被考虑为候选者。然而,其中一些锚点只是背景锚点。我们选择置信度最高的K个锚点作为前景候选者输入到第二阶段(即全局极坐标模块)。在训练过程中,所有锚点都作为候选项,其中 图片。这有助于全局极坐标模块(即第二阶段)学习包括各种负背景锚点样本的多样化特征。相反,在评估阶段,可以排除一些低置信度的锚点,使图片。这种策略有效过滤了潜在的负锚点,降低了第二阶段的计算复杂度。在稀疏场景中,通过这种方式维持锚点分布的适应性和灵活性,同时减少了锚点的总数。接下来的实验将展示不同Top-K锚点选择策略的有效性。

C. 全局极坐标模块

我们提出了一个新颖的全局极坐标模块(Global Polar Module, GPM)作为第二阶段来实现最终车道线预测。如图3所示,GPM从LPM(局部极坐标模块)提出的锚点采样特征,并提供最终车道线检测结果的精确位置和置信分数。GPM的总体架构如图7所示。从图中可以看到,它包含两个组件:一个ROI池化层(RoI Pooling Layer)和一个三重头部(triplet head),具体细节如下所述。

RoI池化层。此层设计用于从特征图中对车道线锚点进行特征采样。为便于采样操作,我们首先将局部极坐标中的正车道线锚点的半径转换为等效的全局极坐标系统中的半径,具体转换公式如下所示:

图片

其中,图片图片分别表示全局极点和第j个局部极点的笛卡尔坐标。值得注意的是,角度 保持不变,因为局部和全局极坐标系统共用相同的极轴。接下来,对每个车道线锚点的特征点进行采样,具体如下:

图片

其中,第j个车道线锚点的y坐标图片从图像上垂直均匀采样,如前所述。公式(6)和公式(7)的证明见附录A。然后,第j个车道线锚点的坐标可以表示为图片图片

给定来自FPN(特征金字塔网络)的不同层级特征图图片,我们可以分别提取每个位置的通道特征,并得到图片的通道特征,分别记为图片。为了增强表示能力,我们借鉴文献[16]中的加权和策略,将三个层级的特征组合在一起,具体如下:

图片

其中,图片代表分配给N个采样点的可训练聚合权重,符号“◦”表示逐元素相乘(即Hadamard积)。我们并未直接将三层采样特征级联成图片图片,而是采用自适应求和的方法,将特征维度显著降低至图片,是初始维度的三分之一。张量的加权和被展平为向量图片,并通过线性变换整合:

图片

其中,图片用于进一步降低集成特征图片的维度,从而得到最终的RoI特征图片,随后输入至三重头部。

三重头部。车道线检测头用于基于RoI池化特征图片对LPM生成的车道线锚点进行分类和回归。众所周知,传统的车道线检测头通常配备一个一对多(O2M)分类子头和一个一对多(O2M)回归子头。然而,一对多机制(即,一个真值对应多个候选项)会导致每条车道线生成冗余预测,从而需要NMS(非极大值抑制)后处理操作。然而,NMS不可微且非端到端,这导致了手动设置超参数的挑战,并且性能可能不佳。为实现端到端学习且无需NMS后处理,我们提出了一种用于车道线检测的三重头模块。

图片

如上图所示,三重头部包含三个组件:O2M分类、O2M回归和另一个一对一(O2O)分类。每个车道线锚点的特征图片分别被送入上述三个子头中。为了保持简洁和高效,O2M分类和O2M回归子头均通过两个多层感知机(MLP)应用于图片,然后O2M分类子头生成置信分数图片,O2M回归子头为每个车道线锚点生成x坐标偏移图片。关于O2M分类和O2M回归子头的更多细节可参考。O2O分类子头被引入以在无NMS的范式中生成非冗余车道线候选项。然而,直接使用一对一策略(即,针对每个真实车道线分配一个正锚点)基于提取的特征会损害模型的学习。因此,提出的O2O分类子头同时考虑了O2M分类子头的置信度先验图片和极坐标参数的空间几何先验(即角度θ和半径r),并应用这些先验来自适应地优化车道线锚点特征图片,从而生成优化后的车道线锚点特征图片。结构设计灵感来自Fast NMS,更详细的信息请参见附录B。具体来说,O2O分类子头首先计算第i个锚点与其x坐标和第j个锚点与其x坐标之间的语义距离,如下所示:

图片

其中,图片表示第i个预测与第j个预测之间的隐含语义距离。ReLU是ReLU激活函数,MLPedge表示一个两层的MLP算子,图片是待训练的模型参数。然而,基于上述语义距离进行真值实例的一对一分配仍然困难,因为某些分叉锚点可能具有相似的距离。为了增加锚点间的语义距离差异,我们需要抑制相似或重叠锚点的特征。基于此,我们设计了一个邻接矩阵图片,定义如下:

图片

其中⊙表示逐元素相乘,图片图片分别是置信度先验邻接矩阵和几何先验邻接矩阵。置信度先验邻接矩阵图片

图片

这里,和是分别对应第i和第j车道线锚点的置信分数,由O2M分类子头预测。根据公式(14),的作用是使具有较高置信分数的车道线锚点抑制那些置信分数较低的锚点。为了利用几何先验,并基于极坐标表示(即全局极坐标半径和角度θ),我们进一步引入几何先验邻接矩阵图片

图片

其中和  是用于测量几何距离的阈值。基于几何先验和置信度先验邻接矩阵的定义,整体邻接矩阵 A可以视为一个有向图,每个车道锚点作为一个节点,RoI特征图片作为输入特征。具体来说,如果邻接矩阵 A中的元素  等于1,那么就存在从第 i个锚点指向第 j个锚点的有向边,这意味着在第 i 个锚点的置信分数高于第 j 个锚点且其几何距离足够小(即小于预设的阈值)时,第 j 个锚点可能会被第 i 个锚点抑制。

通过考虑邻接矩阵 A 引发的车道锚点的抑制效应,车道锚点特征 图片可以从语义距离张量图片中进一步优化如下:

图片

其中 图片图片是沿着邻接矩阵 A 的第 j 列且元素位置的逐元素最大池化算子。这一方法的灵感来源于现有的工作[,旨在从可能抑制优化后的车道锚点的车道锚点中提取最具区别性的特征。利用优化后的锚点特征图片,最终的O2O分类子头的置信分数通过一个三层的MLP生成:

图片

如上所述,O2O分类子头由公式(10)-(17)构成,这可以被视为一种由神经网络驱动的有向图结构,被称为图神经网络(GNN)模块。

无NMF的双重置信度选择。借助邻接矩阵 A,语义特征 图片 之间的差异性被放大,从而在O2O分类子头生成的置信度分数图片中产生了显著的差距,使它们更易于区分。因此,与传统方法不同,我们无需将O2M分类子头获得的置信度分数图片 输入到NMS后处理阶段来去除冗余候选项,而是实施了以下双重置信度选择标准来选择正样本锚点:

图片

其中和是两个置信度阈值。该图片可以在没有NMS后处理的情况下允许非冗余的正样本预测,因为O2O分类子头增强了相似锚点之间的置信度分数差异,使其对两个置信度阈值的敏感度降低。

GPM的损失函数。在获得O2O分类子头的正样本候选集 图片 后,应用匈牙利算法进行标签分配,即正样本锚点与真实实例之间的单一对应分配。对于O2M分类和O2M回归子头,我们使用与SimOTA相同的方法进行标签分配。更多关于标签分配和代价函数的细节见附录C和D。在训练中,分别对O2O分类子头和O2M分类子头应用了Focal损失,分别记为 图片 和 图片。此外,我们采用了排名损失 图片 以扩大O2O分类子头正负置信度之间的差距。请注意,在训练阶段我们停止O2O分类子头的梯度流,以保证RoI特征学习的质量。

为了训练O2M回归子头,我们重新定义了GIoU概念(更多细节参见附录C),并采用了GIoU损失 图片来回归每个正样本车道锚点的x坐标偏移 图片。车道的端点则使用SmoothL1损失图片进行训练。此外,我们提出了一种辅助损失 图片以促进全局特征的学习。如图8所示,锚点和真实值被划分为若干段,每个锚点段被回归到对应真实值段的主要成分。辅助损失图片帮助检测头更深层次地理解全局几何结构,在评估阶段去掉辅助回归分支。最终,GPM的分类损失图片和回归损失 图片如下所示:

图片

其中 图片 是用于调整不同损失项影响的常数权重。

D. 总体损失函数

结合两阶段损失,总体损失函数定义如下:

图片

其中图片用于训练第一阶段LPM的分类和回归参数,图片用于训练第二阶段GPM的相关参数。

IV. 实验

1. 与最新方法的比较

表 I、II、III、IV 和 V 显示了我们提出的模型与其他方法的比较结果。我们展示了两种版本的模型结果:基于 NMS 的版本(记为 Polar R-CNN-NMS)和无需 NMS 的版本(记为 Polar R-CNN)。NMS 版本使用 O2M 头部得到的预测图片经过 NMS 后处理,而无需 NMS 的版本则通过双置信度选择来获得预测结果。

图片

图片

为了确保公平对比,我们在CULane和CurveLanes数据集上也包含了CLRerNet 的结果,因为我们使用了相似的训练策略和数据集划分。比较结果显示,我们的模型在五个数据集上均表现出较强的竞争力。具体而言,在CULane、TuSimple、LLAMAS和DL-Rail这些稀疏场景数据集上,我们的模型优于其他基于锚点的方法。此外,无NMS版本的性能几乎与基于NMS的版本相同,这突显了O2O分类子头在稀疏场景中去除冗余预测的有效性。在CurveLanes数据集上,无NMS版本的F1值和召回率优于其他方法。

我们还对比了锚点数量和处理速度。图9展示了多个基于锚点的方法在CULane数据集上使用的锚点数量。我们提出的模型仅使用了最少的提议锚点(20个),同时在CULane上实现了最高的F1分数。它在竞争上不逊色于像CLRerNet这样使用192个锚点并应用跨层优化的先进方法。而使用同样20个锚点的稀疏型Laneformer则未达到最佳表现。需要注意的是,我们的模型设计结构更为简单,没有复杂的跨层优化组件,这表明灵活锚点在极坐标下对稀疏场景中性能提升的关键作用。此外,由于其简单的结构和较少的锚点,我们的模型比大多数方法具有更低的延迟,如图10所示。

图片

2. 消融研究

为了验证和分析 Polar R-CNN 不同组件的有效性和影响,我们在 CULane 和 CurveLanes 数据集上进行了多项消融研究。

关于极坐标系统和锚点数量的消融研究。为了评估局部极坐标对锚点的重要性,我们分析了每个组件(即角度和半径)对模型性能的贡献。表 VI 显示了角度和半径参数对性能的不同程度的影响。此外,我们在两种锚点提案策略下进行实验,即“固定”锚点和“动态”锚点。“固定”表示由 CLRNet 训练的固定锚点配置(192 个锚点)。而“动态”则指由 LPM 提出的锚点(20 个锚点)。实验结果显示,在固定锚点配置下模型性能提高了 0.48%,在动态锚点配置下提高了 0.3%。此外,LPM 提出的灵活锚点方案在使用较少锚点的情况下实现了更优的性能。

图片

在稀疏场景中的 NMS-free 模块消融研究。我们在 CULane 数据集上进行了多项实验,以评估 NMS-free 模块在稀疏场景下的性能。表 VII 显示了如果不使用 GNN 建立锚点之间的关系,即使采用一对一分配,Polar R-CNN 也无法实现 NMS-free 模式。此外,置信度优先的邻接矩阵 ACA_CAC 也证明了 O2M 置信度得分在 NMS-free 模式中的重要性。其他组件(如几何优先的邻接矩阵 AGA_GAG 和排序损失)也对 NMS-free 块的性能起到了一定的作用。

图片

为了比较 NMS-free 与传统 NMS 模式,我们在“动态”锚点和“固定”锚点策略下对 NMS-free 块进行了实验。表 VIII 展示了这些实验结果。“O2M”表示 NMS(图 7 中灰色虚线路径),而“O2O”表示 NMS-free 模式(图 7 中绿色路径)。后缀“-B”表示头部仅由 MLP 组成,而“-G”表示头部包含 GNN 块。在固定锚点策略下,尽管没有 GNN 的 O2O 分类子头可以有效消除冗余预测,加入 GNN 结构后性能仍有所提升。在动态锚点策略下,由于锚点重叠较高,未使用 GNN 块的 O2O 分类子头未能有效去除冗余预测。在固定和动态锚点策略下,包含 GNN 块的 O2O 分类子头均能成功消除冗余预测,表明标签分配和头部架构设计在实现无冗余的端到端检测中至关重要。

图片

我们还研究了 O2O 分类子头的停梯度策略。表 IX 显示,O2O 分类子头的梯度会对 O2M 分类子头(具有 NMS 后处理)和 O2O 分类子头都产生负面影响。此现象表明,一对一分配会对特征学习引入显著的偏差,突显了停梯度策略对保持最佳性能的重要性。

图片

在密集场景中的 NMS-free 模块消融研究。虽然在稀疏场景中证明了可以用 O2O 分类子头替代 NMS,但在密集场景中 NMS 的局限性依然存在。为了探究 NMS-free 块在密集场景中的表现,我们在 CurveLanes 数据集上进行了实验,结果详见表 X。

图片

结论

主要贡献

1.本文提出了结合局部和全局极坐标系统的锚点生成策略,大大减少了锚点数量的同时提高了检测性能。

2.本文设计了结合GNN模块的三重检测头,支持无NMS的检测模式,增强了解释性。

3.本文在五个数据集上进行了广泛实验,展示了该方法在性能、效率和锚点优化方面的优势。

文章引用:Polar R-CNN: End-to-End Lane Detection with Fewer Anchors

最后别忘了,帮忙点“在看”。  

您的点赞,在看,是我创作的动力。

AiFighing是全网第一且唯一以代码、项目的形式讲解自动驾驶感知方向的关键技术。

长按扫描下面二维码,加入知识星球。

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

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

相关文章

Vue + Vant Picker实现省市区三级联动

一、picker选择器的数据由columns属性控制,columns中有几个元素就代表该选择器有多少级,通过change方法来给对应列赋值 this.columns [{values: citys,className: "column1",defaultIndex: 0,flex: 1, //控制每列的宽度},{values: citys[0].…

Windows安装配置node.js

下载安装 下载 访问下载 | Node.js 中文网,下载 推荐使用长期支持版本,但是此次是学习用的,使用最新版本试一下 安装 其实一路next基本就可以了,注意调整下安装目录 查看版本 C:\Users\PC>node -v v22.11.0 C:\Users\PC>…

Mac保护电池健康,延长电池使用寿命的好方法

使用Mac的过程中,如何延长电池的使用寿命是大家非常关心的问题,而养成一个良好的充电习惯能够有效的延长电池的使用寿命 避免过度充电和过度放电能够有效的保护电池,因此长时间的充电与长时间放点都不可取,但是在日常的使用过程中…

Kaggle生物信息学挑战:酶稳定性预测大赛

背景介绍 酶的稳定性是影响其实际应用的关键因素之一。通过定点突变可以改善酶的稳定性,但实验筛选稳定性突变体的成本较高。预测突变对酶稳定性的影响,加速筛选稳定性更高的酶突变体。 概念解释 X 残基:假设 它用 红色表示 , Y 残基:假设…

HarmonyOS NEXT 应用开发实战:十一、知乎日报项目接口使用指南

在本篇博文中,我们将带您完成一个简单的知乎日报项目,主要关注如何使用 h_request库与后端接口进行交互。我们将快速搭建起项目,并利用该库的优势提高开发效率。 选择 h_request 的理由 在进行 HarmonyOS 开发时,原始的 ohos.net…

STM32——串口

1、串口是什么 串口呢,作为硬件调试的时候,是很有用的,我觉得搞嵌入式是经常和串口打交道的 串口(Serial Port)是一种用于计算机和外部设备之间进行数据通信的接口。它通过串行通信方式传输数据,即一次只…

sparkSQL的UDF,最常用的regeister方式自定义函数和udf注册方式定义UDF函数 (详细讲解)

- UDF:一对一的函数【User Defined Functions】 - substr、split、concat、instr、length、from_unixtime - UDAF:多对一的函数【User Defined Aggregation Functions】 聚合函数 - count、sum、max、min、avg、collect_set/list - UDTF:…

水库大坝安全监测预警方法

一、监测目标 为了确保水库大坝的结构安全性和运行稳定性,我们需要采取一系列措施来预防和减少因自然灾害或其他潜在因素所引发的灾害损失。这不仅有助于保障广大人民群众的生命财产安全,还能确保水资源的合理利用和可持续发展。通过加强大坝的监测和维护…

Java:网络原理-TCP/IP

1.应用层 主要涉及两种情况: (1)使用大佬们已经创建好的应用层协议. (2)自己定义应用层协议. [1]明确前后端交互过程中,需要传递哪些信息. 比如开发一个外卖软件,展示"商家列表" 此处就需要先确定传递的信息是啥. a.请求:用户id; 用户所处的位置 b.响应:商家…

C++类的多重继承演示

一个派生类可以继承多个基类 以下代码演示派生类zzj继承两个基类people、student #include <iostream>using namespace std;class people { private:int m_age; public:people(int age);void print();~people(); };people::people(int age) {cout << "peopl…

信息安全建设方案,网络安全等保测评方案,等保技术解决方案,等保总体实施方案(Word原件)

1 概述 1.1 项目简介 1.2 测评依据 2 被测信息系统情况 2.1 定级情况 2.2 承载的业务情况 2.3 网络结构 2.4 被测对象资产 2.5 上次测评问题整改情况说明 3 测评范围与方法 3.1 测评指标 3.1.1 安全通用要求指标 3.1.2 安全扩展要求指标 3.1.3 其他安全要求指标 3.1.4 不适用安…

vue3学习---案例实现学习

目录 一&#xff0c;京东秒杀导航栏 1&#xff0c;静态样式展示 2&#xff0c;设计步骤 1&#xff0c;html骨架 2&#xff0c;css样式设计 3&#xff0c;vue3动态样式设计 1&#xff0c;v-for使用 1&#xff0c;先在js模块做如下准备 2&#xff0c;v-for遍历 2&#xff…

架构师:如何提高web网站的请求并发响应量?

文章目录 一、提出问题二、相关概念三、如何提高网站请求响应能力&#xff1f;四、负载均衡有那些方式&#xff1f;五、常用微服务架构图及推荐书籍 一、提出问题 今天&#xff0c;突然想到一个问题&#xff0c;双十一&#xff0c;那些电商网站的并发量是多大&#xff1f; 简…

中酱:健康生活的先行者

中酱&#xff1a;健康生活的先行者 在追求品质生活的道路上&#xff0c;健康是永恒的主题。每一个关乎健康的选择&#xff0c;都像是为生活点亮一盏明灯&#xff0c;指引我们走向更美好的生活。而在饮食这个与健康息息相关的领域&#xff0c;调味品的选择至关重要。中酱 —— 作…

使用CentOS宝塔面板docker搭建EasyTier内网穿透服务

0. 前言 EasyTier是一个简单、安全、去中心化的内网穿透 VPN 组网方案&#xff0c;部署方便&#xff0c;支持 MacOS/Linux/Windows/FreeBSD/Android平台&#xff0c;而且作者搭建了一个公共服务器&#xff0c;不想折腾自建服务&#xff0c;可以使用默认的公共服务器地址 tcp:/…

如何以开源加速AI企业落地,红帽带来新解法

CSDN 看到&#xff0c;生成式 AI 的火爆正在引发计算、开发、交互三大范式全面的升级和转换&#xff0c;全行业或将迎来一次全新的科技变革周期&#xff0c;可能比移动与云计算变革更加剧烈。不过 AI 经历了追求千亿模型效果和芯片、集群硬件的军备竞赛后&#xff0c;如何真正落…

计算机毕业设计Python+图神经网络手机推荐系统 手机价格预测 手机可视化 手机数据分析 手机爬虫 Django Flask Spark 知识图谱

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

【C语言】分支和循环详解(下)猜数字游戏

与诸君共进步&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 文章目录 1. 随机数的生成2. 猜数字小游戏的实现 1. 随机数的生成 掌握了前⾯学习的这些知识&#xff0c;我们就可以写⼀些稍微有趣的代码了&#xff0c;⽐如&#xff1a; 写⼀个猜数字游戏 游戏要求…

iOS灵动岛动画小组件怎么播放动画

这个灵动岛相关的展示位置分几个地方&#xff1a; 紧凑型&#xff0c;最小化&#xff0c;扩展型&#xff0c;还有锁屏位置 我们先来看一下我这边实现的动画效果 demo下载&#xff1a; iOS灵动岛GIF动画 灵动岛样式 灵动岛有三种渲染模式&#xff1a; 第一种是 紧凑型&…

西门子KTP系列HMI用户自定义弹窗-多弹窗共用

接上一个文章内容《西门子KTP系列HMI用户自定义弹窗》西门子KTP系列HMI用户自定义弹窗-CSDN博客 当我需要别的操作并且需要弹窗时&#xff0c;整个弹窗的内容和变量都需要重复重新绑定&#xff1b;如下图所示&#xff1a; 由上图可看出当前的自定义弹窗有以下缺点&#xff1a; …