使用 YOLO v5 进行目标检测

使用 YOLO v5 进行目标检测,第1张

在这篇文章中,我们将使用来自 AWS 上的 COCO 数据集(可定制)的图像设置和运行 YOLO。

一般来说,分类技术在自动驾驶 汽车 中没有多大帮助,因为它只预测图像中的一个对象,并且不给出该图像的位置。 而目标检测在自动驾驶 汽车 中非常重要,可以检测场景中的对象及其位置。 YOLO(你只看一次)是由 Joseph Redmon 等人创建的一种高速实时对象检测算法。 YOLO使用卷积神经网络 (CNN)解决概率的回归问题。 后来又进行了一些修改。 为了进行预测,YOLO 只需要通过 CNN 进行一次前向传播。 它输出具有相应边界框的对象。 它广泛用于自动驾驶 汽车 以检测场景中的物体。

第 1 步:设置帐户(这步可以跳过)

登录wandb.ai网站并复制以下内容:

来自 wandb.ai/authorize 的 API 密钥

wandb.ai/settings 中的团队名称。 默认团队名称将是用户 ID。

第 2 步:创建 AWS 实例(如果你在本机训练这步也可以跳过)

在创建实例时,选择“Deep Learning AMI (Ubuntu 18.04) Version 47.0 — ami-01f1096e6659d38fa”AMI,因为它具有深度学习任务所需的库。 如果我们在“选择AWS机器映像 (AMI)”步骤中搜索“deep learning”,我们可以找到这。为“实例类型”选择 P3 实例。 实例类型 p3.2xlarge(V100) 就足够了。为了节省成本,请在“配置实例”步骤下选择 Spot 实例。

第 3 步:安装依赖项

登录 AWS 实例后,使用以下命令创建 conda 环境并设置 Weights &Bias 环境变量:

第 4 步:训练、验证和测试

第 5 步:检查指标

验证集真实标签

验证集预测标签

训练的损失

测试

以上所有结果都会保存在文件夹yolov5runsdetectexp下

1 简介

针对无人机捕获场景的目标检测是最近比较流行的一项任务。由于无人机在不同高度飞行,目标尺度变化较大,这样给模型的优化也带来了很大的负担。此外,在无人机进行高速低空飞行时,也会带来密集目标的运动模糊问题。

图1 小目标与密集问题

为了解决上述2个问题,本文提出了 TPH-YOLOv5 TPH-YOLOv5 在YOLOv5的基础上增加了一个prediction heads 来检测不同尺度的目标。然后通过探索Self-Attention的预测潜力使用了Transformer Prediction Heads(TPH)代替原来的prediction heads。同时作者还集成了卷积块Attention模型(CBAM)来寻找密集场景下的注意力区域。

为了进一步改进 TPH-YOLOv5 ,作者还提供了大量有用的策略,如数据增强、多尺度测试、多模型集成和使用额外的分类器。

在VisDrone2021数据集上的大量实验表明,TPH-YOLOv5在无人机捕获场景上具有良好的性能和可解释性。在DET-test-challenge数据集上,TPH-YOLOv5的AP结果为39.18%,比之前的SOTA方法(DPNetV3)提高了1.81%。在VisDrone Challenge 2021中,TPH-YOLOv5与YOLOv5相比提高了约7%。

本文的贡献如下:

2 前人工作总结 2.1 Data Augmentation

数据增强的意义主要是扩展数据集,使模型对不同环境下获得的图像具有较高的鲁棒性。

Photometric和geometric被研究人员广泛使用。对于Photometric主要是对图像的色相、饱和度和值进行了调整。在处理geometric时主要是添加随机缩放、裁剪、平移、剪切和旋转。

除了上述的全局像素增强方法外,还有一些比较独特的数据增强方法。一些研究者提出了将多幅图像结合在一起进行数据增强的方法,如MixUp、CutMix和Mosaic。

MixUp从训练图像中随机选取2个样本进行随机加权求和,样本的标签也对应于加权求和。不同于通常使用零像素mask遮挡图像的遮挡工作,CutMix使用另一个图像的区域覆盖被遮挡的区域。Mosaic是CutMix的改进版。拼接4幅图像,极大地丰富了被检测物体的背景。此外,batch normalization计算每层上4张不同图像的激活统计量。

在TPH-YOLOv5的工作中主要是结合了MixUp、Mosaic以及传统方法进行的数据增强。

2.2 Multi-Model Ensemble Method

我们都知道深度学习模型是一种非线性方法。它们提供了更大的灵活性,并可以根据训练数据量的比例进行扩展。这种灵活性的一个缺点是,它们通过随机训练算法进行学习,这意味着它们对训练数据的细节非常敏感,每次训练时可能会得到一组不同的权重,从而导致不同的预测。 这给模型带来了一个高方差

减少模型方差的一个成功方法是训练多个模型而不是单一模型,并结合这些模型的预测。

针对不同的目标检测模型,有3种不同的ensemble boxes方法:非最大抑制(NMS)、Soft-NMS、Weighted Boxes Fusion(WBF)。

在NMS方法中,如果boxes的overlap, Intersection Over Union(IoU)大于某个阈值,则认为它们属于同一个对象。对于每个目标NMS只留下一个置信度最高的box删除其他box。因此,box过滤过程依赖于这个单一IoU阈值的选择,这对模型性能有很大的影响。

Soft-NMS是对NMS进行轻微的修改,使得Soft-NMS在标准基准数据集(如PASCAL VOC和MS COCO)上比传统NMS有了明显的改进。它根据IoU值对相邻边界box的置信度设置衰减函数,而不是完全将其置信度评分设为0并将其删除。

WBF的工作原理与NMS不同。NMS和Soft-NMS都排除了一些框,而WBF将所有框合并形成最终结果。因此,它可以解决模型中所有不准确的预测。本文使用WBF对最终模型进行集成,其性能明显优于NMS。

2.3 Object Detection

基于CNN的物体检测器可分为多种类型:

一些检测器是专门为无人机捕获的图像设计的,如RRNet、PENet、CenterNet等。但从组件的角度来看,它们通常由2部分组成,一是基于CNN的主干,用于图像特征提取,另一部分是检测头,用于预测目标的类和Box。

此外,近年来发展起来的目标检测器往往在backbone和head之间插入一些层,人们通常称这部分为检测器的Neck。接下来分别对这3种结构进行详细介绍:

Backbone

常用的Backbone包括VGG、ResNet、DenseNet、MobileNet、EfficientNet、CSPDarknet53、Swin-Transformer等,均不是自己设计的网络。因为这些网络已经证明它们在分类和其他问题上有很强的特征提取能力。但研究人员也将微调Backbone,使其更适合特定的垂直任务。

Neck

Neck的设计是为了更好地利用Backbone提取的特征。对Backbone提取的特征图进行不同阶段的再处理和合理使用。通常,一个Neck由几个自底向上的路径和几个自顶向下的路径组成。Neck是目标检测框架中的关键环节。最早的Neck是使用上下取样块。该方法的特点是没有特征层聚合操作,如SSD,直接跟随头部后的多层次特征图。

常用的Neck聚合块有:FPN、PANet、NAS-FPN、BiFPN、ASFF、SAM。这些方法的共性是反复使用各种上下采样、拼接、点和或点积来设计聚合策略。Neck也有一些额外的块,如SPP, ASPP, RFB, CBAM。

Head

作为一个分类网络,Backbone无法完成定位任务,Head负责通过Backbone提取的特征图检测目标的位置和类别。

Head一般分为2种:One-Stage检测器和Two-Stage检测器。

两级检测器一直是目标检测领域的主导方法,其中最具代表性的是RCNN系列。与Two-Stage检测器相比One-Stage检测器同时预测box和目标的类别。One-Stage检测器的速度优势明显,但精度较低。对于One-Stage检测器,最具代表性的型号是YOLO系列、SSD和RetaNet。

3TPH-YOLOv53.1 Overview of YOLOv5

YOLOv5有4种不同的配置,包括YOLOv5s,YOLOv5m, YOLOv5l和YOLOv5x。一般情况下,YOLOv5分别使用CSPDarknet53+SPP为Backbone,PANet为Neck, YOLO检测Head。为了进一步优化整个架构。由于它是最显著和最方便的One-Stage检测器,作者选择它作为Baseline。

图2 THP-YOLOv5整体架构

当使用VisDrone2021数据集训练模型时,使用数据增强策略(Mosaic和MixUp)发现YOLOv5x的结果远远好于YOLOv5s、YOLOv5m和YOLOv5l, AP值的差距大于1.5%。虽然YOLOv5x模型的训练计算成本比其他3种模型都要高,但仍然选择使用YOLOv5x来追求最好的检测性能。此外,根据无人机捕获图像的特点,对常用的photometric和geometric参数进行了调整。

3.2 TPH-YOLOv5

TPH-YOLOv5的框架如图3所示。修改了原来的YOLOv5,使其专一于VisDrone2021数据集:

图3 TPH-YOLOv5模型结构 微小物体的预测头

作者统计了VisDrone2021数据集,发现它包含了很多非常小的目标,所以增加了一个用于微小物体检测的预测头。结合其他3个预测头,4头结构可以缓解剧烈的目标尺度变化带来的负面影响。如图3所示,添加的预测头(Head 1)是由low-level、高分辨率的feature map生成的,对微小物体更加敏感。增加检测头后,虽然增加了计算和存储成本,但对微小物体的检测性能得到了很大的提高。

Transformer encoder block

图4 Transformer Block

用Transformer encoder块替换了YOLOv5原版中的一些卷积块和CSP bottleneck blocks。其结构如图4所示。与CSPDarknet53中原有的bottleneck blocks相比,作者认为Transformer encoder block可以捕获全局信息和丰富的上下文信息。

每个Transformer encoder block包含2个子层。第1子层为multi-head attention layer,第2子层(MLP)为全连接层。每个子层之间使用残差连接。Transformer encoder block增加了捕获不同局部信息的能力。它还可以利用自注意力机制来挖掘特征表征潜能。在VisDrone2021数据集中,Transformer encoder block在高密度闭塞对象上有更好的性能。

基于YOLOv5,作者只在头部部分应用Transformer encoder block形成transformer Prediction head(TPH)和backbone端。因为网络末端的特征图分辨率较低。将TPH应用于低分辨率特征图可以降低计算和存储成本。此外,当放大输入图像的分辨率时可选择去除早期层的一些TPH块,以使训练过程可用。

Convolutional block attention module (CBAM)

CBAM是一个简单但有效的注意力模块。它是一个轻量级模块,可以即插即用到CNN架构中,并且可以以端到端方式进行训练。给定一个特征映射,CBAM将沿着通道和空间两个独立维度依次推断出注意力映射,然后将注意力映射与输入特征映射相乘,以执行自适应特征细化。

图5 CBAM注意力机制

CBAM模块的结构如图5所示。通过本文的实验,在不同的分类和检测数据集上将CBAM集成到不同的模型中,模型的性能得到了很大的提高,证明了该模块的有效性。

在无人机捕获的图像中,大覆盖区域总是包含令人困惑的地理元素。使用CBAM可以提取注意区域,以帮助TPH-YOLOv5抵制令人困惑的信息,并关注有用的目标对象。

Self-trained classifier

用TPH-YOLOv5对VisDrone2021数据集进行训练后,对test-dev数据集进行测试,然后通过可视化失败案例分析结果,得出TPH-YOLOv5定位能力较好,分类能力较差的结论。作者进一步探索如图6所示的混淆矩阵,观察到一些硬类别,如三轮车和遮阳三轮车的精度非常低。

图6 检测混淆矩阵

因此,作者提出了一个Self-trained classifier。首先,通过裁剪ground-truth边界框并将每个图像patch的大小调整为64 64来构建训练集。然后选择ResNet18作为分类器网络。实验结果表明,在这个Self-trained classifier的帮助下,所提方法对AP值提高了约0.8%~1.0%。

4实验与结论

最终在test-set-challenge上取得了39.18的好成绩,远远高于VisDrone2020的最高成绩37.37。

图9 检测结果图


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/569857.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-07-03
下一篇2023-07-03

发表评论

登录后才能评论

评论列表(0条)

    保存