深度学习(一):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')  # 保存图像

相关推荐
狂奔蜗牛(bradley)12 小时前
深度学习三大基础激活函数详解:Sigmoid、Tanh、ReLU 公式、导数、图像与优缺点对比
人工智能·深度学习
船厂电气自动化ai大模型12 小时前
AI大模型与数学 第32课 函数凹凸性与二阶导数:拐点求解、凹凸区间计算(10道二阶导数计算题)
数据结构·人工智能·python·深度学习·算法
小O的算法实验室14 小时前
IEEE TII,学习为多目标深度学习生成偏好
人工智能·深度学习·学习
江畔柳前堤15 小时前
Function Calling 与 Tool Calling:从认知到工程的全景深度解析
开发语言·网络·人工智能·深度学习·算法·机器学习·php
qq_4221525717 小时前
Token到底是什么?Tokenizer分词机制与中文token开销入门科普
人工智能·python·深度学习
AndrewHZ17 小时前
【LLM技术全景】RAG 从原理到实战——检索增强生成完整指南
人工智能·深度学习·算法·llm·检索增强·生成式模型·rag
夏文强18 小时前
AI 技术全景架构科普:从算法到应用的一整套技术栈
人工智能·深度学习·机器学习·大语言模型·技术架构
是上好佳佳佳呀19 小时前
【深度学习|DAY04】神经网络深度学习笔记(下):损失函数、优化器与正则化
笔记·深度学习·神经网络
阿图灵20 小时前
基于 GRU 的 Seq2Seq 中英机器翻译:从 Tatoeba 语料到 BLEU 0.195
深度学习·gru·nlp·机器翻译·seq2seq
GoCodingInMyWay20 小时前
PaddleOCR 开始
pytorch·ai·ocr