YOLOv8 自定义数据集训练实战:COCO 格式转 YOLO 与 100 轮次调优
YOLOv8 自定义数据集训练实战COCO 格式转 YOLO 与 100 轮次调优1. 数据准备与格式转换在工业检测、农业监控等垂直领域应用中90%的算法工程师遇到的第一个挑战是如何将现有标注数据转换为模型可识别的格式。COCOCommon Objects in Context作为通用标注格式其JSON结构与YOLOv8要求的TXT格式存在显著差异import json from pathlib import Path def coco2yolo(coco_json_path, output_dir): with open(coco_json_path) as f: data json.load(f) # 创建类别ID映射 cat_id_map {cat[id]: idx for idx, cat in enumerate(data[categories])} # 按图像ID组织标注 img_anns {} for ann in data[annotations]: img_id ann[image_id] if img_id not in img_anns: img_anns[img_id] [] img_anns[img_id].append(ann) # 处理每张图像 for img in data[images]: img_id img[id] txt_path Path(output_dir) / f{Path(img[file_name]).stem}.txt with open(txt_path, w) as f_txt: for ann in img_anns.get(img_id, []): # 转换bbox格式: [x,y,w,h] - [x_center,y_center,w,h] (归一化) x, y, w, h ann[bbox] x_center (x w/2) / img[width] y_center (y h/2) / img[height] w / img[width] h / img[height] # YOLO格式: class_id x_center y_center width height line f{cat_id_map[ann[category_id]]} {x_center:.6f} {y_center:.6f} {w:.6f} {h:.6f}\n f_txt.write(line)关键转换要点坐标归一化将绝对坐标转换为相对坐标0-1范围中心点转换从左上角坐标转为边界框中心坐标类别ID重映射确保连续ID从0开始注意转换后需验证至少5%的样本确保标注框在图像上位置正确。常见错误包括归一化计算错误导致框体偏移图像尺寸读取错误类别ID不连续2. 数据集优化策略针对小数据集10,000张的过拟合问题采用多维度增强方案数据增强配置data.yamltrain: ../train/images val: ../val/images nc: 3 # 类别数 names: [defect, crop, livestock] # 类别名称 # 增强参数 augmentations: hsv_h: 0.015 # 色调增强幅度 hsv_s: 0.7 # 饱和度增强幅度 hsv_v: 0.4 # 明度增强幅度 degrees: 45 # 旋转角度范围 translate: 0.1 # 平移比例 scale: 0.5 # 缩放范围 shear: 0.0 # 剪切幅度 perspective: 0.0001 # 透视变换 flipud: 0.0 # 上下翻转概率 fliplr: 0.5 # 左右翻转概率 mosaic: 1.0 # mosaic概率 mixup: 0.1 # mixup概率小数据集优化技巧分层采样确保每个类别在每批次中都有代表难例挖掘训练初期自动识别困难样本加强学习冻结骨干网络前20轮次只训练检测头3. 训练参数深度调优通过100轮次迭代验证得出关键参数的最佳实践参数推荐值作用域调整策略batch_size16-64GPU显存决定最大化利用显存imgsz640输入分辨率保持与验证集一致lr00.01初始学习率使用余弦退火调度lrf0.1最终学习率lr0*lrfmomentum0.937优化器动量0.9-0.99范围微调weight_decay0.0005L2正则化防止过拟合warmup_epochs3学习率预热小批量逐步提高学习率box7.5框损失权重正样本不足时调高cls0.5分类损失权重类别不平衡时调整dfl1.5分布焦点损失提高定位精度典型训练命令yolo detect train \ datadata.yaml \ modelyolov8n.pt \ epochs100 \ imgsz640 \ batch32 \ patience20 \ device0 \ workers8 \ optimizerAdamW \ lr00.01 \ cos_lrTrue \ ampTrue4. 训练监控与模型选择关键监控指标mAP0.5 (PASCAL VOC)工业检测常用标准mAP0.5:0.95 (COCO)更严格的评估precision-recall曲线反映不同置信度阈值下的表现模型选择策略早停机制当验证集mAP连续10轮无提升时终止训练权重融合选择最后10个epoch的权重进行平均EMA指数移动平均默认启用平滑参数变化损失曲线分析正常收敛训练/验证损失同步下降后趋于平稳过拟合迹象验证损失先降后升欠拟合表现双损失居高不下5. 工业级部署优化ONNX导出与量化from ultralytics import YOLO model YOLO(runs/detect/train/weights/best.pt) model.export(formatonnx, dynamicFalse, simplifyTrue, opset12, imgsz640)TensorRT加速技巧FP16量化速度提升2倍精度损失1%INT8量化需要校准集速度再提升30%层融合自动合并卷积BN激活函数边缘设备优化对比设备FP32 (ms)FP16 (ms)INT8 (ms)NVIDIA Jetson AGX Orin452215Raspberry Pi 51200--Intel Core i7-12700K8550356. 实战问题排查指南常见问题与解决方案CUDA内存不足降低batch_size启用梯度累积accumulate2使用更小模型如yolov8n验证集指标震荡增加验证集样本量检查数据标注一致性调低学习率小目标检测效果差提高输入分辨率如1280x1280添加小目标专用检测层使用SAHI切片推理from sahi import AutoDetectionModel from sahi.predict import get_sliced_prediction detection_model AutoDetectionModel.from_pretrained( model_typeyolov8, model_pathyolov8n.pt, confidence_threshold0.3 ) result get_sliced_prediction( large_image.jpg, detection_model, slice_height512, slice_width512, overlap_height_ratio0.2, overlap_width_ratio0.2 )

相关新闻