使用YOLO进行目标检测
当目标类别不在 COCO 数据集中时(如检测工业零件、特定品牌logo、农作物病害等),必须使用自定义数据集训练模型。示例:工业质检:检测产品表面的微小缺陷(如划痕、裂纹)。医疗影像:检测 X 光片中的特定病灶(如肺结节)。农业:识别作物上的病虫害(如稻瘟病、蚜虫)。准备数据集数据需要按照YOLOv8要求的目录存放└── train└── test└── valid标注工具: 生成 .txt 标注
使用YOLO进行目标检测
环境配置
-
从镜像源下载安装miniconda
-
在conda env中安装jupyter
pip install jupyter ipykernel -i https://pypi.tuna.tsinghua.edu.cn/simple -
安装YOLOv8
pip安装(镜像源)pip install ultralytics -i https://pypi.tuna.tsinghua.edu.cn/simple还有可以手动克隆 GitHub 仓库来安装
git clone https://github.com/ultralytics/ultralytics.git cd ultralytics pip install -e .或者通过conda安装
conda install -c conda-forge ultralytics -
下载安装vscode,选择python环境为conda env。如果这一步找不到conda的,需要手动添加conda的路径到系统环境变量中。具体来说就是把下面这三个路径加入环境变量,
C:\Users\<YourUsername>\Anaconda3 C:\Users\<YourUsername>\Anaconda3\Scripts C:\Users\<YourUsername>\Anaconda3\Library\bin
YOLO的基本使用
使用预训练模型进行目标检测
YOLOv8 是 Ultralytics 官方发布的最新版本。常见的预训练模型包括:
| 模型名称 | 特点 | 参数量 | 推理速度 | 适用场景 |
|---|---|---|---|---|
| yolov8n | 最小版本,极轻量级 | ~3.2M | 极快(>100 FPS) | 嵌入式设备、移动端实时检测 |
| yolov8s | 小型版本,速度与精度平衡 | ~11.1M | 快(50-100 FPS) | 移动端应用、边缘计算 |
| yolov8m | 中等规模,精度较高 | ~26.6M | 中等(30-50 FPS) | 通用目标检测任务 |
| yolov8l | 大型版本,高精度 | ~43.7M | 慢(10-30 FPS) | 工业质检、高精度场景 |
| yolov8x | 超大型版本,最高精度 | ~68.2M | 非常慢(<10 FPS) | 科研、专业级检测任务 |
预训练模型用于通用目标检测任务。预训练模型(如 yolov8n.pt、yolov8s.pt)已针对 COCO 数据集(包含 80 个常见类别)进行训练,可直接用于检测通用目标(如人、车、动物、交通标志等)。示例:自动驾驶中检测道路上的车辆和行人,智能监控中识别公共场所的人员和物品。
- 图片检测
from ultralytics import YOLO
# Load a model
model = YOLO('yolov8s.pt')
# Predict with the model
results = model('https://ultralytics.com/images/bus.jpg') # predict on an image
results[0].show() # 在窗口中显示预测结果
或者
yolo task=detect mode=predict model=yolov8s.pt source='https://ultralytics.com/images/bus.jpg' device=0 save=True
- 视频检测
yolo predict model=yolo11n-seg.pt source='yolo_test.mp4' imgsz=320
- 实时摄像头检测
yolo predict model=yolov8n.pt source=0
或者
from ultralytics import YOLO
import cv2
# 加载预训练模型
model = YOLO("yolov8s.pt")
# 获取摄像头内容,参数 0 表示使用默认的摄像头
# cap = cv2.VideoCapture(0)
# 我使用的是网络摄像头
# 构造 RTSP 地址
rtsp_url = "rtsp:.../stream1"
# 打开 RTSP 流
cap = cv2.VideoCapture(rtsp_url)
if not cap.isOpened():
print("无法连接到摄像头!")
exit()
while True:
ret, frame = cap.read()
if not ret:
print("无法读取视频帧!")
break
# YOLO 推理
results = model(frame, stream=True) # 实时检测
# 可视化结果
for result in results:
annotated_frame = result.plot() # 绘制边界框和标签
# 显示结果
cv2.imshow("YOLO 实时检测", annotated_frame)
# 按 'q' 键退出
if cv2.waitKey(1) == ord("q"):
break
# 释放资源
cap.release()
cv2.destroyAllWindows()
训练自定义数据集
当目标类别不在 COCO 数据集中时(如检测工业零件、特定品牌logo、农作物病害等),必须使用自定义数据集训练模型。
示例:
工业质检:检测产品表面的微小缺陷(如划痕、裂纹)。
医疗影像:检测 X 光片中的特定病灶(如肺结节)。
农业:识别作物上的病虫害(如稻瘟病、蚜虫)。
- 准备数据集
数据需要按照YOLOv8要求的目录存放
├── yolov8_dataset
└── train
└── images (folder including all training images)
└── labels (folder including all training labels)
└── test
└── images (folder including all testing images)
└── labels (folder including all testing labels)
└── valid
└── images (folder including all testing images)
└── labels (folder including all testing labels)
标注工具: 生成 .txt 标注文件。
2. 修改配置文件
推荐使用绝对路径,会避免很多问题。因为相对路径是相对于 settings.json 中的 datasets_dir (Ultralytics 的全局配置),每次更换数据都要修改datasets_dir 超级麻烦。
# data.yaml
train: /home/dataset/train
val: /home/dataset/val
test: /home/dataset/test
names:
0: No_detected
1: detected
- 开始训练
自定义数据集训练我们的模型,有三种方法:
使用yolo模型结构从随机权重开始训练;
使用yolo模型结构和yolo预训练的权重开始训练;
使用自定义的模型结构和yolo预训练的权重开始训练。
# 从YAML构建一个新模型,从头开始训练
yolo detect train data=coco128.yaml model=yolov8n.yaml epochs=100 imgsz=640
yolo detect train data=ultralytics/datasets/MoonCake.yaml model=yolov8n.yaml epochs=100 imgsz=640
# 从预训练的*.pt模型开始训练
yolo detect train data=coco128.yaml model=yolov8n.pt epochs=100 imgsz=640
yolo detect train data=ultralytics/datasets/MoonCake.yaml model=yolov8n.pt epochs=100 imgsz=640
# 从YAML中构建一个新模型,将预训练的权重转移到它并开始训练
yolo detect train data=coco128.yaml model=yolov8n.yaml pretrained=yolov8n.pt epochs=100 imgsz=640
yolo detect train data=ultralytics/datasets/MoonCake.yaml model=yolov8n.yaml pretrained=yolov8n.pt epochs=100 imgsz=640
from ultralytics import YOLO
# Load a model # 三选一
model = YOLO('yolov8n.yaml') # build a new model from YAML
model = YOLO('yolov8n.pt') # load a pretrained model (recommended for training)
model = YOLO('yolov8n.yaml').load('yolov8n.pt') # build from YAML and transfer weights
# Train the model
model.train(data='coco128.yaml', epochs=100, imgsz=640)
-
模型优化
调整超参数(如学习率、批大小)、数据增强策略(如旋转、缩放)以提升性能。
使用 TensorBoard 监控训练过程。 -
验证模型
yolo task=detect mode=val model=yolov8n.pt # mode=val 就是看验证集 yolo task=detect mode=val split=val model=path/to/best.pt data=path/to/data.yaml # mode=test 就是看测试集 yolo task=detect mode=val split=test model=path/to/best.pt data=path/to/data.yamlfrom ultralytics import YOLO # Load a model model = YOLO('yolov8n.pt') # load an official model model = YOLO('path/to/best.pt') # load a custom model # Validate the model metrics = model.val() # no arguments needed, dataset and settings remembered metrics.box.map # map50-95 metrics.box.map50 # map50 metrics.box.map75 # map75 metrics.box.maps # a list contains map50-95 of each category -
导出模型
from ultralytics import YOLO # Load a model model = YOLO('yolov8n.pt') # load an official model model = YOLO('path/to/best.pt') # load a custom trained # Export the model model.export(format='onnx')yolo export model=best.pt format=onnx yolo predict model=best.onnx source=example.jpg
引用
更多推荐


所有评论(0)