YOLO目标检测实战:从数据标注到模型部署的完整指南
想入门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 为什么适合初学者和本地部署?
- 生态成熟 :YOLO系列(从v1到最新的v8、v9、v10)经过多年发展,拥有庞大的社区和丰富的开源项目(如Ultralytics YOLO),文档和教程非常完善。
- 易于使用 :以Ultralytics YOLOv8为例,它提供了极其简洁的Python API和命令行接口,几行代码就能完成训练和预测,大大降低了入门门槛。
- 部署友好 :训练好的YOLO模型可以轻松转换为多种格式,如ONNX、TensorRT、CoreML等,方便在各种平台(Windows/Linux/macOS、移动端、边缘设备)和编程语言(Python、C++、Java、C#)中部署。
- 平衡性能 :在速度、精度和模型大小上取得了很好的平衡,可以根据需求选择不同规模的预训练模型(如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 全流程概览
一个完整的自定义目标检测项目通常包含以下五个核心阶段:
- 数据采集与准备 :收集包含你感兴趣目标的图片。
- 数据标注 :在图片上标出目标的位置和类别。
- 模型训练 :使用标注好的数据“教”模型学习。
- 模型验证与评估 :检验训练出的模型效果如何。
- 模型导出与部署 :将模型转换为可部署格式,并集成到应用中。
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)两种情况的工地场景图片。
方法 :
- 网络公开数据集 :这是最快的方式。例如,在Kaggle、Roboflow Universe、Open Images等平台搜索“Safety Helmet Detection”或“Hard Hat Detection”。
- 自行拍摄 :如果条件允许,用手机或相机在相关场景拍摄,确保图片清晰、目标大小适中。
- 网络爬取(需谨慎合法) :使用搜索引擎的图片高级搜索功能,筛选“知识共享许可”的图片,或使用合规的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. 最佳实践与工程建议
掌握了基础流程后,以下建议能帮助你构建更鲁棒、更易维护的目标检测项目:
-
数据是王道 :
- 质量优先 :100张标注精准、多样化的图片,好过1000张标注粗糙、重复的图片。
- 划分严谨 :严格区分训练集、验证集、测试集,确保它们之间没有重复或高度相似的图片,测试集必须“绝对不可见”。
- 数据增强 :合理使用YOLO内置的增强(Mosaic, MixUp等)或外部库(albumentations)来增加数据多样性,这对防止过拟合、提升泛化能力至关重要。
-
版本控制与实验管理 :
- 使用
Git管理你的代码和配置文件(如data.yaml,train.py)。 - 为每次重要的训练实验使用不同的
name参数,并记录下对应的超参数和结果。Ultralytics默认的runs/train/exp,runs/train/exp2... 不够清晰。 - 考虑使用实验跟踪工具,如 Weights & Biases (W&B) 或 TensorBoard (YOLOv8训练日志自动支持TensorBoard),可视化损失曲线、指标变化。
- 使用
-
超参数调优 :
- 不要盲目使用默认参数。
lr0(学习率)、batch-size、imgsz对结果影响很大。 - 可以从小规模实验开始(用少量数据、少轮数),快速找到一组相对好的参数,再扩展到全量数据。
- 使用
model.tune()方法(如果版本支持)进行自动超参数搜索。
- 不要盲目使用默认参数。
-
模型选择与部署优化 :
- 精度与速度的权衡 :根据应用场景选择模型尺寸。服务器端可用
yolov8l/x追求精度,移动端或边缘设备则用yolov8n/s追求速度。 - 量化与加速 :对于部署,尤其是资源受限环境,可以探索:
- PyTorch量化 :训练后动态量化或静态量化,减小模型大小,提升CPU推理速度。
- TensorRT :NVIDIA GPU上的极致优化,能大幅提升推理速度。
- OpenVINO :Intel CPU/GPU上的优化工具套件。
- 导出为NCNN、TFLite等格式 ,以适配安卓、iOS等移动平台。
- 精度与速度的权衡 :根据应用场景选择模型尺寸。服务器端可用
-
构建可复用的推理Pipeline :
- 将预处理、推理、后处理、结果可视化封装成独立的类或函数。
- 处理好错误异常,如图片加载失败、模型加载失败等。
- 为你的模型编写清晰的
README.md,说明用途、环境依赖、使用方法、性能指标。
-
安全与伦理 :
- 确保你的训练数据来源合法,并尊重隐私。
- 明确模型的使用场景和局限性。目标检测模型可能存在偏见,在关键应用(如安防、医疗)中需谨慎评估。
- 对模型进行充分的对抗测试,确保其在复杂、模糊场景下的稳定性。
至此,你已经完成了从零开始训练并部署一个自定义YOLO目标检测模型的全流程。这条路从数据准备到模型落地,虽然步骤不少,但每个环节都有成熟的工具和社区支持。核心在于动手实践,遇到问题多查阅官方文档和社区讨论。你可以尝试更换不同的目标(如检测交通标志、野生动物、工业零件),或者尝试YOLOv9、YOLOv10等更新版本,甚至深入研究模型结构并进行改进。目标检测的世界很大,这只是一个坚实而完整的起点。
更多推荐




所有评论(0)