YOLOv8环境搭好了,然后呢?5个实用脚本带你玩转目标检测(从预测到训练)
·
YOLOv8环境搭好了,然后呢?5个实用脚本带你玩转目标检测(从预测到训练)
刚完成YOLOv8环境配置的开发者常会遇到这样的困境:跑通官方demo后,面对自己的实际需求却无从下手。本文将提供五个即用型Python脚本,覆盖从基础应用到自定义训练的全流程,帮你快速跨越"环境验证"到"实战落地"的鸿沟。
1. 批量图片检测:自动化处理图像文件夹
许多教程只演示单张图片预测,而实际项目往往需要处理成百上千的图片。以下脚本可批量处理指定目录中的所有图像:
from ultralytics import YOLO
import os
model = YOLO('yolov8n.pt') # 加载官方预训练模型
input_dir = 'your_images_folder'
output_dir = 'detection_results'
os.makedirs(output_dir, exist_ok=True)
for filename in os.listdir(input_dir):
if filename.lower().endswith(('.png', '.jpg', '.jpeg')):
img_path = os.path.join(input_dir, filename)
results = model.predict(source=img_path, save=True, project=output_dir)
关键参数说明:
save=True自动保存检测结果图像project指定输出目录- 支持常见图片格式(PNG/JPG/JPEG)
提示:添加
conf=0.5参数可调整检测置信度阈值,平衡准确率与召回率
2. 实时摄像头检测:动态目标追踪方案
让YOLOv8处理摄像头实时流只需稍作修改。这个脚本会打开默认摄像头并显示检测结果:
import cv2
from ultralytics import YOLO
model = YOLO('yolov8n.pt')
cap = cv2.VideoCapture(0) # 0表示默认摄像头
while cap.isOpened():
ret, frame = cap.read()
if not ret:
break
results = model.track(frame, persist=True) # 使用track而非predict获得持续ID
annotated_frame = results[0].plot()
cv2.imshow('YOLOv8 Real-Time', annotated_frame)
if cv2.waitKey(1) == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
功能增强建议:
- 添加
classes=[0, 2]参数可只检测特定类别(0代表人,2代表车) persist=True启用跨帧目标ID保持- 使用
model.track()而非predict()获得连续帧间的追踪效果
3. 视频文件处理:高效视频分析技巧
处理视频文件与摄像头流类似,但需要注意性能优化。这段代码展示了如何平衡处理速度与质量:
from ultralytics import YOLO
import cv2
model = YOLO('yolov8n.pt')
video_path = 'input_video.mp4'
output_path = 'output_video.avi'
cap = cv2.VideoCapture(video_path)
fps = int(cap.get(cv2.CAP_PROP_FPS))
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter(output_path, fourcc, fps, (width, height))
while cap.isOpened():
ret, frame = cap.read()
if not ret:
break
results = model.predict(frame, half=True) # 使用半精度提升速度
annotated_frame = results[0].plot()
out.write(annotated_frame)
cap.release()
out.release()
性能优化参数对比:
| 参数 | 作用 | 速度提升 | 精度影响 |
|---|---|---|---|
half=True | 半精度推理 | 30-50% | 轻微下降 |
imgsz=640 | 固定输入尺寸 | 20% | 依赖原始分辨率 |
device='cuda' | 启用GPU加速 | 3-5倍 | 无影响 |
4. 结构化输出:将检测结果保存为JSON/TXT
实际项目中常需要结构化数据而非图像。以下脚本将检测结果导出为机器可读格式:
from ultralytics import YOLO
import json
model = YOLO('yolov8n.pt')
results = model.predict('input_image.jpg', save=False)
# 转换为JSON格式
detections = []
for result in results:
for box in result.boxes:
detections.append({
'class': result.names[box.cls[0].item()],
'confidence': box.conf[0].item(),
'bbox': box.xywhn[0].tolist() # 归一化坐标(x_center,y_center,width,height)
})
with open('detections.json', 'w') as f:
json.dump(detections, f, indent=2)
# 同时保存为YOLO格式的TXT
with open('detections.txt', 'w') as f:
for det in detections:
line = f"{list(result.names.keys())[list(result.names.values()).index(det['class'])]} " \
f"{' '.join(map(str, det['bbox']))}\n"
f.write(line)
输出格式选择指南:
- JSON:适合Web应用或进一步数据分析
- TXT(YOLO格式):便于与其他计算机视觉工具链集成
- CSV:适合表格类数据处理(可通过pandas轻松转换)
5. 自定义训练:从数据准备到模型微调
当预训练模型不满足需求时,自定义训练成为必选项。完整流程包括:
5.1 数据准备规范
YOLOv8要求特定目录结构:
dataset/
├── images/
│ ├── train/
│ └── val/
└── labels/
├── train/
└── val/
标注文件要求:
- 每个图像对应一个同名的.txt文件
- 每行格式:
class_id x_center y_center width height(归一化数值) - 可使用LabelImg等工具生成
5.2 配置文件示例
创建data.yaml定义数据集:
path: ./dataset
train: images/train
val: images/val
names:
0: person
1: car
2: traffic_light
5.3 启动训练脚本
from ultralytics import YOLO
model = YOLO('yolov8n.pt') # 加载基础模型进行微调
results = model.train(
data='data.yaml',
epochs=100,
imgsz=640,
batch=16,
device='cuda' # 使用GPU加速
)
关键训练参数解析:
| 参数 | 典型值 | 作用 |
|---|---|---|
epochs | 50-300 | 训练轮次 |
patience | 50 | 早停机制阈值 |
lr0 | 0.01 | 初始学习率 |
weight_decay | 0.0005 | 权重衰减系数 |
训练完成后,最佳模型会自动保存在runs/detect/train/weights/best.pt
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)