【yolov6系列一】深度解析网络架构

在yolov5霸屏计算机视觉领域很久时,六月处美团开源了yolov6,并号称在精度和速度上均超越其他同量级的计算机视觉模型,刚刚瞅了一眼,star已经超过2.8k,脑子里莫名冒出一个词:”国货之光”。

网上基于yolov6的解读有很多,文末会附上美团的官方解读和开源代码的github链接。文本开始yolov6系列,先和大家分享下整个yolov6的网络架构(基于tag0.1版本的yolov6s),后续再基于各个模块根据自己的理解分享给大家。

整体框架

【yolov6系列一】深度解析网络架构
大家如需图中ppt使用,请关注公众号 ,后台回复ppt 添加微信领取

以上为yolov6s整体的网络架构,从图中可看出yolov6网络由四个部分组成:input,backbone,neck以及head。对各个部分的功能和yolov5相同,如backbone用于提取特征,head用于预测。

根据上图的架构图走一遍网络流程:先对输入的图片预处理,对齐成640640大小的RGB图片,输入到backbone网络中,根据backbone网络中的三层输出,在neck层通过Rep-PAN网络继续输出三层不同size大小的 feature map(以下简称fm)*,输入到最后的head层中,对图像检测的三类任务(分类、前后背景分类、边框)预测,输出最后的结果。

; backbone

【yolov6系列一】深度解析网络架构
yolov6s的backbone层参见RepVGG网络的backbone[3],如上图所示( s表示stride, o为outchannel, i为inchannel, 其中o=i表示outchannel=inchannel, o≠i表示outchannel与inchannel无相关性,并非其值一定不相等),由若干RepVGG block(以下RepVGG block简称RVB, RepBlock简称RB)组成。
【yolov6系列一】深度解析网络架构
【yolov6系列一】深度解析网络架构
RB为几个RVB的串联,其中第一个RVB用于特征层的size变化,后面N个RVB 用于特征层的融合,size保持不变。
【yolov6系列一】深度解析网络架构
stem为s=2的RVB,同时输入输出的channel不相同,这样stem的RVB变成:
【yolov6系列一】深度解析网络架构
同时ERBlock5中增加SPPF层:
【yolov6系列一】深度解析网络架构
其中 SConv是有conv+BN+ReLu组成:
【yolov6系列一】深度解析网络架构
这样 SPPF网络则先通过一个SConv层,特征图h,w的size不变,outchannel变成inchannel的一半,输出做为一个分支,而后经过3个maxpooling层,每个maxpooling的kernel=5,s=1,padding=kernel//2, 每经过一个maxpooling后,fm size均不变,并做为分支。而后通过cat将几个分支在channel维度上相加,得到的size较于SPPF的输入,h,w不变,channel为输入的2倍,最后再通过一个SConv层,通道减半,使得输入和输出的fm size不变。

整个backbone层流程为:输入640 _640_3的图片,通过stem层(s=2)输出为320 _320_32,后面接几个ERBlock,每个ERBlock均做特征层的下采样和channel的增大,每个ERBlock由一个RVB和一个RB组成(ERBlock5多加SPPF层),在RVB中做特征层的下采样,同时channel增大,在RB中对特征层充分融合后输出,最后backbone输出三个fm分别为(20 _20_512, 40 _40_128, 80 _80_64)。

neck

【yolov6系列一】深度解析网络架构
Neck层美团官方称其为Rep-PAN,是基于PAN的拓扑方法,如上图所示,类似一种”U”型结构,其中U型左侧从上到下fm的h,w增大,右侧从下到上fm的h,w减小,其中Upsample上采样基于torch官方自带的转置卷积实现:
【yolov6系列一】深度解析网络架构
整个neck层的流程为,U型左侧,从ERB5输出20 _20_512的fm,通过SConv 变成20 _20_128大小,上采样后h,w较之前增大一倍后与ERB4的输出在channel层上concate后fm变成40 _4_384,通过一个RB(s=1, o≠i)后,输出 40 _4_128,重复上述步骤后,输出80 _80_64的fm。U型右侧,将80 _80_64的fm先SConv下采样,得到40 _40_64的fm,与U型左侧h,w一致的fm在channel层上concate后,通过一个RB(s=1, o≠i),输出第二个fm,重复U型右侧以上步骤,输出第三个fm。至此,neck层输出三个fm分别为(20 _20_256, 40 _40_128, 80 _80_64).

; Head

【yolov6系列一】深度解析网络架构
如上图,head基于三层输出预测,分别对应了大小不同的从大到小的感受野。

其中 BConv是由conv+bn+SiLu组成:

【yolov6系列一】深度解析网络架构
整个head借鉴了yolox中的解耦头设计,并对其做了改进,head流程如下:从neck层输出三个分支,对于每个分支,先对输出fm通过BConv层,做fm的特征融合后,分成两个分支一个分支通过BConv+Conv完成分类任务的预测,另外一个分支先通过BConv融合特征后再分成两个分支,一个分支通过Conv完成边框的回归,一个分支通过Conv完成前后背景的分类,至此三个分支再通过concate在channel层上融合,输出未经后处理的预测结果。

结语

以上为个人理解,yolov6s在0.1版本上的整体网络架构,如有理解偏差,欢迎交流,后续根据yolov6中各个模块中的详细的原理以及代码继续更新,希望对大家有帮助。
参考:
[1]https://mp.weixin.qq.com/s/RrQCP4pTSwpTmSgvly9evg(美团官方解读)
[2] https://github.com/meituan/YOLOv6(美团官方代码)
[3] https://zhuanlan.zhihu.com/p/353697121

Original: https://blog.csdn.net/zqwwwm/article/details/125635594
Author: 所向披靡的张大刀
Title: 【yolov6系列一】深度解析网络架构

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/716037/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球