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_okTrue) 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(sourceimg_path, saveTrue, projectoutput_dir)关键参数说明saveTrue自动保存检测结果图像project指定输出目录支持常见图片格式PNG/JPG/JPEG提示添加conf0.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, persistTrue) # 使用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代表车persistTrue启用跨帧目标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, halfTrue) # 使用半精度提升速度 annotated_frame results[0].plot() out.write(annotated_frame) cap.release() out.release()性能优化参数对比参数作用速度提升精度影响halfTrue半精度推理30-50%轻微下降imgsz640固定输入尺寸20%依赖原始分辨率devicecuda启用GPU加速3-5倍无影响4. 结构化输出将检测结果保存为JSON/TXT实际项目中常需要结构化数据而非图像。以下脚本将检测结果导出为机器可读格式from ultralytics import YOLO import json model YOLO(yolov8n.pt) results model.predict(input_image.jpg, saveFalse) # 转换为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, indent2) # 同时保存为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_light5.3 启动训练脚本from ultralytics import YOLO model YOLO(yolov8n.pt) # 加载基础模型进行微调 results model.train( datadata.yaml, epochs100, imgsz640, batch16, devicecuda # 使用GPU加速 )关键训练参数解析参数典型值作用epochs50-300训练轮次patience50早停机制阈值lr00.01初始学习率weight_decay0.0005权重衰减系数训练完成后最佳模型会自动保存在runs/detect/train/weights/best.pt
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2454964.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!