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

相关文章

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作为缓存层的优势和缺点,并分析了六种缓存更新策略,包括超时剔除、先删缓存再更新数据库、旁路缓存、先更新数据库再删缓存、先更新数据库再更新缓存、读写穿透和异步... 目录缓存缓存优缺点缓存更新策略超时剔除先删缓存再更新数据库旁路缓存(先更新数据库,再删缓存)先更新数

深入探讨Java 中的 Object 类详解(一切类的根基)

《深入探讨Java中的Object类详解(一切类的根基)》本文详细介绍了Java中的Object类,作为所有类的根类,其重要性不言而喻,文章涵盖了Object类的主要方法,如toString()... 目录1. Object 类的基本概念1.1 Object 类的定义2. Object 类的主要方法3. O

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

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

Retrieval-based-Voice-Conversion-WebUI模型构建指南

一、模型介绍 Retrieval-based-Voice-Conversion-WebUI(简称 RVC)模型是一个基于 VITS(Variational Inference with adversarial learning for end-to-end Text-to-Speech)的简单易用的语音转换框架。 具有以下特点 简单易用:RVC 模型通过简单易用的网页界面,使得用户无需深入了

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