超绝可爱的KiKi 2024-11-05 14:14 采纳率: 100%
浏览 8
已结题

YOLO检测微调结果p为1

问题遇到的现象和发生背景

现在我有一个yolov10的检测模型,用在原来的数据集有1800张效果是p = 0.819 r = 0.786 map = 0.855 map50-95 = 0.369
,然后想把这个数据集训练得到的权重拿来做另一个类似物体检测数据集270张的冻结训练,调了epoch、patience、iou、conf、还有freeze参数。结果p=1召回率太低,看起来很奇怪 这要怎么改参数

img

img

img

img

操作环境、软件版本等信息

linux pytorch

我想要达到的结果

想要冻结数据能超过或和原来的结果差不多,还要输出4宫格带检测框的图片

  • 写回答

20条回答 默认 最新

  • 问答-莫得感情 2024-11-05 14:16
    关注

    ️题主您好️,目前由我为您解答👇🏼
    🧡参考谷歌智能助手,由吾为汝整理提供🧡

    你遇到的问题是典型的过拟合现象。尽管在小数据集 (270 张) 上精度 (Precision) 达到了 1,但这很可能是因为模型过度拟合了训练集中的少量样本,导致泛化能力下降,从而在未见数据上召回率 (Recall) 很低。

    以下是针对你情况的详细解决方案,包含代码示例和参数调整建议:

    1. 数据增强:

    小数据集更容易过拟合,数据增强是关键。尝试以下增强方法:

    • 几何变换: 随机旋转、平移、缩放、翻转。
    • 颜色变换: 随机亮度、对比度、饱和度调整。
    • MixUp: 将两张图片及其标签线性组合。
    • Mosaic: 将四张图片拼接成一张。
    • CutMix: 将一张图片的一部分替换为另一张图片的一部分。

    YOLOv5 的数据增强配置在 data.yaml 文件中,你可以根据需要修改。

    # data.yaml
    train: ../train/images
    val: ../valid/images
    
    nc: # number of classes
    names: [ ...]  # class names
    
    # Augmentation settings (example)
    albumentations:
      Compose:
        - RandomRotate90: p=0.5
        - HorizontalFlip: p=0.5
        - ColorJitter: brightness=0.2, contrast=0.2, saturation=0.2, hue=0.1, p=0.5
    

    2. 解冻更多层:

    完全冻结主干网络可能导致模型无法适应新数据集。尝试逐步解冻更多层,从靠近检测头的层开始。

    # train.py (部分代码)
    model = YOLO('yolov5s.pt')  # 加载预训练模型
    
    # 冻结backbone的部分层
    for param in model.model[:int(freeze)].parameters():
        param.requires_grad = False
    
    # 训练一段时间后,解冻更多层
    for param in model.model[:int(freeze_more)].parameters():
        param.requires_grad = True
    

    freezefreeze_more 参数控制冻结的层数。

    3. 调整学习率:

    使用较小的学习率可以防止模型在小数据集上快速过拟合。

    # train.py (部分代码)
    optimizer = optim.Adam(model.parameters(), lr=lr) # 设置学习率 lr
    

    建议尝试 lr=1e-4 或更小。

    4. 正则化:

    使用权重衰减 (weight decay) 可以防止模型权重过大,减轻过拟合。

    # train.py (部分代码)
    optimizer = optim.Adam(model.parameters(), lr=lr, weight_decay=wd) # 设置权重衰减 wd
    

    建议尝试 wd=1e-45e-4.

    5. Early Stopping:

    当验证集指标停止提升时,提前停止训练可以防止过拟合。

    6. 输出带检测框的图片:

    可以使用 YOLOv5 提供的 detect.py 脚本进行推理并保存带检测框的图片。

    python detect.py --weights your_trained_weights.pt --source path/to/your/images --save-txt --save-conf --save-crop
    

    参数调整策略:

    1. 从冻结大部分层开始,使用小学习率和数据增强进行训练。
    2. 观察验证集指标,如果过拟合,尝试更强的数据增强和更小的学习率。
    3. 如果欠拟合,逐渐解冻更多层,并可以适当提高学习率。
    4. 重复步骤 2 和 3,直到找到最佳平衡点。

    总结:

    处理小数据集的关键在于防止过拟合。通过结合数据增强、逐步解冻、调整学习率和正则化等技巧,可以有效提高模型的泛化能力,在小数据集上获得更好的性能。 记住,耐心和实验是关键,不断尝试不同的参数组合才能找到最适合你数据集的配置。

    希望以上信息能够帮助你解决问题。如果还有其他问题,请随时提出。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(19条)

报告相同问题?

问题事件

  • 系统已结题 11月16日
  • 已采纳回答 11月8日
  • 创建了问题 11月5日

悬赏问题

  • ¥15 交叉注意力机制的残差问题
  • ¥15 微信小程序:渲染收货地址时页面不显示
  • ¥20 win7 64位DirectShow提示初始化失败如何解决?
  • ¥20 小规模孤立词识别系统设计
  • ¥15 关于Java对接海康威视车牌识别一体机SDK是否需要固定外网的IP?
  • ¥15 Linux扩容时,格式化卡住了:vgdispaly查看卷组信息,没有输出
  • ¥18 关于#ubuntu#的问题:使用背景-工作职责内有七八台ubuntu系统的电脑,平时需要互相调取资料,想实现把这几台电脑用交换机组成一个局域网,来实现指定文件夹的互相调取和写入
  • ¥20 求一个简易射频信号综测仪
  • ¥15 esp8266 tally灯 接收端改为发射端
  • ¥30 Labview代码调用access 数据库,相同代码其中一个调用不出来是为什么