萍乡市网站建设_网站建设公司_加载速度优化_seo优化
2025/12/26 10:58:43 网站建设 项目流程

此分类用于记录吴恩达深度学习课程的学习笔记。
课程相关信息链接如下:

  1. 原课程视频链接:[双语字幕]吴恩达深度学习deeplearning.ai
  2. github课程资料,含课件与笔记:吴恩达深度学习教学资料
  3. 课程配套练习(中英)与答案:吴恩达深度学习课后习题与答案

本篇为第四课第三周的课后习题和代码实践部分。


1.理论习题

【中英】【吴恩达课后测验】Course 4 -卷积神经网络 - 第三周测验
习题都较为简单,就不再多说了,还是把重点放在下面的演示部分。

2.代码实践

YOLO车辆识别实战
同样先摆上这位博主的链接,在这周的编程作业中,这位博主手动构建了YOLO网络及其各个组件,非常详细,但同样因为 Keras 如今已经被 TF 的集成,如果要进行相应实践,需要调整相应的导库代码和一些方法的调用。

我们仍然使用较成熟的框架来演示一下 YOLO 算法,只是这次我们既不用 PyTorch ,也不用TF。
我们这次要使用的库叫做 ultralytics,是 YOLO 官方团队维护的 Python 包。
无论是使用 YOLO 进行学术实验,还是竞赛打榜,ultralytics 都被广泛使用,如果说 PyTorch 和 TF 提供的是造模型的积木,那么 ultralytics 就是针对 YOLO 算法的专精机器。
你可以直接通过 pip 安装这个包:

pip install ultralytics

ultralytics 毕竟是一个首次使用的全新库,因此,本篇我会使用一个极小的 demo 数据集,主要演示一下 ultralytics 的使用流程。

2.1 demo 数据集:COCO8

在目标检测领域,COCO(Common Objects in Context) 是目前使用最广泛、影响力最大的标准数据集之一。
它以复杂真实场景为特点,强调多目标共存、小目标比例高以及目标与背景强耦合,长期以来被作为目标检测算法的重要评测基准。
标准的 COCO 数据集规模庞大,仅 2017 版本就包含超过 11 万张训练图像,覆盖 80 个常见物体类别,完整下载、预处理与训练成本都较高。因此,尽管 COCO 非常适合用于严肃的算法研究与性能对比,但对于初学者上手门槛偏高
image.png
为了解决这一问题,Ultralytics 官方提供了一个用于演示和教学的极简数据集 —— COCO8
COCO8 本质上是从 COCO 数据集中抽取出的一个最小化子集,在保持 COCO 数据格式与标注规范完全一致的前提下,将数据规模压缩到了极低的水平。目前的 COCO8 仅包含 8 张图像,通常划分为 训练集 4 张、验证集 4 张,并覆盖 COCO 中的若干典型目标类别。

这种设计使得 COCO8 具备两个非常突出的特点:
一方面,它可以在数秒内完成下载,并在极短时间内跑完一次完整的训练流程;另一方面,它又完整保留了真实 COCO 数据集在目录结构、标注格式与训练接口上的一致性。
因此,COCO8 的核心用途并不是训练一个性能良好的检测模型,而是用于:快速验证 ultralytics 的安装与环境配置是否正确、流程是否正常并演示 YOLO 的训练、验证与推理的完整闭环。
需要特别说明的是,由于数据规模极小,COCO8 上得到的指标也不具备统计意义,也不反映模型的实际检测能力。它的价值更多体现在“流程验证”和“使用示例”层面。

2.2 使用 ultralytics 实现 YOLO 算法

先来看这样一段代码:

from ultralytics import YOLO  
model = YOLO("yolo11n.pt")
results = model.train(  data="coco8.yaml",   epochs=50,             imgsz=640,             batch=16,            name="coco8_train",  device="cpu"           
)  
metrics = model.val(device="cpu")
print("mAP50-95:", metrics.box.map)   
print("mAP50:", metrics.box.map50)

要说明的是:这就是在 ultralytics 上实现 YOLO 算法的完整代码,包括创建模型、输入数据、模型传播、指标评估甚至包括可视化图表。

是的,这便是 ultralytics 的显著特点,它的封装度极高
这代表我们使用起来可以较容易地跑通代码,但同时也意味着隐藏了大量细节,想要熟练应用,就要慢慢拆解。

现在,我们就来详细看看这段代码的运行细节:

(1) 模型定义

首先,定义模型:

model = YOLO("yolo11n.pt") # 这里传入的是预训练权重文件名,.pt文件是 PyTorch 的权重格式。

YOLOultralytics 提供的统一模型接口类,它可以根据传入的参数,加载不同版本的 YOLO 模型(如 YOLOv8、YOLO11 等),它封装了模型的所有关键逻辑。
要说明的是,YOLO 模型权重文件通常遵循如下命名规则:
在 ultralytics 最新版本中,YOLO 模型权重文件通常遵循如下命名规则:

yolo[版本号][模型大小].pt

版本号表示 YOLO 的算法版本或 ultralytics 发布的迭代版本。
模型大小 表示模型的参数量与计算复杂度,也是速度和精度的折中指标:

  • n = nano → 极小模型,参数少,推理快,适合演示和入门
  • s = small → 小型模型,参数稍多,精度和速度平衡
  • m = medium → 中等模型,精度更高,训练和推理开销也增大
  • l = large → 大模型,高精度,训练和推理成本高
  • x = extra large → 超大模型,精度最高,但训练成本最大

同时,你会发现,只要我们传入 .pt 结尾的权重文件作为参数,那就代表我们使用的是预训练模型。
而如果你希望从头训练自己的模型,就要改变传入参数:

# 从头创建模型,不加载预训练权重
model = YOLO("yolov8n.yaml")  # 只指定网络结构 YAML,不是 .pt 文件

(2) 训练方法

了解完模型定义后,现在就来看看传入方法

results = model.train(...)

这一行是整个流程的核心。调用 train() 方法后,ultralytics 会自动完成一次完整的目标检测训练流程
从宏观上看,这一行代码内部依次完成了以下工作:

  • 读取并解析 coco8.yaml 数据集配置文件
  • 根据配置构建训练集与验证集的数据加载器
  • 加载预训练权重并初始化模型参数
  • 按照指定的训练轮数执行前向传播、损失计算与反向传播
  • 在训练过程中自动记录 loss、mAP 等指标,并生成可视化结果

也就是说,我们在代码中看到的只是一次函数调用,但在其背后,实际上已经包含了一个标准深度学习训练框架所需的完整流程。

下面,我们再展开看看这个方法的参数设置:

data="coco8.yaml" # Ultralytics 内置的 COCO8 配置,首次运行自动下载数据集

这一参数用于指定数据集的配置文件
与之前在代码中手动构建 DatasetDataLoader 不同,ultralytics 采用 YAML 文件(你可以理解为专用设定集) 来描述数据集的路径、类别数量以及类别名称。
通过这种方式,模型与数据集实现了解耦: 同一套训练代码可以通过更换 YAML 文件,直接应用到不同的数据集上,而无需修改模型或训练逻辑。

再来看看它的运行时的细节:
image.png

继续看下面几个参数:

epochs=50,           # 训练轮次 
imgsz=640,           # 图像大小  
batch=16,            # 批次大小  
name="coco8_train",  # 实验名称
device="cpu"         # 如果有 GPU 用 0,或 "cuda";无 GPU 用 "cpu"

这些我们都比较熟悉了,要专门说的一点是:
name="coco8_train" 指定了本次训练实验的名字,ultralytics 会根据这个名字创建一个文件夹来保存训练输出每个实验名对应一个独立的训练结果目录,方便管理。
我们后面展示运行结果时就会再次用到它。

(3)评估方法

同样,这一方法被高度封装:

metrics = model.val(device="cpu") # 默认使用GPU,因此,如果没有GPU,要显式指定CPU。
print("mAP50-95:", metrics.box.map)    
print("mAP50:", metrics.box.map50)

这是 ultralytics YOLO 提供的验证接口, 它在内部做了这些关键步骤:

  1. 读取并加载验证集:如果有缓存(.cache 文件),会加快数据载入。
  2. 模型前向传播:自动使用非极大值抑制筛选重复框。
  3. 计算指标:返回的 metrics 对象中包含了不同类型的指标数据。

于是,我们便可以直接打印 metrics 对象中的指标。

现在,了解了框架本身后,我们来看看运行效果和其过程中的细节。

2.3 在 coco8 上运行 YOLO 算法

YOLO 的模型时至今日仍在不断地更新,我们使用的 YOLOv11 的网络结构如下:
image.png
它集成了很多的先进技术,非常复杂,目前阶段,我们理解 YOLO 算法的基础原理就好。

现在,我们来看看代码的运行过程:

(1)控制台输出内容

当代码成功开始运行后,你会发现在轮次信息前,控制台就输出了很多内容。这些其实是在训练开始时的标准日志,它主要是在做训练前的准备、模型初始化、数据检查和优化器配置
我们简单看一看:
image.png
image.png
image.png

直到这里,模型才完成前期准备工作,开始正式训练。
同样,ultralytics 对训练信息的输出也十分丰富:
image.png

别急,还没完,在结束训练后,ultralytics 还会给你做一些”善后和总结“:
image.png
image.png

显然,这里的指标较高是预训练的成果。
这一整套下来,你会发现,不同于我们原本自己打印的输出结果,ultralytics 对训练日志的记录和管理非常完备,而且还不仅仅局限于控制台输出。
我们继续往下:

(2)日志文件夹

在完成训练后,你会发现,运行文件的同级目录中新出现了一个名为 runs 的文件夹,这就是ultralytics用来管理日志的文件夹
image.png
image.png
这样的管理方式也更方便我们的溯源和调试。

我们这次实践内容就到这里,实际上,与其说本篇是在演示 YOLO 算法,倒不如说是对 ultralytics 的使用介绍。主要原因是 YOLO 算法作为真正流行的算法,其使用的各项技术和原理已经可以出本书了,我们这里只将其作为计算机视觉中的一个方向来介绍一些基础内容。

实际上还有很多内容可以展开,比如在训练日志里出现的一些专业图表的含义,以及检测任务的几个评估指标,这些我们之后遇到再慢慢说。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询