深度学习(一):Pytorch之YOLOv8目标检测

1.YOLOv8

2.模型详解

2.1模型结构设计

  • 和YOLOv5对比:

主要的模块:

  • Conv
  • SPPF
  • Bottleneck
  • Concat
  • Upsample
  • C2f

Backbone ----->Neck------>head

  • Backdone

1.第一个卷积层的 kernel 从 6x6 变成了 3x3
2. 所有的 C3 模块换成 C2f,可以发现多了更多的跳层连接和额外的 Split 操作

3.Backbone 中 C2f 的 block 数从 3-6-9-3 改成了 3-6-6-3

  • Neck

1.去掉了 Neck 模块中的 2 个卷积连接层

  • head

1.不再有之前的 objectness 分支,只有解耦的分类和回归分支,并且其回归分支使用了 Distribution Focal Loss 中提出的积分形式表示法。

  • Objectness:Objectness本质上是物体存在于感兴趣区域内的概率的度量。如果我们Objectness很高,这意味着图像窗口可能包含一个物体
  • Distribution Focal Loss:针对的是目标框坐标不够灵活的问题,尤其在边界不够清晰明确的情况下(如遮挡等)。
  • Distribution Focal Loss论文:https://arxiv.org/pdf/2006.04388.pdf

2.2Loss 计算

2.2.1正负样本分配策略

YOLOv8 算法中直接引用了TOOD 的 TaskAlignedAssigner

TOOD 的 TaskAlignedAssigne r:https://arxiv.org/pdf/2108.07755.pdf

总结:TaskAligned使用分类得分和IoU的高阶组合来衡量Task-Alignment的程度

2.2.2分类损失(VFL)

样本不均衡,正样本极少,负样本极多,需要降低负样本对 loss 的整体贡献了,于是用了focal loss。VFL当然具备focal loss拥有的所有特性。

VFL独有的:

**(1)**学习 IACS 得分( localization-aware 或 IoU-aware 的 classification score)

(2) 如果正样本的 gt_IoU 很高时,则对 loss 的贡献更大一些,可以让网络聚焦于那些高质量的样本上,也就是说训练高质量 的正例对AP的提升比低质量 的更大一些。

2.2.3目标识别损失1(DFL)

将框的位置建模成一个 general distribution,让网络快速的聚焦于和目标位置距离近的位置的分布。

2.2.4目标识别损失2(CIOU Loss)

2.2.5样本匹配

**(1)**抛弃了Anchor-Base方法,转而使用Anchor-Free方法

**(2)**找到了一个替代边长比例的匹配方法------TaskAligned

Anchor-Based是什么?------Anchor-Based是指的利用anchor匹配正负样本,从而缩小搜索空间,更准确、简单地进行梯度回传,训练网络。
Anchor-Based方法的劣势是什么?------但是因为下列这些劣势,我们抛弃掉了anchor 这一多余的步骤。

anchor也会对网络的性能带来影响:

(1)如巡训练匹配时较高的开销

(2)有许多超参数需要人为尝试调节等
Anchor-free的优势是什么?------Anchor-free模型则摒弃或是绕开了锚的概念,用更加精简的方式来确定正负样本,同时达到甚至超越了两阶段anchor-based的模型精度,并拥有更快的速度。
为与NMS(non maximum suppression非最大抑制)搭配,训练样例的Anchor分配需要满足以下两个规则:------

正常对齐的Anchor应当可以预测高分类得分,同时具有精确定位;

不对齐的Anchor应当具有低分类得分,并在NMS阶段被抑制。

基于上述两个目标,TaskAligned设计了一个新的Anchor alignment metric 来在Anchor level 衡量Task-Alignment的水平。并且,Alignment metric 被集成在了 sample 分配和 loss function里来动态的优化每个 Anchor 的预测。

3.代码实践

3.1目标检测

python 复制代码
from ultralytics import YOLO
from PIL import Image
# 加载模型
model = YOLO('yolov8x.pt')  # 加载官方模型

# 使用模型进行预测
results = model("E:\BaiduNetdiskDownload\people.jpg")  # 对图像进行预测
# 展示结果
for r in results:
    im_array = r.plot(font_size=0.01,conf=False)  # 绘制包含预测结果的BGR numpy数组
    im = Image.fromarray(im_array[..., ::-1])  # RGB PIL图像
    im.show()  # 显示图像
    im.save('results.jpg')  # 保存图像

3.2目标分割

python 复制代码
from ultralytics import YOLO
from PIL import Image
# 载入一个模型
model = YOLO('yolov8x-seg.pt')    # 载入官方模型


# 使用模型进行预测
results = model("E:\BaiduNetdiskDownload\people.jpg")  # 对一张图像进行预测
for r in results:
    im_array = r.plot(font_size=0.01,conf=False,labels=False)  # 绘制包含预测结果的BGR numpy数组
    im = Image.fromarray(im_array[..., ::-1])  # RGB PIL图像
    im.show()  # 显示图像
    im.save('results.jpg')  # 保存图像

3.3目标分类

python 复制代码
from ultralytics import YOLO
from PIL import Image
# 加载模型
model = YOLO('yolov8n-cls.pt')  # 加载官方模型


# 使用模型进行预测
results = model('E:\BaiduNetdiskDownload\people.jpg')  # 对图像进行预测
for r in results:
    im_array = r.plot(font_size=0.01,conf=False,labels=False)  # 绘制包含预测结果的BGR numpy数组
    im = Image.fromarray(im_array[..., ::-1])  # RGB PIL图像
    im.show()  # 显示图像
    im.save('results.jpg')  # 保存图像

3.4目标姿态

python 复制代码
from ultralytics import YOLO
from PIL import Image
# 加载模型
model = YOLO('yolov8n-pose.pt')  # 加载官方模型


# 使用模型进行预测
results = model('E:\BaiduNetdiskDownload\people.jpg')  # 对图像进行预测
for r in results:
    im_array = r.plot(font_size=0.01,conf=False,labels=False)  # 绘制包含预测结果的BGR numpy数组
    im = Image.fromarray(im_array[..., ::-1])  # RGB PIL图像
    im.show()  # 显示图像
    im.save('results.jpg')  # 保存图像

相关推荐
Honey Ro1 小时前
深度学习中的参数更新方法
深度学习·神经网络·自然语言处理·cnn
nap-joker1 小时前
阿尔茨海默病分期早期检测的多模式深度学习模型
人工智能·深度学习·adni
赵药师2 小时前
Cityscape数据集转YOLO
人工智能·深度学习·yolo
o_insist2 小时前
多层感知机判断氨基酸亲疏水性(PyTorch版)
人工智能·深度学习·机器学习
星光技术人4 小时前
投机采样 Speculative Decoding 核心笔记
人工智能·笔记·深度学习·计算机视觉·语言模型·自动驾驶
倔强的胖蚂蚁4 小时前
Transformer 大模型原理 完整入门指南
人工智能·深度学习·云原生·transformer
我材不敲代码5 小时前
YOLOv4 核心内容详解
yolo
动物园猫5 小时前
火焰与烟雾目标检测数据集分享(适用于YOLO系列深度学习分类检测任务)
深度学习·yolo·目标检测
动物园猫6 小时前
驾驶中的疲劳状态识别数据集分享(适用于YOLO系列深度学习分类检测任务)
深度学习·yolo·分类
张二娃同学6 小时前
专栏第01篇_深度学习导论
人工智能·python·深度学习·cnn