从 2015 年的 YOLOV1,2016 年 YOLOV22018 年的 YOLOV3,到 2020 年的 YOLOV4YOLOV5, 以及最近出现的 YOLOV76YOLOV7 可以说 YOLO 系列见证了深度学习时代目标检测的演化。对于 YOLO 的基础知识以及 YOLOV1 到 YOLOV5 可以去看大白的 YOLO 系列,本文主要对 YOLOV7 的网络结构进行一个梳理,便于大家直观的感受。

1. YOLOV7 整体结构

我们先整体来看下 YOLOV7,首先对输入的图片 resize 为 640x640 大小,输入到 backbone 网络中,然后经 head 层网络输出三层不同 size 大小的 feature map,经过 Rep 和 conv输出预测结果,这里以 coco 为例子,输出为 80 个类别,然后每个输出(x ,y, w, h, o) 即坐标位置和前后背景,3 是指的 anchor 数量,因此每一层的输出为 (80+5)x3 = 255再乘上 feature map 的大小就是最终的输出了。

2. backbone

YOLOV7 的 backbone 如下图所示

总共有 50 层, 我在上图用黑色数字把关键层数标示出来了。
首先是经过 4 层卷积层,如下图,CBS 主要是 Conv + BN + SiLU 构成,我在图中用不同的颜色表示不同的 size 和 stride, 如 (3, 2) 表示卷积核大小为 3 ,步长为 2。 在 config 中的配置如图。

经过 4个 CBS 后,特征图变为 160 * 160 * 128 大小。随后会经过论文中提出的 ELAN 模块,ELAN 由多个 CBS 构成,其输入输出特征大小保持不变,通道数在开始的两个 CBS 会有变化, 后面的几个输入通道都是和输出通道保持一致的,经过最后一个 CBS 输出为需要的通道。



MP 层 主要是分为 Maxpool 和 CBS , 其中 MP1 和 MP2 主要是通道数的比变化。

backbone的基本组件就介绍完了,我们整体来看下 backbone,经过 4 个 CBS 后,接入例如一个 ELAN ,然后后面就是三个 MP + ELAN 的输出,对应的就是 C3/C4/C5 的输出,大小分别为 80 * 80 * 512 , 40 * 40 * 1024, 20 * 20 * 1024。 每一个 MP 由 5 层, ELAN 有 8 层, 所以整个 backbone 的层数为 4 + 8 + 13 * 3 = 51 层, 从 0 开始的话,最后一层就是第 50 层。

3. head

YOLOV7 head 其实就是一个 pafpn 的结构,和之前的YOLOV4,YOLOV5 一样。首先,对于 backbone 最后输出的 32 倍降采样特征图 C5,然后经过 SPPCSP,通道数从1024变为512。先按照 top down 和 C4、C3融合,得到 P3、P4 和 P5;再按 bottom-up 去和 P4、P5 做融合。


这里基本和 YOLOV5 是一样的,区别在于将 YOLOV5 中的 CSP 模块换成了 ELAN-H 模块, 同时下采样变为了 MP2 层。 ELAN-H 模块是我自己命名的,它和 backbone 中的 ELAN 稍微有点区别就是 cat 的数量不同。

至于 E-ELAN 论文中说到是在 YOLOV7-E6eE中用到, 但是我在看代码的时候,有点没太明白是怎么做 shuffle 的,这里等我弄明白了再补上来。

对于 pafpn 输出的 P3、P4 和 P5 , 经过 RepConv 调整通道数,最后使用 1x1 卷积去预测 objectness、class 和 bbox 三部分。
RepConv 在训练和推理是有一定的区别。训练时有三个分支的相加输出,部署时会将分支的参数重参数化到主分支上。

end

至此,我们将 YOLOV7 的基本结构介绍完了,至于 YOLOv7 的其他知识,如Aux Head 等以及 YOLOv7 的其他网络结构,我们后续再讲。 梳理可能有未理解正确的地方,欢迎交流。

深入浅出 Yolo 系列之 Yolov7 基础网络结构详解相关推荐

  1. 深入浅出Mybatis系列(四)---配置详解之typeAliases别名(mybatis源码篇)

    上篇文章<深入浅出Mybatis系列(三)---配置详解之properties与environments(mybatis源码篇)> 介绍了properties与environments, ...

  2. 深入浅出Mybatis系列(三)---配置详解之properties与environments(mybatis源码篇)

    我们通过对mybatis源码的简单分析,可看出,在mybatis配置文件中,在configuration根节点下面,可配置properties.typeAliases.plugins.objectFa ...

  3. 【深入浅出Yolo系列之Yolox核心基础完整讲解】

    文章目录 原文:https://zhuanlan.zhihu.com/p/397993315 在Yolov4.Yolov5刚出来时,大白就写过关于Yolov3.Yolov4.Yolov5的文章,并且做 ...

  4. 深入浅出Yolo系列之Yolov3Yolov4Yolov5核心基础知识完整讲解

    深入浅出Yolo系列之Yolov3&Yolov4&Yolov5核心基础知识完整讲解

  5. HDFS 基础部分详解

    精选30+云产品,助力企业轻松上云!>>> 上一篇文章 Hadoop 系列之 1.0和2.0架构 中,提到了 Google 的三驾马车,关于分布式存储,计算以及列式存储的论文,分别对 ...

  6. flutter图片点击跳转_Flutter系列之Platform Channel使用详解

    PS:逐渐体会到关键少数原则的重要性,接下来就是付诸实践了,另外科创50ETF明天开始限额销售,可以适当关注或入手一点. 前面几篇文章介绍了 Navigator 组件.Flex 布局.图片加载.Wid ...

  7. 华为eNSP模拟器软件介绍和基础命令详解

    目录 前言 eNSP模拟器介绍 软件特点 基础命令详解 前言 eNSP是图形化网络仿真平台,该平台通过对真实网络设备的仿真模拟,帮助广大ICT从业者和客户快速熟悉华为数通系列产品,了解并掌握相关产品的 ...

  8. 网络管理之基础知识详解

    网络管理之基础知识详解 目录 3.1 网络的特征 3.2 拓扑结构 4.1 OSI简介 4.2 数据传输过程 4.3 分层作用 4.4 PDU 5.1 单播 5.2 多播 5.3 广播 5.4 三种通 ...

  9. pytorch图像分类篇:6. ResNet网络结构详解与迁移学习简介

    前言 最近在b站发现了一个非常好的 计算机视觉 + pytorch 的教程,相见恨晚,能让初学者少走很多弯路. 因此决定按着up给的教程路线:图像分类→目标检测→-一步步学习用pytorch实现深度学 ...

最新文章

  1. Java BitSet使用场景和示例
  2. java的collection集合
  3. C#中Split函数的使用
  4. 一文弄懂神经网络中的反向传播法
  5. python 使用jinjia2 生成文件的空格处理
  6. 常用知识总结——模板Template
  7. LibLinear(SVM包)使用说明之(三)实践
  8. 米斯特白帽培训讲义 工具篇 BruteXSS
  9. spring的jdbcTemplate的多数据源的配置,springboot的jdbcTemplate的多数据源的配置
  10. 自定义NodeJS-C++ Addons使用说明
  11. 【DIY】通达信DIY添加扫雷宝、地图和复盘(1)
  12. java获取kafka topic
  13. Oracle日期转换成格林威治时间
  14. 语雀可以导出html吗,工具 - Confluence 迁移到语雀 - 《语雀使用文档》 - 书栈网 · BookStack...
  15. python数据可视化—WordCloud词云图
  16. 面料防静电测试方法指南
  17. 家里有两只猫给挖坑,还有世界美食的诱惑,我就被无监督学习彻底收服了!...
  18. 丛林战争游戏数据库设计
  19. android 如何启动浏览器
  20. directx数学基础1

热门文章

  1. 【毕业设计】大数据招聘岗位数据分析与可视化 - 爬虫 python 大屏可视化
  2. 使用angular-translate实现项目语言的中英文动态转换
  3. python 去掉首尾空格
  4. RenPy今天更新到6.4.0
  5. java 刷浏览量代码_java刷视频浏览量,点赞量
  6. java easypoi使用模板导出Excel,合并单元格
  7. java中 enum什么意思_Java中枚举Enum的使用详解
  8. 专注于创造,低成本制作电影的好用 AI 工具!#Wonder Studio AI
  9. 话说产品方法论——需求与用户研究
  10. 大三小学期进阶课程第二十九课:感知概貌