引言

  无人机捕获场景下的目标检测技术已广泛应用于植物保护、野生动物保护和城市监测等实际应用中,在无人机捕获的图像上的目标检测性能,并为上述众多的应用提供洞察力。本文专注于在无人机上的目标检测性能提升,并服务于上述应用。
  近年来,基于深度卷积神经网络的目标检测任务取得了显著进展,一些著名的基准数据集,如MS COCO和PASCAL VOC,推动了目标检测应用的发展,然而,以往的深度卷积神经网络大多是针对自然场景图像设计的。直接应用之前的模型来处理无人机捕获场景下的目标检测任务主要有三个问题,如图1所示。

  首先,由于无人机的飞行高度变化较大,目标规模变化较大。其次,无人机捕获的图像包含高密度的物体,这导致了物体之间的遮挡。第三,无人机拍摄的图像由于覆盖面积大,往往包含混乱的地理元素。上述三个问题使得无人机捕获图像的目标检测非常具有挑战性
  在目标检测任务中,YOLO系列在单级探测器中起着重要作用。本文提出了基于YOLOv5(Glenn Jocher, Alex Stoken, Jirka Borovec, NanoCode012, Ayush Chaurasia, TaoXie, Liu Changyu, Abhiram V , Laughing, tkianai, yxNONG, Adam Hogan, lorenzomammana, AlexWang1900, Jan Hajek, Laurentiu Diaconu, Marc,Y onghye Kwon, oleg, wanghaoyang0106, Yann Defretin,Aditya Lohia, ml5ah, Ben Milanko, Benjamin Fineran, Daniel Khromov, Ding Yiwei, Doug, Durgesh, and Francisco Ingham. ultralytics/yolov5: v5.0 - YOLOv5-P6 1280 models, AWS, Supervise.ly and Y ouTube integrations, Apr. 2021.(文章里是这样引用的))的改进模型TPH-YOLOv5来解决上述三个问题。TPH-YOLOv5的检测流程框架如图2所示。

  和原版本一样,分别使用CSPDarknet53和PANet作为骨干网络和neck部分,TPH-YOLOv5共包含四个检测头,分别用于微小、小、中、大物体的检测,采用CBAM沿着通道维度和空间维度依次生成注意力图,以寻找大覆盖图像中的注意区域。与YOLOv5相比,本文改进的TPH-YOLOv5可以更好地处理无人机捕获的图像。
为了进一步提高TPH-YOLOv5的性能,本文采用了很多Trick,在推理过程中增加了多尺度测试(ms-testing)和多模型集成策略,另外为了解决分类能力较差的问题,本文提出了咨询了的分类器,该分类器从数据中心裁剪的图像块作为分类的训练集。

相关工作

  Data Augmentation:数据增强的有效性在于扩展数据集,使模型对不同环境下获得的图像具有较高的鲁棒性。光度失真和几何失真被研究人员广泛使用,对于光度失真,本文对图像的色相、饱和度和值进行了调整,在处理几何失真时,本文添加了随机缩放、裁剪、平移、剪切和旋转。除了上述的全局像素增强方法外,还有一些比较独特的数据增强方法,利用多幅图像进行数据增强,比如MixUp(《mixup: Beyond empirical risk minimization,2017》)、CutMix(《Cutmix: Regularization strategy to train strong classifiers with localizable features,2019》)、Mosaic(《Yolov4: Optimal speed and accuracy of object detection》)。MixUp从训练图像中随机选取两个样本进行随机加权求和,样本的标签也对应于加权求和;不同于通常使用零像素“黑布”遮挡图像的遮挡工作,CutMix使用另一个图像的区域来覆盖被遮挡的区域;Mosaic是CutMix的改进版。拼接四幅图像,极大地丰富了被检测物体的背景。此外,批处理归一化计算每层上4张不同图像的激活统计量。
在TPH-YOLOv5中,结合了MixUp、Mosaic和传统方法进行数据增强。
  Multi-Model Ensemble Method in Object Detection:深度学习神经网络是一种非线性方法。它们提供了更大的灵活性,并可以根据训练数据量的比例进行扩展。这种灵活性的一个缺点是,它们通过随机训练算法进行学习,这意味着它们对训练数据的细节非常敏感,每次训练时可能会发现一组不同的权重,从而导致不同的预测。这给了神经网络一个高方差,减少神经网络模型方差的一个成功方法是训练多个模型而不是单一模型,并结合这些模型的预测。针对不同的目标检测模型,有三种不同的集成盒方法: NMS、soft-NMS、 WBF(《Weighted boxes fusion: Ensembling boxes from different object detection models,2021》)。在NMS方法中,如果boxes IoU大于某个阈值,则认为它们属于同一个对象。对于每个对象,NMS只留下一个置信度最高的box,Soft-NMS根据IoU值对相邻边界盒的置信度设置衰减函数,而不是完全将其置信度评分设为零并将其删除。WBF的工作原理与NMS不同。NMS和Soft-NMS都排除了一些框,而WBF将所有框合并形成最终结果。因此,它可以解决模型中所有不准确的预测。我们使用WBF对最终模型进行集成,其性能明显优于NMS。
  Object Detection:基于CNN的目标检测器可以分为多种类型:(1)一阶段检测器:YOLOX, FCOS, DETR,Scaled-YOLOv4,EfficientDet。(2)二阶段检测器:VFNet(《Varifocalnet: An iou-aware dense object detector,2021》), CenterNet2(《Probabilistictwo-stagedetection》,2021)。(3)Anchor-based:Scaled-YOLOv4, YOLOv5。(4)Anchor-free:CenterNet, YOLOX, RepPoints(《Reppoints: Point set representation for object detection,2019》)。一些探测器是专门为无人机设计的:RRNet, PENet, CenterNet等。
  Backbone:骨干网络包括VGG[42]、ResNet、DenseNet、MobileNet、EfficientNet、CSPDarknet53、Swin Transformer等。
  Neck: 常用的Neck块有:FPN、PANet、NAS-FPN、BiFPN、ASFF(《Learning spatial fusion for single-shot object detection,2019》)、SFAM(《M2det: A single-shot object detector based on multi-level feature pyramid network,2019》),还有一部分额外的块比如SPP、ASPP、RFB、CBAM。
  Head:作为一个分类网络,骨干网络无法完成定位任务,Head负责通过主干提取的特征图检测目标的位置和类别。(后面文章就写的很水,写一阶段和二阶段方法,但是方法和之前Object Detection那一节写的没有重复,之前就疑惑为什么不提到YOLO和R-CNN,原来是把YOLO和R-CNN系列放到这里来写了。我觉得这一块可以完全按照YOLOv4的写法,把Backbone、Neck以及Head这块放入Object Detection中写,而不是平行结构写)

方法

  YOLOv5有YOLOv5s、YOLOv5m、YOLOv5l、YOLOv5x四种不同型号。一般情况下,YOLOv5分别采用CSPDarknet53架构,以SPP层为骨干,PANet为Neck, YOLO为检测头,为了进一步优化整个结构,本文以YOLOv5作为基线代码,使用VisDrone2021 作为数据集,用Mosaic和MixUp作为数据增强策略,由于YOLOv5x的性能最高,所以本文使用YOLOv5x来追求最好的检测性能,此外,根据无人机的特点,对常用的光度畸变和几何畸变参数进行了调整。
  TPH-YOLOv5的框架如图3所示,本文修改了原来的YOLOv5,使其专一于VisDrone2021数据集。

  Prediction head for tiny objects:本文研究了VisDrone2021数据集,发现包含了很多非常小的实例,所以增加了一个用于微小物体检测的预测头(图3的头1),结合其他三个预测头,四头结构可以缓解剧烈的目标尺度变化带来的负面影响。该检测头是由低层高分辨率的特征图生成的,对微小物体更加敏感,增加检测头后,虽然计算和存储成本增加,但对微小物体的检测性能变高。
  Transformer encoder block:受Transformer的启发,本文用Transformer编码块替换YOLOv5原始版本的卷积块和CSP瓶颈块,其结构如图4所示。

  与CSPDarknet53中原有的瓶颈块相比,本文认为变压器编码器块可以捕获全局信息和丰富的上下文信息,每个变压器编码器包含两个子层,第一子层为多头注意层,第二子层(MLP)为全连接层。每个子层之间使用残差连接,变压器编码器块增加了捕获不同本地信息的能力,它还可以利用自注意机制来挖掘特征表征潜能。在VisDrone2021数据集中,变压器编码器块在高密集对象上有更好的性能。
  基于YOLOv5,本文只在头部部分应用变压器编码器块,形成transformer Prediction head (TPH)和backbone端,因为网络末端的特征图分辨率较低,将TPH应用于低分辨率特征图可以降低昂贵的计算和存储成本,此外当放大输入图像的分辨率时,可以选择去除早期层的一些TPH块来进行训练。
  Convolutional block attention module (CBAM):CBAM是一个简单但有效的注意力模块。它是一个轻量级模块,可以集成到最著名的CNN架构中,并且可以以端到端方式进行训练。给定一个特征映射,CBAM将沿着通道和空间两个独立维度依次推断出注意力映射,然后将注意力映射与输入特征映射相乘,以执行自适应特征细化。CBAM模块的结构如图5所示。在无人机捕获的图像中,大覆盖区域总是包含令人困惑的地理元素。使用CBAM可以提取注意区域,以帮助TPH-YOLOv5抵制令人困惑的信息,并关注有用的目标对象。

  MS-testing and model ensemble:本文从模型集成的不同角度训练了五个不同的模型。在推理阶段,首先对单个模型执行MS-testing策略。MS-testing的实现细节如下三个步骤。
  (1)将测试图像缩放到1.3倍。
  (2)分别将图像缩小到1次、0.83次、0.67次。
  (3)水平翻转图像。
  最后向TPH-YOLOv5提供6张不同大小的图像,并使用NMS来融合测试预测。在不同的模型上,进行相同的ms测试操作,并用WBF融合最后5个预测,得到最终结果。
  Self-trained classifier: 用TPH-YOLOv5对VisDrone2021数据集进行训练后,对test-dev数据集进行测试,然后通过可视化失败案例分析结果,得出TPH-YOLOv5定位能力较好,分类能力较差的结论。进一步探索如图6所示的混淆矩阵,观察到一些硬类别,如三轮车和遮阳三轮车的精度非常低。因此,我们提出了一个额外的自训练分类器。首先,通过裁剪ground-truth边界框和调整每个图像补丁的大小到64×64来构建训练集。然后选择ResNet18作为分类器网络。实验结果表明,通过这个自训练的分类器,对AP提高了约0.8% ~ 1.0%

实验

  实验使用VisDrone2021作为数据集,在Pytorch1.8.1上实现代码,用RTX3090训练65个epoch,batch_size是2。
  Data analysis:如图7所示,由于图像从很高的地方拍摄,所以有很多小物体,当输入尺寸为1536时,342391个标签中有622个标签小于3像素,使用灰色方块覆盖这些小物体,并在处理后的数据集上训练模型时,Map提高了0.2。

  Ms-testing: 在使用模型进行预测时,还可以应用测试数据集的图像数据增强,使模型能够对多个不同版本的图像进行预测。对增强后的图像进行平均预测,可以获得更好的预测性能,这里将测试图像缩放到三种不同的尺寸,然后水平翻转它们,这样总共得到6张不同的图像。对六幅不同的图像进行测试,并将结果进行融合,得到最终的测试结果。

  由于在VisDrone2021竞赛服务器上提交的数量有限,本文只在test - set-challenge上获得了4个模型的结果,以及5个模型集成的最终结果,在VisDrone 2021年排行榜上排名第五,比第一名的39.43分低0.25分。表1列出了本文模型的性能,以及去年VisDrone竞赛的得分。
  表2列出了TPH-YOLOv5各个组件的影响。

  表3展示了本文五个不同模型在每个类别上的最终mAP

总结

  这篇论文是基于YOLOv5在无人机上应用的论文,数据集是ICCV 2021workshop下的“Vision Meets Drones: A Challenge”,写作上,引言是写无人机检测的困难问题,以及贴出相应场景的图片进行说明,不过论文引用YOLOv5的时候用的不是YOLOv4的论文,而是用的github地址;相关工作的写法和YOLOv4类似,但是没有YOLOv4的清晰,不过从里面知道了最近NMS的改进还有WBF这种方法,网络结构上,它也是对于每一个C3后接上CBAM,然后这篇论文还加入了Vit,而检测头论文里只是在更低层连接了一个,用来检测更小的对象,然后论文还提了一个点Self-trained classifier,这一部分从论文里的描述没有完全理解,我一开始是以为相似的物品特地构建数据集添进去填充样本,多做一些训练,不过原文只是说“cropping the ground-truth bounding boxes and resizing each image patches to 64×64. Then we select ResNet18 as classifier network”,然后就没有多描述了,听起来像是对所有数据处理,所以并不知道具体是怎么做的,不过这里说明问题的方式是利用混淆矩阵,这一部分图片其实是由YOLOv5代码提供的,但放在论文里确实看起来高级一点。

TPH-YOLOv5简述相关推荐

  1. Yolov5小目标检测【一】

    1 增加小目标检测层 需要修改yolov5的模型文件yaml就可以增加小目标检测层,但是在增加检测层后,带来的问题就是计算量增加,导致推理检测速度降低.不过对于小目标,确实有很好的改善. # para ...

  2. YOLOV5 的小目标检测网络结构优化方法汇总(附代码)

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨南山 来源丨 AI约读社 YOLOv5是一种非常受欢迎的单阶段目标检测,以其性能和速度著称,其结 ...

  3. TPH-YOLOv5: Improved YOLOv5 Based on Transformer Prediction Head for Object Detection on Drone-captu

    TPH-YOLOv5 文章目录 TPH-YOLOv5 参考 Introduciton Structure CSPDarknet53 Transformer CBAM Ms-testing and mo ...

  4. 一点就分享系列(实践篇3-中篇)— 虽迟但到!全网首发?yolov5之“baseline修改小结“+“CV领域展开-Involutiontransformercnn”

    一点就分享系列(实践篇3-中篇)- yolov5之"修改总结以及baseline算子的分享" 说明 上篇有很多朋友照搬了我的yaml结构,这里抱歉下也有原因是我的工作偏工程,真的研 ...

  5. 一点就分享系列(实践篇3-上篇)— 修改YOLOV5 之”魔刀小试“+ Trick心得分享+V5精髓部分源码解读

    一点就分享系列(实践篇3-上篇)-修改YOLOV5 魔刀小试+ Trick心得分享 DL部署大热,而我觉得回归原理和源码更加重要!正如去年,我也提倡部署工程化,眼争上班工作我这里也是以搬砖产出为主.但 ...

  6. YOLO系列总结:YOLOv1, YOLOv2, YOLOv3, YOLOv4, YOLOv5, YOLOX

    文章目录 YOLO系列总结:YOLOv1, YOLOv2, YOLOv3, YOLOv4, YOLOv5, YOLOX 前言 YOLO v1: You Only Look Once: Unified, ...

  7. FPGA实战操作(2) -- PCIe总线(协议简述)

    目录 1. PCIe基础知识 2. 事务层协议 2.1 数据包结构 2.2 帧头含义详述 3. 报文举例 3.1 寄存器读报文 3.2 完成报文 4. 机制简述 4.1 Non-Posted和Post ...

  8. python pcie通信_PCIe总线(协议简述)

    1. PCIe基础知识 PCI-Express(peripheral component interconnect express)是一种高速串行计算机扩展总线标准,它原来的名称为"3GIO ...

  9. 简述yolo1-yolo3_YOLO v4或YOLO v5或PP-YOLO?

    简述yolo1-yolo3 Object detection is a computer vision task that involves predicting the presence of on ...

最新文章

  1. 经典控制~系统的极点
  2. 俄语版TikTok风靡俄罗斯
  3. python有参装饰器 多个装饰器装饰一个
  4. 11 Python - dict
  5. mybatis学习(42):mybatis的一级缓存
  6. Linux——查看系统的日志的一些实用操作
  7. 3D印花芭蕾舞鞋为舞者科学地保护双脚
  8. 如何在aspx页面中插入swf动画
  9. timequest静态时序分析学习笔记之命令约束
  10. LOL登录后黑屏,主界面一直加载解决办法
  11. js实现json转excel的npm包
  12. java异常体系简介
  13. 推荐一款开源的加解密算法 --- XXTEA
  14. 深度评论 | 雷军这么努力,为什么小米还是干不过OV
  15. 《el-descriptions》 边框重叠问题
  16. 看到一些关于前端的书籍或者好的网站推荐
  17. JavaScript高级(一)
  18. Java 对象copy之BeanCopier工具类的使用
  19. vue计算属性与监视属性
  20. 实现全托管,腾讯云服务网格的架构演进

热门文章

  1. 韩信点兵(Hanxin)(C++)
  2. [未来成长] 分享:《麦肯锡教我的写作武器》如何写出一篇具有逻辑表现力的文案...
  3. Android系统如何修改默认打开程序
  4. 麒麟SP1系统非root用户强制修改分辨率,开机自动生效
  5. html中定义高度的属性是什么,height【css 高度】属性教程
  6. 高级测试开发进阶知识详解
  7. 使用云主机,我们可以做哪些事情
  8. Yapieasyapi文档管理平台安装与使用
  9. nginx配置路径、跨域、本机自定义server_name
  10. Python迷宫生成器