当前位置: 首页 > ai >正文

【多任务YOLO】A-YOLOM

You Only Look at Once for Real-Time and Generic Multi-Task

  • 论文代码:https://github.com/JiayuanWang-JW/YOLOv8-multi-task

  • 论文链接:https://arxiv.org/pdf/2310.01641

  • 问题:高精度、轻量级和实时响应是实现自动驾驶的三个基本要求。

  • 针对任务:目标检测、可驾驶区域分割和车道线分割任务

在这里插入图片描述

一、摘要

  文中开发了一个端到端多任务模型 A-YOLOM,具有统一且简化的分割结构。引入了一个可学习的参数,在分割任务中自适应地连接neck和backone之间的特征,使用相同的损失函数来处理所有分割任务。这消除了对定制化的需求,并增强了模型的泛化能力。还引入了一个仅由一系列卷积层组成的分割头,从而减少了参数数量和推理时间。

  在BDD100k数据集上取得了竞争性的结果,特别是在可视化结果方面。性能结果显示,目标检测的mAP50为81.1%,可驾驶区域分割的mIoU为91.0%,车道线分割的IoU为28.8%。此外,引入了真实场景来评估所提模型在实景中的表现,显著优于对比方法。

文章目录

  • You Only Look at Once for Real-Time and Generic Multi-Task
    • 一、摘要
    • 二、创新点
    • 三、原理
      • 1、编码器Encoder
      • 2、解码器Decoder
      • 3、损失函数Loss Function
      • 4、训练范式Training Paradigm
    • 四、实验
      • 1、实验细节 Experiment Details
      • 2、实验结果
      • 3、消融实验
      • 4、真实道路实验
    • 五、总结

二、创新点

  • 1、开发了一种多任务轻量级模型,能够将三个任务集成到一个模型中。这对需要实时处理的多任务特别有益,从而提高了模型在边缘设备上的部署能力。

  • 2、设计了一个新颖的自适应拼接模块,专门用于分割架构的neck。该模块可以自适应地拼接特征,无需人工设计,并且能够实现与精心设计相似或更好的性能,进一步增强模型的普适性。

  • 3、设计了一个轻量级、简单、通用的分割head。采用了统一的损失函数用于相同类型的任务head,意味着不需要为特定任务定制设计。它仅由一系列卷积层构建。

三、原理

在这里插入图片描述

  如图2所示,A-YOLOM 模型是一个具有简单编码器-解码器结构的单阶段网络。编码器包括骨干网络和neck,而解码器由head组成。
  总共有三个neck:一个用于目标检测的检测neck,以及两个用于车道区域分割车道线分割的分割neck。所提模型拥有自适应、简单且高效的结构,不仅拓展了其应用范围,还确保了实时推断。

1、编码器Encoder

  文中将一个共享的主干网络和三个neck网络整合到一个模型中,用于三个不同的任务。

  Backbone:骨干网包括一系列卷积层,用于从输入数据中提取特征。由于YOLOv8在检测任务中的出色性能,骨干网络遵循YOLOv8。具体而言,它们改进了 CSP-Darknet53 [27],CSP-Darknet53 作为YOLOv5 的骨干。此骨干与CSP-Darknet53 的关键区别在于用c2f 模块代替 c3 模块。c2f 模块将高级特征与上下文信息相结合,进一步提高了性能。还有一些细微差异,如使用3x33x33x3 卷积代替最初的 6x66x66x6 卷积,并且删除了第10 和第14 个卷积层。这些增强使得该骨干比YOLO 系列中的前身更加有效。

  Neck: neck负责将从骨干提取的特征融合在一起。在骨干网络后,使用了空间金字塔池融合(SPPF)模块,以增加感受野并减少与SPP相比的计算需求。这些特征随后被定向到各个neck。

  利用三个neck:一个用于目标检测任务,另外两个用于分割任务,分别是可驾驶区域和车道线。在图2中,由于有两个分割任务,在左侧的分割neck中的NNN值等于2。这意味着针对不同的分割任务有两个相同的分割neck。起源于不同neck底层的天蓝色和棕色线引导到各自的分割头部。

  对于检测neck,采用路径聚合网络(PAN)[28]结构,其中包括自顶向下和自底向上的两个特征金字塔网络(FPN)[29]。该结构将低级别细节与高级别语义特征融合在一起,丰富了整体特征表示。这对于目标检测至关重要,其中小物体依赖低级别特征,而更大实体则从高级别特征提供的更广泛上下文中获益。在检测任务中,通常会出现不同尺度的物体。物体尺度的多样性是选择PAN结构作为检测颈部的主要原因。

  对于分割neck,采用了FPN结构。此外,在neck和骨干之间引入了一个自适应融合模块。如算法1所示,输入包括两个特征图:一个来自上一层neck,另一个来自相同分辨率的骨干。这个模块的核心是一个可学习参数,旨在控制骨干特征的融合,从而使模型结构能够适应不同的分割任务。该模块作用于每个分辨率层级。这个补充增强了模型的普适性,使其能够轻松应用于不同的分割任务而无需定制化。
在这里插入图片描述

2、解码器Decoder

  解码器处理来自neck的特征图为每个任务进行预测。这包括预测对象类别、它们对应的边界框以及特定分割对象的mask。文中采用了两个不同的头部:检测头和分割头

  检测头采用了一种解耦方法,遵循了YOLOv8检测头,使用卷积层将高维特征转换为类别预测和边界框,没有objectness分支。这是一个无锚检测器。其结构如图2中的Detect模块所示。检测头的输出在训练、验证和预测模式之间有所变化。在验证和预测模式中,使用三种不同分辨率作为输入,输出一个张量包含类别预测和对应的边界框在训练模式中,检测头循环应用卷积层到每个输入,总共输出三个张量。每个张量包含特定于其分辨率的类别预测和边界框。随后使用这些结果计算损失函数。

分割头在不同的分割任务之间是相同的。其结构如图2中的Segment模块所示。具体地,它包括一系列卷积层来提取语境信息和一个反卷积层将分辨率恢复到原始图像大小。最终,获得一个与原始图像大小匹配的像素级二进制掩码0表示背景,1表示对象。算法2展示了分割头的处理过程。此外,分割头的简化架构,仅包含7,940个参数,显著增强了模型的可部署性。
在这里插入图片描述

3、损失函数Loss Function

  模型采用端到端的训练方法,使用多任务损失函数。具体而言,损失函数包括三个组成部分:一个检测和两个分割。公式如下所示:
L=Ldet+Lsegda+Lsegll(1)L=L_{det}+L_{segda}+Lseg_{ll} \tag{1}L=Ldet+Lsegda+Lsegll(1)
其中LdetL_{det}Ldet表示目标检测任务的损失函数,LsegdaL_{segda}Lsegda表示可驾驶区域分割任务的损失函数,LsegllLseg_{ll}Lsegll表示车道线分割任务的损失函数。

  对于检测任务,损失函数分为两个主要分支:分类分支和边界框分支。分类分支包括二元交叉熵损失,表示为LBCEL_{BCE}LBCE。边界框分支包括分布焦点损失(DFL)[30]表示为LDFLL_{DFL}LDFL和完整IoU(CIoU)损失[31]表示为LCIoUL_{CIoU}LCIoU。因此,检测损失LdecL_{dec}Ldec可以表示为:
Ldet=λBCELBCE+λDFLLDFL+λCIoULCIoU(2)L_{det}=\lambda_{BCE}L_{BCE}+\lambda_{DFL}L_{DFL}+\lambda_{CIoU}L_{CIoU} \tag{2}Ldet=λBCELBCE+λDFLLDFL+λCIoULCIoU(2)
其中λBCE\lambda_{BCE}λBCEλDFL\lambda_{DFL}λDFLλCIoU\lambda_{CIoU}λCIoU是相应的系数。

LBCE=−[ynlogxn+(1−yn)log(1−xn)](3)L_{BCE}=−[y_{n}logx_{n}+(1−y_{n})log(1−x_{n})] \tag{3}LBCE=[ynlogxn+(1yn)log(1xn)](3)
其中xnx_{n}xn是每个对象的预测分类。yny_{n}yn是每个对象的真实值。LBCEL_{BCE}LBCE度量了预测值与真实值之间的分类错误。
LDFL(Si,Si+1)=−((yi+1−y)log(Si)+(y−yi)log(Si+1))Si=yi+1−yyi+1−yi,Si+1=yi−yyi−yi+1(4)L_{DFL}(S_{i},S_{i+1})=−((y_{i+1}−y)log(S_{i})+(y−y_{i})log(S_{i+1})) \ Si= \frac{y_{i+1}−y}{y_{i+1}−y_{i}},S_{i+1}= \frac{y_{i}−y}{y_{i}−y_{i+1}} \tag{4}LDFL(Si,Si+1)=((yi+1y)log(Si)+(yyi)log(Si+1)) Si=yi+1yiyi+1y,Si+1=yiyi+1yiy(4)

其中yyy是边界框坐标的真值,也是一个十进制数。yi+1y_{i+1}yi+1是真值yyy的上取整。yiy_{i}yi是真值yyy的下取整。LDFLL_{DFL}LDFL衡量了预测特征位置与真值之间的位移,以使预测的边界框接近实际的边界框。

LCIoU=1−CIoUCIoU=IoU−ρ2(b,bgt)c2−αvv=4π2(arctanwgthgt−arctanwh)2α=v(1−IoU)+v(5)L_{CIoU}=1−CIoU \ CIoU=IoU−\frac{\rho^{2}(b,b^{gt})}{c^{2}}−\alpha v \ v = \frac{4}{\pi^2}(arctan\frac{w^{gt}}{h^{gt}} - arctan\frac{w}{h})^2 \ \alpha = \frac{v}{(1−IoU)+v} \tag{5}LCIoU=1CIoU CIoU=IoUc2ρ2(b,bgt)αv v=π24(arctanhgtwgtarctanhw)2 α=(1IoU)+vv(5)

其中bbb是预测框的中心点,bgtb^{gt}bgt是真实框的中心点。ρ\rhoρ是预测点和真实点之间的欧氏距离。ccc是两个框的最小外接矩形的对角线长度。vvvα\alphaα都是用于控制比例的系数。hhh是预测框的宽度和高度,wgtw^{gt}wgthgth^{gt}hgt分别是真实框的宽度和高度。LCIoUL_{CIoU}LCIoU集成了重叠、距离和宽高比一致性方面,用于衡量预测框与真实框之间的差异。因此,它使模型能够更精确地定位目标的形状、大小和方向

  对于分割任务,使用相同的损失函数。这意味着LsegdaL_{segda}LsegdaLsegllL_{segll}Lsegll具有相同的公式。将它们统称为LsegL_{seg}Lseg。其公式如下所示:
Lseg=λFLLFL+λTLLTL(6)L_{seg}=\lambda_{FL}L_{FL}+\lambda_{TL}L_{T_L} \tag{6}Lseg=λFLLFL+λTLLTL(6)

其中,LFLL_{FL}LFLLTLL_{TL}LTL分别为焦点损失(Focal Loss)[24]和Tversky损失(TverskyLoss)[32]。这两者均为分割任务中广泛使用的损失函数。λFL\lambda_{FL}λFLλTL\lambda_{TL}λTL则为相应的系数。

LFL=−λt(1−pt)γlog(pt)(7)L_{FL}=−\lambda_{t}(1−p_{t})^{\gamma} log(p_{t}) \tag{7}LFL=λt(1pt)γlog(pt)(7)
其中ptp_{t}pt是模型预测为正类的概率。yyy是每个像素的真实标签。αt\alpha_{t}αt是用来平衡正负样本重要性的权重因子。γ\gammaγ是一个聚焦参数,调节每个样本对损失的贡献。焦点损失提供了一个处理样本不平衡的稳健解决方案,确保模型不会过分偏向主导类别和容易学习的类别。相反,它更加强调具有挑战性和欠代表性的区域。

LTL=1−TPTP+αFN+βFP(8)L_{TL} = 1− \frac{TP}{TP+ \alpha FN+\beta FP}\tag{8}LTL=1TP+αFN+βFPTP(8)

Tversky损失是Dice损失的扩展,引入了两个额外参数(α\alphaαβ\betaβ)来分配不同的权重给假阳性和假阴性,从而增强其处理不平衡任务的能力。

4、训练范式Training Paradigm

  训练范式与全景自动驾驶任务中普遍采用的多任务学习方法不同。文中采用端到端训练模式,每个批次仅进行一次反向传播。这意味着整个网络是集体优化的,没有冻结特定层或交替优化,从而缩短训练时间。Algorithm3展示了逐步训练过程。
在这里插入图片描述

  在每个迭代中,通过一次前向传播获得所需的预测结果列表y^\hat{y}y^,其中包括检测边界框、分类信息和分割mask等信息。随后,计算每个任务的损失并汇总为单一损失LLL。然后,仅进行一次反向传播来跨所有任务优化模型。完成一个epoch的训练后,对模型进行评估。如果性能与最近50个epochs相比没有改善,训练将过早终止。否则,训练将在300个epochs后停止。

四、实验

 本节评估了所提模型在BDD100K数据集上的性能和推理时间,并将其与在多任务自动驾驶全景感知中使用的传统方法进行了比较。同时,进行了大量消融实验,并对实验结果进行了分析。

1、实验细节 Experiment Details

 与YOLOP类似,检测任务仅专注于“车辆”检测,包括汽车、公共汽车、卡车和火车等类别。

 对于检测任务,使用召回率和mAP50作为目标检测任务的评估指标。

 对于分割任务,使用mIoU来评估可行驶区域分割任务。。对于车道线分割任务,采用精度和IoU作为评估指标。

  传统的准确率会因偏爱样本数较多的类别而使结果倾斜。相反,平衡准确率通过考虑每个类别的准确率,提供了一个更公平的指标。其计算公式如下:

LineAccuracy=Sensitivity+Specificity2(9)Line Accuracy=\frac{Sensitivity+Specificity}{2} \tag{9}LineAccuracy=2Sensitivity+Specificity(9)

其中敏感性Sensitivity=TPTP+FNSensitivity= \frac{TP}{TP+FN}Sensitivity=TP+FNTP,特异性Specificity=TNTN+FPSpecificity= \frac{TN}{TN+FP}Specificity=TN+FPTN

 数据增强技术:马赛克增强技术(mosaic augmentation),修改图像的色调、饱和度和亮度参数(the hue,saturation,and value parameters of the images)、随机平移、缩放和水平翻转(random translation,scaling,and horizontal flipping)。

 使用学习率(lr)为0.01、动量为0.937和权重衰减为0.0005的SGD优化器来训练模型。使用3个epoch的热身训练。在这个热身阶段,SGD优化器的动量设置为0.8,偏置lr设置为0.1。

 训练过程中,采用线性学习率退火策略。这个策略有助于确保模型在训练的早期阶段快速学习,而在后期更加稳定地收敛。

  此外,将原始图像尺寸从1280×7201280×7201280×720调整为640×640640×640640×640。对于损失函数的系数,设置λFL=24.0\lambda_{FL}=24.0λFL=24.0λTL=8.0\lambda_{TL}=8.0λTL=8.0λDFL=1.5\lambda_{DFL}=1.5λDFL=1.5λCIoU=7.5\lambda_{CIoU}=7.5λCIoU=7.5λBCE=0.5\lambda_{BCE}=0.5λBCE=0.5。在LTLL_{TL}LTL中采用α=0.7\alpha=0.7α=0.7β=0.3\beta=0.3β=0.3,在LFLL_{FL}LFL中采用αt=0.25\alpha_{t}=0.25αt=0.25γ=2\gamma=2γ=2。最后,在三个RTX4090上以批量大小120,训练300个时期。对于评估,将置信阈值设为0.001,非最大抑制(NMS)阈值设为0.6。对于预测,置信阈值设置为0.25,NMS阈值设置为0.45。实验遵循了YOLOP的置信阈值和NMS设置。因此,可视化结果可能会略有不同于定量结果。

2、实验结果

  • Inference Time
      FPS计算方法遵循HybridNet的方法。
    在这里插入图片描述

  A-YOLOM(n)和A-YOLOM(s)之间的主要区别在于主干网络的复杂性。A-YOLOM(n)是我们设计的轻量级主干网络,复杂性减少,非常适合部署在边缘设备上。

  遵循了YOLOP的设置,将汽车、公交车、卡车和火车合并为“车辆”分类。比较结果如表II所示。
在这里插入图片描述

  对于可驾驶区域分割任务,表III提供了定量结果。
在这里插入图片描述

  对于车道线分割任务,表IV提供了定量结果。
在这里插入图片描述

  图3显示了一个晴天的结果。
在这里插入图片描述

  图4展示了夜间场景的结果。
在这里插入图片描述

  图5展示了雨天的结果。
在这里插入图片描述

  图6展示了下雪天的结果。
在这里插入图片描述

  在各种天气条件下,我们的模型始终提供更准确和更平滑的分割结果。然而,与YOLOP相比,在恶劣天气条件下,我们的模型检测远处和小目标的能力略有下降。

3、消融实验

  1) Adaptive concatenation module:
在这里插入图片描述

  2) Multi-task model and segmentation structure:
在这里插入图片描述

4、真实道路实验

  使用行车记录仪拍摄了几个视频,然后逐帧将它们转换为图像,以应用所提模型和YOLOP进行预测。每个转换后的图像数据集包含 1428 张分辨率为 1280x7201280x7201280x720 的图像。这些图像涵盖了三种场景:高速公路、夜间和白天。
在这里插入图片描述

五、总结

  本研究主要介绍了一种端到端轻量级多任务模型设计,用于实时自动驾驶应用。多任务模型的优势在于每个任务都能隐式增强其他任务,从而进一步提高所有任务的性能,并增强模型在边缘设备上的部署能力。为了提高模型的普适性,集成了自适应连接模块,并为每种类型的任务提出了统一的损失函数。这样使得所提模型更加灵活。与使用BDD100k数据集的其他最先进的实时多任务方法相比,所提模型不仅展示了优越的可视化结果,而且具有更高的FPS。此外,实际道路数据集的评估证明了所提模型在新环境下的稳健性,使其领先于竞争对手。未来,作者希望在模型中封装更多的自动驾驶任务,并为边缘设备部署进行优化。

http://www.xdnf.cn/news/15986.html

相关文章:

  • 面试题:sql题一
  • Spring Boot环境搭建与核心原理深度解析
  • 嵌入式开发学习———Linux环境下数据结构学习(一)
  • GitHub 上的开源项目 ticktick(滴答清单)
  • Kotlin伴生对象
  • Kotlin 作用域函数 let 的实现原理
  • 什么是检索增强生成(RAG)?
  • 深入浅出控制反转与依赖注入:从理论到实践
  • 社交电商推客系统全栈开发指南:SpringCloud+分润算法+Flutter跨端
  • 深度学习篇---车道线循迹
  • CMake实践:CMake3.30版本之前和之后链接boost的方式差异
  • Pulsar存储计算分离架构设计之Broker无状态
  • linux: tar解压之后属主和属组不是当前用户问题
  • [c++11]constexpr
  • MCP消息协议和传输协议(Java角度)
  • 【数学建模|Matlab】Matlab「基础知识」和「基础操作」
  • es搜索实现既能模糊查询又能分词查询
  • Linux部署.net Core 环境
  • 8.4 Java 原生 TCP Socket 实现 HTTP 请求解析和请求分发
  • Dify接入MCP案例1:基于Chatflow旅行、吃饭、新闻、学习的AI智能体
  • 公司内部网址怎么在外网打开?如何让外网访问内网的网站呢?
  • 2025 年非关系型数据库全面指南:类型、优势
  • cddlib(用于凸多面体计算和线性不等式系统求解)的开源库
  • JAVA API (三):从基础爬虫构建到带条件数据提取 —— 详解 URL、正则与爬取策略
  • Java 大视界 -- Java 大数据在智能交通自动驾驶车辆与周边环境信息融合与决策中的应用(357)
  • JMeter 实现 Protobuf 加密解密
  • UE5 UI 水平框
  • ansible 批量 scp 和 load 镜像
  • MybatisPlus-16.扩展功能-枚举处理器
  • Windows PE文件内未用空间学习