YOLO算法改进Backbone系列之:PVT

摘要:尽管基于CNNs的backbone在多种视觉任务中取得重大进展,但本文提出了一个用于密集预测任务的、无CNN的的简单backbone——Pyramid Vision Transformer(PVT)。相比于ViT专门用于图像分类的设计,PVT将金字塔结构引入到transformer,使得可以进行下游各种密集预测任务,如检测、分割等。与现有技术相比,PVT有如下优点:(1)相比于ViT的低分辨率输出、高计算复杂度、高内存占用,PVT不仅可以对图像进行密集划分训练以达到搞输出分辨率的效果(这对密集预测很重要),还可以使用一个逐渐缩小的金字塔来降低大feature maps的计算量;(2)PVT兼具了CNNs和Transformer的优点,使其成为一个通用的无卷积backbone,可以直接替换基于CNN的backbone;(3)大量实验表明,PVT可以提高多种下游任务的性能,如目标检测、语义/实例分割等。比如,参数量相当的情况下, RetinaNet+PVT可以在COCO上达到40.4AP,而RetinNet+ResNet50只有36.3AP。作者希望PVT能够成为像素级预测任务的一种可供选择的backbone,并促进后续的研究。

CNN通过stack CNN 层来学习一个层次化的feature representations, 并且随着层数的增加,感受野越来越大, channel数越来越大,feature map尺寸越来越小,然后后边连接一到多个特定的任务网络来执行具体的任务;
如图b, 经典的ViT是一个柱式结构,实际上就是stack transformer block, 为了把NLP中的Transformer用到Vision中,惯用做法是通过网格化把feature转化为sequence of patches,每个patches的尺寸一般为32 x 32,
如图c即为所提出的Pyramid Vision Transformer (PVT), 也是首先把figure 转化为Sequence of patches, 从结构来说也是学习一个层次化的representation,只不过基本的building block 已经由 Conv. 替换为 Attention module.
在这里插入图片描述

PVT和ViT都是纯Transformer的模型,没有任何卷积操作,而两者主要的不同在于PVT引入了特征金字塔结构。在ViT中,使用的是传统Transformer,其输入与输出尺寸相同。由于资源限制,ViT的输出只能是一个比较粗糙的feature map,如1616、3232,相应的其输出步幅也比较低,如16步长、32步长。结果就导致ViT很难直接用于那些对分辨率要求比较高的密集预测任务。PVT通过引入渐进缩减金字塔打破了Transformer的这种限制,可以像传统CNN backbone那样生成多尺度feature map。此外,还设计了一个简单有效的注意力层—SRA,来处理高分辨率feature maps并减低计算复杂度和内存消耗。总的来说,PVT相比ViT有如下优势:
(1)更加灵活:可以在不同的stage生成不同分辨率、通道的feature maps
(2)更加通用:可以轻松嵌入到大多下游任务的模型中
(3)对计算、内存更加友好:可以处理高分辨率的feature maps
在这里插入图片描述
在这里插入图片描述

PVT模型变体配置信息
在这里插入图片描述

在YOLOv5项目中添加模型作为Backbone使用的教程:
(1)将YOLOv5项目的models/yolo.py修改parse_model函数以及BaseModel的_forward_once函数
在这里插入图片描述
在这里插入图片描述

(2)在models/backbone(新建)文件下新建pvt.py,添加如下的代码:
在这里插入图片描述

(3)在models/yolo.py导入模型并在parse_model函数中修改如下(先导入文件):
在这里插入图片描述

(4)在model下面新建配置文件:yolov5_pvt.yaml
在这里插入图片描述

(5)运行验证:在models/yolo.py文件指定–cfg参数为新建的yolov5_pvt.yaml
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/599209.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python常用算法--解决数据结构问题【附源码】

一、约瑟夫环问题 解释:约瑟夫环(Josephus Problem)是一个著名的数学问题,它描述了一个关于围坐一圈的人进行游戏的场景。游戏规则是从一个人开始,顺序报数,每报到特定数目的人将会被排除出圈子,然后从被排除的下一人开始继续报数,游戏继续进行直到最后剩下一个人。 …

SAP 资产管理中如何调整折旧(摊销)金额

在资产管理的日常中可能涉及资产折旧金额的调整(或者需要调增折旧,或者调减折旧额)。这是需要使用到事务代码ABAA或者ABMA。在SAP中,ABAA和ABMA是两个不同的事务代码,它们都与固定资产折旧相关,但用途和处理…

使用pytorch构建有监督的条件GAN(conditional GAN)网络模型

本文为此系列的第四篇conditional GAN,上一篇为WGAN-GP。文中在无监督的基础上重点讲解作为有监督对比无监督的差异,若有不懂的无监督知识点可以看本系列第一篇。 原理 有条件与无条件 如图投进硬币随机得到一个乒乓球的例子可以看成是一个无监督的GAN&…

pytorch交叉熵

目录 1. Entropy2. 交叉熵3. 二分类4. 为什么分类问题使用交叉熵5. 代码示例 1. Entropy Entropy中文是熵的意思,它代表一种不确定性,不确定性越高惊喜度也就越高。 如上图,假设熵代表中奖概率,当熵为2 的中奖概率为1/4没什么惊…

c++的学习之路:15、list(2)

本章主要是讲模拟实现list,文章末附上代码。 目录 一、创建思路 二、构造函数 三、迭代器 四、增删 五、代码 一、创建思路 如下方代码,链表是由一块一块不连续的空间组成的,所以这里写了三个模板,一个是节点,一…

【论文速读】| 大语言模型平台安全:将系统评估框架应用于OpenAI的ChatGPT插件

本次分享论文为:LLM Platform Security: Applying a Systematic Evaluation Framework to OpenAI’s ChatGPT Plugins 基本信息 原文作者:Umar Iqbal, Tadayoshi Kohno, Franziska Roesner 作者单位:华盛顿大学圣路易斯分校,华盛…

OpenResty基于来源IP和QPS来限流

桶原理 我们可以想像: 有一只上面进水、下面匀速出水的桶,如果桶里面有水,那刚进去的水就要存在桶里等下面的水流完之后才会流出,如果进水的速度大于水流出的速度,桶里的水就会满,这时水就不会进到桶里,而…

【新手上路】C#联合Halcon第一个demo搭建

前言 学习Halcon目的是能够利用C#封装成一个视觉的上位机应用配合机器人或者过程控制来提高生产的效率,尤其是在检测外观和定位方面的应用。现在我们就来搭建第一个demo。让他们能够跑起来! Halcon方面 打开Halcon软件,然后先随便写一个代…

electron-egg 如何把任意网站变成桌面软件

以前,开发一个桌面软件要花费大量的人力和时间。现在随着Electron的出现,大大简化了开发门槛。今天,给大家介绍一个工具,让你5分钟之内就把一个网站变成一个可安装的桌面软件。 所需工具 electron-egg是一个简单、快速、功能丰富…

日期时间相关的类

分界线jdk8 jdk8之前和之后分别提供了一些日期和时间的类,推荐使用jdk8之后的日期和时间类 Date类型 这是一个jdk8之前的类型,其中有很多方法已经过时了,选取了一些没有过时的API //jdk1.8之前的日期 Date Date date new Date(); // 从1970年…

解决 macOS 系统向日葵远程控制鼠标、键盘无法点击的问题

解决 macOS 系统向日葵远程控制鼠标\键盘无法点击的问题 1、首先正常配置,在系统偏好设置 - 安全性与隐私内,将屏幕录制、文件和文件夹、完全的磁盘访问权限、辅助功能全部都加入向日葵客户端 2、通过打开的文件访达,使用command shift G…

leetcode代码记录(下一个更大元素 I

目录 1. 题目:2. 我的代码:小结: 1. 题目: nums1 中数字 x 的 下一个更大元素 是指 x 在 nums2 中对应位置 右侧 的 第一个 比 x 大的元素。 给你两个 没有重复元素 的数组 nums1 和 nums2 ,下标从 0 开始计数&#x…