+
13
-

回答

我将带你从零开始,一步步完成“图像标注”和“图像识别(目标检测)”,并且包含可以直接运行的代码示例。

整个流程分为 四大步

环境安装:准备好软件。

数据标注:制作你自己的数据集。

模型训练:让 YOLO 学会识别你的目标。

识别与测试:用训练好的模型进行预测。

第一步:环境安装与准备

你需要 Python 环境和几个库。我们用最简单的方式安装。

安装 Python:确保你的电脑上安装了 Python 3.8 或更高版本。

安装 YOLOv8 和 OpenCV:打开你的终端(Windows 用户是 CMD 或 PowerShell),输入一行命令即可:

pip install ultralytics opencv-python

安装标注工具 (LabelImg):这是一个简单好用的本地标注软件。

pip install labelImg

环境就搭好了,非常简单!

第二步:数据标注(核心步骤)

假设我们要训练一个模型来识别图片里的 猫 (cat)狗 (dog)

收集图片

创建一个主文件夹,比如 My-Dataset。

在里面再创建一个 images 文件夹,把你找到的所有猫和狗的图片都放进去。图片越多、场景越丰富越好。

开始标注

在终端输入 labelImg 命令,启动标注工具。

① 打开目录:点击 "Open Dir",选择刚才创建的 images 文件夹。

② 切换格式:点击左侧菜单的 "PascalVOC" 按钮,把它切换成 "YOLO" 格式。这是最关键的一步!

③ 开始画框

点击 "Create RectBox" (或按快捷键 W)。

用鼠标在图片中的猫或狗身上画一个刚刚好框住目标的矩形框。

画完后,会弹出一个对话框让你输入标签名,比如输入 cat,然后点 OK。

继续为图片中所有的猫和狗画框。

④ 保存:点击 "Save" (或按快捷键 Ctrl+S)。你会发现,在你的 images 文件夹旁边,自动生成了一个 labels 文件夹,里面有一个和图片同名的 .txt 文件。这个就是 YOLO 的标签文件。

⑤ 重复:处理完一张图片后,点击 "Next Image",继续标注下一张,直到所有图片都标完。

标注完成后,你的目录结构应该是这样的:

My-Dataset/
├── images/
│   ├── 001.jpg
│   ├── 002.jpg
│   └── ...
└── labels/
    ├── 001.txt
    ├── 002.txt
    └── ...

.txt 文件的内容是类似 0 0.5 0.5 0.2 0.3 这样的数字,你不需要手动修改它,这是 LabelImg 自动生成的。

第三步:模型训练

数据准备好了,现在开始训练。

整理数据集结构:YOLO 需要 train(训练集)和 val(验证集)两部分。我们手动分一下:

在 My-Dataset 文件夹下,创建 images/train, images/val, labels/train, labels/val 四个子文件夹。

把大约 80% 的图片和对应的标签文件移动到 train 文件夹里。

把剩下的 20% 移动到 val 文件夹里。

创建配置文件 data.yaml

在 My-Dataset 文件夹的根目录下,创建一个名为 data.yaml 的文本文件。

用记事本或代码编辑器打开它,写入以下内容(注意修改 path 为你的绝对路径):

# train 和 val 的路径是相对于 path 的
path: D:/path/to/your/My-Dataset  # !!重要:改成你自己的 My-Dataset 文件夹的绝对路径
train: images/train
val: images/val

# 类别信息
names:
  0: cat
  1: dog

注意:names 里的类别顺序非常重要,0: cat 表示你在标注时,第一个遇到的类别是猫。LabelImg 会自动按字母顺序或你首次输入的顺序来编号。

开始训练(用 Python 脚本)

创建一个 Python 文件,比如 train.py。

把下面的代码复制进去:

from ultralytics import YOLO

# 1. 加载一个预训练模型
# yolov8n.pt 是最小的模型,速度最快。也可以选 yolov8s.pt, yolov8m.pt 等
model = YOLO("yolov8n.pt") 

# 2. 开始训练
# data: 你的 data.yaml 文件路径
# epochs: 训练轮次,新手可以先设为 50-100
# imgsz: 图片尺寸,通常是 640
# device: 0 表示使用第一块 GPU,如果没有 GPU 就写 'cpu'
results = model.train(data="D:/path/to/your/My-Dataset/data.yaml", 
                      epochs=100, 
                      imgsz=640,
                      device=0)

print("训练完成!模型保存在 runs/detect/train/weights/best.pt")

运行 train.py。你会看到终端开始打印训练日志,这可能需要几分钟到几小时,取决于你的数据量和电脑配置。

训练完成后,你会在当前目录下找到一个 runs 文件夹,你最好的模型权重文件就保存在 runs/detect/train/weights/best.pt。

第四步:图像识别与测试

我们用刚刚训练好的模型来识别新的图片。

准备测试图片:找一张没参与过训练的、包含猫或狗的图片,比如叫 test_image.jpg。

编写预测脚本 predict.py

from ultralytics import YOLO
import cv2

# 1. 加载你自己的模型
# model_path 是你训练好的 best.pt 的路径
model_path = "runs/detect/train/weights/best.pt" 
model = YOLO(model_path)

# --- 识别单张图片 ---
image_path = "test_image.jpg" # 换成你的测试图片路径
results = model.predict(source=image_path)

# results 是一个列表,我们处理第一张图片的结果
result = results[0]

# 把识别结果画在原图上
annotated_frame = result.plot()

# 显示图片
cv2.imshow("YOLOv8 Detection", annotated_frame)
cv2.waitKey(0) # 按任意键关闭窗口
cv2.destroyAllWindows()

# --- 实时识别摄像头 ---
# 如果想用摄像头,可以取消下面的注释

# cap = cv2.VideoCapture(0)
# while True:
#     ret, frame = cap.read()
#     if not ret:
#         break

#     # 用模型进行预测
#     results = model(frame)
#     annotated_frame = results[0].plot()

#     cv2.imshow("YOLOv8 Real-time", annotated_frame)

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

# cap.release()
# cv2.destroyAllWindows()

运行 predict.py。稍等片刻,就会弹出一个窗口,显示你的测试图片,并且图片上的猫和狗已经被方框和标签标出来了!

总结与常见问题

标注质量是关键:框要尽量紧贴目标,不要漏标。

数据量很重要:每个类别至少有几百张图片,效果才会好。

data.yaml 路径问题:路径错误是新手最常犯的错,建议使用绝对路径。

训练太慢

检查是否正在用 GPU (device=0)。

可以减小 epochs,或者换更小的模型,比如 yolov8n.pt。

识别不准

增加更多样化的训练图片(不同光线、角度、背景)。

增加训练轮次 epochs。

检查标注是否有错误。

你已经掌握了使用 YOLO 进行自定义目标检测的全过程!从这里开始,你可以尝试去识别任何你感兴趣的东西了。

网友回复

我知道答案,我要回答