【论文解读】TPH-YOLOv5: Improved YOLOv5 Based on Transformer Prediction Head for Object Detection on Drone

本文主要是介绍【论文解读】TPH-YOLOv5: Improved YOLOv5 Based on Transformer Prediction Head for Object Detection on Drone,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Abstract

存在问题
  1. 由于无人机会在不同的高度飞行,物体的尺度变化剧烈,这给网络的优化带来了负担。
  2. 高速和低空飞行对排列密集的物体带来了运动模糊,这对物体的区分带来了巨大挑战。
    在这里插入图片描述

文章提出的解决方法

在这里插入图片描述

  1. 增加一个检测头来检测不同规模的对象
  2. 用Transformer Prediction Heads 来替代原先的检测头
  3. 用CBAM来寻找具有密集对象的场景中的注意区域
  4. 除了以上三点,还使用了一些常用的tricks。例如:数据增强,多尺度测试,多模型集成,额外的分类器。

结果

  1. VisDrone2021挑战赛取得了第五名(AP39.18%)与第一名(AP39.43)差距很小。

Introduction

  1. 无人机场景下的图像主要有以下三个问题
    1. 尺度变化大
    2. 物体密集,造成遮挡
    3. 由于无人机拍摄场景覆盖面积大,图像中包含多种多样的地理元素
  2. 网络组成
    1. Backbone与Neck部分与YOLOv5一致
    2. 在Head部分,额外添加了一个检测头用来检测图片中的Tiny物体,这样整个的TPH-YOLOV5的检测头部分总共有四部分,分别是Tiny,Small,Medium,Large
    3. 将原始的检测头用TPH替代
    4. 加入CBAM,用来寻找感兴趣的区域
  3. 训练策略
    1. 采用数据增强,提升了网络对图像中尺度变化大的问题
    2. 推理阶段,采用多尺度测试和多模型集成策略
    3. 针对网络定位能力强,分类能力弱的问题,引入了一个ResNet18来更好的提高网络分类能力。

TPH-YOLOv5

  1. Prediction head for tiny objects
    作者通过分析VisDrone数据集,发现数据集中存在许多小物体,因此加入了一个用于检测Tiny物体的检测头
  2. Transformer encoder block
    1. 作者认为Transformer能够更好的捕获全局信息,因此替换掉了一些卷积层,得出transformer encoder blocks在处理密集物体场景中拥有更好的表现。
    2. 将transformer encoder blocks 放在backbone的尾部以及head部分的原因是为了特征图分辨率较低,能够有效降低昂贵的计算和内存成本
  3. Convolutional block attention module(CBAM)
    用于网络在处理令人困惑的地理区域时,能够更改好的专注于有用的目标对象
  4. Ms-testing and model ensemble.
    常规操作
  5. Self-trained classifier.
    针对网络定位能力强,分类能力弱的问题,引入了一个ResNet18来更好的提高网络分类能力。

Experiments

  1. Pytorch版本:1.81.
  2. 显卡版本:RTX3090
  3. 训练阶段具体细节
    1. 使用yolo5x预训练好权重,然后在此基础上用TPH-YOLOv5训练
    2. 由于VisDrone数据集比较小,因此只训练65个eopch,前2个用来warm-up
    3. 使用 adam optimizer,初始余弦学习率为3e-4
    4. 最后一个epoch的学习率,衰减到初始学习的0.12
    5. 由于图像分辨率比较大,因此使用的batch-size为2
      在这里插入图片描述

这篇关于【论文解读】TPH-YOLOv5: Improved YOLOv5 Based on Transformer Prediction Head for Object Detection on Drone的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

C语言自定义类型之联合和枚举解读

《C语言自定义类型之联合和枚举解读》联合体共享内存,大小由最大成员决定,遵循对齐规则;枚举类型列举可能值,提升可读性和类型安全性,两者在C语言中用于优化内存和程序效率... 目录一、联合体1.1 联合体类型的声明1.2 联合体的特点1.2.1 特点11.2.2 特点21.2.3 特点31.3 联合体的大小1

Python标准库datetime模块日期和时间数据类型解读

《Python标准库datetime模块日期和时间数据类型解读》文章介绍Python中datetime模块的date、time、datetime类,用于处理日期、时间及日期时间结合体,通过属性获取时间... 目录Datetime常用类日期date类型使用时间 time 类型使用日期和时间的结合体–日期时间(

C语言中%zu的用法解读

《C语言中%zu的用法解读》size_t是无符号整数类型,用于表示对象大小或内存操作结果,%zu是C99标准中专为size_t设计的printf占位符,避免因类型不匹配导致错误,使用%u或%d可能引发... 目录size_t 类型与 %zu 占位符%zu 的用途替代占位符的风险兼容性说明其他相关占位符验证示

Linux系统之lvcreate命令使用解读

《Linux系统之lvcreate命令使用解读》lvcreate是LVM中创建逻辑卷的核心命令,支持线性、条带化、RAID、镜像、快照、瘦池和缓存池等多种类型,实现灵活存储资源管理,需注意空间分配、R... 目录lvcreate命令详解一、命令概述二、语法格式三、核心功能四、选项详解五、使用示例1. 创建逻

Python错误AttributeError: 'NoneType' object has no attribute问题的彻底解决方法

《Python错误AttributeError:NoneTypeobjecthasnoattribute问题的彻底解决方法》在Python项目开发和调试过程中,经常会碰到这样一个异常信息... 目录问题背景与概述错误解读:AttributeError: 'NoneType' object has no at

解读GC日志中的各项指标用法

《解读GC日志中的各项指标用法》:本文主要介绍GC日志中的各项指标用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、基础 GC 日志格式(以 G1 为例)1. Minor GC 日志2. Full GC 日志二、关键指标解析1. GC 类型与触发原因2. 堆

Java设计模式---迭代器模式(Iterator)解读

《Java设计模式---迭代器模式(Iterator)解读》:本文主要介绍Java设计模式---迭代器模式(Iterator),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录1、迭代器(Iterator)1.1、结构1.2、常用方法1.3、本质1、解耦集合与遍历逻辑2、统一

MySQL之InnoDB存储页的独立表空间解读

《MySQL之InnoDB存储页的独立表空间解读》:本文主要介绍MySQL之InnoDB存储页的独立表空间,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、独立表空间【1】表空间大小【2】区【3】组【4】段【5】区的类型【6】XDES Entry区结构【

MySQL主从复制与读写分离的用法解读

《MySQL主从复制与读写分离的用法解读》:本文主要介绍MySQL主从复制与读写分离的用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、主从复制mysql主从复制原理实验案例二、读写分离实验案例安装并配置mycat 软件设置mycat读写分离验证mycat读

Python的端到端测试框架SeleniumBase使用解读

《Python的端到端测试框架SeleniumBase使用解读》:本文主要介绍Python的端到端测试框架SeleniumBase使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全... 目录SeleniumBase详细介绍及用法指南什么是 SeleniumBase?SeleniumBase