基于 YOLOR 的统一多任务学习范式

文章介绍了多任务学习在视觉领域的应用,特别是YOLOR和YOLOv7的变体ELAN,聚焦于结合语义分割、目标检测和图像字幕生成。通过优化网络架构和训练策略,如硬参数共享、多尺度特征和语义导向的数据增强,提升模型性能和效率。
Yolo-v8.3

Yolo-v8.3

Yolo

YOLO(You Only Look Once)是一种流行的物体检测和图像分割模型,由华盛顿大学的Joseph Redmon 和Ali Farhadi 开发。 YOLO 于2015 年推出,因其高速和高精度而广受欢迎

导读

多任务学习旨在使用一个单一模型来学习多个任务,并同时提高所有这些任务的性能,这个概念类似于人类能够同时学习多个任务并将所学的知识应用到其他任务上。在如今高速发展的 AI 领域,多模态、多任务学习已然不再是一个新的概念,反而是未来一种必然的趋势。例如,笔者上次为大家介绍过的 UniMatch便是一个典型的多任务学习:

UniMatch

同样地,在多模态领域,利用Transformer架构和交叉注意力机制来对齐语音、文本、图像等不同模态的信息更是家常便饭。然而,在当前,使用一个模型来执行多个任务仍然是一种核心概念,因为这要求模型能够在不同任务之间建立联系,就像人类的认知系统一样。

今天为大家介绍的这篇文章关注的是将多个视觉任务结合在一起,这些任务包括语义分割目标检测实例分割,甚至是图像字幕生成。虽然这些任务彼此之间均有者不同的目的,但它们在语义上应该具有相同或类似的定义,比如对于物体的定义应该在不同任务之间保持一致,比如“汽车”。如果能够正确定义任务之间的关联性,那么这样开发出的系统将会更加强大和易于使用。

特别地,本文不走变形金刚路线,而是选择了YOLOR这个多任务学习网络,以及YOLOv7中应用的 ELAN 的网络架构,其旨在优化梯度传递的效率。YOLOR 则利用了来自数据观察和学习到的隐藏信息的知识来提高多任务学习中的共享表示,同时尽量减少训练参数的数量。这个模型的目标是让不同任务的相同语义映射到相同的隐藏信息上,以便模型能够捕捉到多任务学习的统一表示。

与之前的YOLORYOLOv7只在两个任务之间进行训练不同,该工作将其有效地扩展到更多的任务上,包括图像字幕描述。

YOLOR

为了在多任务学习中最大化共享语义信息,作者精心设计了一些训练策略。此外,他们还观察到不同的数据增强方法对不同任务的语义影响不同,因此他们提出了一种从语义角度出发的训练过程设计,以减少不同任务之间的冲突并增强训练的稳健性。最后,本文还应用了一种不对称的数据增强方法,以减小语义不准确性带来的负面影响,作者发现这对于视觉语言和视觉任务的多任务学习非常有帮助。

方法

网络架构

本文以ELAN设计为网络的主轴,将YOLOR的概念作为系统的基础架构来构建网络的主干。然后,采用了硬参数共享机制来进行多任务学习,为各个任务设计了轻量级的头部,如目标检测、实例分割和语义分割,并将它们合并到图像编码器中以执行图像字幕生成任务。

这些头部的输出可以用来捕获具有足够语义信息的特征,这些特征可以满足文本编码器的需求。在编码器端处理不同视觉任务可以让系统获得具有不同语义的输出。在本文提出的系统中,不同的前景对象依靠目标检测和实例分割来获取准确的信息,而正确的背景信息则由语义分割提供。至于图像字幕生成任务的文本解码器,作者则是直接使用Transformer解码器。具体地,可以将图像编码器和文本解码器一起训练。这使得模型变得轻巧高效,同时降低了训练资源的消耗。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

最后,整个工作将YOLORELAN结合起来,这遵循了YOLOv7的设计。如上所述,YOLOR 是一种专门设计用于执行多任务的网络架构。从直觉上看,它模仿了人类的学习方式,既有明确的学习(来自数据观察和监督训练),也有潜意识的学习(来自编码先前学到的共同特征并将它们连接到不同任务中)。ELAN 中使用了梯度路径分析来设计网络架构。它最重要的设计理念是优化梯度路径。这种设计可以使网络更轻量化,同时也可以使网络传递梯度信息更高效,从而加速和提高模型的表示能力。

目标检测和实例分割头

对于目标检测任务,这里直接采用了 YOLOv7 的目标检测头部。对于实例分割任务,则选择了YOLACT模型,该工作是在 YOLO 架构上添加了一个实例分割头部。其中,YOLOv7 中有一个分支将 YOLACT 与实例分割任务合并在一起,因此选择了这个头部来执行实例分割任务。这个头部在实时实例分割任务中表现出色,并且理论上可以简单地与任意基于 YOLO 的架构进行融合。下图展示了目标检测头部和实例分割头部的架构:

语义分割头

对于语义分割任务,作者探索了使用单尺度和多尺度特征组合对语义分割的影响。具体地,他们设计了两种方法来获取语义掩码。一种是直接将特征图从最接近原始分辨率的8×8分辨率上采样到1×1的分辨率(单尺度),另一种是将颈部三种不同分辨率(8×8、16×16和32×32)的特征图组合起来,然后上采样到1×1(多尺度)。

其中,两种方法得到的结果如下图所示:

可以看到,多尺度模型在 stuff 区域的预测结果有噪音。作者认为这是目标检测和语义分割任务之间语义差距的结果。目标检测试图将所有非实例的区域都分类为背景,因此无论是天空、墙壁、天花板还是地面,都容易被分类为相同的类别。而对于语义分割任务,空间关系的敏感性相对重要,因此尝试选择在最高分辨率(即8×8)上以单尺度方式设计语义分割头部。

然而,将特征图上采样回原始大小是低效的,因此又在相对浅的层次上(从8×8到4×4)进行一次上采样,以获得语义分割的预测。通过这种方法,与多尺度相比,单尺度在上采样回原始大小(1×1)的情况下,减少了94.3%的参数数量,减少了6.3%的训练时间。而相对于直接上采样到1×1,上采样到4×4减少了84.4%的训练时间,同时能够保持更少的参数并获得最高的准确性。

图像字幕生成头

对于图像字幕生成任务,本文是受到了 Transformer 在 NLP 领域的成功启发,因此作者在主干网络中实现了自注意力机制,并将其用作图像编码器。然后,他们将 Transformer 文本解码器作为图像字幕生成的头部:

表2显示,他们使用了 CATR 模型,该模型使用全尺度的 Transformer 作为文本解码器,并将其结果与仅使用 Transformer 解码器的结果进行了比较。总体参数数量减少了7.5%,训练时间减少了25%,而 BLEU-4 分数略有提高。文中假设全尺度的 Transformer 性能较差,是因为其与主干网络存在冲突,因为主干网络已经执行了自注意力,与 Transformer 编码器的功能重叠。根据这一实验的结果,他们使用了一个简化的 Transformer 文本解码器,并再次将 ELAN+YOLOR 用作主干网络。

训练策略

数据增强

数据增强是用来提高模型鲁棒性的方法。然而,并不是所有的数据增强方法都一定有效,有些方法会导致数据空间标签空间之间的语义不一致。为了解决这个问题,本文设计了一种简单而直观的训练流程,以学习不同任务。

首先,作者根据每个任务的性质整理了几个数据增强流程。例如,对于目标检测、实例分割和语义分割任务,他们选择使用了MixUpCutoutMosaicCopy pasteRandom perspective等方法。对于图像字幕生成任务,他们只使用了resizepadding

此外,他们同时在同一张图像上应用不同的数据增强流程,以确保在学习过程中所有任务都能保持目标语义的正确性。这种设计策略兼顾了模型在视觉任务中的稳健性,同时保持了不同任务之间的数据和语义的一致性。

优化器策略

在图像字幕生成任务中,通常会预训练一个图像编码器,然后在训练新的文本解码器的同时微调编码器。因此,通常会给图像编码器一个较小的学习率,以避免干扰图像编码器已经学到的知识。然而,在这项研究中,作者认为,由于同时训练多个任务,图像编码器需要能够适应不同的数据类型和输出,因此需要一个较大的学习率。

为此,他们进行了一系列实验来验证这一观点,并发现当图像编码器和文本解码器的学习率相等时,效果最好。这样可以确保图像编码器能够适应不同的输入和输出,同时继续学习,获得比其他情况更好的效果。总的来说,这些训练策略有助于提高模型的性能,同时保持了多任务学习的一致性和鲁棒性。这些策略的设计对于实现多任务学习的成功非常重要。

实验

<,,>

总结

本文从人类学习的角度分析了图像字幕生成任务所需的语义信息。研究人员分析了不同视觉任务之间的关联性,将多个任务结合在一起进行训练,最大化了所有任务之间的共享语义。此外,他们深入讨论了数据增强技术和优化器模式,以从语义的角度设计训练流程,并减少语义错误的影响。实验结果显示,相比其他多任务模型,本文所提模型更轻量化,并在所有任务上取得了出色的成绩。此外,在多任务联合学习架构下,通过共享语义和学习率,能够使图像字幕生成任务能够在不使用任何预训练模型的情况下达到不错的性能,同时具备良好的可扩展性。

探讨

从这里其实可以引申出一个问题,即不同网络架构的影响其实是不大的。通过本文工作大家也不难发现,对于"统一"这件事,其实并不是说只有 Transformer 能做,"传统"的 CNN 其实也能干好这件事,只要通过合理的设计,其实都能 work 的,而且有时候试错成本还低很多。

当然,不同网络架构之间的差异确实存在,但任务的有效性取决于多个因素的综合影响。选择合适的网络架构、数据、训练策略和任务关联性是实现多任务学习成功的关键因素。不同任务的性质和需求也会影响选择哪种网络架构以及如何进行训练。因此,在解决具体任务时,还是需要综合考虑这些因素,以获得最佳性能。

说到这里,笔者还是蛮期待 OpenAIGPT4V 早日能够放出它的技术报告,而非微软那不痛不痒的“测评报告”~~~大家仔细观察评测可以发现,这次的 GPT4V 理论上应该不是一个简单的“变形金刚”对齐多模态信息去做图像理解(没啥新意),也不太像用到 MOE(精度不是很诚恳),但按照 OpenAI 以往的工作而言,这大概率是一个 end-to-end 的多模态、多任务学习范式,但内心总感觉可能是一个类似 CLIP 这种非常简单但有效,低调而不失优雅的工作,关键是如何让其 work,还 fit 得很 nice?

您可能感兴趣的与本文相关的镜像

Yolo-v8.3

Yolo-v8.3

Yolo

YOLO(You Only Look Once)是一种流行的物体检测和图像分割模型,由华盛顿大学的Joseph Redmon 和Ali Farhadi 开发。 YOLO 于2015 年推出,因其高速和高精度而广受欢迎

参考yolov1 v2 v3 v4 v5 v6 v7 v8的相关介绍,给我写一个类似结构的yolov9的介绍,返回给我latex代码: \section{YOLOv7} YOLOv7是Chien-Yao Wang等人在2022年提出的高效单阶段目标检测器,在保持实时性的同时显著提升了检测精度。其核心创新包括\textbf{扩展高效层聚合网络}、\textbf{模型重参数化策略}和\textbf{动态标签分配技术},在速度和精度之间实现了更好的平衡。该模型在V100 GPU上达到161 FPS的推理速度,同时COCO mAP达到51.4\%,成为实时目标检测的新标杆。 \subsection{架构设计} 1. \textbf{骨干网络:扩展高效层聚合网络(E-ELAN)}: \begin{itemize} \item 通过控制梯度路径的完整性,增强网络学习能力 \item 采用分组卷积和通道重排技术提升特征复用效率 \item 结构公式:$Y = \text{concat}[\text{GroupConv}_1(X), \text{GroupConv}_2(X), \dots, \text{GroupConv}_k(X)]$ \end{itemize} 2. \textbf{颈部结构:基于级联的模型缩放}: \begin{itemize} \item 深度缩放:调整CSP模块的层数 \item 宽度缩放:调整通道数 \item 特征金字塔采用\textbf{PAFPN}结构,并引入\textbf{重参数化卷积} \end{itemize} 3. \textbf{重参数化设计}: \begin{itemize} \item 训练时:使用多分支结构(如3×3卷积、1×1卷积和恒等连接) \item 推理时:合并为单个3×3卷积核,提升速度 \[ W_{\text{fused}} = W_{3\times3} + \text{pad}(W_{1\times1}) + \text{to\_conv}(\text{identity}) \] \end{itemize} \subsection{训练优化技术} 1. \textbf{动态标签分配策略}: \begin{itemize} \item \textbf{Coarse-to-Fine引导标签分配}:同时考虑粗匹配和细匹配 \item \textbf{软标签加权}:根据预测质量动态调整损失权重 \[ w_i = \text{IoU}(b_i, \hat{b}) \times \text{置信度} \] \end{itemize} 2. \textbf{数据增强}: \begin{itemize} \item \textbf{Mosaic}:四张图像拼接增强 \item \textbf{MixUp}:两幅图像线性混合 \item \textbf{Random affine}:随机旋转、平移和缩放 \end{itemize} 3. \textbf{损失函数设计}: \begin{itemize} \item \textbf{边界框损失}:SIoU(考虑角度、距离和形状) \[ L_{\text{box}} = 1 - \text{IoU} + \frac{\Delta_{\text{angle}} + \Delta_{\text{dist}} + \Delta_{\text{shape}}}{3} \] \item \textbf{置信度损失}:二元交叉熵 \item \textbf{类别损失}:标签平滑的交叉熵 \end{itemize} \subsection{检测机制创新} 1. \textbf{复合缩放策略}: \begin{itemize} \item 同时缩放骨干网络、颈部网络和检测头 \item 缩放因子:$\phi = \{\text{width}, \text{depth}, \text{resolution}\}$ \item 不同规模模型:YOLOv7-tiny, YOLOv7, YOLOv7-W6 \end{itemize} 2. \textbf{辅助训练头}: \begin{itemize} \item 在训练过程中引入辅助检测头,增强梯度流 \item 推理时仅保留主检测头,不影响速度 \end{itemize} 3. \textbf{重参数化卷积}: \begin{lstlisting}[language=Python] # 重参数化卷积训练与推理 class RepConv(nn.Module): def __init__(self, in_channels, out_channels): super().__init__() self.conv3x3 = ConvBN(in_channels, out_channels, 3) self.conv1x1 = ConvBN(in_channels, out_channels, 1) self.identity = nn.Identity() if in_channels==out_channels else None def forward(self, x): if self.training: # 训练模式 out = self.conv3x3(x) out += self.conv1x1(x) if self.identity: out += self.identity(x) return out else: # 推理模式 # 融合卷积核 fused_kernel = self._fuse_conv() return F.conv2d(x, fused_kernel, ...) def _fuse_conv(self): # 将1x1卷积核padding成3x3 conv1x1_padded = F.pad(self.conv1x1.weight, [1,1,1,1]) # 合并3x3和1x1卷积核 fused = self.conv3x3.weight + conv1x1_padded # 如果有恒等连接,则加上单位矩阵 if self.identity: identity_kernel = torch.eye(fused.shape[0], dtype=fused.dtype) identity_kernel = identity_kernel.view(fused.shape[0], fused.shape[0], 1, 1) identity_kernel = F.pad(identity_kernel, [1,1,1,1]) * 0.5 fused += identity_kernel return fused \end{lstlisting} \subsection{性能对比} \begin{table}[htbp] \centering \caption{YOLOv7与其他模型性能对比(COCO test-dev)} \begin{tabular}{cccccc} \hline 模型 & mAP & AP50 & AP75 & 速度(FPS) & 输入尺寸 \\ \hline YOLOv4 & 43.5 & 65.7 & 47.3 & 62 & 640×640 \\ YOLOR & 48.0 & 67.2 & 52.5 & 41 & 640×640 \\ YOLOv7 & \textbf{51.4} & \textbf{69.7} & \textbf{55.9} & \textbf{114} & 640×640 \\ \hline \end{tabular} \end{table} 1. \textbf{核心优势}: \begin{itemize} \item 在相同速度下,精度比YOLOv4提升8.9% \item 在V100上达到114 FPS的实时检测速度 \item 支持多种规模模型,满足不同硬件需求 \end{itemize} 2. \textbf{创新点总结}: \begin{itemize} \item \textbf{E-ELAN}:可扩展的高效网络结构 \item \textbf{模型重参数化}:训练时多分支,推理时单分支 \item \textbf{动态标签分配}:提升正样本质量 \end{itemize} 3. \textbf{应用场景}: \begin{itemize} \item 实时视频分析系统 \item 移动端和边缘设备部署 \item 大规模工业检测 \end{itemize} \section{YOLOv8} YOLOv8是Ultralytics团队于2023年推出的新一代实时目标检测框架,作为YOLO系列的最新里程碑,它在架构设计、训练策略和部署效率等方面实现了全面突破。该模型采用\textbf{可扩展的模块化架构}、\textbf{锚框无关的检测机制}和\textbf{多任务统一优化},在保持实时性的同时实现了SOTA精度。YOLOv8支持目标检测、实例分割和姿态估计等多项任务,在COCO数据集上达到53.9\% mAP,同时实现T4 GPU上1230 FPS的推理速度。 \subsection{架构设计} 1. \textbf{可扩展骨干网络}: \begin{itemize} \item 基于\textbf{C2f模块}(融合CSP与跨阶段残差连接): \[ \text{C2f}(X) = \text{Concat}[\text{Conv}(X), \text{Bottleneck}_1(X), \dots, \text{Bottleneck}_n(X)] \] \item 引入\textbf{空间金字塔快速池化(SPPF)}: \[ \text{SPPF}(x) = \text{Concat}[\text{MaxPool}(x,5), \text{MaxPool}(x,9), \text{MaxPool}(x,13), x] \] \item 支持五种规模:n/s/m/l/x(参数量2.3M~68.2M) \end{itemize} 2. \textbf{任务自适应颈部}: \begin{itemize} \item \textbf{动态特征金字塔网络(DFPN)}:根据任务类型自动调整特征融合权重 \[ w_i = \sigma(\text{MLP}(\text{GAP}(f_i))) \] \item \textbf{多尺度上下文聚合}:通过空洞卷积扩大感受野 \item \textbf{轻量化注意力机制}:通道注意力与空间注意力并行 \end{itemize} 3. \textbf{解耦检测头}: \begin{itemize} \item 分离式预测分支:分类、定位、置信度独立优化 \item \textbf{动态标签分配(DTA)}:根据训练状态调整正负样本比例 \[ \text{正样本比例} = \alpha \cdot (1 - e^{-\beta \cdot \text{epoch}}) \] \end{itemize} \subsection{训练优化技术} 1. \textbf{自适应训练策略}: \begin{table}[htbp] \centering \caption{YOLOv8训练策略配置} \begin{tabular}{ccc} \hline 训练阶段 & 学习率策略 & 数据增强 \\ \hline 预热期(0-100 epoch) & 线性增长 & Mosaic+MixUp \\ 稳定期(100-300 epoch) & Cosine退火 & RandomAffine \\ 微调期(300-500 epoch) & 指数衰减 & 仅基础增强 \\ \hline \end{tabular} \end{table} 2. \textbf{损失函数创新}: \begin{itemize} \item \textbf{DFL损失}:分布焦点损失替代传统回归 \[ \mathcal{L}_{\text{DFL}} = -\sum_{i=1}^{n} (y_i \log(s_i) + (1-y_i)\log(1-s_i)) \] \item \textbf{VFL分类损失}:变焦焦点损失解决类别不平衡 \[ \mathcal{L}_{\text{VFL}} = \begin{cases} -q(q\log(p) + (1-q)\log(1-p)) & \text{正样本} \\ -\alpha p^\gamma \log(1-p) & \text{负样本} \end{cases} \] \end{itemize} 3. \textbf{知识蒸馏策略}: \begin{lstlisting}[language=Python] # 多教师蒸馏实现 def distillation_loss(student, teachers, inputs): s_out = student(inputs) losses = [] for teacher in teachers: with torch.no_grad(): t_out = teacher(inputs) # 特征层KL散度 loss_feat = F.kl_div(s_out['feat'], t_out['feat']) # 输出层KL散度 loss_out = F.kl_div(s_out['cls'], t_out['cls']) losses.append(0.7*loss_feat + 0.3*loss_out) return sum(losses)/len(losses) \end{lstlisting} \subsection{检测机制创新} 1. \textbf{锚框无关设计}: \begin{itemize} \item 直接预测目标中心偏移量:$(\Delta x, \Delta y, w, h)$ \item 动态匹配机制:根据宽高比和距离自动选择正样本 \[ \text{match\_score} = \lambda \cdot \text{IoU} + (1-\lambda) \cdot \text{dist\_ratio} \] \end{itemize} 2. \textbf{多任务统一头}: \begin{itemize} \item 共享特征提取:90\%参数复用 \item 任务特定子网:检测/分割/姿态估计独立分支 \item 统一输出格式:$[x,y,w,h,\text{conf},\text{class},\text{mask\_coeff},\text{keypoints}]$ \end{itemize} 3. \textbf{高效后处理}: \begin{itemize} \item \textbf{动态NMS}:根据目标密度调整IoU阈值 \[ \text{IoU}_{\text{thresh}} = \max(0.4, 0.7 - 0.3 \times \text{density}) \] \item \textbf{矩阵非极大抑制(Matrix NMS)}:并行处理提升3倍速度 \end{itemize} \subsection{性能对比} \begin{table}[htbp] \centering \caption{YOLOv8性能对比(COCO val2017)} \begin{tabular}{cccccc} \hline 模型 & mAP & 参数量(M) & 速度(FPS) & 输入尺寸 & 任务支持 \\ \hline YOLOv7 & 51.4 & 36.9 & 114 & 640×640 & 检测 \\ YOLOv8s & \textbf{53.9} & 11.1 & \textbf{1230} & 640×640 & 检测+分割+姿态 \\ \hline \end{tabular} \end{table} 1. \textbf{核心创新}: \begin{itemize} \item \textbf{统一架构}:单模型支持检测/分割/姿态估计 \item \textbf{训练加速}:混合精度训练速度提升4.2倍 \item \textbf{部署优化}:支持ONNX/TensorRT/OpenVINO \end{itemize} 2. \textbf{关键代码实现}: \begin{lstlisting}[language=Python] # C2f模块实现 class C2f(nn.Module): def __init__(self, c1, c2, n=1): super().__init__() self.cv1 = Conv(c1, c2, 1) self.m = nn.ModuleList( Bottleneck(c2, c2) for _ in range(n)) def forward(self, x): y = list(self.cv1(x).chunk(2, 1)) y.extend(m(y[-1]) for m in self.m) return torch.cat(y, 1) \end{lstlisting} 3. \textbf{应用场景}: \begin{itemize} \item 实时自动驾驶感知系统 \item 工业质检多任务检测 \item 移动端实时AR应用 \end{itemize}
08-21
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CVHub

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值