TPH-YOLOv5:基于Transformer预测头的改进YOLOv5,用于无人机捕获场景的目标检测

本文主要是介绍TPH-YOLOv5:基于Transformer预测头的改进YOLOv5,用于无人机捕获场景的目标检测,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

摘要

        提出了TPH-YOLOv5。在YOLOv5的基础上,增加了一个预测头来检测不同尺度的目标。然后用Transformer Prediction Heads(TPH)代替原有的预测头,探索自注意机制的预测潜力。还集成了卷积块注意力模型(CBAM),用来发现密集对象场景中的注意力区域。为了实现所提出的TPH-YOLOv 5的更多改进,提供了一些有用的策略,如数据增强,多尺度测试,多模型集成和使用额外的分类器设计了跨层非对称Transformer(CA-Trans)来代替额外的预测头,同时保持该预测头的知识。该算法通过引入稀疏局部注意(SLA)模型,有效地捕获了附加头与其他头之间的非对称信息,丰富了其他头的特征。

        为了进一步提高TPH-YOLOv5的性能,在训练过程中采用了数据增强,这促进了对图像中对象的剧烈尺寸变化的适应性。在推理过程中加入了多尺度测试和多模型集成策略,使检测结果更有说服力。此外,通过可视化的故障情况下,提出的架构有很好的本地化能力,但具有较差分类能力,特别是在一些类似的类别,如“三轮车”和“遮阳篷三轮车”。为了解决这个问题,提供了一个自我训练的分类器(ResNet18),使用从训练数据中裁剪的图像块作为分类训练集。

创新点

        ·增加了一个预测头来处理对象的大规模方差。

        ·将Transformer Prediction Heads(TPH)集成到YOLOv5中,可以在高密度场景中准确定位对象。

        ·将CBAM集成到YOLOv5中,它可以帮助网络在具有大区域覆盖的图像中找到感兴趣的区域。

        ·使用自训练的分类器提高了对易混淆类别的分类能力。

TPH-YOLOv5

(1)Overview of YOLOv5

        YOLOv5有四种不同的型号,包括YOLOv5s,YOLOv5m,YOLOv5l和YOLOv5x。一般来说,YOLOv5分别使用CSPDarknet 53的架构,其中SPP层作为主干,PANet作为Neck和YOLO检测头。为了进一步优化整个体系结构,提供了最著名和最方便的一级探测器,选择它作为基线。

        当使用VisDrone2021数据集使用数据增强策略(Mosaic和MixUp)训练模型时,发现YOLOv5x的结果远远优于YOLOv5s,YOLOv5m和YOLOv5l,AP值的差距差距超过1.5%。尽管YOLOv5x模型的训练计算成本比其他三种模型都要高,但仍然选择使用YOLOv5x来追求最佳的检测性能。此外,根据无人机拍摄图像的特点,调整常用的光度失真和几何失真参数。

(2)TPH-YOLOv5

        TPH-YOLOv5的框架如图3所示。对原始YOLOv5进行了修改,使其专门用于VisDrone2021数据集。

Prediction head for tiny objects

        预测微小物体的头。增加了一个预测头用于微小物体检测。与其他三种预测头相结合,四头结构可以缓解剧烈的对象尺度变化带来的负面影响。如图3所示,添加的预测头(头1号)是从低级别、高分辨率的特征图中生成的,对微小物体更敏感。增加一个额外的检测头后,虽然计算量和内存开销增加,但微小目标检测的性能得到了很大的提高。

Transformer encoder block

        Transformer编码器块。用Transformer编码器块替换了原始版本YOLOv5中的一些卷积块和CSP瓶颈块。其结构如图4所示。与CSPDarknet53中的原始瓶颈块相比,Transformer编码器块可以捕获全局信息和丰富的上下文信息。每个Transformer编码器包含两个子层。第一子层是多头注意层,第二子层(MLP)是全连接层。在每个子层之间使用剩余连接。Transformer编码器块提高了捕获不同本地信息的能力。它还可以利用自我注意机制探索特征表征潜力。

        基于YOLOv5,只在头部分应用Transformer编码器块,形成Transformer Prediction Head(TPH)和主干的末端。因为网络末端的要素地图分辨率较低。在低分辨率特征地图上应用TPH可以减少昂贵的计算和存储开销。此外,当扩大输入图像的分辨率,有选择地删除一些TPH块在早期层,使训练过程可用。

Convolutional block attention module (CBAM):

        卷积块注意模块(CBAM)。CBAM是一个简单但有效的注意模块。它是一个轻量级的模块,可以集成到大多数著名的CNN架构中,并且可以以端到端的方式进行训练。CBAM在给定特征图的情况下,沿着通道和空间两个独立的维度顺序地推断注意力图,然后将注意力图与输入特征图相乘以执行自适应特征细化。CBAM模块的结构如图5所示。

        在无人机捕获的图像上,大面积的覆盖区域往往包含着易混淆的地理要素。利用CBAM提取注意区域,帮助TPH-YOLOv5抵抗混淆信息,将注意力集中到有用的目标对象上。

Ms-testing and model ensemble:

        Ms检验和模型集成。本文从模型集成的不同角度训练了五种不同的模型。在推理阶段,首先对单个模型执行ms-检验策略。ms-testing的实现细节有以下三步。

        1)将测试图像缩放至1.3倍。

        2)分别将图像缩小1倍、0.83倍和0.67倍。

        3)水平翻转图像。

        最后,将6幅不同尺度的图像输入到TPH-YOLOv5中,并利用NMS对预测结果进行融合。在不同的模型上,执行相同的ms检验操作,并通过WBF融合最后的五个预测,以获得最终结果。

Self-trained classifier:

        自我训练的分类器。使用TPH-YOLOv5对VisDrone 2021数据集进行训练后,对test-dev数据集进行测试,并通过可视化故障案例对测试结果进行分析,得出TPH-YOLOv5具有较好的定位能力,但分类能力较差的结论。进一步研究了混淆矩阵,并观察到一些硬类别(如三轮车和遮阳三轮车)的精度很低。因此,提出了一个额外的自训练分类器。首先,构建了TPH-YOLOv5,并使用TPH-YOLOv5对VisDrone 2021数据集进行了训练,然后对test-dev数据集进行了测试,通过可视化失败案例对测试结果进行了分析,得出了TPH-YOLOv 5具有良好的定位能力但分类能力较差的结论。

这篇关于TPH-YOLOv5:基于Transformer预测头的改进YOLOv5,用于无人机捕获场景的目标检测的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1126696

相关文章

防止Linux rm命令误操作的多场景防护方案与实践

《防止Linuxrm命令误操作的多场景防护方案与实践》在Linux系统中,rm命令是删除文件和目录的高效工具,但一旦误操作,如执行rm-rf/或rm-rf/*,极易导致系统数据灾难,本文针对不同场景... 目录引言理解 rm 命令及误操作风险rm 命令基础常见误操作案例防护方案使用 rm编程 别名及安全删除

Spring Security 前后端分离场景下的会话并发管理

《SpringSecurity前后端分离场景下的会话并发管理》本文介绍了在前后端分离架构下实现SpringSecurity会话并发管理的问题,传统Web开发中只需简单配置sessionManage... 目录背景分析传统 web 开发中的 sessionManagement 入口ConcurrentSess

Python脚本轻松实现检测麦克风功能

《Python脚本轻松实现检测麦克风功能》在进行音频处理或开发需要使用麦克风的应用程序时,确保麦克风功能正常是非常重要的,本文将介绍一个简单的Python脚本,能够帮助我们检测本地麦克风的功能,需要的... 目录轻松检测麦克风功能脚本介绍一、python环境准备二、代码解析三、使用方法四、知识扩展轻松检测麦

Java异常捕获及处理方式详解

《Java异常捕获及处理方式详解》异常处理是Java编程中非常重要的一部分,它允许我们在程序运行时捕获并处理错误或不预期的行为,而不是让程序直接崩溃,本文将介绍Java中如何捕获异常,以及常用的异常处... 目录前言什么是异常?Java异常的基本语法解释:1. 捕获异常并处理示例1:捕获并处理单个异常解释:

99%的人都选错了! 路由器WiFi双频合一还是分开好的专业解析与适用场景探讨

《99%的人都选错了!路由器WiFi双频合一还是分开好的专业解析与适用场景探讨》关于双频路由器的“双频合一”与“分开使用”两种模式,用户往往存在诸多疑问,本文将从多个维度深入探讨这两种模式的优缺点,... 在如今“没有WiFi就等于与世隔绝”的时代,越来越多家庭、办公室都开始配置双频无线路由器。但你有没有注

深入解析Java NIO在高并发场景下的性能优化实践指南

《深入解析JavaNIO在高并发场景下的性能优化实践指南》随着互联网业务不断演进,对高并发、低延时网络服务的需求日益增长,本文将深入解析JavaNIO在高并发场景下的性能优化方法,希望对大家有所帮助... 目录简介一、技术背景与应用场景二、核心原理深入分析2.1 Selector多路复用2.2 Buffer

MySQL常用字符串函数示例和场景介绍

《MySQL常用字符串函数示例和场景介绍》MySQL提供了丰富的字符串函数帮助我们高效地对字符串进行处理、转换和分析,本文我将全面且深入地介绍MySQL常用的字符串函数,并结合具体示例和场景,帮你熟练... 目录一、字符串函数概述1.1 字符串函数的作用1.2 字符串函数分类二、字符串长度与统计函数2.1

Java Stream流之GroupBy的用法及应用场景

《JavaStream流之GroupBy的用法及应用场景》本教程将详细介绍如何在Java中使用Stream流的groupby方法,包括基本用法和一些常见的实际应用场景,感兴趣的朋友一起看看吧... 目录Java Stream流之GroupBy的用法1. 前言2. 基础概念什么是 GroupBy?Stream

java如何实现高并发场景下三级缓存的数据一致性

《java如何实现高并发场景下三级缓存的数据一致性》这篇文章主要为大家详细介绍了java如何实现高并发场景下三级缓存的数据一致性,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 下面代码是一个使用Java和Redisson实现的三级缓存服务,主要功能包括:1.缓存结构:本地缓存:使

C++中detach的作用、使用场景及注意事项

《C++中detach的作用、使用场景及注意事项》关于C++中的detach,它主要涉及多线程编程中的线程管理,理解detach的作用、使用场景以及注意事项,对于写出高效、安全的多线程程序至关重要,下... 目录一、什么是join()?它的作用是什么?类比一下:二、join()的作用总结三、join()怎么