【论文阅读】<YOLOP: You Only Look Once for PanopticDriving Perception>

Abstract

全视驾驶感知系统是自动驾驶的重要组成部分。一个高精度的实时感知系统可以帮助车辆在驾驶时做出合理的决策。我们提出了一个全视驾驶感知网络(您只需寻找一次全视驾驶感知网络(YOLOP)),以同时执行交通目标检测、可驾驶区域分割和车道检测。它由一个用于特征提取的编码器和三个用于处理特定任务的解码器组成。我们的模型在具有挑战性的BDD100K数据集上表现得非常好,在准确性和速度方面,在所有三个任务上都实现了最先进的水平。此外,我们通过消融研究验证了我们的多任务学习模型对联合训练的有效性。据我们所知,这是第一个可以在嵌入式设备Jetson TX2(23 FPS)上同时实时地处理这三种视觉感知任务的工作,并保持良好的准确性。为了便于进一步的研究,源代码和预训练的模型在 https://github.com/hustvl/ YOLOP上发布。

Introduction

近年来,对自动驾驶的广泛研究揭示了全景驾驶员感知系统的重要性。它在自动驾驶中起着重要的作用,因为它可以从摄像头拍摄的图像中提取视觉信息,并帮助决策系统控制车辆的动作。为了限制车辆的机动性,视觉感知系统应该能够理解场景,然后向决策系统提供诸如:障碍物的位置、道路是否可驾驶的判断、车道的位置等信息。我们选择了三个任务:目标检测、可驾驶区域分割和车道检测,来构建我们的感知系统。目标检测是车辆避开障碍物和遵守交通规则的必要条件。可驾驶区域分割和车道检测也被需要,因为它们是规划车辆驾驶路线的关键。

对于这种全景驾驶感知系统,高精度和实时性是其中最关键的两个要求,这与自动驾驶汽车是否能够做出准确、及时的决策,以确保安全有关。然而,对于实际的自动驾驶系统,特别是先进的驾驶员辅助系统(ADAS),计算资源往往是边缘的和有限的。因此,在现实场景中同时考虑这两个需求是非常具有挑战性的。

许多方法都可以分别处理这些任务。例如,Faster R-CNN[1]和YOLOv4[2]处理目标检测;提出了ENet[3]和PSPNet[4]来进行语义分割。SCNN[5]和SAD-ENet[6]用于检测车道。尽管这些方法取得了出色的性能,但逐个处理这些任务比一次性处理它们需要更长的时间。当在自动驾驶汽车中常用的嵌入式设备上部署全视驾驶感知系统时,应考虑到有限的计算资源和延迟。此外,在交通场景理解中的不同任务往往有很多相关的信息。如图1所示,车道通常是可行驶区域的边界,而可行驶区域通常紧密地围绕着交通物体。多任务网络(multi-task network)​更适合于这种情况,因为它可以通过同时处理多个任务而不是按顺序来加速图像分析过程。此外,由于多任务网络通常共享相同的特征提取主干,因此它可以在多个任务之间共享信息。因此,在自动驾驶中探索多任务方法至关重要。实际上,DLT-Net是第一个能够同时处理这三个任务,但没有达到所需速度的多任务网络。我们的工作旨在提出一种新的网络,可以实时解决这三个任务,并实现更有希望的精度。

为了解决全视驾驶感知的多任务问题,即交通目标检测、可驾驶区域分割和车道检测,在获得高精度、快速的同时,设计了一种简单高效的网络架构。我们使用一个轻量级的卷积神经网络(CNN)[7]作为编码器,从图像中提取特征。然后将这些特征映射提供给三个解码器,以完成它们各自的任务。我们的检测解码器是基于目前性能最好的单阶段检测网络[2],主要有两个原因: 1)单阶段检测网络比两阶段检测网络快;2)单级检测器基于网格的预测机制与其他两个语义分割任务的关系更密切,而实例分割通常与基于区域的检测器[8]相结合。此外,我们还在实验部分中验证了这两种观点。编码器输出的特征图结合了不同层次和尺度的语义特征,我们的分割分支可以利用这些特征图很好地完成像素级语义预测。

除了端到端训练策略之外,我们还尝试了一些交替的优化范式来逐步训练我们的模型。一方面,我们可以将不相关的任务放于不同的训练步骤,以防止相互限制。另一方面,首先被训练的任务可以指导其他任务。所以,这种范式有时很有效,但很麻烦。然而,实验表明,我们的模型没有必要使用,因为一端到一端训练可以表现得足够好。我们的全视驾驶感知系统在一个NVIDIA TITAN XP上达到41 FPS,在Jetson TX2上达到23 FPS;同时,它在BDD100K数据集[9]的三个任务上取得了最先进的水平。

综上所述,我们的主要贡献是: 1)我们提出了一种高效的多任务网络,它可以联合处理自动驾驶中的三个关键任务:目标检测、可驾驶区域分割和车道检测,以节省计算成本和减少推理时间。我们的工作是第一次在嵌入式设备上实现实时传输,同时在BDD100K数据集上保持最先进水平的实时性能。2)我们设计了消融实验来验证我们的多任务处理方案的有效性。证明了这三个任务可以共同学习,而不需要进行繁琐的交替优化。3)我们设计了消融实验,证明了基于网格的检测任务的预测机制与语义分割任务的预测机制更相关,为其他相关的多任务学习研究工作提供了参考。

Related work

在本节中,我们将分别回顾上述三个任务的解决方案,然后介绍一些相关的多任务学习工作。我们只关注基于深度学习的解决方案。

Traffic object detection

近年来,随着深度学习的快速发展,出现了许多突出的目标检测算法。目前主流的目标检测算法可分为两阶段方法和单阶段预测方法。

这两阶段的方法分两个步骤完成检测任务。首先得到区域建议(regional proposals ),然后利用区域建议的特征对目标进行定位和分类。区域提案的产生已经经历了几个发展阶段[1,10-12]。

ssd系列[13]和yolo系列算法是单阶段方法中的里程碑。该算法可同时进行边界盒回归(the bounding box regression)和目标分类(object classification 。YOLO[14]将图片划分为S×S网格,而不是使用RPN网络提取区域提案,这大大加快了检测速度。YOLO9000[15]引入了锚定机制来提高检测的召回率。YOLOv3[16]利用特征金字塔网络结构来实现多尺度检测。YOLOv4[2]通过细化网络结构、激活函数、损失函数和应用丰富的数据增强,进一步提高了检测性能。

Drivable area segmentation

由于深度学习的快速发展,许多基于cnn的方法在语义分割领域取得了很大的成功,可以应用于可驾驶区域分割任务,提供像素级的结果。FCN[17]首先引入了一个完全卷积的网络来进行语义分割。尽管进行了跳过连接的改进,但它的性能仍然受到低分辨率输出的限制。PSPNet[4]提出了金字塔池模块来提取不同规模的特征,以提高其性能。除了准确性之外,速度也是评估这项任务的一个关键因素。为了达到实时推理速度,ENet[3]减小了特征图的大小。近年来,多任务学习被引入来处理这一任务,EdgeNet[18]将边缘检测与可驾驶区域分割任务相结合,在不影响推理速度的情况下获得更准确的分割结果。

Lane detection

在车道检测方面,有大量基于深度学习[19]的创新研究,构建双分支网络对图像进行语义分割和像素嵌入。它进一步对双分支特征进行了聚类,实现了车道实例的分割。SCNN[5]提出了逐片卷积,它使消息能够在图层中跨行和列的像素之间传递,但这种卷积非常耗时。ENet-SAD[6]使用自注意蒸馏方法,使低级特征图能够从高级特征图中学习。该方法在保持模型较轻的同时,提高了模型的性能。

与那些特定于任务的网络相比,我们的多任务网络更有效。在保持兼容性能的同时,它比逐个执行这些任务需要更少的推理时间。

Multi-task approaches

多任务学习的目标是通过多个任务之间的共享信息来学习更好的表示。特别是基于cnn的多任务学习方法也可以实现网络结构的卷积共享。Mask R-CNN[8]扩展了Faster R-CNN,增加了一个预测目标掩码的分支,它有效地结合了实例分割和目标检测任务,这两个任务可以促进彼此的性能。LSNet[20]将目标检测、实例分割和姿态估计总结为位置敏感的视觉识别,并使用一个统一的解决方案来处理这些任务。MultiNet[21]通过一个共享的编码器和三个独立的解码器,同时完成场景分类、目标检测和驾驶区域分割的三个场景感知任务。DLT-Net[22]继承了编码器-解码器的结构,并在子任务解码器之间构造上下文张量,从而在任务之间共享指定的信息。Zhang等人提出了车道区域分割与车道边界检测之间相互关联的子结构。同时,提出了一种新的损失函数,将车道线约束在车道区域的外轮廓上,使它们发生几何重叠。然而,这个先前的假设也限制了它的应用,因为它只在车道线紧密包裹车道区域的情况下有效。此外,多任务模型的训练范式也值得思考。Kang等人[24]指出,只有当所有这些任务都能完成时,联合训练才是适当和有益的。否则,就需要采用交替优化的方法。因此,FasterR-CNN[1]采用了一种实用的4步训练算法来学习共享特征。这种模式有时可能很有用,但大多数情况下都是乏味的。

我们为我们的多任务网络选择了三个重要的和相关的任务。我们使用共享编码器构建这个网络,并使用端到端训练方案对其进行训练。此外,我们的网络在BDD100K数据集上取得了非凡的性能。

Method

我们提出了一种简单、高效的前馈网络,可以同时完成交通目标检测、可驾驶区域分割和车道检测任务。如图2所示,我们的全视驱动感知单镜头网络,称为你只看一次全视驱动(YOLOP),包含一个共享的编码器和三个后续的解码器来解决特定的任务。在不同的解码器之间没有复杂和冗余的共享块,这减少了计算消耗,并允许我们的网络易于端到端训练。我们在第4.3.4节中阐述了我们的方法的各种设计选择

Encoder

我们的网络共享一个编码器,它由一个主干网络和一个颈部网络组成。

Backbone

利用主干网络提取输入图像的特征。通常,一些经典的图像分类网络作为骨干。由于YOLOv4[2]在目标检测中杰出的性能,我们选择CSPDarknet[7]作为骨干,解决了优化[25]过程中的梯度复制问题。它支持特性传播和特性重用,从而减少了参数和计算的数量。因此,它有利于保证网络的实时性能。

Neck

颈部被用来融合由主干产生的特征。我们的颈部主要由空间金字塔池(SPP)模块[26]和特征金字塔网络(FPN)模块[27]组成。SPP生成并融合不同尺度的特征,FPN融合不同语义级别的特征,使生成的特征包含多个尺度和多个语义级信息。我们在工作中采用了串联的方法来融合特征。

Decoders

我们网络中的三个头是这三个任务的特定解码器。

Detection head

与YOLOv4类似,我们采用了一种基于锚定的多尺度检测方案。首先,我们使用一种称为路径聚合网络path aggregation network (PAN)的结构,一个自下而上的特征金字塔网络[28]。FPN自上而下传输语义特性,PAN自下而上传输位置特性。我们将它们结合起来,获得更好的特征融合效果,然后直接利用PAN中的多尺度融合特征图进行检测。然后,多尺度特征图的每个网格将分配三个之前锚不同的纵横比,和检测头将预测位置的偏移和缩放的高度和宽度,以及每个类别的概率和相应的置信度预测。

Drivable area segment head & lane line segment head

​​​​​可驾驶区域段头部和车道分割头部采用相同的网络结构。我们将FPN的底层提供给分割分支,大小为(W/8,H/8,256)。经过三次上采样过程后,我们将输出特征映射恢复到(W,H,2)的大小,它表示输入图像中每个像素的可驱动区域/车道线和背景的概率。由于颈部网络中共享SPP,我们不像其他网络通常做[4]那样添加额外的SPP模块来分割分支,这并没有提高我们网络的网络性能。此外,我们在上采样层中使用最近邻插值方法来降低计算成本,而不是进行反卷积。因此,我们的段解码器不仅获得了较高的精度输出,而且在推理过程中也非常快。

Loss function

由于在我们的网络中有三个解码器,我们的多任务损失包含三个部分。对于检测损失\mathcal{L}_{det},是分类损失、目标损失和边界框(bounding box )损失的加权和,如式(1)所示:

 其中\mathcal{L}_{class}\mathcal{L}_{obj}为焦点损失[29],用于减少分类良好的样本的损失,从而迫使网络集中于困难的样本。\mathcal{L}_{class}用于惩罚分类和\mathcal{L}_{obj}用于一个预测的置信度。\mathcal{L}_{box}\mathcal{L}_{CIoU}[30],它考虑了预测框与地面真值(ground truth)之间的距离、重叠率、尺度相似度和纵横比。

可驾驶区域分割\mathcal{L}_{da-seg}和车道线分割的损失\mathcal{L}_{ll-seg}都包含了对数交叉熵损失\mathcal{L}_{ce},旨在最小化网络输出像素与目标之间的分类误差。值得一提的是,在\mathcal{L}_{ll-seg}添加了交并比(IoU):\mathcal{L}_{IoU}=1-TP/(TP+FP+FN),因为它对车道线的稀疏类别的预测特别有效。\mathcal{L}_{da}\mathcal{L}_{ll-seg}分别定义为(2)和(3)。

总之,我们的最终损失是这三个部分的加权和,如(4)所示。

 其中\alpha _1\alpha _2\alpha _3\gamma_1\gamma_2\gamma_3可以调整平衡总损失的所有部分。

Training paradigm

我们尝试了不同的范式来训练我们的模型。最简单的一个是端到端训练,然后可以共同学习三个任务。当所有的任务都确实是相关的时,这种训练模式是有用的。此外,还尝试了一些交替优化算法,逐步训练我们的模型。在每个步骤中,模型可以只关注一个或多个相关的任务,而不考虑那些不相关的任务。即使不是所有的任务都是相关的,我们的模型仍然可以用这个范式充分地学习每个任务。此外,算法1还说明了一步一步的训练方法的过程。
Algorithm 1. 一个一步一步(step-by-step )的训练方法。首先,我们只训练编码器和检测头。然后,我们冻结编码器和检测头,并训练两个分割头。最后,对整个网络的所有三个任务进行联合训练。
Require: 具有参数组\Theta=\left\{\theta_{\text {enc }}, \theta_{\text {det }}, \theta_{\text {seg }}\right\}的目标神经网络\mathcal{F};训练集\mathcal{T};收敛阈值thr;损耗函数 \mathcal{L}_{all}
Ensure:  

 Experiments

Setting

Dataset setting

BDD100K数据集[9]支持自主驾驶领域的多任务学习的研究。它拥有100K帧的图片和10个任务的注释,是最大的驾驶视频数据集。此外,由于数据集具有地理、环境和天气的多样性,在BDD100K数据集上训练的算法足够鲁棒,可以迁移到新的环境。因此,我们选择了BDD100K数据集来训练和评估我们的网络。BDD100K数据集有三个部分,一个包含70K图像的训练集,一个包含10K图像的验证集,和一个包含20K图像的测试集。由于测试集的标签不是公开的,所以我们在验证集中评估我们的网络。

Implementation details

为了提高我们的模型的性能,我们根据经验采用了一些实际的数据增强技术和方法。

为了使我们的检测器能够获得交通场景中物体的更多的先验知识,我们使用k-means聚类算法从数据集的所有检测帧中获得先验锚点。我们使用Adam作为优化器来训练我们的模型,初始学习率、\beta _1\beta _2分别设置为0.001、0.937和0.999。在训练过程中,使用Warm-up 预热和cosine annealing 余弦退火来调整学习速率,使模型收敛得更快、更好[31]。

我们使用数据增强来增加图像的可变性,从而使我们的模型在不同的环境中具有鲁棒性。此外,在我们的训练方案中还考虑了光度畸变和几何畸变。对于光度畸变,我们会调整图像的色调、饱和度和值。我们使用随机旋转、缩放、平移、剪切和左右翻转来处理图像来处理几何畸变。

Experimental setting

我们选择了一些优秀的多任务网络和一些专注于单一任务的网络来与我们的网络进行比较。MultiNet和DLT-Net都能处理多种全视驾驶感知任务,并且在BDD100K数据集的目标检测和可行驶区域分割任务方面取得了良好的性能。Faster-RCNN是两阶段目标检测网络的突出代表。YOLOv5是一个在COCO数据集上实现最先进性能的单级网络。PSPNet以其优越的全局信息聚合能力,在语义分割任务上取得了出色的性能。我们在BDD100K数据集上对上述网络进行了重新训练,并将其与我们的网络在目标检测和可驾驶区域分割任务上进行了比较。因为没有存在合适的在BDD100K数据集上处理车道检测任务的多任务网络,我们将我们的网络与三个先进的ENet[3]、SCNN和ENet-SAD网络进行比较。此外,还将联合训练范式的性能与多种交替训练范式进行了比较。此外,我们还比较了训练的多任务模型处理多任务和训练执行特定任务的多任务模型的准确性和速度。此外,我们还比较了语义分割任务与单阶段检测任务和两阶段检测任务的性能。此外,我们还减少了关于网络架构和数据增强方法的各种设计选择。我们报告了我们的YOLOP模型在所有不同的光度测量场景中的性能。最后,我们将报告如何将我们的YOLOP模型部署到一些嵌入式设备上,如Jetson TX2。在[6]之后,我们将BDD100K数据集中的图像大小从1 280×720×3调整到640×384×3。所有的对照实验都遵循相同的实验设置和评价指标。第4.3.4节在NVIDIA GeForce 3 090上运行,所有其他实验都在NVIDIA GTX TITAN XP上运行。

Experimental results

在本节中,我们将端到端训练模型,然后将其与所有三个任务上的其他代表性模型进行比较。

Traffic object detection results

交通对象检测的可视化情况如图3所示。由于MultiNet和DLT-Net只能检测车辆,因此我们只考虑了BDD100K数据集上的5个模型的车辆检测结果。如表1所示,我们使用召回率和mAP50作为检测精度的评价指标。我们的模型在检测精度上超过了Faster-RCNN 、MultiNet和DLT-Net,并且可以与比我们使用更多技巧的YOLOv5s相媲美。此外,我们的模型还可以进行实时推理。YOLOv5s比我们的要快,因为它没有车道线段头和可驾驶区域段头。
图4为Faster R-CNN与YOLOP的定性比较。由于多任务的信息共享,YOLOP的预测结果更加合理。例如,YOLOP不会将远离道路的物体误识别为车辆。此外,假阴性(false negatives)的例子要少得多,边界框也更准确。

Drivable area segmentation results

可驱动区域分割的可视化结果如图5所示。在本文中,BDD100K数据集中的“区域/可驾驶”和“区域/可替代”类都被毫无区别地归类为“可驱动区域”。我们的模型只需要区分图像中的可驱动区域和背景。利用mIoU来评价不同模型的分割性能。结果如表2所示。可以看出,我们的模型比MultiNet、DLT-Net和PSPNet分别好19.9%、19.4%和1.9%。此外,我们的推理速度比他们的快4到5倍。

 PSPNet与YOLOP的结果比较如图6所示。PSPNet和YOLOP在这项任务中都表现良好。但YOLOP在分割车辆或车道线附近的边缘区域方面明显更好。我们认为这主要是因为其他两个任务为这个任务提供了边缘信息。同时,YOLOP犯的意外错误较少,如将对面车道区域错误判断为可驾驶区域。

Lane detection results
车道检测的可视化结果如图7所示。BDD100K数据集中的车道线用两行标记,因此直接使用注释很棘手。实验设置遵循[6],以便方便地进行比较。首先,我们根据两行注释计算中心线。然后,我们绘制出宽度设置为8像素的训练的车道线,同时保持测试集的车道线宽度在2个像素。我们使用像素精度和车道的IoU作为评价指标。如表3所示,我们的模型的性能显著超过了其他三个模型。

 图8为ENet-SAD与YOLOP的车道线检测结果的比较。YOLOP的分割结果比ENet-SAD更准确和连续。有了其他两个任务共享的信息,YOLOP不会将一些车辆所在或可驾驶的区域误认为车道线,但ENet-SAD总是这样做。

Ablation studies

 我们设计了以下三个烧蚀实验,以进一步说明我们的方案的有效性。本节中的所有评估指标都与上述指标一致。

End-to-end versus step-by-step

在表4中,我们比较了联合训练范式与多种交替训练范式的性能。我们的模型通过端到端训练表现得足够好,因此不需要进行交替优化。然而,有趣的是,范式训练检测任务首先似乎表现得更好。我们认为这主要是因为我们的模型更接近于一个完整的检测模型,并且该模型在执行检测任务时更难收敛。更重要的是,由三个步骤组成的范例略优于两个步骤。类似的交替训练可以进行更多的步骤,但我们观察到的改进可以忽略不计。

Multi-task versus single-task

为了验证我们的多任务学习方案的有效性,我们比较了多任务方案和单任务方案的性能。一方面,我们训练我们的模型同时执行三项任务。另一方面,我们训练我们的模型分别执行交通目标检测、可驾驶区域分割和车道线分割任务。表5显示了这两种方案在每个特定任务中的性能比较。可以看出,我们的模型采用了多任务方案,实现了接近于专注于单一任务的性能。更重要的是,与单独执行每个任务相比,多任务模型可以节省大量的时间。

Region-based versus grid-based

验证了基于网格的预测机制比基于区域的预测机制与两个语义分割任务更相关的观点。我们扩展了Faster-RCNN,通过添加两个语义段头,以像我们的模型一样并行执行三个任务,我们称这个新的模型为R-CNNP。我们训练YOLOP和R-CNNP 1)分别执行一个检测任务和两个分割任务,2)同时执行三个任务。在上述两个实验中,这两个分割任务都是联合训练的,因为不需要考虑它们之间的交互作用。所有实验设置均相同,结果见表6所示。在RCNNP框架中,多任务训练的性能比单独训练检测任务和语义分割任务要差得多。显然,在RCNNP框架中结合了两种任务冲突。但是,在我们的YOLOP框架中没有这样的问题;多任务训练的性能与只关注检测或语义分割任务相同。因此,我们认为这是由于YOLOP的检测头和其他两个语义分割头一样,直接对编码器输出的整个特征图执行全局分类或回归任务,因此它们在预测机制方面是相似和相关的。然而,R-CNNP的检测头需要首先选择区域建议(region proposals ),然后对每个提案的特征图进行预测,这与语义分割的全局预测机制有很大的不同。此外,R-CNNP在推理速度方面远远落后于YOLOP。因此,我们的框架是联合训练检测和分割任务的一个更好的选择。​​​​​​​

The ablations of YOLOP in different experimental settings

 我们取消了关于网络架构和数据增强方法的各种设计选择。我们在表7中报告了所有的消融结果。然后,我们分别比较了使用Resnet50[32]和CSPDarknet作为网络骨干的性能。包括FPN、PAN、SPP模块和CSPDarknet骨干,我们的网络取得了轻微更好的性能和更快的速度。此外,我们发现目标检测任务从数据增强中获益良多。显然,FPN模块是至关重要的,这为所有三个任务带来了巨大的改进。此外,通过向检测分支中添加一个PAN模块,提高了目标检测任务的性能。最后,当在网络颈部添加共享模块时,这三个任务的性能都稳步提高。但是,向两个段分支中添加两个额外的SPP模块并不能像预期的那样提高性能,而且很耗时。因此,我们的模型最终采用了倒数第二行的设置。

The results of YOLOP in different photometric scenes

​​​​​​​所有的光度测量环境都是自动驾驶的重要组成部分。因此,我们报告了我们的YOLOP模型在不同光度场景中的定量结果。如表8所示,我们的YOLOP模型在不同的光度场景中的性能是稳健的。此外,即使在极具挑战性的场景中,比如在晚上,我们的YOLOP模型仍然保持着相对稳定的性能。

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

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

相关文章

C++类和对象中篇

🐇 🔥博客主页: 云曦 📋系列专栏:[C] 💨路漫漫其修远兮 吾将而求索 💛 感谢大家👍点赞 😋关注📝评论 文章目录 📔前言📔1、类的六个…

源代码怎么加密防泄漏?9种方法教会你

想做源代码加密防止泄漏,首先要了解程序员可以通过哪些方式将源代码传输出去! 程序员泄密的常见方式 物理方法: — 网线直连,即把网线从墙上插头拔下来,然后和一个非受控电脑直连; — winPE启动,通过光盘…

怎么写毕业论文的? 推荐4个AI工具

写作这件事一直让我们从小学时期就开始头痛,初高中时期800字的作文让我们焦头烂额,一篇作文里用尽了口水话,拼拼凑凑才勉强完成。 大学时期以为可以轻松顺利毕业,结果毕业前的最后一道坎拦住我们的是毕业论文,这玩意不…

常用目标检测算法介绍

目录 1. 常用目标检测算法 2. R-CNN 模型 3. Fast R-CNN 模型 4. Faster R-CNN 模型 5. SSD 模型 1. 常用目标检测算法 在深度学习框架下,目标检测方法通常涉及图像定位和分类两个关键方面。有两种主要的解决方法:一种是一阶(one-stage&…

去除快捷方式的箭头图标

文章目录 取消箭头显示恢复箭头显示结果展示 添加快捷方式之后,会有箭头图标,部分场景下看着较为难受: 可以通过如下方式取消/显示箭头: 取消箭头显示 新建一个.bat文件,内部加入如下命令: reg add "…

2024北京市人工智能大模型行业应用分析报告

来源:北京市科学技术委员会 方向一为基于AIGC技术的智能审计合规研究,由北京银行提出,以 提高审计工作效率和准确性为核心目标,需要参赛企业针对检查内容, 利用大模型技术寻找并给出相关现象涉及的制度名称及相关原文…

element ui的确认提示框按钮样式修改

修改确认提示框的默认按钮样式,使用css强制修改 例: js代码: deleteUser(params){this.$confirm("您确定要删除吗?此操作无法撤销并且将永久删除所有数据。", "提示", { type: "warning", cancel…

新款锐科达SV-2402VP SIP广播音频模块18123651365支持RTP流音频广播

一、模块介绍 SV-2402VP网络音频模块是一款通用的独立SIP音频播放模块,其带2*15W功放音频输出,可以轻松地嵌入到OEM产品中。该模块对来自网络的SIP协议及RTP音频流进行解码播放。 该模块支持多种网络协议和音频解码协议,可用于VoIP和IP寻呼…

解决Tomcat日志乱码问题

1、 修改apache-tomcat-10.1.23/conf/server.xml URIEncoding"UTF-8"2、 修改apache-tomcat-10.1.23/conf/logging.properties # java.util.logging.ConsoleHandler.encoding UTF-8 java.util.logging.ConsoleHandler.encoding GBK参考 https://www.jb51.net/ar…

一键接入电商API数据接口京东API通过商品ID、URL采集商品详情页实时数据API接入指南

要一键接入京东电商API数据接口并采集商品详情页的实时数据,您需要按照以下步骤操作: 注册账号:您需要注册一个账号。完成注册后,您将获得用于API认证的ApiKey和ApiSecret。选择API:根据自己的需求选择合适的API服务。…

域控安全 ----> Ntds.dit文件抓取

大家还记得内网渗透的初衷吗??? 找到域馆,拿下域控!! 拿下了域控就是拿下了整个域!! 但是大家知道拿下域环境之后应该怎么操作吗(灵魂拷问)??? …

科研综述写作技巧:三大要领与实战应用

​在科研工作中,综述不仅是研究者对既有知识体系的梳理与整合,更是为接下来的研究提供方向与思路的重要工具。写好一篇综述,需要掌握三大要领。 要领一:明确目标与定位 在开始综述写作之前,首先要明确综述的目标与定位…

Spring 常用的注入方式有什么?

Spring 是一个非常流行的 Java 开发框架,它提供了多种依赖注入(Dependency Injection)的方式,使得开发者可以轻松地管理应用程序中的组件依赖关系。在 Spring 中,常用的注入方式主要包括构造器注入、Setter 方法注入、…

全网最全:一文入门最热的LLM应用开发框架LangChain

f#### 1. LangChain 简介 1.1. LangChain 发展史 LangChain 的作者是 Harrison Chase,最初是于 2022 年 10 月开源的一个项目,在 GitHub 上获得大量关注之后迅速转变为一家初创公司。2017 年 Harrison Chase 还在哈佛上大学,如今已是硅谷的…

【Django项目】 通过AI实现视频转文字

使用Django构建一个视频—>文字 转换器: 输入视频地址,通过OpenAI的接口分析视频,返回视频内容的文字。 视频 代码 运行此程序,需要OpenAI-key和设置Postgres数据库。 (吐槽一下,作者把这些信息都直接写…

【数据结构初阶】直接插入排序

最近浅学了直接插入排序,写个博客做笔记!笔记功能除外若能对读者老爷有所帮助最好不过了! 直接插入排序是插入排序的一种,那么介绍直接插入排序之前先介绍一下常见的排序算法! 目录 1.常见的排序算法 2.直接插入排…

WPF鼠标拖拽的最佳实现

WPF鼠标拖拽的最佳实现 在很多项目中都会遇到鼠标拖拽控件移动的需求,常见的有从在列表中拖拽列表项移动,拖拽控件移动等。 本文将介绍2种拖拽的简单的实现 列表项的拖拽 本文将使用 gong-wpf-dragdrop 这个github上的库来实现列表的拖拽的效果&…

Python从0到POC编写--SQL注入

SQL注入POC编写。 环境: win10 ,phpStudy ,python3.7 ,sqli-labs 虚拟域名: www.sql.com 简单的POC: 说起来也简单, 就是请求–>响应, 然后再判断返回信息是否存在注入。 本…

【高阶数据结构(二)】初识图论

💓博主CSDN主页:杭电码农-NEO💓   ⏩专栏分类:高阶数据结构专栏⏪   🚚代码仓库:NEO的学习日记🚚   🌹关注我🫵带你学习更多Go语言知识   🔝🔝 高阶数据结构 1. 前言2. 图的基…

Spring底层入门(七)

1、异常处理 在DispatcherServlet中,doDispatch(HttpServletRequest request, HttpServletResponse response) 方法用于进行任务处理: 在捕获到异常后没有立刻进行处理,而是先用一个局部变量dispatchException进行记录,然后统一由…
最新文章