当前位置: 首页 > news >正文

YOLOV7详细解读(一)网络架构解读

YOLOV7详细解读

网络架构解读

  • YOLOV7详细解读
  • 前言
  • 一、YOLOV7是什么?
  • 二、网络架构
    • 1、架构图总览
    • 2、CBS模块解读
    • 3、CBW模块解读
    • 4、REP模块解读
    • 5、MP模块解读
    • 6、ELAN模块解读
    • 6、ELAN-W模块解读
    • 6、SPPCSPC模块解读


前言

继美团发布YOLOV6之后,YOLO系列原作者也发布了YOLOV7。
YOLOV7主要的贡献在于:

1.模型重参数化
YOLOV7将模型重参数化引入到网络架构中,重参数化这一思想最早出现于REPVGG中。
2.标签分配策略
YOLOV7的标签分配策略采用的是YOLOV5的跨网格搜索,以及YOLOX的匹配策略。
3.ELAN高效网络架构
YOLOV7中提出的一个新的网络架构,以高效为主。
4.带辅助头的训练
YOLOV7提出了辅助头的一个训练方法,主要目的是通过增加训练成本,提升精度,同时不影响推理的时间,因为辅助头只会出现在训练过程中。


提示:以下是本篇文章正文内容,下面案例可供参考

一、YOLOV7是什么?

YOLO算法作为one-stage目标检测算法最典型的代表,其基于深度神经网络进行对象的识别和定位,运行速度很快,可以用于实时系统。
YOLOV7是目前YOLO系列最先进的算法,在准确率和速度上超越了以往的YOLO系列。
了解YOLO是对目标检测算法研究的一个必须步骤。

二、网络架构

1、架构图总览

请添加图片描述

2、CBS模块解读

  • 对于CBS模块,我们可以看从图中可以看出它是由一个Conv层,也就是卷积层,一个BN层,也就是Batch normalization层,还有一个Silu层,这是一个激活函数。
  • silu激活函数是swish激活函数的变体,两者的公式如下所示
silu(x)=x⋅sigmoid(x)
swish(x)=x⋅sigmoid(βx)

在这里插入图片描述

  • 从架构图中我们可以看出,CBS模块这里有三种颜色,三种颜色代表它们的卷积核(k)和步长(s)不同。
    首先最浅的颜色,也就是第一个CBS模块的颜色,它是一个1x1的卷积,stride(步长为1)。
    其次稍浅的颜色,也就是第二个CBS模块的颜色,它是一个3x3的卷积,stride(步长为1)。
    最后最深的颜色,也就是第三个CBS模块的颜色,它是一个3x3的卷积,stride(步长为2)。
  • 1x1的卷积主要用来改变通道数。
  • 3x3的卷积,步长为1,主要用来特征提取。
  • 3x3的卷积,步长为2,主要用来下采样。

3、CBW模块解读

  • CBW模块和CBS模块,我们可以看出来是基本一致的。
  • 由一个Conv层,也就是卷积层,一个BN层,也就是Batch normalization层,还有一个sigmoid层,这是一个激活函数。
  • 卷积核为1x1,stride(步长为1)

4、REP模块解读

  • REP模块分为两个,一个是train,也就是训练,一个deploy,也就是推理。
  • 训练模块,它有三个分支。
    最上面的分支是3x3的卷积,用于特征提取。
    中间的分支是1x1的卷积,用于平滑特征。
    最后分支是一个Identity,不做卷积操作,直接移过来。

    最后把它们相加在一起。
  • 推理模块,包含一个3x3的卷积,stride(步长为1)。是由训练模块重参数化转换而来。
    在训练模块中,因为第一层是一个3x3的卷积,第二层是一个1x1的卷积,最后层是一个Identity。
    在模型从参数化的时候,需要把1x1的卷积啊,转换成3x3的卷积,把Identity也转换成3x3的卷积,然后进行一个矩阵的一个加法,也就是一个矩阵融合过程。
    然后最后将它的权重进行相加,就得到了一个3x3的卷积,也就是说,这三个分支就融合成了一一条线,里面只有一个3x3的卷积。
    它们的权重是三个分支的叠加结果,矩阵,也是三个分支的叠加结果。

5、MP模块解读

待更新

6、ELAN模块解读

待更新

6、ELAN-W模块解读

待更新

6、SPPCSPC模块解读

待更新

相关文章:

  • 【侯捷C++-----STL与泛型编程】
  • es6对象的扩展、对象的新增方法
  • Stream流
  • DRM系列(8)之prepare_signaling
  • 企业级C++项目那些事(1):VSQt相关设置
  • 基于51单片机温湿度控制器proteus仿真设计
  • adb常用命令总结[持续更新]
  • 二分查找练习
  • 【Unity面试】 Lua语言基础核心 | 面试真题 | 全面总结 | 建议收藏
  • 结构化编程(SP,structured programming)
  • Python 博客园快速备份脚本
  • Vue - 列表拖曳排序 / 鼠标拖动改变顺序排列高效简洁组件(支持PC端与移动端触屏拖动,也可在滚动条内排序自动滚动,流畅丝滑无 BUG)
  • JavaWeb三大组件之Servlet------Servlet详细讲解
  • 解决nacos集群搭建,服务注册失败
  • 瑞吉外卖Linux
  • [ JavaScript ] 数据结构与算法 —— 链表
  • 【JavaScript】通过闭包创建具有私有属性的实例对象
  • android百种动画侧滑库、步骤视图、TextView效果、社交、搜房、K线图等源码
  • angular2开源库收集
  • Apache的基本使用
  • CEF与代理
  • conda常用的命令
  • CSS3 变换
  • golang 发送GET和POST示例
  • HTTP那些事
  • iOS小技巧之UIImagePickerController实现头像选择
  • javascript从右向左截取指定位数字符的3种方法
  • Java到底能干嘛?
  • JSONP原理
  • js数组之filter
  • JS学习笔记——闭包
  • Laravel 中的一个后期静态绑定
  • Leetcode 27 Remove Element
  • mac修复ab及siege安装
  • mongo索引构建
  • MYSQL如何对数据进行自动化升级--以如果某数据表存在并且某字段不存在时则执行更新操作为例...
  • rabbitmq延迟消息示例
  • SegmentFault 2015 Top Rank
  • Three.js 再探 - 写一个跳一跳极简版游戏
  • Vue.js 移动端适配之 vw 解决方案
  • vue+element后台管理系统,从后端获取路由表,并正常渲染
  • 阿里云前端周刊 - 第 26 期
  • 关于springcloud Gateway中的限流
  • 前端_面试
  • 深入 Nginx 之配置篇
  • 什么是Javascript函数节流?
  • 通过获取异步加载JS文件进度实现一个canvas环形loading图
  • 吐槽Javascript系列二:数组中的splice和slice方法
  • 用element的upload组件实现多图片上传和压缩
  • 好程序员web前端教程分享CSS不同元素margin的计算 ...
  • ​总结MySQL 的一些知识点:MySQL 选择数据库​
  • #我与Java虚拟机的故事#连载07:我放弃了对JVM的进一步学习
  • (差分)胡桃爱原石
  • (多级缓存)多级缓存
  • (非本人原创)史记·柴静列传(r4笔记第65天)