【论文阅读】<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.mzph.cn/diannao/8736.shtml

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

相关文章

C++ 对象型参数和返回值

对象型参数和返回值 1.对象型类型作为函数的参数2.对象型参数作为函数的返回值 1.对象型类型作为函数的参数 使用对象类型作为函数的参数或者返回值,可能会产生一些不必要的中间对象 例子: // 使用对象类型作为函数的参数 void test1(Car car) {}完整代…

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

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

纯血鸿蒙app vs 安卓app:优势一目了然

前言 随着科技的飞速发展,移动操作系统已经渗透到我们生活的每个角落。在这个竞争激烈的领域,华为的鸿蒙操作系统凭借其独特优势,正在逐步改变我们的使用体验。 那么,对比安卓app,鸿蒙app的优势在哪? 跑…

解决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…

Github的使用教程(下载项目、寻找开源项目和上传项目)

根据『教程』一看就懂!Github基础教程_哔哩哔哩_bilibili 整理。 1.项目下载 1)直接登录到源码链接页或者通过如下图的搜索 通过编程语言对搜索结果进一步筛选。 如何去找开源项目:(Github 新手够用指南 | 全程演示&个人找项目技巧放…

【2024高校网络安全管理运维赛】巨细记录!

2024高校网络安全管理运维赛 文章目录 2024高校网络安全管理运维赛MISC签到考点:动态图片分帧提取 easyshell考点:流量分析 冰蝎3.0 Webphpsql考点:sql万能钥匙 fileit考点:xml注入 外带 Cryptosecretbit考点:代码阅读…

从0开始学习python(六)

目录 前言 1、循环结构 1.1 遍历循环结构for 1.2 无限循环结构while 总结 前言 上一篇文章我们讲到了python的顺序结构和分支结构。这一章继续往下讲。 1、循环结构 在python中,循环结构分为两类,一类是遍历循环结构for,一类是无限循环结…

聚观早报 | 苹果新款iPad Pro发布;国产特斯拉4月交付量

聚观早报每日整理最值得关注的行业重点事件,帮助大家及时了解最新行业动态,每日读报,就读聚观365资讯简报。 整理丨Cutie 5月9日消息 苹果新款iPad Pro发布 国产特斯拉4月交付量 iOS 18新功能爆料 真我GT Neo6续航细节 三星Galaxy Z F…

【全开源】Java v7淘宝客APP源码-自营商城任务墙源码美团外卖CPS广告联

一、淘宝客源码 特色功能: 商品搜索与推荐:基于用户的搜索关键词,推荐优质商品,帮助用户快速找到符合需求的商品。商品详情展示:展示商品图片、描述、价格等信息,帮助用户更好地了解商品的各项特性。下单…

印染工厂5G智能制造数字孪生可视化平台,推进行业数字化转型

印染工厂5G智能制造数字孪生可视化平台,推进行业数字化转型。印染工厂正迈入一个全新的时代,这个时代以5G智能制造数字孪生可视化平台为核心,推动整个行业的数字化转型。不仅是一场技术革命,更是一次产业变革,为印染工…

公网IP是固定的吗?

公网IP(Public IP address)是指可以直接在互联网上访问的IP地址,用于标识网络上的设备或主机。在互联网中,公网IP是有限且宝贵的资源。很多人都有一个疑问,那就是公网IP是固定的吗? 公网IP的获取 我们需要…

技术分享 | 京东商品API接口|京东零售数据可视化平台产品实践与思考

导读 本次分享题目为京东零售数据可视化平台产品实践与思考。 主要包括以下四个部分: 1.京东API接口介绍 2. 平台产品能力介绍 3. 业务赋能案例分享 01 京东API接口介绍 02 平台产品能力介绍 1. 产品矩阵 数据可视化产品是一种利用数据分析和可视化技术&…

Javaweb项目搭建以及介绍

综合案例-体育商品网站 注意:本项目要求使用mysql5.0版本,否则因技术过来出现版本不兼容的问题 1 导入sql语句 先建一个名为typpsc1数据库 导入数据库 2 项目结构 2.1 导入文件 2.2 配置tomcat 删除cms自带tomcat 安装本地的tomcat 选择tomcat版本 在…

中间件的使用

中间件是全局使用 工厂函数定义中间件 middleware.py # 工厂函数的中间件 def simple_middleware(get_response):def middleware(request):print("在视图函数处理之前执行、、、、、")response get_response(request)print("在视图函数处理之后执行。。。。…

钟表——蓝桥杯十三届2022国赛大学B组真题

问题分析 这个问题的关键有两点:1.怎么计算时针,分针,秒针之间的夹角,2.时针,分针,秒针都是匀速运动的,并非跳跃性的。问题1很好解决看下面的代码就能明白,我们先考虑问题2&#xf…

PyQt5批量生成Checkbox及批量检查Checkbox的勾选状态

批量生成Checkbox并添加到TableWidget中 for i in range(10):checkbox_i QCheckBox(fCheckbox_{i}) # 生成Checkbox并命名为Checkbox_iself.ui_1.tableWidget_1.setCellWidget(i,1,checkbox_i) 批量检查勾选状态 # 批量生成Checkbox并存入列表 list_Checkbox_1 [] for …

Tomcat端口占用解决方案

Windows操作系统 出现这种情况: Error was Port already in use :40001;nested exception is :java.net.BindException: Address already in use : JVM_Bind; 步骤1:按下winR键,输入cmd 步骤2:输入以下命令 netstat …

AXI4-Lite读写时序在AXI Block RAM 控制器IP核中的应用

AXI Block RAM (BRAM) 控制器是一个软件IP核,专为与Xilinx Vivado设计套件一起使用而设计。该IP核被设计为AXI端点从设备IP,用于与AXI互联和系统主设备集成,以便与本地块RAM进行通信。 AXI BRAM控制器IP核可以通过设置设计参数C_S_AXI_PROTOC…

anything-llm的嵌入式聊天小部件

anything-llm 详情移步到官方: https://github.com/Mintplex-Labs/anything-llm anything-llm可以docker启动和本地启动 例如:docker 启动, 自行去安装docker哈 cd 到docker文件夹下, 窗口运行: docker-compose up -d --build运…

Qt客户端开发的技术难点

Qt客户端开发中可能会遇到的下面的一些技术难点,了解这些难点并采取有效的措施可以帮助开发者更高效地进行Qt客户端开发。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作。 1.跨平台兼容性: Qt框架支持多种操作系…