Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

过拟合以及nms问题 #315

Closed
buzhou1 opened this issue Jul 3, 2024 · 13 comments
Closed

过拟合以及nms问题 #315

buzhou1 opened this issue Jul 3, 2024 · 13 comments

Comments

@buzhou1
Copy link

buzhou1 commented Jul 3, 2024

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

@lryan599
Copy link

lryan599 commented Jul 3, 2024

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

@zdaiot
Copy link

zdaiot commented Jul 3, 2024

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

@buzhou1
Copy link
Author

buzhou1 commented Jul 3, 2024

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

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

@lryan599
Copy link

lryan599 commented Jul 3, 2024

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

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

@lryan599
Copy link

lryan599 commented Jul 3, 2024

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

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

@buzhou1
Copy link
Author

buzhou1 commented Jul 4, 2024

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

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

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

@lryan599
Copy link

lryan599 commented Jul 4, 2024

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,回复可能更快一些。

@buzhou1
Copy link
Author

buzhou1 commented Jul 8, 2024

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 buzhou1 closed this as completed Jul 8, 2024
@zdaiot
Copy link

zdaiot commented Jul 12, 2024

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

@buzhou1
Copy link
Author

buzhou1 commented Jul 12, 2024

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

其他都没改,就把weight_decay改了

@zdaiot
Copy link

zdaiot commented Jul 13, 2024

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

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

@buzhou1
Copy link
Author

buzhou1 commented Jul 13, 2024

@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网络,那么尝试换一个网络再看看有没有过拟合,调参是效率最低的

@buzhou1
Copy link
Author

buzhou1 commented Jul 13, 2024

@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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants