Yet-another-efficientdet-pytorch: 模型在自己的训练集上效果不理想

Created on 18 Dec 2020  ·  8Comments  ·  Source: zylo117/Yet-Another-EfficientDet-Pytorch

@zylo117,您好

  • 我的模型加载了Efficientdet-d0的预训练权重,训练集有1100张图片,验证集有240张图片。

  • 我输入时的命令为

python train.py -c 0 -p vehicles --head_only True --lr 1e-4 --batch_size 32 --load_weights weights/efficientdet-d0.pth --num_epochs 200 --save_interval 2000

  • 第一次训练后 结果如下

    Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.017
    Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=100 ] = 0.047
    Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ] = 0.008
    Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.002
    Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.032
    Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.003
    Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 1 ] = 0.008
    Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 10 ] = 0.051
    Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.176
    Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.101
    Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.204
    Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.154

之后我又继续训练了500 epochs,但是在验证集上得到的结果跟前200轮很相近

  • 使用efficietdet_test.py脚本得到的可视化图片为(有很多框)

image

  • tensorboard上的结果为

image
image

通过在验证集上的结果对比,我认为是不是由于训练集的图片不够导致继续训练的500 epochs与前200 epochs 的结果类似呢?
我应该如何提高模型的表现呢?

  • 希望您能给我一些建议!

Most helpful comment

scale也可以修改,数量也可以调整。关于anchor设置,我只能说这并不一定是最优的值,也许有更好的选择。
你可以跑一次那个notebook,直接跑出来就是这样的效果了。关于那些参数,也只是一些常用值,也并非多次调参优化出来的。你可以调整下那些参数,我是感觉可以优化到0.8以上。colab跑一次也不久,大概半个钟就出结果了。

All 8 comments

我说你这图的目标也太小了吧?
虽然有很多加框,但是讲真,我是一个真目标都看不到,是左下角的车?
看loss是train不动了,这么高的loss,mAP基本是0的。
如果你这个数据集可以公开的话,我看看能不能训练下吧。
如果你这个图是原图,我觉得还有拯救的可能。但是如果是你手动放大N倍后才勉强看到目标的,我觉得没戏。

我说你这图的目标也太小了吧?
虽然有很多加框,但是讲真,我是一个真目标都看不到,是左下角的车?
看loss是train不动了,这么高的loss,mAP基本是0的。
如果你这个数据集可以公开的话,我看看能不能训练下吧。
如果你这个图是原图,我觉得还有拯救的可能。但是如果是你手动放大N倍后才勉强看到目标的,我觉得没戏。

@zylo117 ,您好

我的训练集使用的是DOTA公开数据集,原始图片给大,目标更小 :( :(
我是先从原始数据集中选出来一部分感觉里面车辆比较好识别的图片,然后对这些图片裁剪成512 * 512大小用于训练的。
昨天在看json文件中发现,经过裁剪之后的图片,有的目标有些坐标值是负的...,不知道这样的话对训练有没有什么影响。
image

如果没有影响而且您方便的话,我可以将百度网盘连接放在这里,麻烦您帮我训练一下~

我有个想法是:
如果先对图片裁剪成512 * 512 再将图片插值成更大的图片,用d3或者d4来训练是否能提升检测效果呢?
如果可以的话,大概需要多少训练图片呢?

可以啊,你可以把(裁剪后的)数据集放上来。
你这个裁剪的方法是不错的思路

可以啊,你可以把(裁剪后的)数据集放上来。
你这个裁剪的方法是不错的思路

@zylo117 ,您好,相应文件已上传。

有两个疑问
1、不知道在标注文件中坐标位置有负数影不影响模型的回归(使用随机裁剪后,有的位置存在负数坐标)。
2、我的训练集是1100张左右,验证集是249张,不知道对于efficientdet-d0来说,数量够不够。

链接:https://pan.baidu.com/s/1NR6DDabUGYQ8fcw7lzPlcQ
提取码:2mc2

非常感谢您的帮助!!!

训练好了,还行,0.761的mAP(iou0.5)
可以用下面这个notebook来复现
https://github.com/zylo117/Yet-Another-EfficientDet-Pytorch/blob/master/tutorial/train_birdview_vehicles.ipynb

训练好的权值在这
https://github.com/zylo117/Yet-Another-EfficientDet-Pytorch/releases/download/custom_datasets/birdview_vehicles_efficientdet-d0.pth

非常感谢您的帮助,我用您训练好的权值又可视化了几组结果,效果确实还很不错。
我看您没有修改yml文件中的anchor_scales参数
image

就是相比您之前的repo文件,只是修改了yml文件中的anchors_ratios
并且在训练时先让学习率为lr **5e-3,batch_size 32;训练一段时间之后修改为lr 1e-3 --batch_size 16。就达到这样的效果了吗?

您可以解释一下,这些参数在设置的时候是如何考虑的吗?

scale也可以修改,数量也可以调整。关于anchor设置,我只能说这并不一定是最优的值,也许有更好的选择。
你可以跑一次那个notebook,直接跑出来就是这样的效果了。关于那些参数,也只是一些常用值,也并非多次调参优化出来的。你可以调整下那些参数,我是感觉可以优化到0.8以上。colab跑一次也不久,大概半个钟就出结果了。

好的,谢谢!

Was this page helpful?
0 / 5 - 0 ratings