【论文解读】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

相关文章

Linux jq命令的使用解读

《Linuxjq命令的使用解读》jq是一个强大的命令行工具,用于处理JSON数据,它可以用来查看、过滤、修改、格式化JSON数据,通过使用各种选项和过滤器,可以实现复杂的JSON处理任务... 目录一. 简介二. 选项2.1.2.2-c2.3-r2.4-R三. 字段提取3.1 普通字段3.2 数组字段四.

MySQL之搜索引擎使用解读

《MySQL之搜索引擎使用解读》MySQL存储引擎是数据存储和管理的核心组件,不同引擎(如InnoDB、MyISAM)采用不同机制,InnoDB支持事务与行锁,适合高并发场景;MyISAM不支持事务,... 目录mysql的存储引擎是什么MySQL存储引擎的功能MySQL的存储引擎的分类查看存储引擎1.命令

Spring的基础事务注解@Transactional作用解读

《Spring的基础事务注解@Transactional作用解读》文章介绍了Spring框架中的事务管理,核心注解@Transactional用于声明事务,支持传播机制、隔离级别等配置,结合@Tran... 目录一、事务管理基础1.1 Spring事务的核心注解1.2 注解属性详解1.3 实现原理二、事务事

Linux五种IO模型的使用解读

《Linux五种IO模型的使用解读》文章系统解析了Linux的五种IO模型(阻塞、非阻塞、IO复用、信号驱动、异步),重点区分同步与异步IO的本质差异,强调同步由用户发起,异步由内核触发,通过对比各模... 目录1.IO模型简介2.五种IO模型2.1 IO模型分析方法2.2 阻塞IO2.3 非阻塞IO2.4

MySQL8.0临时表空间的使用及解读

《MySQL8.0临时表空间的使用及解读》MySQL8.0+引入会话级(temp_N.ibt)和全局(ibtmp1)InnoDB临时表空间,用于存储临时数据及事务日志,自动创建与回收,重启释放,管理高... 目录一、核心概念:为什么需要“临时表空间”?二、InnoDB 临时表空间的两种类型1. 会话级临时表

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