建设银行网站关闭闪付网络营销推广价格

当前位置: 首页 > news >正文

建设银行网站关闭闪付,网络营销推广价格,wordpress图片网盘插件腾讯,购物网站页面布局在前面的章节中博主学习了YOLOv5的相关知识#xff0c;从YOLOv5的数据增强处理到模型设计#xff0c;从正负样本匹配策略到LOSS设计#xff0c;今天博主学习的是YOLOv8#xff0c;同为ultralytics公司的产品#xff0c;两者无论是思想层面还是具体的设计方面都有着异曲同工…在前面的章节中博主学习了YOLOv5的相关知识从YOLOv5的数据增强处理到模型设计从正负样本匹配策略到LOSS设计今天博主学习的是YOLOv8同为ultralytics公司的产品两者无论是思想层面还是具体的设计方面都有着异曲同工之妙。那么就让我们来学习一下这个横空出世的YOLOv8算法吧。值得一提的是YOLOv8相较于先前的YOLO系列算法其目前支持图像分类、物体检测和实例分割任务在还没有开源时就收到了用户的广泛关注。此外现在各个 YOLO 系列改进算法都在 COCO 上面有明显性能提升但是在自定义数据集上面的泛化性还没有得到广泛验证至今依然听到不少关于 YOLOv5 泛化性能较优异的说法。 在上一篇中博主对YOLOv8进行了调试目前模型仍处于训练阶段在这篇博文中博主将对YOLOv8模型的各个文件进行讲解由于YOLOv8刚刚问世相关解读参考数量有限如有不足之处烦请诸位不吝赐教。 模型介绍 模型改进 提供了一个全新的 SOTA 模型包括 P5 640 和 P6 1280 分辨率的目标检测网络和基于 YOLACT 的实例分割模型。和YOLOv5 一样基于缩放系数也提供了 N/S/M/L/X 尺度的不同大小模型用于满足不同场景需求骨干网络和 Neck 部分可能参考了 YOLOv7 ELAN 设计思想将 YOLOv5 的 C3 结构换成了梯度流更丰富的 C2f 结构并对不同尺度模型调整了不同的通道数属于对模型结构精心微调不再是无脑一套参数应用所有模型大幅提升了模型性能。不过这个 C2f模块中存在 Split 等操作对特定硬件部署没有之前那么友好了Head 部分相比 YOLOv5 改动较大换成了目前主流的解耦头结构将分类和检测头分离同时也从 Anchor-Based 换成了Anchor-FreeLoss 计算方面采用了 TaskAlignedAssigner 正样本分配策略并引入了 Distribution Focal Loss训练的数据增强部分引入了 YOLOX 中的最后 10 epoch 关闭 Mosiac 增强的操作可以有效地提升精度 从上面可以看出YOLOv8 主要参考了最近提出的诸如 YOLOX、YOLOv6、YOLOv7 等算法的相关设计本身的创新点不多偏向工程实践主推的还是 ultralytics 这个框架本身。 接下来我们将按照模型结构设计、Loss 计算、训练数据增强、训练策略和模型推理过程共 5 个部分详细介绍 YOLOv8 目标检测的各种改进实例分割部分暂时不进行描述。 模型配置文件 我们先来看一下YOLOv8的模型配置文件以yolov8n为例我们训练时使用的便是这个模型

Parameters

nc: 80 # number of classes depth_multiple: 0.33 # scales module repeats width_multiple: 0.25 # scales convolution channels其中nc是类别数由于使用coco数据集进行预训练而coco数据集类别有80种。 depth_multiple和width_multiple用来生成不同大小的模型如果希望大一点就把这个数字改大一点网络就会按比例变深、变宽如果希望小一点就把这个数字改小一点网络就会按比例变浅、变窄。 网络backbone部分 backbone:# [from, repeats, module, args]- [-1, 1, Conv, [64, 3, 2]] # 0-P1/2- [-1, 1, Conv, [128, 3, 2]] # 1-P2/4- [-1, 3, C2f, [128, True]]- [-1, 1, Conv, [256, 3, 2]] # 3-P3/8- [-1, 6, C2f, [256, True]]- [-1, 1, Conv, [512, 3, 2]] # 5-P4/16- [-1, 6, C2f, [512, True]]- [-1, 1, Conv, [1024, 3, 2]] # 7-P5/32- [-1, 3, C2f, [1024, True]]- [-1, 1, SPPF, [1024, 5]] # 9与yolov5一样yolov8会按照配置文件实例化各个层每行的列表中的四个元素分别代表[from, number, module, args] from-n 代表是从前n层获得的输入如-1表示从前一层获得输入 number该层的数量 module表示网络模块的名称 args类的初始化参数 随后我们看下具体模块设计 class Conv(nn.Module):# Standard convolution with args(ch_in, ch_out, kernel, stride, padding, groups, dilation, activation)default_act nn.SiLU() # default activationdef init(self, c1, c2, k1, s1, pNone, g1, d1, actTrue):super().init()self.conv nn.Conv2d(c1, c2, k, s, autopad(k, p, d), groupsg, dilationd, biasFalse)self.bn nn.BatchNorm2d(c2)self.act self.default_act if act is True else act if isinstance(act, nn.Module) else nn.Identity()def forward(self, x):return self.act(self.bn(self.conv(x)))def forward_fuse(self, x):return self.act(self.conv(x))我们以[-1, 1, Conv, [64, 3, 2]] 为例-1代表来自连接上一层1代表创建一个ConvConv为模型名【6432】代表【输出通道数量64卷积核尺寸k3步长s2】输入通道数量自动由上一层输出确定一般按照[ch_out, kernel, stride, padding, groups]排列。 在暂时不考虑 Head 情况下对比 YOLOv5 和 YOLOv8 的 yaml 配置文件可以发现改动较小。 Neck模块设计 骨干网络和 Neck 的具体变化为 第一个卷积层的 kernel 从 6x6 变成了 3x3所有的 C3 模块换成 C2f结构如下所示可以发现多了更多的跳层连接和额外的 Split 操作 去掉了 Neck 模块中的 2 个卷积连接层Backbone 中 C2f 的 block 数从 3-6-9-3 改成了 3-6-6-3 查看 N/S/M/L/X 等不同大小模型可以发现 N/S 和 L/X 两组模型只是改了缩放系数但是 S/M/L 等骨干网络的通道数设置不一样没有遵循同一套缩放系数。如此设计的原因应该是同一套缩放系数下的通道设置不是最优设计YOLOv7 网络设计时也没有遵循一套缩放系数作用于所有模型。 Head模块设计 Head 部分变化最大从原先的耦合头变成了解耦头并且从 YOLOv5 的 Anchor-Based 变成了 Anchor-Free。其结构如下所示
可以看出不再有之前的 objectness 分支只有解耦的分类和回归分支并且其回归分支使用了 Distribution Focal Loss 中提出的积分形式表示法。 Loss 计算 Loss 计算过程包括 2 个部分 正负样本分配策略和 Loss 计算。 现代目标检测器大部分都会在正负样本分配策略上面做文章典型的如 YOLOX 的 simOTA、TOOD 的 TaskAlignedAssigner 和 RTMDet 的 DynamicSoftLabelAssigner这类 Assigner 大都是动态分配策略而 YOLOv5 采用的依然是静态分配策略。考虑到动态分配策略的优异性YOLOv8 算法中则直接引用了 TOOD 的 TaskAlignedAssigner。 TaskAlignedAssigner 的匹配策略简单总结为 根据分类与回归的分数加权的分数选择正样本。 s 是标注类别对应的预测分值u 是预测框和 gt 框的 iou两者相乘就可以衡量对齐程度。 对于每一个 GT对所有的预测框基于 GT 类别对应分类分数预测框与 GT 的 IoU 的加权得到一个关联分类以及回归的对齐分数 alignment_metrics 。对于每一个 GT直接基于 alignment_metrics 对齐分数选取 topK 大的作为正样本 Loss 计算包括 2 个分支 分类和回归分支没有了之前的 objectness 分支。分类分支依然采用 BCE Loss回归分支需要和 Distribution Focal Loss 中提出的积分形式表示法绑定因此使用了 Distribution Focal Loss 同时还使用了 CIoU LossLoss 采用一定权重比例加权即可。 训练数据增强 数据增强方面和 YOLOv5 差距不大只不过引入了 YOLOX 中提出的最后 10 个 epoch 关闭 Mosaic 的操作。假设训练 epoch 是 500其示意图如下所示
训练策略 YOLOv8 的训练策略和 YOLOv5 没有啥区别最大区别就是模型的训练总 epoch 数从 300 提升到了 500这也导致训练时间急剧增加。以 YOLOv8-S 为例其训练策略汇总如下
模型推理过程 YOLOv8 的推理过程和 YOLOv5 几乎一样唯一差别在于前面需要对 Distribution Focal Loss 中的积分表示 bbox 形式进行解码变成常规的 4 维度 bbox后续计算过程就和 YOLOv5 一样了。 以 COCO 80 类为例假设输入图片大小为 640x640MMYOLO 中实现的推理过程示意图如下所示 其推理和后处理过程为 (1) bbox 积分形式转换为 4d bbox 格式 对 Head 输出的 bbox 分支进行转换利用 Softmax 和 Conv 计算将积分形式转换为 4 维 bbox 格式 (2) 维度变换 YOLOv8 输出特征图尺度为 80x80、40x40 和 20x20 的三个特征图。Head 部分输出分类和回归共 6 个尺度的特征图。 将 3 个不同尺度的类别预测分支、bbox 预测分支进行拼接并进行维度变换。为了后续方便处理会将原先的通道维度置换到最后类别预测分支 和 bbox 预测分支 shape 分别为 (b, 80x8040x4020x20, 80)(b,8400,80)(b,8400,4)。 (3) 解码还原到原图尺度 分类预测分支进行 Sigmoid 计算而 bbox 预测分支需要进行解码还原为真实的原图解码后 xyxy 格式。 (4) 阈值过滤 遍历 batch 中的每张图采用 score_thr 进行阈值过滤。在这过程中还需要考虑 multi_label 和 nms_pre确保过滤后的检测框数目不会多于 nms_pre。 (5) 还原到原图尺度和 nms 基于前处理过程将剩下的检测框还原到网络输出前的原图尺度然后进行 nms 即可。最终输出的检测框不能多于 max_per_img。 有一个特别注意的点YOLOv5 中采用的 Batch shape 推理策略在 YOLOv8 推理中暂时没有开启不清楚后面是否会开启在 MMYOLO 中快速测试了下如果开启 Batch shape 会涨大概 0.1~0.2。