YOLOv8网络结构介绍

将按照YOLOv8目标检测任务、实例分割任务、关键点检测任务以及旋转目标检测任务的顺序来介绍,主要内容也是在目标检测任务中介绍,其他任务也只是Head层不相同。

1.YOLOv8_det网络结构

首先,YOLOv8网络分成了三部分,分别是主干网络、Neck层网络还有一个是Head层网络,下面将按照这三个顺序来介绍下YOLOv8的网络结构,先以YOLOv8l的网络架构来说明。

主干网络是对输入图片进行特征提取的,主干网络主要由CBS模块、C2f模块和SPPF模块构成,其中CBS模块表示Conv、BN和SILU,一般用来对输入图像或者特征图进行卷积,卷积的结果是分辨率下降和通道数增加,由上图可以看到,一共有5个CBS模块,输入图像分辨率从640*640变成了20*20,输入通道数从3变成了512。

C2f是设计用来深度提取特征的一个模块,其输出特征图和输入特征图的大小保持不变,但是在他内部会有多个分支,如下图所示,torch.chunk将(1,128,160,160)特征图分成了两部分,前半部分,即(1,:64,160,160)输出为第一个分支;后半部分,即(1,32:,160,160)除了作为输出的第二个分支外,还会经过n个bottleneck模块,每经过一个Bottleneck都会输出一个通道为64的特征图,所以最后concat得到的通道数为0.5*in_ch*(n+2),其中in_ch表示输入的通道数,即128,n为bottleneck的个数,当n为3时,concat得到的通道数为320。

SPPF模块这里就看一下就行了,和YOLOv5中的是一样的,并且也是输出特征图和输入特征图的大小保持不变,详细可以看下图的shape表示。经过主干网络,会有三个不同尺度的特征图会输出给下一部分的Neck层网络,分别是80*80、40*40以及20*20。

Neck层网络是用来对主干网络输出的特征图进行特征融合的,也就是把这三个不同的尺度提取到的特征通过上采样的方式进行Concat,经过两次上采样后输出第一个特征图(80*80)给Head层,然后通过CBS模块对特征图进行下采样输出剩下两个特征图(40*40和20*20)给Head层。详细可以看YOLOv8网络结构图。

Head层网络是根据类别数来设计生成特定的特征图,YOLOv8采用的是解耦头的方式来生成,解耦的意思就是说分别生成用来预测CLs和Box的特征图,比如输入尺度为(1,256,80,80)特征图P3,生成Box预测特征图的分支会通过两个CBS模块以及一个Cov2d生成(1,64,80,80)的特征图,生成Cls预测特征图的分支会通过两个CBS模块以及一个Cov2d生成(1,nc,80,80)的特征图,nc表示预测的类别。经过Head层会生成3个预测Box的特征图(1,64,80,80)、(1,64,40,40)和(1,64,20,20);以及生成3个预测CLs的特征图(1,nc,80,80)、(1,nc,40,40)和(1,nc,20,20)。详细可以看YOLOv8网络结构图。

此外这里再说一下YOLOv8共提供了4个不同的版本,分别为n/s/m/l/x,n是最小的版本,x是最大的版本。这里和YOLOv5有一点区别,每个版本有一个max_channels 来控制输出特征图的最大值,比如YOLOv8l中,输出的三个特征图中通道数最大不能超过max_channels*Width,即512*1.00=512,YOLOv8x中最大不能超过512*1.25=640。Depth是用来控制主干网络中C2f中bottleneck的个数的,比如YOLOv8l的depth为1,那么主干网络中的4个C2f的bottleneck个数分别为(3,6,6,3),YOLOv8n的depth为0.33,那么其个数分别为(1,2,2,1)。

还有就是主干网络中的C2f和Neck中的C2f不一样,区别在于是否有残差连接。

2.YOLOv8_seg网络结构

实例分割的backbone网络和Neck网络完全一致,只是Head层会有区别,区别有两点:第一点, 三个尺度的特征图在head层除了生成3个预测Box的特征图(1,64,80,80)、(1,64,40,40)和(1,64,20,20);以及3个预测CLs的特征图(1,nc,80,80)、(1,nc,40,40)和(1,nc,20,20);还会另外生成3个通道数均为32用来当成Mask系数的特征图mask_coefficients(1,32,80,80)、(1,32,40,40)和(1,32,20,20);第二,还会通过80*80特征图生成一个大小为(1,32,80,80)Prototype Mask特征图,作为原生分割的特征图。

先来了解下mask_coefficients分支,也就是上图中浅紫色区域的分支头,由图可知,三个尺度的分支头通道数都是32,这个是和Prototype分支的通道数是保持一致的,并且也是通过两个卷积组和一个卷积层生成的。

然后Prototype层的结构如下所示,通过一个上采样,将特征图由80*80分辨率上采样得到160*160尺度。为什么要选择80*80尺度特征图,因为80*80相比其他尺度特征图更接近原图尺寸,上采样后能有更好的分割效果。

相关推荐
AsItachi3 天前
基于StyleGAN2-ADA和FNW YOLOv8的玉米害虫智能检测
yolov8·stylegan2
爱爬山的木木7 天前
海思3403对RTSP进行目标检测
yolo·yolov8·3403·rtsp流·ss928
一勺汤17 天前
YOLOv8模型改进 第十七讲 通道压缩的自注意力机制CRA
yolo·目标检测·outlook·模块·yolov8·yolov8改进·魔改
就是求关注1 个月前
深度学习—基于YOLOv8的人物目标检测和分割(跟踪)
yolo·目标检测·目标跟踪·yolov8·目标分割
你的陈某某1 个月前
Atlas800昇腾服务器(型号:3000)—YOLO全系列NPU推理【跟踪】(八)
yolov8·npu·bytetrack·atlas800·a300i pro·ais_bench
machnerrn1 个月前
基于YOLOv9实现的自行车检测系统:为共享自行车违停项目开发(附项目源码及数据集下载)
深度学习·目标检测·毕业设计·课程设计·yolov8·yolov9·自行车违停检测
知来者逆2 个月前
基于YOLOv8目标检测与chef-transformer(T5)从图像创建食谱
人工智能·深度学习·yolo·目标检测·计算机视觉·transformer·yolov8
cheoyeon2 个月前
国产化框架PaddleYOLO结合Swanlab进行作物检测
深度学习·目标检测·作物检测·国产化·yolov8·swanlab·粮食安全
墨理学AI2 个月前
Mac 电脑配置yolov8运行环境实现目标追踪、计数、画出轨迹、多线程
yolo·macos·yolov8
不想敲代码!!!2 个月前
爆改YOLOv8|使用MobileNetV4替换yolov8的Backbone
pytorch·python·深度学习·yolo·目标检测·yolov8