TPH-yolov5论文解读

2023-12-14 04:10
文章标签 解读 论文 yolov5 tph

本文主要是介绍TPH-yolov5论文解读,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

注:个人愚见,有问题欢迎批评指针。

论文:《TPH-YOLOv5: Improved YOLOv5 Based on Transformer Prediction Head for Object Detection on Drone-captured Scenarios》

  • ICCV 2021 Open Access Repository

代码:GitHub - TfeiSong/tph-yolov5: CBAM-TPH-biFPN-yolov5

TPH:Transformer Prediction Head

总结比较实用的点:
1. tph(transformer prediction head)。能够捕获更多的全局信息和上下文信息(使用的self-attention和全连接)。
2. CBAM提高通道和空间注意力机制。简单有效好嵌入CNN架构。
3. 增加小目标预测head。在大尺寸feature上实现对小目标的预测,提高小目标预测的准确率。
4. self-training classifier。对难区分的类别截取预测框,送小网络训练一个分类器,提高类别预测准确度。
5. ms-testiong。nms融合多个尺度图像的预测结果,提高mAP。
6. 模型集成:训练多个模型,融合多个模型的预测结果,提高mAP。

摘要:无人机拍摄场景下的目标检测最近很时兴。难题:1. 因无人机总是在不同高度拍摄图像,导致目标尺寸变化剧烈,网络不易优化。2. 且高速低空飞行会对密集堆叠的物体产生运动模糊,对区分目标带来更大挑战。解决方法:本文提出TPH-yolov5,在yolov5中使用transformer prediction heads 替换原始的预测头,探索自注意力机制,去检测不同尺寸的目标。同时也整合CBAM模块,稠密目标的关注区域。另外,增加了有效策略:数据增强,多尺度测试,多模型融合,利用额外分类器。测试集:VisDrone2021。之前的sota方法:DPNetV3,提升1.81%。比yolov5提升了7%。

1. 介绍

无人机场景的目标检测主要有三个问题:1.尺寸多变,2.目标高密度,3.目标对象覆盖范围大。

网络结构框架:

 整体较yolov5的改变:TPH,CBAM,增加更多头对不同尺寸检测,应用训练技巧(数据增强、多尺度测试、模型集成和自训练分类器)

对于类别相似的图像作者使用了self-trained classifier,把图像裁剪出来作为分类训练集训练模型。

本文贡献:

1. 增加更多的预测头,来处理大尺度变化的目标。

2. 整合TPH模块到yolov5中,提高在稠密场景下位置定位的准确性。

3. 整合CBAM到yolov5中,有利于网络寻找大区域内的感兴趣区域。

4. 对于无人机捕获到的场景使用有效地训练技巧:。

5. 使用自训练分类器,提高区分相似类别的分类能力。

2. 相关工作

2.1 数据增强

扩充不同场景的数据集,提高模型鲁棒性。光学变化增强(hue,saturation and value of the images),几何变化增强(random scaling, cropping, translation, shearing, and rotating),mixup,CutMix,Mosaic。

2.2 多模型集成方法在目标检测上

因为每次训练模型时生成的模型权重文件都是不同的,这就导致不同模型预测结果不同。为了降低差异,联合多个模型的预测结果。联合多个模型的方法是,对多个模型预测的框进行nms,soft-nms,WBF等处理。

2.3 目标检测

目标检测可划分多个类型。

1. one-stage 检测器:YOLOX,FCOS,DETR,Scaled-YOLOv4,EfficientDet。 

2. two-stage 检测器:VFNet,CenterNet2

3. anchor-based 检测器:Scaled-YOLOv4,YOLOv5

4. anchor-free 检测器:CenterNet,YOLOX,RepPoints。

5. 专门针对无人机捕捉场景检测器:RRNet,PENet,CenterNet。

目标检测通常有三部分组成:backbone,neck,prediction head。

backbone:VGG,ResNet,DenseNet,MobileNet,EfficientNet,CSPDarknet53,Swin Transformer等等。

neck:neck设计的目的是为了更好地为backbone提供特征提取能力。通常由bottom-up和top-down形式。最早期的neck是up和down采样快。通常使用路径聚合块:FPN,PANet,NAS-FPN,BiFPN,ASFF,SFAM。neck上还有一些额外的块,比如:SPP,ASPP,RFB,CBAM等。

head:检测头目的是用来检测目标框位置和目标类别的。head一般被分为两种类型:one-stage和two-stage的目标检测器。two-stage目标检测方式一直主导方法,比如RCNN系列。one-stage目标检测器直接预测bounding box和目标类别,比如yolo系列,SSD,RetinaNet等。

3. TPH-YOLOv5

3.1 YOLOv5综述

yolov5共四个模型:yolov5s,yolov5m,yolov5l,yolov5x。

yolov5组成:backbone是CSPDarknet53 + SPP,Neck是PANet,detection head是YOLO head。

数据增强:Mosaic,MixUp,photometric distortions,geometric distortions。

3.2 TPH-YOLOv5

TPH-YOLOv5模型框架如图3所示。本文修改官方的yolov5模型,使她更加适应VisDrone2021数据集。

 Prediction head for tiny objects:因为比赛数据集VisDrone2021包含了很多极其小的目标,所以增加更多小目标的预测头。共四个预测头,来缓解物体剧烈变化带来的尺寸变化。如图3第一个TPH就是专门用来预测小目标(tiny object)产生的。虽然计算量和内存增加,但是效果也有很大提升。

Transformer encoder block:受transformer启发,本文使用transformer encode block替换convolutional blocks和CSP bottleneck blocks。这个结构如图4所示。

 作者认为transformer encode block相对于CSPDarknet53块 能够捕获更多的全局信息和丰富的上下文信息。transformer encode block包含两子层:多头注意力层和全连接层。

Convolutional block attention module (CBAM):CBAM是一个轻量级且有效的模块,可轻易嵌入CNN框架中。给出一个特征图,CBAM可以在通道和空间上给出注意力图。CBAM如图5所示。实验表明CBAM对最终效果有巨大的提升。

Ms-testing and model ensemble:本文在不同视角训练五个不同的模型。推理时,使用ms-testing策略:1. 缩放图像至原图的1.3倍。2. 分别把图像缩小1倍,0.83倍,0.67倍。3. 水平翻转图像。最终获取6个人不同尺度的图像,并使用nms融合预测结果。 不同模型使用相同的ms-testing操作,最终通过WBF融合5个模型的预测结果。

Self-trained classifier:自训练分类器,主要对一些预测的检测框很准确但是对分类能力较差的类别从原图上剪切出来,并resize到64*64大小,使用ResNet18做一个分类网络,最终结果提升0.8%~1.0%的AP。

4. 实验

数据集:VisDrone 2021。

测试集:VisDrone 2021中的testset-challenge,testset-dev

测评指标:mAP([0.5:0.95],AP50)

4.1 实现细节

pytorch版本:1.8.1

算法:TPH-YOLOv5

显卡:NVIDIA RTX3090 GPU (训练和测试)

预训练模型:yolov5x。因为TPH-YOLOv5和YOLOv5共享大部分backbone(block 0~8)和部分head(block 10~13 和 block 15~18)。

训练epoch:65 epoch。因为训练集较少。

warm-up:2 epoch。

优化器:adam optimizer。

初始学习率:3e-4。

schedule:cosine lr。

last epoch学习率:衰减到初始学习率的0.12倍。

输入图像尺寸:最长边1536个像素

batch size:2

数据分析:模型训练前先遍历整个数据,对提高mAP是有很大帮助的。本文分析VisDrone2021训练集的bounding boxes,当输入是1536时,有622 / 342391个label框小于3个像素的,如图7所示。对训练集做预处理:用灰色方块覆盖小目标,在训练的话mAP提高了0.2。

多尺度测试:训练时使用多种数据增强方式提高模型效果,那么测试时使用数据增强,理论上也能够带来性能的提升。本文使用三种不同尺寸的图像做测试,并且每种尺寸图像做翻转增强,所以一张测试图像共获取6张不同的图像。然后测试这6张不同图像,融合他们的结果,得到最终结果。

4.2 对比sota算法

对比数据集:VisDrone2021-DET testset-challenge。

受比赛服务器的限制,本文只得到了4个模型在测试集挑战上的结果和5个模型集成的最终结果。

效果mAP:39.18(VisDrone2021) > 38.37(VisDrone2020)

比赛排名:5名,比第一名39.43,低了0.25。 如果没有提交次数限制,本算法将获取更高的排名。

table1 是历年VisDrone比赛得分和提交算法的对比。

4.3 消融实验

测试数据集:VisDrone2021-DET testset-dev。

table 2就是本文算法的消融实验结果,添加对应模块的效果。

有效额外预测头:增加小目标检测头,yolov5x层的数量有607增加到719。GFLOPs:219.0 -> 259.0。虽然计算量增加了,但是效果也有很大的提升。如图9所示,小目标的检测效果有很大的提升,所以增加计算量是值得的。

有效的transformer编码块:使用transformer encoder block后,模型层数由719 -> 705,GFLOPs由259.0 -> 237.3。使用transformer encoder block不仅能够提高mAP,还能够降低网络尺寸。同时,在稠密目标和大目标检测中,扮演者重要角色。

有效的模型集成:table 3是5个不同模型在每个分类上的最终融合结果和对比。 每个模型都是不一样的:In training phrase, we use different input image sizes and change the weight of each category to make each model unique.

这篇关于TPH-yolov5论文解读的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

MySQL中时区参数time_zone解读

《MySQL中时区参数time_zone解读》MySQL时区参数time_zone用于控制系统函数和字段的DEFAULTCURRENT_TIMESTAMP属性,修改时区可能会影响timestamp类型... 目录前言1.时区参数影响2.如何设置3.字段类型选择总结前言mysql 时区参数 time_zon

MySQL中的锁和MVCC机制解读

《MySQL中的锁和MVCC机制解读》MySQL事务、锁和MVCC机制是确保数据库操作原子性、一致性和隔离性的关键,事务必须遵循ACID原则,锁的类型包括表级锁、行级锁和意向锁,MVCC通过非锁定读和... 目录mysql的锁和MVCC机制事务的概念与ACID特性锁的类型及其工作机制锁的粒度与性能影响多版本

Redis过期键删除策略解读

《Redis过期键删除策略解读》Redis通过惰性删除策略和定期删除策略来管理过期键,惰性删除策略在键被访问时检查是否过期并删除,节省CPU开销但可能导致过期键滞留,定期删除策略定期扫描并删除过期键,... 目录1.Redis使用两种不同的策略来删除过期键,分别是惰性删除策略和定期删除策略1.1惰性删除策略

Redis与缓存解读

《Redis与缓存解读》文章介绍了Redis作为缓存层的优势和缺点,并分析了六种缓存更新策略,包括超时剔除、先删缓存再更新数据库、旁路缓存、先更新数据库再删缓存、先更新数据库再更新缓存、读写穿透和异步... 目录缓存缓存优缺点缓存更新策略超时剔除先删缓存再更新数据库旁路缓存(先更新数据库,再删缓存)先更新数

C#反射编程之GetConstructor()方法解读

《C#反射编程之GetConstructor()方法解读》C#中Type类的GetConstructor()方法用于获取指定类型的构造函数,该方法有多个重载版本,可以根据不同的参数获取不同特性的构造函... 目录C# GetConstructor()方法有4个重载以GetConstructor(Type[]

AI hospital 论文Idea

一、Benchmarking Large Language Models on Communicative Medical Coaching: A Dataset and a Novel System论文地址含代码 大多数现有模型和工具主要迎合以患者为中心的服务。这项工作深入探讨了LLMs在提高医疗专业人员的沟通能力。目标是构建一个模拟实践环境,人类医生(即医学学习者)可以在其中与患者代理进行医学

MCU7.keil中build产生的hex文件解读

1.hex文件大致解读 闲来无事,查看了MCU6.用keil新建项目的hex文件 用FlexHex打开 给我的第一印象是:经过软件的解释之后,发现这些数据排列地十分整齐 :02000F0080FE71:03000000020003F8:0C000300787FE4F6D8FD75810702000F3D:00000001FF 把解释后的数据当作十六进制来观察 1.每一行数据

Java ArrayList扩容机制 (源码解读)

结论:初始长度为10,若所需长度小于1.5倍原长度,则按照1.5倍扩容。若不够用则按照所需长度扩容。 一. 明确类内部重要变量含义         1:数组默认长度         2:这是一个共享的空数组实例,用于明确创建长度为0时的ArrayList ,比如通过 new ArrayList<>(0),ArrayList 内部的数组 elementData 会指向这个 EMPTY_EL

基于 YOLOv5 的积水检测系统:打造高效智能的智慧城市应用

在城市发展中,积水问题日益严重,特别是在大雨过后,积水往往会影响交通甚至威胁人们的安全。通过现代计算机视觉技术,我们能够智能化地检测和识别积水区域,减少潜在危险。本文将介绍如何使用 YOLOv5 和 PyQt5 搭建一个积水检测系统,结合深度学习和直观的图形界面,为用户提供高效的解决方案。 源码地址: PyQt5+YoloV5 实现积水检测系统 预览: 项目背景

论文翻译:arxiv-2024 Benchmark Data Contamination of Large Language Models: A Survey

Benchmark Data Contamination of Large Language Models: A Survey https://arxiv.org/abs/2406.04244 大规模语言模型的基准数据污染:一项综述 文章目录 大规模语言模型的基准数据污染:一项综述摘要1 引言 摘要 大规模语言模型(LLMs),如GPT-4、Claude-3和Gemini的快