0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

解析yolov7采用的一项技术:模型结构重参化

博世苏州 来源:博世苏州 作者:博世苏州 2022-08-09 14:27 次阅读

Yolov7问世,刷新了目标检测内卷的新上限!小博此次携手博世AI大神Zlex做一次解析。今天,我们不准备解析yolov7,而是解析yolov7采用的一项技术:模型结构重参化。

首先,这要从古老的vgg说起,很久很久以前神经网络还没有很多花样的时候,他是一个以卷积为主串联的网络结构,如下图所示:

3a51761a-179c-11ed-ba43-dac502259ad0.png

3a5ec388-179c-11ed-ba43-dac502259ad0.png

由于见证了神经网络的神奇效果,科学家工程师们前仆后继开发了resnet, inception net, 以及自学习产生的efficientnet等等以结构创新为主的系列,以及归一化系列(ln,bn,gn,in),激活函数系列, 卷积系列等各种新的计算层,还有各种损失函数层等等。

随着思维的展开,除了从计算方法(数学推理角度)和网络结构(实验性创新角度)层面创新,还有哪些脑洞可以打开呢?是否可以实现数学和网络结构方面的互相转化?答案是肯定的,数学推算和结构设计之间是可以相互转化的。

而模型结构重参化就是其中一种。

01

模型结构重参化

模型结构重参化是继承了深度学习的特性,并作为思考点而展开的,也就是训练(train)和推断(deploy)分别思考的策略,通常我们是可以忍受训练速度较慢,但是推理更加快速的部署方案。

基于这个现实的考虑,是否可能通过增加训练的复杂度但不增加推断运行的时间,从而达到模型能力的提升?

其实这一切都经不起科学家的推敲,这种思路的可行性答案也是肯定的,其实在很久之前的部署加速技巧—— Conv、BN、Relu 三个层融合(大部分情况是conv和bn融合)也是发现了——训练和部署可以在网络结构不同的情况下实现效果等价,这个数学公式等价变换思路。而tensorRT等部署加速方案也都融合了这项技术。

模型结构重参化(structural re-parameterization)是丁霄汉近年来提出的一种通用深度学习模型设计方法论。该方法论首先指出了构造一系列用于训练的结构,并将其结构等价转换为另一种用于测试的结构,也就是训练和测试的结构不再相同,但是效果等效。

该理论是假设在训练资源相对丰富的条件下,在不降低推理能力的前提下又能达到提速的目的。因此训练时的模型可以足够复杂,且具备优秀的性质。而转换得到的推理时模型可以简化,但能力不会减弱,也就是实现无损压缩。

为什么要以vgg为例,而不是以目前各种先进复杂的结构为例解析这一设计呢?其原因在于:模型结构复杂提升了精度,但不利于硬件的各种并行加速计算。但vgg这种单一的结构更容易做很多的变形和加速操作,Repvgg就是基于vgg网络的模型结构重参化。

论文中对比了resnet的参差结构和rep结构的不同,以及训练和推理网络如何转化,如下图所示:

3a80dd74-179c-11ed-ba43-dac502259ad0.png

以上设计方法论基于的数学关系是:

(i+c+b)*w=i*w + c*w + b*w的等式理论。

该等式画成结构图是:

3a988cda-179c-11ed-ba43-dac502259ad0.png

只不过在卷积的世界里,a和b表示的是一个n*n的核;而在一些设计里面,a和b的大小是不一致的。这个时候就需要把现在a和b的维度进行一致性转换,也就是repvgg作者采用的:把1*1的核通过pad的方法补0操作变成3*3的核,达到a、b维度一致。

identity的操作相当于是1*1的单位矩阵卷积pad后就可以转化为3*3的卷积核。还应该值得注意的是:每个卷积后面还跟着bn层,这是就用到了上述提到的conv和bn的融合计算方法。

02

Yolov7在这项技术上的发现和创新

Yolov7中的模型结构重参化做了哪些创新?

Zlex发现Rep的结构策略直接用到resnet等结构的网络中达不到预期效果,分析后发现identity层的使用破坏了resnet的参差结构和densenet的级联结构,因此去掉identity层,采用如下图(g和h)的结构方式有效。

3aa93ab2-179c-11ed-ba43-dac502259ad0.png

03

Yolov7工业应用领域的改善空间

俗话说,极致的项目一般是“既要,也要,还要”的模式——既要推理速度快!也要推理精度高!还要训练速度也不能太慢!

Yolov7无疑是吸收了很多仙气修炼成的佳作,但也存在些许缺点,这些缺点也是该设计本质性的东西,Yolov7的训练速度经过Zlex亲测,比其他yolo系列慢了很多。对于资源有限型的AI爱好者也形成了一定的障碍,单元时间可以跑的实验次数少了很多,验证一些想法的节奏也慢了很多。

Yolov7给博世工业检测、自动驾驶、数字化等领域又注入了新的超能力,应用过程中也会发现这样或者那样的问题,比方说训练资源有限,速度跟不上项目的节奏,能力提升的trick不够适应自己的应用场景,小数据训练效果不佳,不同平台的移植工作量大等等,需要我们博世工程师在适配、融合和改进的路上坚定的前进。

审核编辑 :李倩

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 模型
    +关注

    关注

    1

    文章

    2704

    浏览量

    47686
  • 深度学习
    +关注

    关注

    73

    文章

    5237

    浏览量

    119908

原文标题:博采众长 | 在提升深度学习模型能力方面的那些魔鬼细节:模型结构重参化

文章出处:【微信号:rbacinternalevents,微信公众号:博世苏州】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    maixcam部署yolov5s 自定义模型

    部分不样。 获得自定义训练得到的yolov5s onnx模型 准备自定义数据集(博主用的是VOC数据集) 数据集目录结构如下: └─VOC2028:自定义数据集 ├─Annotat
    发表于 04-23 15:43

    在英特尔AI开发板上用OpenVINO NNCF优化YOLOv7

    提高了性能和效率。YOLO算法作为one-stage目标检测算法最典型的代表,其基于深度神经网络进行对象的识别和定位,运行速度很快,可以用于实时系统。YOLOv7 是 YOLO 模型系列的下一个演进阶段,在不增加推理成本的情况下,大大提高了实时目标检测精度。
    的头像 发表于 01-05 09:29 374次阅读
    在英特尔AI开发板上用OpenVINO NNCF优化<b class='flag-5'>YOLOv7</b>

    YOLOV7网络架构解读

    继美团发布YOLOV6之后,YOLO系列原作者也发布了YOLOV7
    的头像 发表于 11-29 10:00 928次阅读
    <b class='flag-5'>YOLOV7</b>网络架构解读

    详细解读YOLOV7网络架构设计

    YOLOV7提出了辅助头的一个训练方法,主要目的是通过增加训练成本,提升精度,同时不影响推理的时间,因为辅助头只会出现在训练过程中。
    发表于 11-27 10:45 547次阅读
    详细解读<b class='flag-5'>YOLOV7</b>网络架构设计

    深度学习YOLOv3 模型设计的基本思想

    在检测任务中,将图中C0后面的平均池化、全连接层和Softmax去掉,保留从输入到C0部分的网络结构,作为检测模型的基础网络结构,也称为骨干网络 YOLOv3
    发表于 10-17 10:32 149次阅读
    深度学习<b class='flag-5'>YOLOv</b>3 <b class='flag-5'>模型</b>设计的基本思想

    YOLOv5网络结构训练策略详解

    前面已经讲过了Yolov5模型目标检测和分类模型训练流程,这一篇讲解一下yolov5模型结构,数
    的头像 发表于 09-11 11:15 1117次阅读
    <b class='flag-5'>YOLOv</b>5网络<b class='flag-5'>结构</b>训练策略详解

    使用OpenVINO优化并部署训练好的YOLOv7模型

    在《英特尔锐炫 显卡+ oneAPI 和 OpenVINO 实现英特尔 视频 AI 计算盒训推一体-上篇》一文中,我们详细介绍基于英特尔 独立显卡搭建 YOLOv7 模型的训练环境,并完成了 YOLOv7
    的头像 发表于 08-25 11:08 921次阅读
    使用OpenVINO优化并部署训练好的<b class='flag-5'>YOLOv7</b><b class='flag-5'>模型</b>

    无法使用MYRIAD在OpenVINO trade中运行YOLOv7自定义模型怎么解决?

    无法确定如何将 YOLOv7 模型的重量(.pt 文件)转换为OpenVINO™中间表示 (IR) 并推断有 MYRIAD 的 IR。 分辨率 转换使用此 GitHub* 存储库
    发表于 08-15 08:29

    yolov5和YOLOX正负样本分配策略

    整体上在正负样本分配中,yolov7的策略算是yolov5和YOLOX的结合。因此本文先从yolov5和YOLOX正负样本分配策略分析入手,后引入到YOLOv7
    发表于 08-14 11:45 1770次阅读
    <b class='flag-5'>yolov</b>5和YOLOX正负样本分配策略

    YOLOv8+OpenCV实现DM码定位检测与解析

    YOLOv8是YOLO系列模型的最新王者,各种指标全面超越现有对象检测与实例分割模型,借鉴了YOLOv5、YOLOv6、YOLOX等
    的头像 发表于 08-10 11:35 739次阅读
    <b class='flag-5'>YOLOv</b>8+OpenCV实现DM码定位检测与<b class='flag-5'>解析</b>

    YOLOv6模型文件的输入与输出结构

      YOLOv6人脸检测模型 YOLOv6上次(应该是很久以前)发布了一个0.3.1版本,支持人脸检测与五点landmark调用,后来我就下载,想使用一下,发现居然没有文档,也没有例子。但是官方
    的头像 发表于 06-25 15:37 638次阅读
    <b class='flag-5'>YOLOv</b>6<b class='flag-5'>模型</b>文件的输入与输出<b class='flag-5'>结构</b>

    一文彻底搞懂YOLOv8(网络结构+代码+实操)

    查看 N/S/M/L/X 等不同大小模型,可以发现 N/S 和 L/X 两组模型只是改了缩放系数,但是 S/M/L 等骨干网络的通道数设置不一样,没有遵循同一套缩放系数。如此设计的原因应该是同一套缩放系数下的通道设置不是最优设计,YOL
    的头像 发表于 06-19 16:55 2.2w次阅读
    一文彻底搞懂<b class='flag-5'>YOLOv</b>8(网络<b class='flag-5'>结构</b>+代码+实操)

    一文彻底搞懂YOLOv8【网络结构+代码+实操】

    从上面可以看出,YOLOv8 主要参考了最近提出的诸如 YOLOX、YOLOv6、YOLOv7 和 PPYOLOE 等算法的相关设计,本身的创新点不多,偏向工程实践,主推的还是 ultralytics 这个框架本身。
    的头像 发表于 06-15 17:15 6715次阅读
    一文彻底搞懂<b class='flag-5'>YOLOv</b>8【网络<b class='flag-5'>结构</b>+代码+实操】

    YOLOv7训练自己的数据集包括哪些

      YOLOv7训练自己的数据集整个过程主要包括:环境安装—制作数据集—模型训练—模型测试—模型推理 一、准备深度学习环境 本人的笔记本电脑系统是:Windows10 首先下载
    的头像 发表于 05-29 15:18 623次阅读
    <b class='flag-5'>YOLOv7</b>训练自己的数据集包括哪些

    Yolov5算法解读

    中,这几个模型结构基本一样,不同的是depth_multiple模型深度和width_multiple模型宽度这两个参数。 yolov5主
    的头像 发表于 05-17 16:38 4296次阅读
    <b class='flag-5'>Yolov</b>5算法解读