想入门AI目标检测,却总被复杂的流程和晦涩的代码劝退?网上教程要么环境配置不全,要么代码跑不通,要么关键步骤一笔带过。别担心,本文将从零开始,手把手带你完成一个完整的YOLO目标检测模型训练与部署项目。无论你是毫无AI基础的学生,还是想将AI能力集成到项目中的开发者,都能跟着这篇保姆级教程,从数据采集、标注、训练,到模型转换和本地部署,走通全流程。你将不仅学会“怎么做”,更能理解“为什么这么做”,最终获得一个能在自己电脑上运行的、识别自定义目标的AI模型。

1. 背景与核心概念:为什么选择YOLO?

在开始动手之前,我们需要先理解我们即将使用的工具——YOLO。

1.1 什么是目标检测?

目标检测是计算机视觉的核心任务之一,它不仅要识别出图像中有什么物体(分类),还要精确地找出它们的位置(定位),并用一个矩形框(Bounding Box)标记出来。例如,在自动驾驶中识别车辆和行人,在安防监控中检测异常行为,在工业生产中定位产品缺陷,都离不开目标检测技术。

1.2 YOLO:一种革命性的检测框架

YOLO,全称“You Only Look Once”,顾名思义,是一种“只看一次”的端到端目标检测算法。在它出现之前,主流方法(如R-CNN系列)通常需要先产生大量候选区域,再对每个区域进行分类,速度较慢。YOLO的创新在于将目标检测视为一个单一的回归问题,直接将整张图像输入神经网络,一次性预测出所有目标框的位置和类别。这使得YOLO的速度非常快,能够满足实时检测的需求。

1.3 为什么适合初学者和本地部署?

  1. 生态成熟 :YOLO系列(从v1到最新的v8、v9、v10)经过多年发展,拥有庞大的社区和丰富的开源项目(如Ultralytics YOLO),文档和教程非常完善。
  2. 易于使用 :以Ultralytics YOLOv8为例,它提供了极其简洁的Python API和命令行接口,几行代码就能完成训练和预测,大大降低了入门门槛。
  3. 部署友好 :训练好的YOLO模型可以轻松转换为多种格式,如ONNX、TensorRT、CoreML等,方便在各种平台(Windows/Linux/macOS、移动端、边缘设备)和编程语言(Python、C++、Java、C#)中部署。
  4. 平衡性能 :在速度、精度和模型大小上取得了很好的平衡,可以根据需求选择不同规模的预训练模型(如YOLOv8n, YOLOv8s, YOLOv8m, YOLOv8l, YOLOv8x)。

本文将使用当前最流行、对新手最友好的 Ultralytics YOLOv8 作为核心框架,带你走完全部流程。

2. 环境准备与版本说明

一个稳定、一致的环境是成功的第一步。为了避免后续出现各种依赖冲突,强烈建议使用虚拟环境。

2.1 基础环境

  • 操作系统 :Windows 10/11, Ubuntu 18.04/20.04/22.04, 或 macOS。本文演示以Windows为主,Linux/macOS命令会有相应提示。
  • Python :版本 3.8 或 3.10(3.9和3.11也支持,但3.10是官方推荐且最稳定的)。请确保已安装。
  • 包管理工具 pip (Python自带)或 conda (如果你使用Anaconda)。

2.2 创建并激活虚拟环境

使用 venv (Python内置)创建隔离环境:

# 打开终端(Windows CMD/PowerShell, Linux/macOS Terminal)
# 创建一个名为‘yolo_train’的虚拟环境
python -m venv yolo_train

# 激活虚拟环境
# Windows (CMD)
yolo_train\Scripts\activate.bat
# Windows (PowerShell)
.\yolo_train\Scripts\Activate.ps1
# Linux/macOS
source yolo_train/bin/activate

激活后,终端提示符前会出现 (yolo_train) 字样。

2.3 安装核心库

在激活的虚拟环境中,运行以下命令安装必要的库。 ultralytics 库是核心,它封装了YOLOv8的所有功能。

# 安装 Ultralytics YOLOv8
pip install ultralytics

# 安装一些常用的辅助库
pip install opencv-python pillow matplotlib seaborn pandas
# 如果需要进行ONNX推理,可以安装onnxruntime
# pip install onnxruntime  # 或 pip install onnxruntime-gpu (如果你有CUDA环境)

关键版本说明 :本文基于 ultralytics==8.0.x 版本编写。YOLO版本迭代较快,但核心API在8.x版本中保持稳定。安装时如果不指定版本, pip 会安装最新的稳定版。

2.4 验证安装

安装完成后,在Python交互环境中快速验证:

python -c “from ultralytics import YOLO; print(‘YOLO version:’, ultralytics.__version__); model = YOLO(‘yolov8n.pt’); print(‘Model loaded successfully!’)”

如果看到输出版本号和成功加载模型的提示,说明环境配置成功。

3. 项目核心流程拆解

在写代码之前,我们先从宏观上理解训练一个自定义YOLO模型的完整流程,这有助于我们在后续步骤中清楚自己在做什么。

3.1 全流程概览

一个完整的自定义目标检测项目通常包含以下五个核心阶段:

  1. 数据采集与准备 :收集包含你感兴趣目标的图片。
  2. 数据标注 :在图片上标出目标的位置和类别。
  3. 模型训练 :使用标注好的数据“教”模型学习。
  4. 模型验证与评估 :检验训练出的模型效果如何。
  5. 模型导出与部署 :将模型转换为可部署格式,并集成到应用中。

3.2 各阶段技术要点

  • 数据 :质量远大于数量。几百张标注精良的图片,远胜于几千张标注粗糙的图片。数据需要尽可能多样化(不同光照、角度、背景、遮挡)。
  • 标注 :格式必须正确。YOLO使用的是归一化的中心坐标格式 (x_center, y_center, width, height) ,所有值都在0到1之间。
  • 训练 :本质是调整神经网络中数百万个参数,使模型的预测结果越来越接近真实的标注。需要选择合适的预训练模型、设置合理的训练参数(Epochs, Batch Size, Learning Rate等)。
  • 评估 :使用模型未见过的“测试集”来客观评价其性能。关键指标有:精度(Precision)、召回率(Recall)、平均精度(mAP)。
  • 部署 :将训练好的PyTorch模型(.pt)转换为更通用或更高效的格式(如ONNX),以便在没有PyTorch环境的其他平台(如移动端、嵌入式设备、Web后端)上运行。

4. 完整实战案例:训练一个“安全帽检测”模型

现在我们以“建筑工地安全帽检测”这个经典且实用的场景为例,完成全流程实战。你可以将其替换为你自己的目标,如“口罩检测”、“车辆检测”、“缺陷检测”等。

4.1 第一步:数据采集与准备

目标 :收集包含“戴安全帽”(helmet)和“未戴安全帽”(person)两种情况的工地场景图片。

方法

  1. 网络公开数据集 :这是最快的方式。例如,在Kaggle、Roboflow Universe、Open Images等平台搜索“Safety Helmet Detection”或“Hard Hat Detection”。
  2. 自行拍摄 :如果条件允许,用手机或相机在相关场景拍摄,确保图片清晰、目标大小适中。
  3. 网络爬取(需谨慎合法) :使用搜索引擎的图片高级搜索功能,筛选“知识共享许可”的图片,或使用合规的API。

建议 :初学者建议直接使用公开数据集。例如,我们可以在Roboflow上找到一个名为“Hard Hat Workers”的数据集,它通常已经做好了标注,并支持导出为YOLO格式。

数据组织 :将收集到的图片放在一个文件夹下,例如 datasets/helmet/images/ 。我们通常需要将数据分为三部分:

  • train/ :用于训练模型的图片。
  • val/ :用于在训练过程中验证模型效果、调整超参数的图片。
  • test/ :用于最终评估模型泛化能力的图片,在训练过程中完全不可见。

一个典型的目录结构如下:

helmet_detection/
├── datasets/
│   └── helmet/
│       ├── images/
│       │   ├── train/ (存放训练图片,如 0001.jpg, 0002.jpg...)
│       │   ├── val/   (存放验证图片)
│       │   └── test/  (存放测试图片)
│       └── labels/
│           ├── train/ (存放训练图片对应的标注文件,如 0001.txt, 0002.txt...)
│           ├── val/   (存放验证图片对应的标注文件)
│           └── test/  (存放测试图片对应的标注文件)
└── train.py (我们的训练脚本)

4.2 第二步:数据标注

如果使用的是未标注的数据集,我们需要进行标注。

标注工具推荐 LabelImg Roboflow Annotate

  • LabelImg :经典的本地下游图形界面工具。
    • 安装: pip install labelImg ,然后命令行运行 labelImg
    • 使用:打开图片目录,选择YOLO格式,用矩形框画出目标,输入类别名称(如“helmet”, “person”)。保存后会自动生成同名的 .txt 文件。
  • Roboflow Annotate :在线标注平台,支持协作和自动标注,对团队更友好。

标注文件(.txt)格式详解 : 每一行代表图片中的一个目标,格式为:

<class_id> <x_center> <y_center> <width> <height>
  • class_id :类别的整数索引,从0开始。例如,0代表“helmet”,1代表“person”。
  • x_center, y_center :边界框中心点的x和y坐标, 除以图片宽度和高度后的归一化值
  • width, height :边界框的宽度和高度, 除以图片宽度和高度后的归一化值

示例 :一张400x300的图片中,有一个“安全帽”(class_id=0),其边界框左上角为(100,50),右下角为(200,150)。则计算如下:

  • x_center = (100 + 200)/2 / 400 = 0.375
  • y_center = (50 + 150)/2 / 300 = 0.333
  • width = (200 - 100) / 400 = 0.25
  • height = (150 - 50) / 300 = 0.333 对应的标注行即为: 0 0.375 0.333 0.25 0.333

关键步骤 :创建 data.yaml 配置文件。这个文件告诉YOLO你的数据在哪里、有哪些类别。 在 datasets/helmet/ 目录下创建 data.yaml

# data.yaml
path: ../datasets/helmet  # 数据集根目录(相对路径或绝对路径)
train: images/train  # 训练集图片路径(相对于path)
val: images/val      # 验证集图片路径(相对于path)
test: images/test    # 测试集图片路径(可选)

# 类别名称和数量
nc: 2  # 类别数量 (number of classes)
names: [‘helmet’, ‘person’]  # 类别名称列表,顺序与class_id对应

4.3 第三步:模型训练

这是最核心的一步。得益于Ultralytics简洁的API,训练变得异常简单。

创建一个名为 train.py 的Python脚本:

# train.py
from ultralytics import YOLO

# 1. 加载一个预训练模型
# 可选模型:yolov8n.pt, yolov8s.pt, yolov8m.pt, yolov8l.pt, yolov8x.pt
# ‘n’代表nano(最小最快),‘x’代表extra large(最大最准)。初学者可从‘s’或‘m’开始。
model = YOLO(‘yolov8s.pt’)  # 加载一个中等大小的预训练模型

# 2. 开始训练模型
results = model.train(
    data=‘datasets/helmet/data.yaml’,  # 数据配置文件路径
    epochs=100,                         # 训练轮数,可根据数据集大小调整(50-300)
    imgsz=640,                          # 输入图片的大小,必须是32的倍数
    batch=16,                           # 每批处理的图片数量,取决于你的GPU内存
    device=‘0’,                         # 使用GPU训练,如果是CPU则设为‘cpu’。多卡可用‘0,1’
    workers=4,                          # 数据加载的线程数
    project=‘runs/train’,               # 保存训练结果的目录
    name=‘helmet_detection_v1’,         # 本次实验的名称
    exist_ok=True,                      # 如果实验目录已存在,则覆盖
    pretrained=True,                    # 使用预训练权重(强烈推荐)
    optimizer=‘auto’,                   # 优化器,auto通常为SGD或Adam
    lr0=0.01,                           # 初始学习率
    lrf=0.01,                           # 最终学习率因子 (lr0 * lrf)
    momentum=0.937,                     # SGD动量
    weight_decay=0.0005,                # 权重衰减,防止过拟合
    warmup_epochs=3.0,                  # 学习率预热轮数
    box=7.5,                            # 边界框损失权重
    cls=0.5,                            # 分类损失权重
    dfl=1.5,                            # DFL损失权重(v8特有)
    save=True,                          # 保存训练过程中的检查点
    save_period=-1,                     # 每N个epoch保存一次检查点(-1为仅在最后保存)
    val=True,                           # 训练中进行验证
)
print(“训练完成!”)

参数解释

  • epochs :模型遍历整个训练集的次数。太少学不会,太多可能过拟合。
  • imgsz :图片会被统一缩放到这个尺寸。更大的尺寸通常能提升精度,但会增加计算量和内存消耗。
  • batch :一次输入模型的图片数量。GPU内存越大,可以设置的batch size越大,训练越稳定、越快。
  • device :指定训练设备。有NVIDIA GPU并安装了CUDA和PyTorch GPU版本时,设置为 ‘0’ (第一块GPU)可以极大加速训练。

运行训练 : 在终端中,确保位于项目根目录,运行:

python train.py

训练开始后,终端会显示进度条、损失值(loss)和评估指标(mAP等)。所有输出(模型权重、日志、图表)都会保存在 runs/train/helmet_detection_v1/ 目录下。

4.4 第四步:模型验证与评估

训练结束后,我们需要客观地评估模型在“测试集”上的表现。

方法一:使用训练脚本自动验证 在训练时,如果设置了 val=True ,每个epoch结束后都会在验证集上评估,并生成指标。最佳模型(基于mAP)会自动保存为 best.pt

方法二:使用独立的验证脚本 创建一个 val.py 脚本,使用最好的模型权重在测试集上评估:

# val.py
from ultralytics import YOLO

# 加载训练得到的最佳模型
model = YOLO(‘runs/train/helmet_detection_v1/weights/best.pt’)

# 在测试集上进行评估
metrics = model.val(
    data=‘datasets/helmet/data.yaml’,
    split=‘test’,  # 使用测试集,确保这是模型从未见过的数据
    imgsz=640,
    batch=16,
    device=‘0’,
    conf=0.25,     # 置信度阈值,低于此值的预测将被忽略
    iou=0.6,       # NMS的IoU阈值,用于去除重叠框
    save_json=True, # 保存评估结果为JSON文件
    save_hybrid=True, # 保存混合标签(预测+真实)
    project=‘runs/val’,
    name=‘helmet_final_eval’,
    exist_ok=True,
)
# 打印关键指标
print(f“mAP50-95: {metrics.box.map:.4f}”)      # mAP@0.5:0.95
print(f“mAP50: {metrics.box.map50:.4f}”)       # mAP@0.5
print(f“Precision: {metrics.box.p:.4f}”)       # 精度
print(f“Recall: {metrics.box.r:.4f}”)          # 召回率

运行 python val.py 查看详细评估结果。

如何解读结果?

  • 精度(Precision) :模型预测出的目标中,有多少是真正的目标。越高越好,表示误报少。
  • 召回率(Recall) :所有真实的目标中,有多少被模型找出来了。越高越好,表示漏报少。
  • mAP@0.5(mAP50) :在IoU(交并比)阈值为0.5时的平均精度均值。是目标检测最常用的核心指标。
  • mAP@0.5:0.95(mAP50-95) :在多个IoU阈值(0.5到0.95,步长0.05)下的平均mAP,更严格、更全面。

通常,mAP50能达到0.8以上说明模型效果很不错,0.9以上则非常优秀。如果指标偏低,需要回到数据或训练步骤排查问题。

4.5 第五步:模型使用与推理

模型训练评估好后,就可以用它来预测新图片或视频了。

单张图片推理

# predict.py
from ultralytics import YOLO
import cv2

# 加载模型
model = YOLO(‘runs/train/helmet_detection_v1/weights/best.pt’)

# 预测单张图片
results = model(‘path/to/your/test_image.jpg’, save=True, imgsz=640, conf=0.5)
# results[0].show()  # 直接显示图片(需要GUI环境)
# 保存结果图片
cv2.imwrite(‘output.jpg’, results[0].plot())  # plot()方法将预测框画在图上

# 访问预测结果
for result in results:
    boxes = result.boxes  # 边界框信息
    masks = result.masks  # 分割掩码(如果是分割任务)
    keypoints = result.keypoints  # 关键点(如果是姿态任务)
    probs = result.probs  # 分类概率
    if boxes is not None:
        print(“检测到目标:”)
        for box in boxes:
            # 坐标 (xyxy格式:左上右下)
            xyxy = box.xyxy[0].tolist()
            # 置信度
            conf = box.conf[0].item()
            # 类别ID
            cls_id = int(box.cls[0].item())
            # 类别名称
            cls_name = model.names[cls_id]
            print(f”  {cls_name}: 置信度{conf:.2f}, 位置{xyxy}“)

实时摄像头或视频流推理

# webcam_predict.py
from ultralytics import YOLO
import cv2

model = YOLO(‘runs/train/helmet_detection_v1/weights/best.pt’)

# 打开摄像头(0通常是默认摄像头)
cap = cv2.VideoCapture(0)

while cap.isOpened():
    success, frame = cap.read()
    if not success:
        break

    # 在帧上进行推理
    results = model(frame, imgsz=640, conf=0.5, verbose=False)  # verbose=False关闭控制台日志

    # 在帧上绘制结果
    annotated_frame = results[0].plot()

    # 显示结果
    cv2.imshow(‘YOLOv8 Real-Time Detection’, annotated_frame)

    # 按 ‘q’ 退出
    if cv2.waitKey(1) & 0xFF == ord(‘q’):
        break

cap.release()
cv2.destroyAllWindows()

4.6 第六步:模型导出与本地部署

为了将模型集成到其他应用(如C++程序、移动App、Web服务)中,我们需要将其从PyTorch格式(.pt)转换为通用格式。

导出为ONNX格式 : ONNX是一种开放的模型交换格式,被众多推理引擎(如ONNX Runtime, TensorRT, OpenVINO)支持。

# export_onnx.py
from ultralytics import YOLO

model = YOLO(‘runs/train/helmet_detection_v1/weights/best.pt’)

# 导出模型
success = model.export(format=‘onnx’, imgsz=640, simplify=True, opset=12)
# format: 导出格式,还支持‘torchscript’, ‘tensorrt’, ‘coreml’, ‘openvino’等
# imgsz: 导出的模型固定输入尺寸
# simplify: 是否简化ONNX图
# opset: ONNX算子集版本

if success:
    print(“模型已成功导出为ONNX格式:”, ‘runs/train/helmet_detection_v1/weights/best.onnx’)

导出的 best.onnx 文件可以脱离PyTorch环境,被其他编程语言调用。

使用ONNX Runtime进行推理(Python示例)

# onnx_inference.py
import onnxruntime as ort
import cv2
import numpy as np

# 1. 加载ONNX模型和创建会话
onnx_model_path = ‘runs/train/helmet_detection_v1/weights/best.onnx’
providers = [‘CUDAExecutionProvider’, ‘CPUExecutionProvider’]  # 优先使用CUDA
session = ort.InferenceSession(onnx_model_path, providers=providers)
input_name = session.get_inputs()[0].name
output_name = session.get_outputs()[0].name

# 2. 预处理图片
img = cv2.imread(‘path/to/test_image.jpg’)
img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
img_resized = cv2.resize(img_rgb, (640, 640))
img_normalized = img_resized.astype(np.float32) / 255.0  # 归一化到[0,1]
img_input = np.transpose(img_normalized, (2, 0, 1))      # HWC -> CHW
img_input = np.expand_dims(img_input, axis=0)            # 添加批次维度 -> NCHW

# 3. 运行推理
outputs = session.run([output_name], {input_name: img_input})[0]

# 4. 后处理 (YOLOv8 ONNX输出格式需要解析,此处为简化示例)
# outputs的shape通常是[1, 84, 8400],需要根据置信度阈值和NMS进行过滤,得到最终的框和类别。
# 完整的后处理代码较长,Ultralytics提供了export后的模型自带后处理,或可使用其YOLO类加载onnx进行推理。
# 更简单的方式是:直接用YOLO类加载onnx文件进行推理,它会自动处理前后处理。
from ultralytics import YOLO
model_onnx = YOLO(onnx_model_path)
results = model_onnx(‘path/to/test_image.jpg’)
print(results[0].boxes)

注意 :直接使用ONNX Runtime进行推理需要手动编写预处理和后处理代码。更简单的方法是,即使导出了ONNX,仍然使用 ultralytics YOLO 类来加载 .onnx 文件进行推理,它会自动处理这些细节,如上例最后几行所示。

5. 常见问题与排查思路

在训练和部署过程中,你可能会遇到以下问题:

问题现象 可能原因 解决思路
CUDA out of memory GPU内存不足。 1. 减小 batch-size (如从16降到8)。
2. 减小 imgsz (如从640降到416)。
3. 关闭其他占用GPU的程序。
训练损失(loss)不下降 学习率不合适、数据有问题、模型复杂度与数据不匹配。 1. 检查数据标注是否正确(用 LabelImg 打开几张看看)。
2. 调整学习率 lr0 (尝试0.01, 0.001)。
3. 使用更小的预训练模型(如从 yolov8m.pt 换到 yolov8s.pt )。
4. 增加训练轮数 epochs
验证集mAP很低,但训练集loss正常 模型过拟合了。 1. 增加训练数据量,特别是增加数据的多样性。
2. 使用数据增强(YOLOv8默认已开启,可检查 data.yaml 或增强参数)。
3. 增加正则化,如增大 weight_decay
4. 使用早停(Early Stopping)。
模型推理速度很慢 模型太大、推理设备性能差、没有使用GPU。 1. 导出时尝试动态尺寸或更小的 imgsz
2. 确保推理时 device 参数设置为GPU(如 device=‘0’ )。
3. 考虑使用TensorRT或OpenVINO等针对特定硬件优化的格式进行加速。
No labels found 错误 数据路径错误或 labels 文件夹为空。 1. 仔细检查 data.yaml 中的 path train val 路径是否正确。
2. 确认 images/train labels/train 下的文件是否一一对应(同名不同后缀)。
3. 使用绝对路径试试。
导出的ONNX模型推理结果不对 导出参数不匹配或后处理错误。 1. 确保导出时的 imgsz 与推理时预处理尺寸一致。
2. 使用 model.export(..., simplify=True) 简化模型。
3. 先用 YOLO(‘best.onnx’) 测试推理是否正确,再自己写后处理。

6. 最佳实践与工程建议

掌握了基础流程后,以下建议能帮助你构建更鲁棒、更易维护的目标检测项目:

  1. 数据是王道

    • 质量优先 :100张标注精准、多样化的图片,好过1000张标注粗糙、重复的图片。
    • 划分严谨 :严格区分训练集、验证集、测试集,确保它们之间没有重复或高度相似的图片,测试集必须“绝对不可见”。
    • 数据增强 :合理使用YOLO内置的增强(Mosaic, MixUp等)或外部库(albumentations)来增加数据多样性,这对防止过拟合、提升泛化能力至关重要。
  2. 版本控制与实验管理

    • 使用 Git 管理你的代码和配置文件(如 data.yaml , train.py )。
    • 为每次重要的训练实验使用不同的 name 参数,并记录下对应的超参数和结果。Ultralytics默认的 runs/train/exp , runs/train/exp2 ... 不够清晰。
    • 考虑使用实验跟踪工具,如 Weights & Biases (W&B) TensorBoard (YOLOv8训练日志自动支持TensorBoard),可视化损失曲线、指标变化。
  3. 超参数调优

    • 不要盲目使用默认参数。 lr0 (学习率)、 batch-size imgsz 对结果影响很大。
    • 可以从小规模实验开始(用少量数据、少轮数),快速找到一组相对好的参数,再扩展到全量数据。
    • 使用 model.tune() 方法(如果版本支持)进行自动超参数搜索。
  4. 模型选择与部署优化

    • 精度与速度的权衡 :根据应用场景选择模型尺寸。服务器端可用 yolov8l/x 追求精度,移动端或边缘设备则用 yolov8n/s 追求速度。
    • 量化与加速 :对于部署,尤其是资源受限环境,可以探索:
      • PyTorch量化 :训练后动态量化或静态量化,减小模型大小,提升CPU推理速度。
      • TensorRT :NVIDIA GPU上的极致优化,能大幅提升推理速度。
      • OpenVINO :Intel CPU/GPU上的优化工具套件。
    • 导出为NCNN、TFLite等格式 ,以适配安卓、iOS等移动平台。
  5. 构建可复用的推理Pipeline

    • 将预处理、推理、后处理、结果可视化封装成独立的类或函数。
    • 处理好错误异常,如图片加载失败、模型加载失败等。
    • 为你的模型编写清晰的 README.md ,说明用途、环境依赖、使用方法、性能指标。
  6. 安全与伦理

    • 确保你的训练数据来源合法,并尊重隐私。
    • 明确模型的使用场景和局限性。目标检测模型可能存在偏见,在关键应用(如安防、医疗)中需谨慎评估。
    • 对模型进行充分的对抗测试,确保其在复杂、模糊场景下的稳定性。

至此,你已经完成了从零开始训练并部署一个自定义YOLO目标检测模型的全流程。这条路从数据准备到模型落地,虽然步骤不少,但每个环节都有成熟的工具和社区支持。核心在于动手实践,遇到问题多查阅官方文档和社区讨论。你可以尝试更换不同的目标(如检测交通标志、野生动物、工业零件),或者尝试YOLOv9、YOLOv10等更新版本,甚至深入研究模型结构并进行改进。目标检测的世界很大,这只是一个坚实而完整的起点。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐