YOLOv5 引入 最新 BiFusion Neck | 附详细结构图

news2024/11/23 22:14:15

在这里插入图片描述
YOLO 社区自前两次发布以来一直情绪高涨!随着中国农历新年2023兔年的到来,美团对YOLOv6进行了许多新的网络架构和训练方案改进。此版本标识为 YOLOv6 v3.0。对于性能,YOLOv6-N在COCO数据集上的AP为37.5%,通过NVIDIA Tesla T4 GPU测试的吞吐量为1187 FPS。YOLOv6-S以484 FPS的速度得到了超过45.0%的AP,超过了相同规模的其他主流检测器(YOLOv5-S、YOLOv8-S、YOLOX-S和PPYOLOE-S)。YOLOv6-M/L在相似的推理速度下也比其他检测器实现了更好的精度性能(分别为50.0%/52.8%)。此外,凭借扩展的Backbone和Neck设计,YOLOv6-L6实现了最先进的实时精度。


在这里插入图片描述

YOLOv6 3.0 结构

YOLOv6贡献

YOLOv6的新功能总结如下:

  1. 我们用双向级联(BiC)模块更新检测器的颈部,以提供更准确的定位信号。SPPF被简化为SimCSPSPF块,它带来了性能提高,速度下降可忽略不计。(SimCSPSPF和我之前提出的SPPFCSPC结构相同)
  2. 我们提出了一种锚辅助训练(AAT)策略,以在不影响推理效率的情况下,享受基于锚和无锚范例的优点。(这一点也比较有意思,v7作者在我的issue中是这么回答的issue)
  3. 我们深化 YOLOv6,使其在主干和颈部具有另一个阶段,这增强了它在 COCO 数据集上以高分辨率输入实现新的最先进性能。
  4. 我们采用了一种新的自蒸馏策略来提高 YOLOv6 小模型的性能,其中 DFL 的较重分支在训练期间被用作增强的辅助回归分支,并在推断时被移除,以避免显著的速度下降。

BiFusion Neck 融合的原理

BiFusion Neck 融合的原理其实并不是很难理解,有些博主解析的过于复杂,其实无非就是4步:

  1. 同尺度特征图使用 1×1 卷积降维;
  2. 大尺度特征图先使用 1×1 卷积降维,再使用 3×3 步长为 2 的卷积进行下采样
  3. 小尺度特征图 使用 2×2 的转置卷积进行上采样
  4. 然后将这三部分得到的特征图 Conca 拼接起来,使用 1×1 卷积再次降维;

BiFusion Neck结构图

我这里把YOLOv6的颈部网络完美移植到了YOLOv5


请添加图片描述

完整无水印高清结构图请关注博主本人公众号 `深度之灵` 回复 `bif` 领取;

参数量与计算量

模型参数量(parameters)计算量(GFLOPs)
yolov5s722588516.5
yolov5s BiFusion Neck739756517.5

很巧妙的改进~


代码修改方式:
yolo.py中加入nn.ConvTranspose2d
在这里插入图片描述


BiFusion Neck 配置文件

yolov5s-Bifusion.yaml

# YOLOv5 🚀 by Ultralytics, GPL-3.0 license
# by迪菲赫尔曼 ,仅供学习交流,别tm倒卖!
# Parameters
nc: 80  # number of classes
depth_multiple: 0.33  # model depth multiple
width_multiple: 0.50  # layer channel multiple
anchors:
  - [10,13, 16,30, 33,23]  # P3/8
  - [30,61, 62,45, 59,119]  # P4/16
  - [116,90, 156,198, 373,326]  # P5/32

# YOLOv5 v6.0 backbone
backbone:
  # [from, number, module, args]
  [[-1, 1, Conv, [64, 6, 2, 2]],  # 0-P1/2
   [-1, 1, Conv, [128, 3, 2]],  # 1-P2/4
   [-1, 3, C3, [128]],
   [-1, 1, Conv, [256, 3, 2]],  # 3-P3/8
   [-1, 6, C3, [256]],
   [-1, 1, Conv, [512, 3, 2]],  # 5-P4/16
   [-1, 9, C3, [512]],
   [-1, 1, Conv, [1024, 3, 2]],  # 7-P5/32
   [-1, 3, C3, [1024]],
   [-1, 1, SPPF, [1024, 5]],  # 9
  ]


# YOLOv5 v6.0 head
head:
  [[-1, 1, Conv, [512, 1, 1]], #10
   [-1, 1, nn.ConvTranspose2d, [512, 2, 2, 0, 0, 512]], #11
   [ 6, 1, Conv, [256, 1,1]],  #12
   [ 4, 1, Conv, [128, 1,1]],  #13
   [-1, 1, Conv, [128, 3,2]],  #14
   [[11, 12, 14], 1, Concat, [1]],  # cat backbone P4  #15

   [-1, 1, Conv, [512, 1,1]],    # 16
   [-1, 3, C3  , [512, False]],  # 17
   [-1, 1, Conv, [256, 1, 1]],   # 18
   [-1, 1, nn.ConvTranspose2d, [256, 2, 2, 0, 0, 256]], #19
   [ 4, 1, Conv, [ 128, 1,1 ] ],  #20
   [ 2, 1, Conv, [ 64, 1,1 ] ],   #21
   [-1, 1, Conv, [ 64, 3,2 ] ],   #22
   [[19, 20, 22], 1, Concat, [1]],  #23  cat backbone P3
   [-1, 1, Conv, [256, 1,1]],    #24
   [-1, 3, C3  , [256, False]],  #25 out

   [-1, 1, Conv, [256, 3, 2]],   #26
   [[-1, 18], 1, Concat, [1]],   #27  cat head P4
   [-1, 3, C3  , [512, False]],  #28 out (P4/16-medium)

   [-1, 1, Conv, [512, 3, 2]],   #29
   [[-1, 10], 1, Concat, [1]],   #30 cat head P5
   [-1, 3, C3  , [1024, False]], # 31 (P5/32-large)

   [[25, 28, 31], 1, Detect, [nc, anchors]],  # Detect(P3, P4, P5)
  ]

yolov5m-Bifusion.yaml

# YOLOv5 🚀 by Ultralytics, GPL-3.0 license
# by迪菲赫尔曼 ,仅供学习交流,别tm倒卖!
# Parameters
nc: 80  # number of classes
depth_multiple: 0.67  # model depth multiple
width_multiple: 0.75  # layer channel multiple
anchors:
  - [10,13, 16,30, 33,23]  # P3/8
  - [30,61, 62,45, 59,119]  # P4/16
  - [116,90, 156,198, 373,326]  # P5/32

# YOLOv5 v6.0 backbone
backbone:
  # [from, number, module, args]
  [[-1, 1, Conv, [64, 6, 2, 2]],  # 0-P1/2
   [-1, 1, Conv, [128, 3, 2]],  # 1-P2/4
   [-1, 3, C3, [128]],
   [-1, 1, Conv, [256, 3, 2]],  # 3-P3/8
   [-1, 6, C3, [256]],
   [-1, 1, Conv, [512, 3, 2]],  # 5-P4/16
   [-1, 9, C3, [512]],
   [-1, 1, Conv, [1024, 3, 2]],  # 7-P5/32
   [-1, 3, C3, [1024]],
   [-1, 1, SPPF, [1024, 5]],  # 9
  ]


# YOLOv5 v6.0 head
head:
  [[-1, 1, Conv, [512, 1, 1]], #10
   [-1, 1, nn.ConvTranspose2d, [512, 2, 2, 0, 0, 512]], #11
   [ 6, 1, Conv, [256, 1,1]],  #12
   [ 4, 1, Conv, [128, 1,1]],  #13
   [-1, 1, Conv, [128, 3,2]],  #14
   [[11, 12, 14], 1, Concat, [1]],  # cat backbone P4  #15

   [-1, 1, Conv, [512, 1,1]],    # 16
   [-1, 3, C3  , [512, False]],  # 17
   [-1, 1, Conv, [256, 1, 1]],   # 18
   [-1, 1, nn.ConvTranspose2d, [256, 2, 2, 0, 0, 256]], #19
   [ 4, 1, Conv, [ 128, 1,1 ] ],  #20
   [ 2, 1, Conv, [ 64, 1,1 ] ],   #21
   [-1, 1, Conv, [ 64, 3,2 ] ],   #22
   [[19, 20, 22], 1, Concat, [1]],  #23  cat backbone P3
   [-1, 1, Conv, [256, 1,1]],    #24
   [-1, 3, C3  , [256, False]],  #25 out

   [-1, 1, Conv, [256, 3, 2]],   #26
   [[-1, 18], 1, Concat, [1]],   #27  cat head P4
   [-1, 3, C3  , [512, False]],  #28 out (P4/16-medium)

   [-1, 1, Conv, [512, 3, 2]],   #29
   [[-1, 10], 1, Concat, [1]],   #30 cat head P5
   [-1, 3, C3  , [1024, False]], # 31 (P5/32-large)

   [[25, 28, 31], 1, Detect, [nc, anchors]],  # Detect(P3, P4, P5)
  ]

在这里插入图片描述

本代码仅供学习交流使用,切勿倒卖,转载请注明出处 !!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

99.恢复二叉搜索树

99.恢复二叉搜索树 1、题目描述 题目的额外要求是: 使用 O(n) 空间复杂度的解法很容易实现。你能想出一个只使用 O(1) 空间的解决方案吗? 2、解题思路 二叉搜索树中某两个节点被交换了数值,那么对中序序列的影响如下: 假设没有交换之前二叉…

活动星投票千人共读一本书网络评选微信的投票方式线上免费投票

“千人共读一本书”网络评选投票_视频投票评选_投票统计小程序_微信不记名投票用户在使用微信投票的时候,需要功能齐全,又快捷方便的投票小程序。而“活动星投票”这款软件使用非常的方便,用户可以随时使用手机微信小程序获得线上投票服务&am…

正则表达式和re模块

目录 一.基础匹配 1.什么是正则表达式 re模块三个基础方法 re.match(匹配规则,被匹配字符串) search(匹配规则,被匹配字符串) findall(匹配规则,被匹配字符串) 小结 二.元字符匹配 单字符匹配: 示例: 数量匹配 边界匹配 分组匹配…

【Java】【系列篇】【Spring源码解析】【三】【体系】【BeanFactory体系】

BeanFactory体系BeanFactory整体结构体系图顶层接口-BeanFactory1.1、描述1.2、方法解析(15个)1.2.1、属性1.2.2、获取bean实例1.2.3、获取bean的提供者(对象工厂)1.2.4、判断是否包含bean1.2.5、单例,原型,bean类型的判断1.2.6、…

SAP ABAP——SAP包(二)【CTS | 传输请求】

💂作者简介: THUNDER王,一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学会计专业大二本科在读,阿里云社区专家博主,华为云社区云享专家,CSDN SAP应用技术领域新兴创作者。   在学习工…

CentOS7.9配置Nginx反向代理+NodeJS部署上线

Nginx配置 Nginx是一个高性能的HTTP和反向代理服务,许多的大型网站都会采用Nginx来进行HTTP服务器托管 安装编译环境gcc g 进入到root目录: yum -y install make zlib zlib-devel gcc-c libtool openssl openssl-devel 安装PCRE PCRE功能时让Ngi…

ue4c++日记3(碰撞报告碰撞位置|力和扭矩)

目录 代码速查 根据世界方向/局部方向移动 根据世界方向/局部方向旋转 加力加扭矩 1碰撞并报告碰撞位置 两个设为阻挡才会阻挡,其中一个是重叠就会重叠 2例子:旋转前进!/原地踏步? 3增加力和扭矩 1.头文件 2.cpp文件 …

(14)go-micro微服务服务层Handle开发

文章目录一 Handle层开发功能说明需要完成的服务开发功能:从哪找需要开发的功能二 代码编写三 最后一 Handle层开发功能说明 需要完成的服务开发功能: 登录注册查询用户信息修改信息发送注册邮件发送重置密码邮件重置密码获取权限修改权限退出账号删除…

【计算机视觉】梯度消失和爆炸以及解决方法

问题 梯度消失无论是笔试还是面试都是常客了,其实对应于梯度消失,还有一个梯度爆炸的概念,这又是什么导致的呢?下面我们将根据公式推导来解释何为梯度消失与梯度爆炸。 梯度消失和梯度爆炸的表现 网络层数越多,模型训练的时候便越容易出现 梯度消失(gradient vanish) 和…

史上最全| 14种自动化分拣系统合集

导语大家好,我是智能仓储物流技术研习社的社长,你的老朋友,老K。新书上市《智能物流系统构成与技术实践》2023年度-厂商宣传合作位--->点击详情本文为研习社原创,违规转载必究01移栽式02偏转轮式03扫臂式04滑靴式05侧向翻转06推…

C++设计模式(3)——抽象工厂模式

抽象工厂模式 亦称: Abstract Factory 意图 抽象工厂模式是一种创建型设计模式, 它能创建一系列相关的对象, 而无需指定其具体类。 问题 假设你正在开发一款家具商店模拟器。 你的代码中包括一些类, 用于表示: …

Vue3系列二:如何实现对响应式数据的代理

上一篇文章中,我们讲解了 Vue3 中对响应式系统的实现,本章节会更进一步的从数据层面分享 Vue3 中对响应式数据是如何进行代理的,本文主要从引用类型数据和基本类型数据两个方面进行讲解。 实现数据代理的基础 理解 Proxy 和 Reflect 首先&…

26.Isaac教程--导航算法

导航算法 本节详细介绍导航算法。 ISAAC教程合集地址: https://blog.csdn.net/kunhe0512/category_12163211.html 文章目录导航算法全局路径规划器规划器模型可见性图算法优化器轨迹规划器全局路径规划器 Isaac 框架中的全局规划器问题被分解为三类:规划器模型、…

SpringBoot使用Swagger2

SpringBoot使用Swagger21.引入swagger依赖2.添加swagger配置类3.测试Controller4.测试5.swagger的注解Api注解ApiOperation注解ApiImplicitParam、ApiImplicitParams注解ApiParam注解ApiResponse、ApiResponses注解ResponseHeader注解ApiModel、ApiModelProperty注解6.更多1.引…

Redis 分布式锁实现文章集锦

前言近两年来微服务变得越来越热门,越来越多的应用部署在分布式环境中,在分布式环境中,数据一致性是一直以来需要关注并且去解决的问题,分布式锁也就成为了一种广泛使用的技术,常用的分布式实现方式为Redis&#xff0c…

PDF压缩在线怎么操作?这几个操作谁还不知道

我们在工作里经常处理非常多的文件,如果每个文件都要储存到设备上是非常困难的,因为这需要占用大量的内存,所以我们需要将PDF文件进行压缩,这样就可以释放我们设备的储存空间,不过对于很多人来说,压缩文件并…

自学Java篇之JFrame创建《石头迷阵小游戏》

自学Java篇之JFrame创建《石头迷阵小游戏》 根据黑马程序员java教程自学完java基础,觉得石头迷阵小游戏案例具有一定的编程练习价值,记录之。 最终效果: 案例主要思想流程: ​ 主要是思想是创建一个4*4的二维数组data&#xff…

【openGauss实战5】表管理及CURD

📢📢📢📣📣📣 哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10余年DBA工作经验 一位上进心十足的【大数据领域博主】!😜&#x1f61…

汽车网络技术概述

车辆总线是一个专门的内部通信网络,将车辆(如汽车、公共汽车、火车、工业或农业车辆、船舶或飞机)内的部件相互连接。在电子学中,总线只是一个将多个电气或电子设备连接在一起的设备。车辆控制的特殊要求,如保证信息传…

数据分析-深度学习 Pytorch Day7

图像识别:CIFAR10图形识别1.CIFAR10数据集共有60000张彩色图像,这些图像式32*32*3,分为10个类,每个类6000张2.这里面有50000张用于训练,构成5个训练批,每一批10000张图;另外10000张用于测试&…