THU-MIG / yolov10

YOLOv10: Real-Time End-to-End Object Detection

Home Page:https://arxiv.org/abs/2405.14458

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

过拟合以及nms问题

buzhou1 opened this issue · comments

commented

1、我想要完成一个训练数据集较少的任务,大概2000-3000张。但是现在yolov10n网络出现了严重的过拟合问题,在train上达到了map:.5/map:.95:0.98/0.82的精度,但是在test集上表现很差,map:.5只有0.4。我想问下除了dropout参数可以避免过拟合,还有什么办法吗?
2、另外,我看到如果使用nms会在一些小型网络如YOLOv10n上有一定的精度提升,是否可以在参数设置或者模型yaml文件中选择打开nms?

commented
  1. dropout参数好像只在分类任务有效,最好降低epoch,增大weight decay。
  2. 第二个问题请参考#236,目前应该不能直接设置nms参数。

我也遇到了过拟合问题,不过数据多点,大概4万张,训练15个epoch的效果比5个epoch还差。
@lryan599 大佬有没有推荐的finetuing参数啊?

commented
  1. dropout参数好像只在分类任务有效,最好降低epoch,增大weight decay。
  2. 第二个问题请参考Redundant detection boxes without NMS #236,目前应该不能直接设置nms参数。

在yolov7-tiny上是没有过拟合问题的,可能是参数有问题吗?比如说各种loss参数的设置

commented

在yolov7-tiny上是没有过拟合问题的,可能是参数有问题吗?比如说各种loss参数的设置

yolov7-tiny参数量上对标的应该是yolov10s,你可以试试。我个人觉得loss参数应该不太会有问题。

commented

我也遇到了过拟合问题,不过数据多点,大概4万张,训练15个epoch的效果比5个epoch还差。 @lryan599 大佬有没有推荐的finetuing参数啊?

如果是微调的话,除了epoch和weight decay,还可以试试用freeze参数冻结backbone。我自己也在尝试中。

commented

在yolov7-tiny上是没有过拟合问题的,可能是参数有问题吗?比如说各种loss参数的设置

yolov7-tiny参数量上对标的应该是yolov10s,你可以试试。我个人觉得loss参数应该不太会有问题。

1、更复杂的网络不是更容易过拟合吗?
2、另外就是多目标检测任务使用dropout应该有一些收益的吧
3、我看default.yaml中相对yolov7的超参cfg文件,在box loss gain 和 cls loss gain上有不小的区别,这两个参数会影响吗,我没有深入去了解这部分loss参数的意义

commented

1、更复杂的网络不是更容易过拟合吗?
2、另外就是多目标检测任务使用dropout应该有一些收益的吧
3、我看default.yaml中相对yolov7的超参cfg文件,在box loss gain 和 cls loss gain上有不小的区别,这两个参数会影响吗,我没有深入去了解这部分loss参数的意义

  1. 第一点你是对的,更复杂的网络容易导致过拟合,但还是建议做下补充实验。
  2. yolov10的框架基于yolov8的ultralytics,关于dropout参数,可以参照ultralytics的文档介绍,dropout参数只适用于classification任务而不是detection任务。你还可以参照#6052了解更多信息。
  3. 我没有使用过yolov7,yolov10的default.yaml就是yolov8的default.yaml,我觉得这些参数设置是有一定合理性的。我认为相比于loss_gain这些参数,学习率本身可能更加重要。参照#3206

如果你有更多疑问,可以去ultralytics那边发issue,回复可能更快一些。

commented

1、更复杂的网络不是更容易过拟合吗?
2、另外就是多目标检测任务使用dropout应该有一些收益的吧
3、我看default.yaml中相对yolov7的超参cfg文件,在box loss gain 和 cls loss gain上有不小的区别,这两个参数会影响吗,我没有深入去了解这部分loss参数的意义

  1. 第一点你是对的,更复杂的网络容易导致过拟合,但还是建议做下补充实验。
  2. yolov10的框架基于yolov8的ultralytics,关于dropout参数,可以参照ultralytics的文档介绍,dropout参数只适用于classification任务而不是detection任务。你还可以参照#6052了解更多信息。
  3. 我没有使用过yolov7,yolov10的default.yaml就是yolov8的default.yaml,我觉得这些参数设置是有一定合理性的。我认为相比于loss_gain这些参数,学习率本身可能更加重要。参照#3206

如果你有更多疑问,可以去ultralytics那边发issue,回复可能更快一些。

我把weight_decay调大了3倍,it works!给有过拟合问题的朋友一个参考。

@buzhou1 请问可以分享一下其它的配置参数么?比如epoch、学习率、优化器之类的?

commented

@buzhou1 请问可以分享一下其它的配置参数么?比如epoch、学习率、优化器之类的?

其他都没改,就把weight_decay改了

@buzhou1 请问是这样么?我还是遇到了过拟合问题;

model = YOLOv10('yolov10b.pt')
model.train(data='abc.yaml', device='0,1,2,3,4,5,6,7', weight_decay=0.0015)
commented

@buzhou1 请问是这样么?我还是遇到了过拟合问题;

model = YOLOv10('yolov10b.pt')
model.train(data='abc.yaml', device='0,1,2,3,4,5,6,7', weight_decay=0.0015)

和很多因素有关的,比如说你train和test的相似度。而且你用的b网络算是比较大的了,建议你先去排查一下数据集是正确度,然后如果你不是一定要使用b网络,那么尝试换一个网络再看看有没有过拟合,调参是效率最低的

commented

@buzhou1 请问是这样么?我还是遇到了过拟合问题;

model = YOLOv10('yolov10b.pt')
model.train(data='abc.yaml', device='0,1,2,3,4,5,6,7', weight_decay=0.0015)

和很多因素有关的,比如说你train和test的相似度。而且你用的b网络算是比较大的了,建议你先去排查一下数据集是正确度,然后如果你不是一定要使用b网络,那么尝试换一个网络再看看有没有过拟合,调参是效率最低的

有个参考:
v10n + wd0.0005: train精度:0.97/0.79 test精度:0.4/0.3
v10n + wd0.015: train精度:0.97/0.76 test精度0.96/0.75

v10s + wd0.0005: train精度:0.97/0.82 test精度:0.8/0.5
v10s + wd0.0015: train精度:0.97/0.78 test精度0.96/0.76