别再只比精度了!手把手教你用YOLOv5和v7在自定义数据集上做训练优化
别再只比精度了手把手教你用YOLOv5和v7在自定义数据集上做训练优化当你第一次在COCO数据集上跑通YOLOv5的demo时那种目标检测原来如此简单的兴奋感可能还记忆犹新。但当你把模型迁移到自己的零件检测、农作物病害识别或零售商品分类任务时mAP指标却惨不忍睹——这不是你的错而是大多数教程没告诉你通用目标检测和领域专用检测是完全不同的游戏。1. 数据准备80%的问题根源在这里我们总急于把数据扔进模型却忽略了目标检测中最残酷的真相垃圾数据进垃圾结果出。在工业零件检测项目中我曾用2000张图片训练出的模型性能竟不如后来精心准备的500张。1.1 标注质量检测与修复先用这个Python脚本快速检查标注中的低级错误import yaml from PIL import Image def validate_labels(data_yaml, img_dir): with open(data_yaml) as f: data yaml.safe_load(f) for split in [train, val]: for img_path in data[split]: img Image.open(f{img_dir}/{img_path}) w, h img.size label_path img_path.replace(images, labels).replace(.jpg, .txt) with open(f{img_dir}/{label_path}) as lbl_f: for line in lbl_f: cls, x, y, w, h map(float, line.strip().split()) if not (0 x 1 and 0 y 1 and 0 w 1 and 0 h 1): print(f非法坐标: {label_path} {line}) if int(cls) len(data[names]): print(f类别越界: {label_path} {cls})常见问题排查清单坐标值超出[0,1]范围YOLO格式要求归一化坐标标注框完全在图像边界外同一物体的重复标注类别编号超过预设类别数1.2 数据分布可视化用Seaborn绘制关键分布图能发现隐藏问题import seaborn as sns import matplotlib.pyplot as plt def plot_data_distribution(labels_dir): all_boxes [] for label_file in Path(labels_dir).glob(*.txt): with open(label_file) as f: for line in f: cls, x, y, w, h map(float, line.strip().split()) all_boxes.append([cls, w*h]) # 类别和相对面积 df pd.DataFrame(all_boxes, columns[class, area]) plt.figure(figsize(12,6)) sns.violinplot(xclass, yarea, datadf) plt.title(目标尺寸分布) plt.show()当发现某些类别的目标尺寸特别小0.01相对面积时你需要增加该类别样本数量使用更高分辨率的输入图像在模型配置中调整anchor boxes2. 模型微调从能用到好用的关键步骤直接使用预训练模型就像穿着别人的鞋子跑步——能走但跑不快。在零售商品检测中经过微调的模型比直接迁移学习mAP提升了37%。2.1 自适应Anchor计算YOLOv5内置的AutoAnchor工具很多人不会用python train.py --data your_data.yaml --weights yolov5s.pt --anchors运行后会输出类似这样的建议AutoAnchor: 4.15 anchors/target, Best Possible Recall (BPR) 0.9995 New anchors saved to model/your_data_anchors.txt关键指标解读anchors/target 4说明当前anchor与你的目标形状匹配度低BPR 0.98强烈建议更新anchors2.2 网络结构调整策略对于小目标检测如电子元件尝试这样的backbone修改# yolov5s.yaml backbone: [[-1, 1, Conv, [64, 6, 2, 2]], # 0-P1/2 [-1, 1, Conv, [128, 3, 2]], # 1-P2/4 [-1, 3, C3, [128]], [-1, 1, Conv, [256, 3, 2]], # 3-P3/8 [-1, 6, C3, [256]], [-1, 1, Conv, [512, 3, 2]], # 5-P4/16 [-1, 9, C3, [512]], [-1, 1, Conv, [1024, 3, 2]], # 7-P5/32 [-1, 3, C3, [1024]], [-1, 1, SPPF, [1024, 5]], # 9 ]调整建议增加浅层通道数如64→96提升小目标检测能力在P2/4层添加检测头适用于32px的小目标减少深层通道数如1024→768加速推理3. 训练技巧那些论文里不会告诉你的实战经验在农业病虫害检测项目中通过调整以下参数使过拟合问题得到显著改善。3.1 超参数进化实战YOLOv5的遗传算法调参这样用python train.py --data your_data.yaml --weights yolov5s.pt --evolve 300进化后的超参数示例lr0: 0.0125 # 初始学习率 lrf: 0.015 # 最终学习率 lr0 * lrf momentum: 0.937 weight_decay: 0.00045 warmup_epochs: 3.0 warmup_momentum: 0.8 box: 0.05 # box损失权重 cls: 0.5 # 分类损失权重 obj: 1.0 # 目标存在损失权重 hsv_h: 0.015 # 色调增强幅度 hsv_s: 0.7 # 饱和度增强幅度 hsv_v: 0.4 # 明度增强幅度3.2 数据增强组合策略不同场景的增强策略对比场景类型推荐增强组合禁用增强效果提升工业零件检测旋转15° 灰度化 运动模糊色彩抖动11.2%零售商品识别透视变换 光照变化 CutOut旋转(5°)8.7%农业病害检测色彩抖动 随机噪声 MixUp运动模糊14.5%在配置文件中这样设置# data/hyp.scratch.yaml hsv_h: 0.02 # 色调增强 hsv_s: 0.8 # 饱和度增强 hsv_v: 0.5 # 明度增强 degrees: 15 # 旋转角度 translate: 0.2 # 平移比例 scale: 0.8 # 缩放比例 shear: 0.0 # 剪切角度 perspective: 0.001 # 透视变换 flipud: 0.5 # 上下翻转概率 fliplr: 0.5 # 左右翻转概率 mosaic: 1.0 # mosaic增强概率 mixup: 0.2 # mixup增强概率4. 结果分析与模型诊断当验证集mAP停滞不前时用这些方法精准定位问题。4.1 混淆矩阵深度解读运行以下命令生成高级分析报告python val.py --data your_data.yaml --weights runs/train/exp/weights/best.pt --task study典型问题与解决方案案例1类别间混淆严重precision recall cat_litter 0.45 0.32 cat_food 0.38 0.41解决方案增加两类样本的区分性特征如包装文字在数据增强中禁用色彩抖动避免颜色特征被破坏案例2高召回低精度precision recall defect 0.21 0.89解决方案增加负样本数量调整分类损失权重增大cls参数引入Focal Loss处理类别不平衡4.2 热力图分析使用Grad-CAM可视化关注区域from pytorch_grad_cam import GradCAM from pytorch_grad_cam.utils.image import show_cam_on_image model torch.load(best.pt).eval() target_layers [model.model.model[-3]] # 最后一个C3层 cam GradCAM(modelmodel, target_layerstarget_layers) grayscale_cam cam(input_tensor) visualization show_cam_on_image(img, grayscale_cam)常见问题模式边缘关注模型过度关注物体边界→增加CutOut增强局部关注只识别部分特征→使用MixUp增强全局特征背景关注误判背景特征→增加背景干扰样本在零件缺陷检测项目中热力图分析发现模型过度依赖划痕周围的纹理特征而非划痕本身通过调整数据增强策略减少纹理增强增加形状变换使mAP提升了19%。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2493033.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!