一、yolov8.yaml
YOLOv8详解 【网络结构+代码+实操】:
YOLOv8详解 【网络结构+代码+实操】-CSDN博客文章浏览阅读10w+次,点赞559次,收藏2.9k次。YOLOv8 算法的核心特性和改动可以归结为如下:提供了一个全新的 SOTA 模型,包括 P5 640 和 P6 1280 分辨率的目标检测网络和基于 YOLACT 的实例分割模型。和 YOLOv5 一样,基于缩放系数也提供了 N/S/M/L/X 尺度的不同大小模型,用于满足不同场景需求Backbone骨干网络和 Neck 部分可能参考了 YOLOv7 ELAN 设计思想,将 YOLOv5 的C3结构换成了梯度流更丰富的C2f结构,并对不同尺度模型调整了不同的通道数。_yolov8https://blog.csdn.net/zyw2002/article/details/128732494
YOLOv8源码逐行解读(yolov8.yaml):
YOLOv8源码逐行解读(yolov8.yaml)(更新中)-CSDN博客
yolov8官方文档:
主页 -Ultralytics YOLOv8 文档
yolov8.yaml是一个用于目标检测的模型配置文件,使用了YOLOv8算法。
该文件定义了网络的结构、超参数、输入输出等信息。
nc指定了目标检测任务中要识别的物体类别数,
scales定义了不同规模的模型参数,
backbone定义了模型【主干网络结构】,
head定义了目标检测任务的【头部网络结构】,
最后通过Detect函数输出检测结果。
这个模型可以根据不同的scale参数选择不同大小的模型进行训练和预测。
1、backbone
骨干网络和 Neck 部分可能参考了 YOLOv7 ELAN 设计思想,将 YOLOv5 的 C3 结构换成了梯度流更丰富的 C2f 结构,并对不同尺度模型调整了不同的通道数。
# [from, repeats, module, args]
from:本层的来源,也就是输入。-1表示将上层的输出作为本层的输入。
repeats:本层的重复次数。
module:本层的名称。
args:本层的参数。
Backbone和Neck的具体变化
a) 第一个卷积层的 kernel 从 6x6 变成了 3x3
b) 所有的 C3 模块换成 C2f,结构如下所示,可以发现多了更多的跳层连接和额外的 Split 操作
(1)特征图(计算公式)
(2)9层操作——卷积、C2f、SPPF
(2)C2f
去掉了 Neck 模块中的 2 个卷积连接层
Bottleneck
YOLOv8的C2F使用了Bottleneck单元,但需要注意的是,Darknet所引入的Bottleneck不同于ResNet的Bottleneck。
此处大家记住一点即可,Bottleneck可以大大减少参数,降低计算量。
(2)SPPF
暂无
2、head
(1)10~21层
(1)22层——detect层
[15, 18, 21]代表将第15、18、21层的输出(分别是80*80*256、40*40*512、20*20*1024)作为本层的输入。
nc是数据集的类别数。
3、scales
4、网络模型解析
(1)Conv
- 功能: 标准的卷积
- 参数:输入通道数(c1), 输出通道数(c2), 卷积核大小(k,默认是1), 步长(s,默认是1), 填充(p,默认为None), 组(g, 默认为1), 扩张率(d,默认为1), 是否采用激活函数(act ,默认为True, 且采用SiLU为激活函数)
(1)Loss
Loss 计算过程包括 2 个部分: 正负样本分配策略和 Loss 计算。
笔记下载
https://wwm.lanzout.com/isyZD1p3puyj
密码:hoab