1.安装

训练 YOLOv8 模型以检测特定目标(如手机、话筒等)需要一系列步骤。以下是详细步骤,涵盖数据准备、环境配置、训练过程等。

步骤 1:准备训练数据

首先需要准备一个含有你要检测目标(手机、话筒等)的数据集。

1.1 收集图片

  • 收集包含手机、话筒的图片数据,可以从公开数据集或自己拍摄的图片获取。
  • 推荐的图片格式为 JPEG 或 PNG。

1.2 标注图片

  • 使用标注工具(如 LabelImg)对每张图片进行标注。标注时需要为手机、话筒等物体画出边界框,并为其分配类别。
  • 使用教程LabelImg 安装和使用
  • 打开目录/images/train ,改变存放目录/labels/train

 

1.3 标注文件格式

YOLOv8 采用YOLO格式进行标注,标注结果会生成与图片文件同名的 .txt 文件,内容格式如下:

<class_id> <x_center> <y_center> <width> <height>

其中:

  • <class_id> 是物体的类别编号(从 0 开始)。
  • <x_center> 和 <y_center> 是物体中心的相对坐标(相对于图片宽度、高度,取值范围 0 到 1)。
  • <width> 和 <height> 是物体边界框的相对宽度和高度(相对于图片宽度、高度,取值范围 0 到 1)。

例如,标注一张图像中有手机(类别编号 0)的边界框:

0 0.5 0.5 0.2 0.4

步骤 2:设置数据集目录结构

确保你的数据集按照以下目录结构组织:

datasets/
  ├── images/
  │   ├── train/   # 训练集图片
  │   ├── val/     # 验证集图片
  ├── labels/
  │   ├── train/   # 训练集标注文件(与训练集图片同名)
  │   ├── val/     # 验证集标注文件(与验证集图片同名)

步骤 3:创建数据配置文件

接下来,需要创建一个 .yaml 配置文件,定义训练集、验证集路径和类别信息。

示例配置文件 data.yaml

train: datasets/images/train  # 训练集图片路径
val: datasets/images/val      # 验证集图片路径

nc: 2  # 类别数量 (手机和话筒两个类别,与上面classes.txt训练标签一致)
names: ['cell phone', 'microphone']  # 类别名称

步骤 4:设置 YOLOv8 训练环境

4.1 安装依赖

方法1:

pip install ultralytics

方法2:

首先确保你已经安装了 Python 和 PIP,接下来安装 YOLOv8 所需的依赖。

# 克隆 Ultralytics YOLOv8 仓库
git clone https://github.com/ultralytics/ultralytics

# 进入项目目录
cd ultralytics

# 安装依赖
pip install -e .

4.2 检查环境

确保你有 CUDA(如果使用 GPU 加速)或 CPU 环境可以运行。

# 检查是否安装成功
yolo

成功后,你应该能看到 YOLOv8 的命令行帮助信息。

步骤 5:开始训练 YOLOv8 模型

5.1 选择模型

YOLOv8 提供多种模型大小,如 yolov8n(nano 版,轻量级)到 yolov8x(extra-large,重量级)。可以根据硬件能力选择不同的模型。

5.2 执行训练

现在可以使用自定义数据集开始训练 YOLOv8 模型。以下是训练命令:

# 开始训练
yolo task=detect mode=train model=yolov8s.pt data=path/to/data.yaml epochs=100 imgsz=640
  • task=detect:表示执行目标检测任务。
  • mode=train:表示执行训练模式。
  • model=yolov8n.pt:指定使用的模型,可以选择 yolov8s.ptyolov8m.pt 等。
  • data=path/to/data.yaml:指向你之前创建的数据配置文件 data.yaml
  • epochs=100:设置训练轮数,通常 50-100 轮是一个合适的开始。
  • imgsz=640:输入图片大小,默认为 640,可以根据情况调整。

5.3 训练过程输出

训练过程会输出每个 epoch 的损失值和检测结果。你可以通过这些信息监控模型的性能。

步骤 6:验证与推理

训练完成后,可以使用训练好的模型进行推理或验证。

6.1 模型验证

验证模型性能,可以使用以下命令:

yolo task=detect mode=val model=path/to/best.pt data=path/to/data.yaml

这会使用你训练好的模型 best.pt 在验证集上进行评估,并输出 mAP(平均精度)等性能指标。

查看val_batch0_pred.jpg结果怎么样进行下面的步骤

6.2 推理检测

使用训练好的模型进行推理,可以使用以下命令:

# 在图片上进行推理
yolo task=detect mode=predict model=path/to/best.pt source=path/to/image.jpg

# 实时检测,使用摄像头
yolo task=detect mode=predict model=path/to/best.pt source=0
  • model=path/to/best.pt:训练好的模型路径。
  • source=path/to/image.jpg:指定待检测的图片路径。
  • source=0:使用系统摄像头进行实时检测。

步骤 7:导出模型

YOLOv8 支持导出模型到多种格式,方便部署到不同平台,如 TensorRT、ONNX、CoreML 等。

# 导出模型到 ONNX 格式
yolo task=detect mode=export model=path/to/best.pt format=onnx

 

步骤 8:预测

你可以使用新的图片来测试已导出的 ONNX 模型。具体步骤如下:

  1. 准备测试图片
    将你要测试的图片放入一个文件夹,例如 new_images/,然后将图片路径作为输入进行预测。

  2. 运行预测命令
    使用以下命令测试新图片,假设你把图片存放在 /Users/yangyongsheng/yolo8/new_images/ 目录下:

    yolo predict task=detect model=/Users/yangyongsheng/yolo8/datasets/runs/detect/train8/weights/best.onnx imgsz=640 source=/Users/yangyongsheng/yolo8/new_images/
  3. 查看结果
    YOLOv8 会将预测结果保存在 runs/predict/ 目录下,你可以在那里查看检测到的物体和相关的输出图像。

 

步骤 9:获取坐标

要获取 YOLOv8 预测结果中的标签名,你可以使用 results.names 属性来获取类别名称。标签通常与检测框关联,以下是如何从 Results 对象中提取和打印标签名的代码示例:

代码示例(可以用自己训练的ONNX或者pt忽略7和8步骤)

from ultralytics import YOLO
import cv2

# 加载预训练模型
model = YOLO('yolov8n.pt')  # 使用预训练的 YOLOv8 Nano 模型

# 读取图片
image_path = 'path/to/your/image.jpg'
image = cv2.imread(image_path)

# 进行预测
results = model(image)

# 处理每个结果
for result in results:
    # 提取检测框
    boxes = result.boxes
    names = result.names  # 获取标签名称
    if boxes is not None:
        for i, box in enumerate(boxes.xyxy):  # 遍历每个检测框
            # 打印 `box` 的内容来检查其结构
            print(f"Box {i}: {box}")

            if len(box) == 4:  # 确保 `box` 包含四个坐标
                x_min, y_min, x_max, y_max = box.tolist()
                cls = boxes.cls[i].item()  # 获取类别索引
                label = names[int(cls)]  # 获取类别名称
                confidence = boxes.conf[i].item()  # 获取置信度

                print(f"Label: {label}, Confidence: {confidence:.2f}")
                print(f"Bounding Box Coordinates: (x_min: {x_min}, y_min: {y_min}), (x_max: {x_max}, y_max: {y_max})")

                # 打印左上角的坐标
                print(f"Left Top Coordinates: (x: {x_min}, y: {y_min})")
            else:
                print(f"Unexpected box format: {box}")

解释

  • result.names: 这是一个字典,映射类别 ID 到标签名称。
  • cls = boxes.cls[i].item(): 从 Tensor 中提取类别 ID。
  • label = names[int(cls)]: 根据类别 ID 从 names 字典中获取标签名称。

验证输出

确保你的输出显示了正确的标签名称。如果 result.names 为空或没有标签,请检查模型是否正确加载,以及模型是否包含预期的类别标签。

总结

  1. 数据准备:收集和标注数据,整理成 YOLO 格式。
  2. 配置文件:创建数据配置文件,定义类别和数据路径。
  3. 安装依赖:安装 YOLOv8 及其依赖。
  4. 开始训练:通过训练命令训练模型。
  5. 验证和推理:使用训练好的模型进行验证或推理。
  6. 导出模型:导出模型到不同格式,便于部署。

通过以上步骤,你可以使用 YOLOv8 训练出适用于你特定需求的目标检测模型。