这个手刹不太灵@ 2024-04-12 23:11 采纳率: 0%
浏览 47
已结题

yolov5实验数据好,但是自己拍摄的照片检测结果差

使用的yolov5-7.0,检测的是超市商品,数据集从网上下载的,训练集有21000张,展示如下:

img


模型训练46轮,先训练了20轮,然后又训练26轮,数据不错,展示如下:

img

img

img

img


从测试集中选择照片,检测结果也很不错,展示如下:

img


问题出现在我使用自己的拍摄的照片,检测效果很差,照片如下:

img


我最初使用yolov5l-yaml训练,train.py中使用parser.add_argument('--hyp', type=str, default=ROOT / 'data/hyps/hyp.scratch-high.yaml', help='hyperparameters path')进行数据增强,hyp.scratch-high.yaml内容没有改动过,请问,我应该怎么做能够改进检测效果,完成本科毕业设计?谢谢!

  • 写回答

21条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-04-12 23:11
    关注
    获得0.45元问题酬金

    引自免费微信小程序:皆我百晓生

    针对您在使用YOLOv5模型进行超市商品检测时遇到的问题——模型在实验数据上表现良好,但在您自行拍摄的照片上的检测效果较差,我将为您提供一系列可能的解决方案,以改善模型在实际应用中的性能。请按照以下步骤逐一排查并尝试优化:

    1. 数据分布差异: 您提到训练数据集是从网络下载的,可能存在与您自行拍摄照片在光照、角度、背景、商品摆放方式等方面的显著差异。为了缩小训练数据与实际应用场景的差距,您可以:

      • 增加自采数据:尽可能多地收集与实际应用场景相似的照片,加入到训练集中进行再训练。确保新数据涵盖各种可能的光照条件、拍摄角度、背景复杂度以及商品摆放方式。

      • 数据增强

        • 检查hyp.scratch-high.yaml中的数据增强参数,如随机旋转、缩放、翻转、色彩抖动等是否已启用且设置合理。根据实际需求调整这些参数以模拟更多现实情况。
        • 可考虑添加更复杂的数据增强技术,如图像混合(MixUp、CutMix)、随机擦除(Random Erasing)等,以增强模型对复杂背景和遮挡情况的适应能力。
    2. 标注质量检查: 确保训练数据集中所有标注框的准确性和完整性。错误或不精确的标注可能导致模型在训练过程中学习到错误的特征。重新审查训练数据,尤其是对于边界模糊、遮挡严重或形状复杂的商品,确保标注框精准覆盖目标对象。

    3. 模型结构调整与微调: 考虑使用更小的模型(如YOLOv5s或YOLOv5n),以减少过拟合风险。或者,您可以继续使用当前模型结构,但降低学习率、增加正则化(如L2权重衰减)或早停策略来防止过拟合。

      修改train.py中的相关参数,如:

      parser.add_argument('--lr', type=float, default=0.01, help='initial learning rate')  # 降低初始学习率
      parser.add_argument('--weights', type=str, default=ROOT / 'models/yolov5s.pt', help='initial weights path')  # 使用较小模型
      parser.add_argument('--epochs', type=int, default=300, help='number of epochs')
      parser.add_argument('--patience', type=int, default=100, help='patience for early stopping')  # 增加早停 patience
      
    4. 评估指标与阈值调整: 分析您提供的图表中各项评估指标(mAP、Precision、Recall),了解模型在不同IoU阈值下的表现。适当调整test.py中的iou_thr参数,观察其对模型检测结果的影响。同时,考虑在推理时使用非极大值抑制(NMS)或其他后处理方法优化检测结果。

    5. 迁移学习与微调: 如果您有充足的计算资源,可以尝试预训练模型(如COCO数据集预训练的YOLOv5模型)进行迁移学习。首先加载预训练权重,然后在您的超市商品数据集上进行微调。这有助于模型更快地收敛并可能提高泛化能力。

      train.py中添加:

      parser.add_argument('--pretrained', type=str, default=ROOT / 'models/yolov5s.pt', help='pretrained model path')
      
    6. 模型融合: 训练多个模型(使用不同的随机种子初始化或不同的超参数设置),并在推理阶段对它们的输出进行平均或投票融合,以提高整体检测性能。

    7. 硬件环境与部署优化: 确保在与实际部署环境相似的硬件平台上进行模型评估与测试。如果实际部署平台与训练环境差异较大(如CPU vs GPU),可能需要对模型进行量化、剪枝等优化,以适应部署环境并保持检测性能。

    通过上述步骤逐一排查和优化,您应该能逐步提升YOLOv5模型在您自行拍摄照片上的商品检测效果。请务必记录每次调整后的模型性能变化,以便找到最佳解决方案。祝您顺利完成毕业设计!

    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 4月20日
  • 创建了问题 4月12日