AlibabaResearch / efficientteacher

A Supervised and Semi-Supervised Object Detection Library for YOLO Series
GNU General Public License v3.0
805 stars 147 forks source link

关于在VOC数据集上实现半监督训练并复现类似efficient teacher论文中的效果 #121

Open Efiath opened 9 months ago

Efiath commented 9 months ago

您好,之前看了您的论文受益匪浅,现在我想在VOC数据集上进行半监督训练,并尽量复现您在论文中的效果(如下所示): 屏幕截图 2023-10-04 184705,但与论文中的效果差了好多点,或许是我复现的过程和您的实现有出入,因此我有一些问题:

1、在使用VOC数据集进行训练时该使用哪一个配置文件,我使用的配置文件是源码中的configs/ssod/voc/yolov5l_voc_burn.yaml。但我发现这个配置文件中的pseudo_label_with_obj以及pseudo_label_with_bbox等你们在论文中的创新点反而都被默认设置为False了,这是正常的吗,如果要复现论文中的效果,就是要把它们设置为关闭吗?还是说我用错了配置文件?(我目前给它们设置为true了,并且300个epochs全用于半监督训练)

2、关于预训练权重,我有两个疑问。第一,如果想实现上图中第一个ours(也就是倒数第二行)的效果,需要使用预训练权重吗,需要的话该用哪一个?还是说直接从零开始训练即可(我之前从零开始训练过一次,在200个epoch时AP50达到78.55,AP50:95达到56.78左右,200个epochs左右后开始下降,分别与论文差两三个点,如果和预训练权重无关,有没有可能是seed的问题?或者上面提到的配置问题?)。第二,如果想要实现上图中第二个ours(也就是最后一行)的效果,文中提到使用了using a ImageNet pre-trained backbone,请问这部分release中有提供吗?请问您如果有的话是哪一个呢?参照论文,我目前复现用的也是yolov5l,和其相关的我在release中仅找到了efficient-yolov5l.ptefficient-yolov5l-ssod.pt。我猜测前者是原始yolo5l.pt转化来的,我使用其作为预训练权重时,同样效果也差了几个点(比从零开始训练效果还差一点点,就是收敛的早,差不多100个epoch左右);而后者我猜测是你们半监督训练好后的权重,因为我使用其作为预训练权重的话,整个过程在前十几个epoch就收敛了并且效果超过了上图中最后一行,但后续就开始缓慢下降,因此应该是过拟合了。总之,我并没有找到和using a ImageNet pre-trained backbone相关的权重文件,请问如果我想实现论文中的效果(上图中最后两行),我需要使用哪个预训练权重呢?

最后,或许我复现时还存在许多没有想到的地方和您在实现过程中也是不一样的,如果你发现了,还麻烦不吝赐教。期待您的早日指教。

Wangxi404 commented 8 months ago

您好,之前看了您的论文受益匪浅,现在我想在VOC数据集上进行半监督训练,并尽量复现您在论文中的效果(如下所示): 屏幕截图 2023-10-04 184705,但与论文中的效果差了好多点,或许是我复现的过程和您的实现有出入,因此我有一些问题:

1、在使用VOC数据集进行训练时该使用哪一个配置文件,我使用的配置文件是源码中的configs/ssod/voc/yolov5l_voc_burn.yaml。但我发现这个配置文件中的pseudo_label_with_obj以及pseudo_label_with_bbox等你们在论文中的创新点反而都被默认设置为False了,这是正常的吗,如果要复现论文中的效果,就是要把它们设置为关闭吗?还是说我用错了配置文件?(我目前给它们设置为true了,并且300个epochs全用于半监督训练)

2、关于预训练权重,我有两个疑问。第一,如果想实现上图中第一个ours(也就是倒数第二行)的效果,需要使用预训练权重吗,需要的话该用哪一个?还是说直接从零开始训练即可(我之前从零开始训练过一次,在200个epoch时AP50达到78.55,AP50:95达到56.78左右,200个epochs左右后开始下降,分别与论文差两三个点,如果和预训练权重无关,有没有可能是seed的问题?或者上面提到的配置问题?)。第二,如果想要实现上图中第二个ours(也就是最后一行)的效果,文中提到使用了using a ImageNet pre-trained backbone,请问这部分release中有提供吗?请问您如果有的话是哪一个呢?参照论文,我目前复现用的也是yolov5l,和其相关的我在release中仅找到了efficient-yolov5l.ptefficient-yolov5l-ssod.pt。我猜测前者是原始yolo5l.pt转化来的,我使用其作为预训练权重时,同样效果也差了几个点(比从零开始训练效果还差一点点,就是收敛的早,差不多100个epoch左右);而后者我猜测是你们半监督训练好后的权重,因为我使用其作为预训练权重的话,整个过程在前十几个epoch就收敛了并且效果超过了上图中最后一行,但后续就开始缓慢下降,因此应该是过拟合了。总之,我并没有找到和using a ImageNet pre-trained backbone相关的权重文件,请问如果我想实现论文中的效果(上图中最后两行),我需要使用哪个预训练权重呢?

最后,或许我复现时还存在许多没有想到的地方和您在实现过程中也是不一样的,如果你发现了,还麻烦不吝赐教。期待您的早日指教。

你好,请问下您解决问题了吗?我目前也是遇到类似过拟合的map50:95没有上升到预期值就下降的情况。

Efiath commented 6 months ago

您好,之前看了您的论文受益匪浅,现在我想在VOC数据集上进行半监督训练,并尽量复现您在论文中的效果(如下所示): 屏幕截图 2023-10-04 184705,但与论文中的效果差了好多点,或许是我复现的过程和您的实现有出入,因此我有一些问题: 1、在使用VOC数据集进行训练时该使用哪一个配置文件,我使用的配置文件是源码中的configs/ssod/voc/yolov5l_voc_burn.yaml。但我发现这个配置文件中的pseudo_label_with_obj以及pseudo_label_with_bbox等你们在论文中的创新点反而都被默认设置为False了,这是正常的吗,如果要复现论文中的效果,就是要把它们设置为关闭吗?还是说我用错了配置文件?(我目前给它们设置为true了,并且300个epochs全用于半监督训练) 2、关于预训练权重,我有两个疑问。第一,如果想实现上图中第一个ours(也就是倒数第二行)的效果,需要使用预训练权重吗,需要的话该用哪一个?还是说直接从零开始训练即可(我之前从零开始训练过一次,在200个epoch时AP50达到78.55,AP50:95达到56.78左右,200个epochs左右后开始下降,分别与论文差两三个点,如果和预训练权重无关,有没有可能是seed的问题?或者上面提到的配置问题?)。第二,如果想要实现上图中第二个ours(也就是最后一行)的效果,文中提到使用了using a ImageNet pre-trained backbone,请问这部分release中有提供吗?请问您如果有的话是哪一个呢?参照论文,我目前复现用的也是yolov5l,和其相关的我在release中仅找到了efficient-yolov5l.ptefficient-yolov5l-ssod.pt。我猜测前者是原始yolo5l.pt转化来的,我使用其作为预训练权重时,同样效果也差了几个点(比从零开始训练效果还差一点点,就是收敛的早,差不多100个epoch左右);而后者我猜测是你们半监督训练好后的权重,因为我使用其作为预训练权重的话,整个过程在前十几个epoch就收敛了并且效果超过了上图中最后一行,但后续就开始缓慢下降,因此应该是过拟合了。总之,我并没有找到和using a ImageNet pre-trained backbone相关的权重文件,请问如果我想实现论文中的效果(上图中最后两行),我需要使用哪个预训练权重呢? 最后,或许我复现时还存在许多没有想到的地方和您在实现过程中也是不一样的,如果你发现了,还麻烦不吝赐教。期待您的早日指教。

你好,请问下您解决问题了吗?我目前也是遇到类似过拟合的map50:95没有上升到预期值就下降的情况。

抱歉,我还是没有解决,我尝试给作者直接发了邮件但也没有得到回复,请问您解决了吗?有进展的话可以互相交流下。

ZHIZIHUABU commented 4 months ago

@Efiath 您好,我看了你的测试结果,希望你能帮忙解答一些问题,配置文件默认的方式是先进行有监督训练,然后进行无监督训练,这是根据burn_epochs参数设置的,默认是220。 1、请问你第一张不加载预训练权重的训练方式,在200个epochs下降,是因为前200个epoch进行有监督训练,然后进入半监督训练才导致map下降的吗?是否因为进入半监督训练才导致map下降的。 2、后面两种加载预训练权重的训练方式,收敛较快,请问map最高时是在有监督训练还是半监督训练过程得到的。 期待你的回复,如果我对你的测试结果理解错误,希望能指出我的错误。

xcn700418 commented 1 month ago

您好,之前看了您的论文受益匪浅,现在我想在VOC数据集上进行半监督训练,并尽量复现您在论文中的效果(如下所示): 屏幕截图 2023-10-04 184705,但与论文中的效果差了好多点,或许是我复现的过程和您的实现有出入,因此我有一些问题:

1、在使用VOC数据集进行训练时该使用哪一个配置文件,我使用的配置文件是源码中的configs/ssod/voc/yolov5l_voc_burn.yaml。但我发现这个配置文件中的pseudo_label_with_obj以及pseudo_label_with_bbox等你们在论文中的创新点反而都被默认设置为False了,这是正常的吗,如果要复现论文中的效果,就是要把它们设置为关闭吗?还是说我用错了配置文件?(我目前给它们设置为true了,并且300个epochs全用于半监督训练)

2、关于预训练权重,我有两个疑问。第一,如果想实现上图中第一个ours(也就是倒数第二行)的效果,需要使用预训练权重吗,需要的话该用哪一个?还是说直接从零开始训练即可(我之前从零开始训练过一次,在200个epoch时AP50达到78.55,AP50:95达到56.78左右,200个epochs左右后开始下降,分别与论文差两三个点,如果和预训练权重无关,有没有可能是seed的问题?或者上面提到的配置问题?)。第二,如果想要实现上图中第二个ours(也就是最后一行)的效果,文中提到使用了using a ImageNet pre-trained backbone,请问这部分release中有提供吗?请问您如果有的话是哪一个呢?参照论文,我目前复现用的也是yolov5l,和其相关的我在release中仅找到了efficient-yolov5l.ptefficient-yolov5l-ssod.pt。我猜测前者是原始yolo5l.pt转化来的,我使用其作为预训练权重时,同样效果也差了几个点(比从零开始训练效果还差一点点,就是收敛的早,差不多100个epoch左右);而后者我猜测是你们半监督训练好后的权重,因为我使用其作为预训练权重的话,整个过程在前十几个epoch就收敛了并且效果超过了上图中最后一行,但后续就开始缓慢下降,因此应该是过拟合了。总之,我并没有找到和using a ImageNet pre-trained backbone相关的权重文件,请问如果我想实现论文中的效果(上图中最后两行),我需要使用哪个预训练权重呢?

最后,或许我复现时还存在许多没有想到的地方和您在实现过程中也是不一样的,如果你发现了,还麻烦不吝赐教。期待您的早日指教。

VOC那个训练用的yaml文件里面好多参数和coco的训练yaml都不一样,比如那个teacher_loss_weight还有一些用于图像增强的参数

Efiath commented 1 month ago

您好,之前看了您的论文受益匪浅,现在我想在VOC数据集上进行半监督训练,并尽量复现您在论文中的效果(如下所示): 屏幕截图 2023-10-04 184705,但与论文中的效果差了好多点,或许是我复现的过程和您的实现有出入,因此我有一些问题: 1、在使用VOC数据集进行训练时该使用哪一个配置文件,我使用的配置文件是源码中的configs/ssod/voc/yolov5l_voc_burn.yaml。但我发现这个配置文件中的pseudo_label_with_obj以及pseudo_label_with_bbox等你们在论文中的创新点反而都被默认设置为False了,这是正常的吗,如果要复现论文中的效果,就是要把它们设置为关闭吗?还是说我用错了配置文件?(我目前给它们设置为true了,并且300个epochs全用于半监督训练) 2、关于预训练权重,我有两个疑问。第一,如果想实现上图中第一个ours(也就是倒数第二行)的效果,需要使用预训练权重吗,需要的话该用哪一个?还是说直接从零开始训练即可(我之前从零开始训练过一次,在200个epoch时AP50达到78.55,AP50:95达到56.78左右,200个epochs左右后开始下降,分别与论文差两三个点,如果和预训练权重无关,有没有可能是seed的问题?或者上面提到的配置问题?)。第二,如果想要实现上图中第二个ours(也就是最后一行)的效果,文中提到使用了using a ImageNet pre-trained backbone,请问这部分release中有提供吗?请问您如果有的话是哪一个呢?参照论文,我目前复现用的也是yolov5l,和其相关的我在release中仅找到了efficient-yolov5l.ptefficient-yolov5l-ssod.pt。我猜测前者是原始yolo5l.pt转化来的,我使用其作为预训练权重时,同样效果也差了几个点(比从零开始训练效果还差一点点,就是收敛的早,差不多100个epoch左右);而后者我猜测是你们半监督训练好后的权重,因为我使用其作为预训练权重的话,整个过程在前十几个epoch就收敛了并且效果超过了上图中最后一行,但后续就开始缓慢下降,因此应该是过拟合了。总之,我并没有找到和using a ImageNet pre-trained backbone相关的权重文件,请问如果我想实现论文中的效果(上图中最后两行),我需要使用哪个预训练权重呢? 最后,或许我复现时还存在许多没有想到的地方和您在实现过程中也是不一样的,如果你发现了,还麻烦不吝赐教。期待您的早日指教。

VOC那个训练用的yaml文件里面好多参数和coco的训练yaml都不一样,比如那个teacher_loss_weight还有一些用于图像增强的参数

我后来也跑过coco数据集,而且我这边直接用coco的yaml文件的话,会在无监督加进来后训练就直接崩掉了,我把eacher_loss_weight从3.0改成1.0反而就可以了,估计是无监督部分权重太大。但作者论文里写的就是3.0,我也不太清楚,我是单卡。增强那些参数的话,我倒是没去着重看过。

xcn700418 commented 1 month ago

您好,之前看了您的论文受益匪浅,现在我想在VOC数据集上进行半监督训练,并尽量复现您在论文中的效果(如下所示): 屏幕截图 2023-10-04 184705,但与论文中的效果差了好多点,或许是我复现的过程和您的实现有出入,因此我有一些问题: 1、在使用VOC数据集进行训练时该使用哪一个配置文件,我使用的配置文件是源码中的configs/ssod/voc/yolov5l_voc_burn.yaml。但我发现这个配置文件中的pseudo_label_with_obj以及pseudo_label_with_bbox等你们在论文中的创新点反而都被默认设置为False了,这是正常的吗,如果要复现论文中的效果,就是要把它们设置为关闭吗?还是说我用错了配置文件?(我目前给它们设置为true了,并且300个epochs全用于半监督训练) 2、关于预训练权重,我有两个疑问。第一,如果想实现上图中第一个ours(也就是倒数第二行)的效果,需要使用预训练权重吗,需要的话该用哪一个?还是说直接从零开始训练即可(我之前从零开始训练过一次,在200个epoch时AP50达到78.55,AP50:95达到56.78左右,200个epochs左右后开始下降,分别与论文差两三个点,如果和预训练权重无关,有没有可能是seed的问题?或者上面提到的配置问题?)。第二,如果想要实现上图中第二个ours(也就是最后一行)的效果,文中提到使用了using a ImageNet pre-trained backbone,请问这部分release中有提供吗?请问您如果有的话是哪一个呢?参照论文,我目前复现用的也是yolov5l,和其相关的我在release中仅找到了efficient-yolov5l.ptefficient-yolov5l-ssod.pt。我猜测前者是原始yolo5l.pt转化来的,我使用其作为预训练权重时,同样效果也差了几个点(比从零开始训练效果还差一点点,就是收敛的早,差不多100个epoch左右);而后者我猜测是你们半监督训练好后的权重,因为我使用其作为预训练权重的话,整个过程在前十几个epoch就收敛了并且效果超过了上图中最后一行,但后续就开始缓慢下降,因此应该是过拟合了。总之,我并没有找到和using a ImageNet pre-trained backbone相关的权重文件,请问如果我想实现论文中的效果(上图中最后两行),我需要使用哪个预训练权重呢? 最后,或许我复现时还存在许多没有想到的地方和您在实现过程中也是不一样的,如果你发现了,还麻烦不吝赐教。期待您的早日指教。

VOC那个训练用的yaml文件里面好多参数和coco的训练yaml都不一样,比如那个teacher_loss_weight还有一些用于图像增强的参数

我后来也跑过coco数据集,而且我这边直接用coco的yaml文件的话,会在无监督加进来后训练就直接崩掉了,我把eacher_loss_weight从3.0改成1.0反而就可以了,估计是无监督部分权重太大。但作者论文里写的就是3.0,我也不太清楚,我是单卡。增强那些参数的话,我倒是没去着重看过。

我没跑coco,因为太耗时间了,准备试试VOC是否能复现,之前跑了一次VOC发现差论文里好几个点,如果你还在做的话我们可以交流