YOLOv8_det/seg/pose/obb网络结构

本文详细介绍了YOLOv8系列网络在目标检测、实例分割、关键点检测和旋转目标检测四个任务中的网络结构。YOLOv8的网络分为主干网络、Neck层和Head层,其中主干网络包含CBS、C2f和SPPF模块。Head层采用解耦方式生成预测特征图。对于实例分割,Head层额外生成了用于Mask的特征图。关键点检测任务中,Head层增加了预测人体17个关键点的特征图。旋转目标检测任务则在Head层增加了预测旋转角度的特征图。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

        如果不想看文字,可以直接观看视频:

        Bilibili视频讲解:YOLOv8网络结构介绍_哔哩哔哩_bilibili

1.YOLOv8_det网络结构

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

1.1Backbone网络

        主干网络(Backbone) 是对输入图片进行特征提取的,特征提取的过程通常伴随着特征图分辨率的下降以及通道数的上升,输入图像分辨率从640×640变成了20×20,输入通道数从3变成了512。

        主干网络主要由CBS模块、C2f模块和SPPF模块构成:

        CBS模块 表示Conv、BN和SILU构成的卷积组,其中最重要的参数有K、S和P,K表示kernel size即卷积核大小,这里的卷积核大小都是3x3;S表示Stride表示步长,一般步长为2,都会伴随着分辨率的下降;P表示Padding,一般也是用来计算输出分辨率大小的。主干网络中一共有5个CBS模块,因此会进行5次下采样。

        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表示。

1.2Neck网络

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

        这里需要注意主干网络中的C2f和Neck中的C2f主要有两点不相同:

        第一,BackBone层的c2f层的输入和输出通道数不变,而Neck层的c2f层的输出和输出通道数改变,输出通道数为主干网络输出同一尺度特征图的通道数。

        第二,BackBone层的c2f模块的bottleneck含有残差分支,而Neck层的c2f模块的bottleneck不含残差分支,并且每个c2f只堆叠了一个bottleneck。

1.3Head网络

        Head层网络是根据类别数来设计生成特定的特征图,YOLOv8采用的是解耦头的方式来生成,解耦的意思就是说分别生成用来预测CLs和Box的特征图,比如输入尺度为(1,256,80,80)特征图,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网络结构图。

       Box分支由2个卷积组和1个卷积构成,前两个卷积组的通道数需要符合max((16,ch[0]//4,self.reg_max4)),其中ch[0]表示80x80尺度特征图的通道数,在YOLOv8l中为256,另外self.reg_max4=64,计算得到max(16,256/4,64)=64,因此三个尺度Box分支头中前两个卷积组的通道数均是64,最后一个卷积层的通道数也是64.         Cls分支同样也是由2个卷积组和1个卷积层构成,前两个卷积组的通道数需要符合max(ch[0],min(self.nc,100)),其中ch[0]表示8080尺度特征图的通道数,self.nc表示预测的类别,在YOLOv8l中ch[0]为256,假设self.nc为80,计算得到max(256,min(80,100))=256,因此三个尺度的Cls分支头中前两个卷积组的通道数均是256,最后一个卷积层的通道数固定是self.nc.

        具体可以参考下图。

 

1.4网络Depth设计

        最后再来对比一下n/s/m/l/x的Backbone和neck层的差异,n是最小的版本,x是最大的版本,目标检测、实例分割、关键点检测和旋转目标检测的主干网络都是一样的。

        先来看主干网络中的C2f层的Bottleneck个数:

        n:[1,2,2,1],s:[1,2,2,1],m:[2,4,4,2],l:[3,6,6,3],x:[3,6,6,3]

        通过Depth来控制其大小,比如YOLOv8n的Depth为0.33,那么以[3,6,6,3]为标准的话,n的个数就应该为[1,2,2,1],同理m的个数为[2,4,4,2]。

1.5网络Width设计

        另外还有主干网络中每一层的输出特征图通道数:

        n:[3,16,32,32,64,64,128,128,256,256]

        s:[3,32,64,64,128,128,256,256,512,512]

        m:[3,48,96,96,192,192,384,384,576,576]

        l:[3,64,128,128,256,256,512,512,512,512]

        x:[3,80,160,160,320,320,640,640,640,640]

        通过Width和max_channels来控制输出特征图的最大值,比如YOLOv8-L的Width为1,max_channel为512,输出的三个特征图中通道数最大不能超过max_channels*Width(代码中的公式是min(c2,max_channels)*width,化简得到就可以得到max_channels *Width),即512×1.00=512;YOLOv8x中最大不能超过512×1.25=640;YOLOv8m中最大不能超过768×0.75=576。

        YOLOv8目标检测网络的更多内容可以看下面的文章:
YOLOv8预测流程-原理解析[目标检测理论篇]icon-default.png?t=O83Ahttps://blog.csdn.net/weixin_45144684/article/details/138455119YOLOv8训练流程-原理解析[目标检测理论篇]icon-default.png?t=O83Ahttps://blog.csdn.net/weixin_45144684/article/details/138589894

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和Prototype Mask,YOLOv8l_seg的网络结构具体如下所示:

         先来了解下mask_coefficients分支,是由2个卷积组和1个卷积层构成,也就是上图中浅紫色区域的分支头,前两个卷积组的通道数需要符合c4 = max(ch[0] // 4, self.nm),ch[0]表示80*80尺度特征图的通道数,self.nm为固定值32。由图可知,YOLOv8L中80 * 80尺度特征图的通道数是256,因此三个尺度的分支头中前两个卷积层的通道数均是64,最后一个卷积输出通道数是32,这个是和Proto分支的通道数是保持一致的。

        然后生成Prototype Mask特征图的Proto分支结构如下所示,结构很简单,主要是通过一个上采样层,将特征图由80×80分辨率上采样得到160×160尺度。那么为什么要选择80×80尺度特征图,而不选择其他尺度呢?是因为80×80相比其他尺度特征图更接近原图尺寸,上采样到160×160像素损失会更少,因而会有更好的分割效果,下图是不同网络各卷积层的张量变化情况,由下可知,最后输出的特征图shape都是一样的,均为(1,32,160,160),各层卷积通道数由80*80尺寸的通道数决定,比如n的Input为64,那么Conv1的通道数也是64,其他网络也是同理。

          YOLOv8_seg采用的是YOLACT的方法,详细可以看一下这篇文章轻松掌握 MMDetection 中常用算法(八):YOLACT - 知乎 (zhihu.com),我在这里大概说一下YOLACT实例分割的原理:

        上面是YOLACT的网络结构图,YOLOv8也是按照上面的原理来实现的,具体如下:

        (1)主干网络(Feature Backabone)以及特征图金字塔(Feature Pyramid)都是用来提取特征的,然后将P3(即分辨率最大的特征图)作为Protonet的输入,Prototypes是Protonet的输出,作为网络预测的一个原生掩码

        (2)预测头除了用来生成预测框的位置、类别,还会生成Mask ceofficients作为Prototypes的掩码系数

        (3)经过NMS筛选出两个目标,Detection1和Detection2,接下来将借助原生掩码和掩码系数生成这两个目标的预测掩码,然后对预测掩码根据预测框进行Crop裁剪,再利用Threshold进行二值化得到最后的结果。

        YOLOv8_seg网络的更多内容可以看下面的文章:

YOLOv8_seg预测流程-原理解析[实例分割理论篇]_yolov8seg模型推理数据怎么解析-CSDN博客icon-default.png?t=O83Ahttps://blog.csdn.net/weixin_45144684/article/details/138756878?spm=1001.2014.3001.5502YOLOv8_seg训练流程-原理解析[实例分割理论篇]_yolov8 seg-CSDN博客icon-default.png?t=O83Ahttps://blog.csdn.net/weixin_45144684/article/details/138824034?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22138824034%22%2C%22source%22%3A%22weixin_45144684%22%7D

3.YOLOv8_pose网络结构

         关键点检测的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个通道数均为51用来预测人体17个关键点位置和置信度的特征图 (1,51,80,80)、(1,51,40,40)和(1,51,20,20),即网络结构图中浅绿色Head部分。其中51表示17个关键点的位置和置信度,即17*3=51。人体17个关键点keypoints、关键点间的连接线Skeleton如下所示,在关键点检测原理篇也会展开讲一下这部分内容。

        YOLOv8_pose的网络结构具体如下所示,用来预测keypoint的分支头和box、cls分支头一样,通过两个Conv组和一个Conv2d将特征图的通道数变为51,其中前两个卷积组的通道数需要符合max(ch[0] // 4, self.nk),在YOLOv8l中,ch[0]为256,self.nk实际为预测关键点的维度,在人体关键点中为17*3=51,因此三个尺度的分支头中前两个卷积层的通道数均是64,最后一个卷积层的通道数为51.当然如果是像训练自己的关键点网络,通道数也是要相应发生改变的。主干网络结构部分大概就是这样,关键点主干网络后面还会发生什么,可以关注下本专栏关键点检测预测流程和训练流程理论篇的内容。

        YOLOv8关键点检测网络借鉴于YOLO PoseMaji_YOLO-Pose_Enhancing_YOLO_for_Multi_Person_Pose_Estimation_Using_Object,从下图就大概可以看到其思想是:一个目标检测框对应一组关键点,关键点可能会由于截断或者遮挡而无法预测出来,也有可能预测在目标检测框外。 

        YOLOv8_pose网络的更多内容可以看下面的文章: 

YOLOv8_pose预测流程-原理解析[关键点检测理论篇]_yolov8pose原理-CSDN博客icon-default.png?t=O83Ahttps://blog.csdn.net/weixin_45144684/article/details/139077739?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22139077739%22%2C%22source%22%3A%22weixin_45144684%22%7DYOLOv8_pose训练流程-原理解析[关键点检测理论篇]_yolov8关节点含义-CSDN博客icon-default.png?t=O83Ahttps://blog.csdn.net/weixin_45144684/article/details/139196865?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22139196865%22%2C%22source%22%3A%22weixin_45144684%22%7D

4.YOLOv8_obb网络结构

        旋转目标检测的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个通道数均为1,用来预测旋转角度的特征图Angle(1,1,80,80)、(1,1,40,40)和(1,1,20,20),Angle分支为下图中浅蓝色部分。

        Angle分支同样是由两个卷积组和一个卷积层构成,其中前两个卷积组的输出通道数遵循max(ch[0] // 4, self.ne),其中ch[0]表示80*80尺度特征图的通道数,在YOLOv8l中为256,self.ne表示number of extra parameters,即额外的参数量,默认设置为1,所以前两个卷积层的通道数均是64,而最后一个卷积层输出通道数是用来预测角度的,固定为1.

        网络结构上还是很好理解的,只是在正常目标检测网络上添加了角度这个维度,并且这个角度是基于目标检测框中心进行旋转的角度。但是实际上在预测流程和训练流程中,包括标签处理这块都不是基于框的中心进行旋转的,那么他们是怎么对应上的呢?本专栏旋转目标检测的原理篇将一一介绍直到解开YOLOv8_obb的面纱。

          YOLOv8_obb网络的更多内容可以看下面的文章:

高斯分布、GBB和Prob IoU[旋转目标检测理论篇]_probiou原理-CSDN博客icon-default.png?t=O83Ahttps://blog.csdn.net/weixin_45144684/article/details/139280640?spm=1001.2014.3001.5501YOLOv8_obb训练流程-原理解析[旋转目标检测理论篇]_yolov8obb 顶点顺序-CSDN博客icon-default.png?t=O83Ahttps://blog.csdn.net/weixin_45144684/article/details/139399075YOLOv8_obb预测流程-原理解析[旋转目标检测理论篇]_yolov8obb旋转框原理-CSDN博客icon-default.png?t=O83Ahttps://blog.csdn.net/weixin_45144684/article/details/139399445

关于YOLO网络架构图以及其与分割效率(segment efficient)相关内容,通常情况下YOLO (You Only Look Once) 是一种用于实时目标检测的单阶段神经网络模型。该系列算法因其高效性和速度而闻名,在多个版本迭代过程中不断优化性能和精度。 对于 YOLO 架构中的具体改进措施以提高分段效率方面: - **YOLOv3 和 YOLOv4 中引入了多尺度预测机制**,这有助于改善不同大小物体的检测效果,间接提高了处理图像片段时的表现[^1]。 - **PANet (Path Aggregation Network)** 被集成到某些版本中作为特征金字塔增强模块,增强了小对象检测能力的同时也提升了整体推理过程的速度和资源利用率。 然而,值得注意的是所提供的参考资料并未直接涉及 YOLO 的具体内容或者有关于 “segment efficient”的描述[^2]。为了获取最准确的信息,建议查阅官方论文或文档来了解特定版本下的实现细节和技术特点。 针对具体的图表展示,一般可以在原始研究文章、技术博客或是开源项目页面找到详细的架构说明图片。这些资料往往由开发者维护更新,并能提供最新版 YOLO 及其变体的第一手信息。 ```python # 示例代码并非实际应用而是示意如何查询相关文献 import requests def search_papers(keyword): url = f"https://api.example.com/search?query={keyword}" response = requests.get(url) papers = response.json() return papers['results'] papers = search_papers('YOLO segment efficient') for paper in papers: print(paper['title'], paper['link']) ```
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吃鱼不卡次

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值