043、多分支重参数化实战:RepVGG、Diverse Branch Block 在训练和部署阶段的操作

发布时间:2026/5/31 23:16:28

043、多分支重参数化实战:RepVGG、Diverse Branch Block 在训练和部署阶段的操作 043、多分支重参数化实战:RepVGG、Diverse Branch Block 在训练和部署阶段的操作从一次线上推理延迟飙升说起去年某个深夜,我盯着监控面板上跳动的P99延迟曲线,血压跟着一起飙升。一个部署在边缘设备上的YOLOv6检测模型,推理时间从原来的12ms突然涨到35ms,直接导致视频流丢帧。排查了半天,发现是训练时用了多分支结构(RepVGG风格),但部署时忘了做结构重参数化——模型里还挂着三个并行的3x3卷积、1x1卷积和恒等映射分支,推理框架傻乎乎地一个个算,能不慢吗?那次之后,我养成了一个习惯:训练阶段怎么花里胡哨都行,但部署前必须把多分支“拍扁”成单路径。今天这篇笔记,就聊聊RepVGG和DBB(Diverse Branch Block)在YOLOv8/YOLOv11改进中的具体操作,重点放在“训练时怎么搭分支”和“部署时怎么合并”这两个阶段,中间踩过的坑我会直接标出来。为什么非要搞多分支?训练和部署的矛盾先想清楚一个问题:为什么训练时要用多分支?因为梯度流动更顺畅。ResNet的残差连接、Inception的多尺度分支,本质上都是给梯度多开几条“高速公路”,防止深层网络梯度消失。RepVGG更进一步,把3x3、1x1、恒等映射三个分支并联,训练时每个分支的梯度都能独立更新,收敛速度肉眼可见地快。但推理时,这些分支就是累赘。每个分支都要做一次卷积或恒等映射,然后做element-wise相加,

相关新闻