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

训练VOC数据集出问题 #14

Open
poppynull opened this issue Apr 22, 2021 · 29 comments
Open

训练VOC数据集出问题 #14

poppynull opened this issue Apr 22, 2021 · 29 comments

Comments

@poppynull
Copy link

模型可以保存成功,但是detect预测则为空,没有框,请问这是什么原因呢?

@poppynull poppynull changed the title 训练自己的数据集出问题 训练VOC数据集出问题 Apr 22, 2021
@Sunsherly
Copy link

我觉得你可以先用博主自己训练好的VOC模型测试同一张图片,是不是也没有框。如果博主的模型能检测出框,你自己的没有框,说明可能是你训练的模型有问题。如果两个模型都没有框,你可以检查一下用来测试的图片中的目标不在VOC20类之中,或者是因为阈值score_threshold设置的太高了,可以把阈值调低一点

@poppynull
Copy link
Author

我觉得你可以先用博主自己训练好的VOC模型测试同一张图片,是不是也没有框。如果博主的模型能检测出框,你自己的没有框,说明可能是你训练的模型有问题。如果两个模型都没有框,你可以检查一下用来测试的图片中的目标不在VOC20类之中,或者是因为阈值score_threshold设置的太高了,可以把阈值调低一点

博主voc 77.8那个模型我测试起来没有问题,但是当我用VOC数据集跑train_voc文件的时候,生成的model文件在detect中就没有预测框出现了。。。

@Sunsherly
Copy link

我觉得你可以先用博主自己训练好的VOC模型测试同一张图片,是不是也没有框。如果博主的模型能检测出框,你自己的没有框,说明可能是你训练的模型有问题。如果两个模型都没有框,你可以检查一下用来测试的图片中的目标不在VOC20类之中,或者是因为阈值score_threshold设置的太高了,可以把阈值调低一点

博主voc 77.8那个模型我测试起来没有问题,但是当我用VOC数据集跑train_voc文件的时候,生成的model文件在detect中就没有预测框出现了。。。

我没有跑过VOC,现在我正在跑COCO的,因为cuda out of memory,所以我把batch size改到2了,不知道是不是这个原因,loss的波动幅度挺大的,而且下降比较慢。我担心这样训练出来的模型,可能效果会很差。不知道你在训练过程中的参数是不是也做修改了?

@zhenghao977
Copy link
Owner

可以先检查训练过程的loss是否正常下降,如果没有什么问题建议找一张单独的图片debug一下,查看是模型本身输出的score就十分低还是被过滤掉导致后续没有检测框出现。

@zhenghao977
Copy link
Owner

一般训练过程中,分类与回归损失都是急剧下降后趋于稳定式缓慢下降,cnt_loss的值不稳定,这是模型本身的问题,这个值不是特别影响。

@Sunsherly
Copy link

可以先检查训练过程的loss是否正常下降,如果没有什么问题建议找一张单独的图片debug一下,查看是模型本身输出的score就十分低还是被过滤掉导致后续没有检测框出现。

一般训练过程中,分类与回归损失都是急剧下降后趋于稳定式缓慢下降,cnt_loss的值不稳定,这是模型本身的问题,这个值不是特别影响。

我刚刚看了一下,我的loss,感觉回归和分类损失也不是很稳定呀😥(在下面我附了一段训练的log)

博主,我的训练是不是有问题呀?因为,之前我用其他的代码(针对自己的食品分类数据集修改过的)也跑过一次,训练时loss的波动也非常大,最后的模型效果非常差(把狗检测成人的那种差😂)师兄说是可能是因为我用的那个代码在数据预处理的时候针对的是食品分类做的,不适用于coco。

globalsteps:166270 epoch:3 steps:49005/58633 clsloss:0.2632 cntloss:0.6441 regloss:0.2895 costtime:332ms lr=1.0000e-04 totalloss:1.1968

globalsteps:166271 epoch:3 steps:49006/58633 clsloss:0.2921 cntloss:0.6430 regloss:0.2831 costtime:302ms lr=1.0000e-04 totalloss:1.2183

globalsteps:166272 epoch:3 steps:49007/58633 clsloss:0.3191 cntloss:0.6227 regloss:0.2399 costtime:294ms lr=1.0000e-04 totalloss:1.1817

globalsteps:166273 epoch:3 steps:49008/58633 clsloss:0.1543 cntloss:0.6081 regloss:0.1558 costtime:318ms lr=1.0000e-04 totalloss:0.9181

globalsteps:166274 epoch:3 steps:49009/58633 clsloss:0.3172 cntloss:0.6379 regloss:0.2278 costtime:292ms lr=1.0000e-04 totalloss:1.1829

globalsteps:166275 epoch:3 steps:49010/58633 clsloss:0.4658 cntloss:0.6471 regloss:0.3363 costtime:300ms lr=1.0000e-04 totalloss:1.4492

globalsteps:166276 epoch:3 steps:49011/58633 clsloss:0.4025 cntloss:0.6360 regloss:0.3448 costtime:303ms lr=1.0000e-04 totalloss:1.3834

globalsteps:166277 epoch:3 steps:49012/58633 clsloss:0.6259 cntloss:0.6519 regloss:0.4672 costtime:317ms lr=1.0000e-04 totalloss:1.7450

globalsteps:166278 epoch:3 steps:49013/58633 clsloss:0.5876 cntloss:0.6327 regloss:0.2779 costtime:366ms lr=1.0000e-04 totalloss:1.4982

globalsteps:166279 epoch:3 steps:49014/58633 clsloss:0.3702 cntloss:0.6619 regloss:0.3651 costtime:315ms lr=1.0000e-04 totalloss:1.3972

globalsteps:166280 epoch:3 steps:49015/58633 clsloss:0.2539 cntloss:0.6165 regloss:0.2234 costtime:399ms lr=1.0000e-04 totalloss:1.0938

globalsteps:166281 epoch:3 steps:49016/58633 clsloss:0.3225 cntloss:0.6452 regloss:0.3474 costtime:315ms lr=1.0000e-04 totalloss:1.3151

globalsteps:166282 epoch:3 steps:49017/58633 clsloss:0.3148 cntloss:0.6190 regloss:0.2655 costtime:374ms lr=1.0000e-04 totalloss:1.1993

globalsteps:166283 epoch:3 steps:49018/58633 clsloss:0.3725 cntloss:0.6454 regloss:0.3440 costtime:295ms lr=1.0000e-04 totalloss:1.3619

globalsteps:166284 epoch:3 steps:49019/58633 clsloss:0.4175 cntloss:0.6361 regloss:0.2907 costtime:311ms lr=1.0000e-04 totalloss:1.3443

globalsteps:166285 epoch:3 steps:49020/58633 clsloss:0.3322 cntloss:0.6197 regloss:0.2322 costtime:327ms lr=1.0000e-04 totalloss:1.1841

globalsteps:166286 epoch:3 steps:49021/58633 clsloss:0.2457 cntloss:0.6168 regloss:0.1270 costtime:320ms lr=1.0000e-04 totalloss:0.9896

globalsteps:166287 epoch:3 steps:49022/58633 clsloss:0.2399 cntloss:0.5988 regloss:0.1410 costtime:293ms lr=1.0000e-04 totalloss:0.9797

globalsteps:166288 epoch:3 steps:49023/58633 clsloss:0.7465 cntloss:0.6084 regloss:0.2387 costtime:267ms lr=1.0000e-04 totalloss:1.5935

@poppynull
Copy link
Author

可以先检查训练过程的loss是否正常下降,如果没有什么问题建议找一张单独的图片debug一下,查看是模型本身输出的score就十分低还是被过滤掉导致后续没有检测框出现。

我自己训练模型的输出是空的,当我执行out = model(img1.unsqueeze_(dim=0))语句时,out打印的值为(tensor([], device='cuda:0', size=(1, 0)), tensor([], device='cuda:0', size=(1, 0), dtype=torch.int64), tensor([], device='cuda:0', size=(1, 0, 4))),而当我测试voc77.8模型时,这里的输出就是有数值的tensor。

但是当我print(model)的时候二者的结构又是相同的。。。

@zhenghao977
Copy link
Owner

@Sunsherly 分类损失和回归损失下降都是不正常的,建议检查一下数据标注 模型的类别跟实际数据集类别是否对应的起来。

@zhenghao977
Copy link
Owner

@poppynull 请保持训练过程与我参数基本一致,保证标签正确。检查损失下降情况。

@Sunsherly
Copy link

@Sunsherly 分类损失和回归损失下降都是不正常的,建议检查一下数据标注 模型的类别跟实际数据集类别是否对应的起来。

我训练的时候把batchsize改小了,我设置的是batchsize=2,是不是这个参数改变也不会造成这样差的结果呀?

@Sunsherly
Copy link

@Sunsherly 分类损失和回归损失下降都是不正常的,建议检查一下数据标注 模型的类别跟实际数据集类别是否对应的起来。

我前几天刚刚用这个数据集跑过YOLOv5,训练和测试都很正常,那是不是可以排除数据集有问题呀?

@zhenghao977
Copy link
Owner

@Sunsherly 建议不要太少的batchsize,梯度下降不稳定。

@Sunsherly
Copy link

@Sunsherly 建议不要太少的batchsize,梯度下降不稳定。

嗯嗯,等我这个跑完,我测试一下效果。如果不太行的话,我再换台服务器,把batchsize设置的大一些,重新训练。谢谢!

@JiXuKong
Copy link

JiXuKong commented May 6, 2021

请教一下博主,如果batch size设置为4,输入分辨率缩放到800x800这样,去训练VOC数据集,测试mAP会不会很低。其实是我用tensorflow把您的代码写了一遍,在debug时用您的代码做了一下对比,然后生成的标签、以及损失值都是相同的,但我用上面的训练设置去训练VOC的时候,测试mAP只有0.65左右,所以想问一下是不是FCOS对batch size要求比较大呢。

@YoungLNB
Copy link

博主,你好,我在用VOC训练的时候,将num_class设置成20,然后去训练得到的map是0.63左右,然后您提供的78.7.pth测试的时候也需要将num_classes设置为80才能测试成功,这是什么原因呢

@countytown
Copy link

博主,你好,我在用VOC训练的时候,将num_class设置成20,然后去训练得到的map是0.63左右,然后您提供的78.7.pth测试的时候也需要将num_classes设置为80才能测试成功,这是什么原因呢

请问您的mAP提升了吗?我的mAP也只有六十多。我的num_class是21(VOC2012)

@LRQ516
Copy link

LRQ516 commented Nov 2, 2021

博主,你好,我在用VOC训练的时候,将num_class设置成20,然后去训练得到的map是0.63左右,然后您提供的78.7.pth测试的时候也需要将num_classes设置为80才能测试成功,这是什么原因呢

请问您找到原因了吗?我也遇到了同样的问题

@countytown
Copy link

博主,你好,我在用VOC训练的时候,将num_class设置成20,然后去训练得到的map是0.63左右,然后您提供的78.7.pth测试的时候也需要将num_classes设置为80才能测试成功,这是什么原因呢

请问您找到原因了吗?我也遇到了同样的问题

我感觉代码是没有问题的,我基本上复现了mAP精度。作者提供的pth文件可能是在训练时没有改class_num,所有导致测试VOC需要将其设为80,但是自己从头训练的话只需要设为20或者21(with background)就行了。 作者提到VOC训练30epo,虽然看loss下降趋势感觉后续训练没有提升模型,但是最好还是按照30epo来训练。因为loss里面包含了centerness loss,loss下降不明显主要是这一部分的原因,可以在训练时单独把classification+regression loss 拎出来显示。

@LRQ516
Copy link

LRQ516 commented Nov 2, 2021

博主,你好,我在用VOC训练的时候,将num_class设置成20,然后去训练得到的map是0.63左右,然后您提供的78.7.pth测试的时候也需要将num_classes设置为80才能测试成功,这是什么原因呢

请问您找到原因了吗?我也遇到了同样的问题

我感觉代码是没有问题的,我基本上复现了mAP精度。作者提供的pth文件可能是在训练时没有改class_num,所有导致测试VOC需要将其设为80,但是自己从头训练的话只需要设为20或者21(with background)就行了。 作者提到VOC训练30epo,虽然看loss下降趋势感觉后续训练没有提升模型,但是最好还是按照30epo来训练。因为loss里面包含了centerness loss,loss下降不明显主要是这一部分的原因,可以在训练时单独把classification+regression loss 拎出来显示。

非常感谢回复!可以请问一下您是怎么提高mAP的吗?所有设置都和作者提供的一样吗?我用两张卡训的,所以batchsize小了,也适当降低了lr,但是训练了30甚至50个epoch后,mAP只有40+。

@countytown
Copy link

博主,你好,我在用VOC训练的时候,将num_class设置成20,然后去训练得到的map是0.63左右,然后您提供的78.7.pth测试的时候也需要将num_classes设置为80才能测试成功,这是什么原因呢

请问您找到原因了吗?我也遇到了同样的问题

我感觉代码是没有问题的,我基本上复现了mAP精度。作者提供的pth文件可能是在训练时没有改class_num,所有导致测试VOC需要将其设为80,但是自己从头训练的话只需要设为20或者21(with background)就行了。 作者提到VOC训练30epo,虽然看loss下降趋势感觉后续训练没有提升模型,但是最好还是按照30epo来训练。因为loss里面包含了centerness loss,loss下降不明显主要是这一部分的原因,可以在训练时单独把classification+regression loss 拎出来显示。

非常感谢回复!可以请问一下您是怎么提高mAP的吗?所有设置都和作者提供的一样吗?我用两张卡训的,所以batchsize小了,也适当降低了lr,但是训练了30甚至50个epoch后,mAP只有40+。

感觉不应该啊。我没有直接训练源代码,而是做了一些我自己的改动,但是这些改动不至于直接把mAP从你说的40多提升到78。可能还是你的训练步骤有问题。我是严格按照作者给的VOC训练的那个链接来组织数据的。用07+12的trainval训练,07test测试。 config文件我只修改了class_num。我的batch_size是6,3090单卡。今天用batch_size1训练了13个epo,map测出来是0.38,源代码完整的训练要明后天才开始。

@LRQ516
Copy link

LRQ516 commented Nov 3, 2021

博主,你好,我在用VOC训练的时候,将num_class设置成20,然后去训练得到的map是0.63左右,然后您提供的78.7.pth测试的时候也需要将num_classes设置为80才能测试成功,这是什么原因呢

请问您找到原因了吗?我也遇到了同样的问题

我感觉代码是没有问题的,我基本上复现了mAP精度。作者提供的pth文件可能是在训练时没有改class_num,所有导致测试VOC需要将其设为80,但是自己从头训练的话只需要设为20或者21(with background)就行了。 作者提到VOC训练30epo,虽然看loss下降趋势感觉后续训练没有提升模型,但是最好还是按照30epo来训练。因为loss里面包含了centerness loss,loss下降不明显主要是这一部分的原因,可以在训练时单独把classification+regression loss 拎出来显示。

非常感谢回复!可以请问一下您是怎么提高mAP的吗?所有设置都和作者提供的一样吗?我用两张卡训的,所以batchsize小了,也适当降低了lr,但是训练了30甚至50个epoch后,mAP只有40+。

感觉不应该啊。我没有直接训练源代码,而是做了一些我自己的改动,但是这些改动不至于直接把mAP从你说的40多提升到78。可能还是你的训练步骤有问题。我是严格按照作者给的VOC训练的那个链接来组织数据的。用07+12的trainval训练,07test测试。 config文件我只修改了class_num。我的batch_size是6,3090单卡。今天用batch_size1训练了13个epo,map测出来是0.38,源代码完整的训练要明后天才开始。

我反复确认了我的数据集没有问题(我测试了作者提供的voc77.8.pth也能得到77.7的mAP),config文件也只改了class_num=20和batchsize=4,您是用batchsize=1训练得到的结果是0.38吗?我怀疑是我的batchsize还是不够大,所以结果不好。希望您在训练完成了源代码后能提供一下得到的mAP结果和相应的参数设置,非常感谢!

@JiXuKong
Copy link

JiXuKong commented Nov 3, 2021

博主,你好,我在用VOC训练的时候,将num_class设置成20,然后去训练得到的map是0.63左右,然后您提供的78.7.pth测试的时候也需要将num_classes设置为80才能测试成功,这是什么原因呢

请问您找到原因了吗?我也遇到了同样的问题

我感觉代码是没有问题的,我基本上复现了mAP精度。作者提供的pth文件可能是在训练时没有改class_num,所有导致测试VOC需要将其设为80,但是自己从头训练的话只需要设为20或者21(with background)就行了。 作者提到VOC训练30epo,虽然看loss下降趋势感觉后续训练没有提升模型,但是最好还是按照30epo来训练。因为loss里面包含了centerness loss,loss下降不明显主要是这一部分的原因,可以在训练时单独把classification+regression loss 拎出来显示。

非常感谢回复!可以请问一下您是怎么提高mAP的吗?所有设置都和作者提供的一样吗?我用两张卡训的,所以batchsize小了,也适当降低了lr,但是训练了30甚至50个epoch后,mAP只有40+。

感觉不应该啊。我没有直接训练源代码,而是做了一些我自己的改动,但是这些改动不至于直接把mAP从你说的40多提升到78。可能还是你的训练步骤有问题。我是严格按照作者给的VOC训练的那个链接来组织数据的。用07+12的trainval训练,07test测试。 config文件我只修改了class_num。我的batch_size是6,3090单卡。今天用batch_size1训练了13个epo,map测出来是0.38,源代码完整的训练要明后天才开始。

我反复确认了我的数据集没有问题(我测试了作者提供的voc77.8.pth也能得到77.7的mAP),config文件也只改了class_num=20和batchsize=4,您是用batchsize=1训练得到的结果是0.38吗?我怀疑是我的batchsize还是不够大,所以结果不好。希望您在训练完成了源代码后能提供一下得到的mAP结果和相应的参数设置,非常感谢!

batch=4完全没问题,我用作者的代码重构了一版tf的,只用voc07也能训练到67.6(512x640),有兴趣可以去我的仓库跑一下

@countytown
Copy link

博主,你好,我在用VOC训练的时候,将num_class设置成20,然后去训练得到的map是0.63左右,然后您提供的78.7.pth测试的时候也需要将num_classes设置为80才能测试成功,这是什么原因呢

请问您找到原因了吗?我也遇到了同样的问题

我感觉代码是没有问题的,我基本上复现了mAP精度。作者提供的pth文件可能是在训练时没有改class_num,所有导致测试VOC需要将其设为80,但是自己从头训练的话只需要设为20或者21(with background)就行了。 作者提到VOC训练30epo,虽然看loss下降趋势感觉后续训练没有提升模型,但是最好还是按照30epo来训练。因为loss里面包含了centerness loss,loss下降不明显主要是这一部分的原因,可以在训练时单独把classification+regression loss 拎出来显示。

非常感谢回复!可以请问一下您是怎么提高mAP的吗?所有设置都和作者提供的一样吗?我用两张卡训的,所以batchsize小了,也适当降低了lr,但是训练了30甚至50个epoch后,mAP只有40+。

感觉不应该啊。我没有直接训练源代码,而是做了一些我自己的改动,但是这些改动不至于直接把mAP从你说的40多提升到78。可能还是你的训练步骤有问题。我是严格按照作者给的VOC训练的那个链接来组织数据的。用07+12的trainval训练,07test测试。 config文件我只修改了class_num。我的batch_size是6,3090单卡。今天用batch_size1训练了13个epo,map测出来是0.38,源代码完整的训练要明后天才开始。

我反复确认了我的数据集没有问题(我测试了作者提供的voc77.8.pth也能得到77.7的mAP),config文件也只改了class_num=20和batchsize=4,您是用batchsize=1训练得到的结果是0.38吗?我怀疑是我的batchsize还是不够大,所以结果不好。希望您在训练完成了源代码后能提供一下得到的mAP结果和相应的参数设置,非常感谢!

batch=4完全没问题,我用作者的代码重构了一版tf的,只用voc07也能训练到67.6(512x640),有兴趣可以去我的仓库跑一下
batch_size=6 epochs=20
ap for aeroplane is 0.8608762299774784 ap for bicycle is 0.8588879159068002 ap for bird is 0.8274564296243421 ap for boat is 0.708539947168968 ap for bottle is 0.6718242875625959 ap for bus is 0.8492268965788163 ap for car is 0.8986457827056151 ap for cat is 0.9254018281642586 ap for chair is 0.582385012989198 ap for cow is 0.8016992336935083 ap for diningtable is 0.6613267490767998 ap for dog is 0.8923095647845908 ap for horse is 0.8372480724378838 ap for motorbike is 0.8259847440866369 ap for person is 0.8544713153765143 ap for pottedplant is 0.4841814196643933 ap for sheep is 0.8382719951969791 ap for sofa is 0.6783611106279256 ap for train is 0.8780704435795854 ap for tvmonitor is 0.8162147139171932 mAP=====>0.788

@bamboopu
Copy link

318ms

请问你是什么GPU,比我的快好多,我要单GPU bz8 cost_time:531ms左右

@zhenghao977
Copy link
Owner

@bamboopu V100 32G

@bamboopu
Copy link

bamboopu commented Dec 2, 2021

谢谢~博主的v100我看到了,我试试fcos的改进!
(博主代码好像已经都整合了centerness挪到reg分支、center sampling的功能)

@bamboopu
Copy link

bamboopu commented Dec 29, 2021

:) 我没有改代码里面什么功能模块,只动了博主的batch size=8(config.py class_num=20)在VOC跑出了mAP80.7(应该是bz改变导致lr调整的epoch次数产生了差异获得了一个撞大运的好性能),博主也许可以更新下readme voc的top性能~hhh,COCO还在跑。感谢代码呀,非常喜欢这种简洁风格的,mmdet包装了太多层,集成度高是高但是入手曲线太抖了

@blackbabyzz
Copy link

@bamboopu 请问你设置学习率是多少哇

@MargeryLab
Copy link

模型可以保存成功,但是detect预测则为空,没有框,请问这是什么原因呢?

请问是否有解决?遇到了同样的问题....

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

10 participants