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

相关文章

java之Objects.nonNull用法代码解读

《java之Objects.nonNull用法代码解读》:本文主要介绍java之Objects.nonNull用法代码,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录Java之Objects.nonwww.chinasem.cnNull用法代码Objects.nonN

SpringCloud负载均衡spring-cloud-starter-loadbalancer解读

《SpringCloud负载均衡spring-cloud-starter-loadbalancer解读》:本文主要介绍SpringCloud负载均衡spring-cloud-starter-loa... 目录简述主要特点使用负载均衡算法1. 轮询负载均衡策略(Round Robin)2. 随机负载均衡策略(

解读spring.factories文件配置详情

《解读spring.factories文件配置详情》:本文主要介绍解读spring.factories文件配置详情,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录使用场景作用内部原理机制SPI机制Spring Factories 实现原理用法及配置spring.f

Spring MVC使用视图解析的问题解读

《SpringMVC使用视图解析的问题解读》:本文主要介绍SpringMVC使用视图解析的问题解读,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Spring MVC使用视图解析1. 会使用视图解析的情况2. 不会使用视图解析的情况总结Spring MVC使用视图

Linux中的进程间通信之匿名管道解读

《Linux中的进程间通信之匿名管道解读》:本文主要介绍Linux中的进程间通信之匿名管道解读,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、基本概念二、管道1、温故知新2、实现方式3、匿名管道(一)管道中的四种情况(二)管道的特性总结一、基本概念我们知道多

Linux系统之authconfig命令的使用解读

《Linux系统之authconfig命令的使用解读》authconfig是一个用于配置Linux系统身份验证和账户管理设置的命令行工具,主要用于RedHat系列的Linux发行版,它提供了一系列选项... 目录linux authconfig命令的使用基本语法常用选项示例总结Linux authconfi

解读docker运行时-itd参数是什么意思

《解读docker运行时-itd参数是什么意思》在Docker中,-itd参数组合用于在后台运行一个交互式容器,同时保持标准输入和分配伪终端,这种方式适合需要在后台运行容器并保持交互能力的场景... 目录docker运行时-itd参数是什么意思1. -i(或 --interactive)2. -t(或 --

解读为什么@Autowired在属性上被警告,在setter方法上不被警告问题

《解读为什么@Autowired在属性上被警告,在setter方法上不被警告问题》在Spring开发中,@Autowired注解常用于实现依赖注入,它可以应用于类的属性、构造器或setter方法上,然... 目录1. 为什么 @Autowired 在属性上被警告?1.1 隐式依赖注入1.2 IDE 的警告:

Rust中的注释使用解读

《Rust中的注释使用解读》本文介绍了Rust中的行注释、块注释和文档注释的使用方法,通过示例展示了如何在实际代码中应用这些注释,以提高代码的可读性和可维护性... 目录Rust 中的注释使用指南1. 行注释示例:行注释2. 块注释示例:块注释3. 文档注释示例:文档注释4. 综合示例总结Rust 中的注释

解读Pandas和Polars的区别及说明

《解读Pandas和Polars的区别及说明》Pandas和Polars是Python中用于数据处理的两个库,Pandas适用于中小规模数据的快速原型开发和复杂数据操作,而Polars则专注于高效数据... 目录Pandas vs Polars 对比表使用场景对比Pandas 的使用场景Polars 的使用