我将带你从零开始,一步步完成“图像标注”和“图像识别(目标检测)”,并且包含可以直接运行的代码示例。
整个流程分为 四大步:
环境安装:准备好软件。
数据标注:制作你自己的数据集。
模型训练:让 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 进行自定义目标检测的全过程!从这里开始,你可以尝试去识别任何你感兴趣的东西了。
网友回复
Pogocache比redis更快更好用?
新手如何使用yolo进行图像数据标注与图像识别?
threejs如何将glb三维模型减少面数和定点数粗糙一些减少文件体积大小?
在哪可以免费下载各国的武器飞机坦克航母舰艇导弹三维模型glb文件?
aistudio中build如何破解gemini的api模型调用免费使用?
python如何让红绿灯看懂两侧车流智能调节红绿灯?
python+faster_whisper如何实现实时开会录音并转成文字?
python如何调用微信本地的ocr进行图片文字提取?
有没有浏览器js就能离线运行支持mcp的ai模型?
c#如何调用gemini api实现文本描述来自动化操作电脑软件?