Lam1360 / YOLOv3-model-pruning

在 oxford hand 数据集上对 YOLOv3 做模型剪枝(network slimming)
MIT License
1.67k stars 431 forks source link

关于baseline model 0.76 #7

Closed pycoco closed 4 years ago

pycoco commented 5 years ago

您好,我训练了baseline model mAP最高到0.72左右,看您表格里的结果是0.76,请问您训练baseline model的时候是加入了一些trick嘛

Lam1360 commented 5 years ago

训练 baseline model 我没用什么 trick 啊,连多尺度训练都没用上。你用 debug_utils 文件中提供的函数在训练过程中调整一下 learning rate 就好了。另外,evaluate 函数的 conf_thres 我是设置的 0.01,你看下你是不是设置的同样的阈值?

pycoco commented 5 years ago

多谢,我训练时候conf_thres为0.01,之前没有调整lr。后来加了lr调整,gamma取得0.1.每5个epoch调整一次。结果没有变化多少,仍然是0.72。您的lr调整策略是怎样的,gamma选取的多少可以分享一下嘛

Lam1360 commented 5 years ago

不用每 5 个 epoch 调一次啊,用初始 lr(1e-3)训练到 loss 差不多收敛了,然后将 lr 调到十分之一就好了,整个训练过程调一两次就好了,后边再调 lr 就变得非常小了

pycoco commented 5 years ago

你好,经过多次尝试,map到0.73左右就上不去了。不太清楚问题出在哪里。 发现了几个问题: 1.下载得到训练数据图片数量(4069)和readme给出的(4087 )数量不一致。 2.发现pretrain weights更换以后,eval速度:不使用pretrain weight(极慢) < darknet53.conv.74 < yolov3.weights。这个是什么原因呢

Lam1360 commented 5 years ago
  1. 啊,我写错了。。。训练集应该是 train 文件夹加上 validation 文件夹的所有图片,应该是 4807 张而不是4087张。会不会你只用了 train 文件夹作为训练集呢?
  2. eval 的时间应该是主要耗费在 NMS 上了,这个代码的 NMS 没有用 cuda 做优化。因为 eval 的阈值设为 0.01 了,训练初始阶段,pretrain weight 训练得到的模型将会有大量的候选框,因此在做 NMS 会非常耗时。而 darknet53.conv.74 和 yolov3.weights 有了预训练的权重,能通过阈值的候选框少了很多,因此 NMS 的速度就会比较快了。
  3. 或者你可以试试我给出来的 pruned model 测试一下,看能不能得到 0.77 mAP
pycoco commented 5 years ago

多谢解惑,训练数据我是采用的train+val. 您的模型我测试过了确实是0.77 map。baseline model 我改了初始学习率最终能到0.75左右了。您是怎样在初始 lr(1e-3),哪个epoch或者多少个batch调整lr到达了接近0.77。因为我初始 lr(1e-3)的时候只能达到0.72左右。还请大佬多多指点

xdl932365660 commented 5 years ago

缺少文件啊,请问你是怎么训练的@pycoco

pycoco commented 5 years ago

@xdl932365660 我没训练pruning的模型,我只是训练baseline model

ujsyehao commented 5 years ago

@pycoco 你好,你训练baseline model用的预训练模型从哪里下载?

pycoco commented 5 years ago

@pycoco 你好,你训练baseline model用的预训练模型从哪里下载?

yolo官网

liaoyunkun commented 5 years ago

@Lam1360 你好,请问你Baseline和稀疏化分别训练了多少个Epoch?

Lam1360 commented 5 years ago

@liaoyunkun 好像都是40、50个epoch就可以了,Baseline因为是在yolov3权重上训练的很快就能收敛了

liaoyunkun commented 5 years ago

@Lam1360 emm,训200个Epoch也没有办法达到你的结果,超参数设定和你的一样

Lam1360 commented 5 years ago

@liaoyunkun 你是说baseline吗?

liaoyunkun commented 5 years ago

@Lam1360 对

Lam1360 commented 5 years ago

@liaoyunkun ,你能最高能到多少啊,我在yolov3上训练两三个epoch就能到0.72以上了

liaoyunkun commented 5 years ago

@Lam1360 0.58

Lam1360 commented 5 years ago

你确定是用的yolov3权重吗?

pycoco commented 5 years ago

@liaoyunkun 大约在第4,5个epoch调整一下lr,确实可以到0.72,但是之后map就会下降了。@Lam1360 0.76多是如何达到的呢?是下降之后多训几个epoch还会反弹是嘛

liaoyunkun commented 5 years ago

@Lam1360 用的是yolov3权重

Lam1360 commented 5 years ago

@pycoco ,应该是吧,这个就是正常训练啊,我什么trick都没用。。。

pycoco commented 5 years ago

@Lam1360 我训练了100轮,lr 0.001,第四个epoch lr*0.1 并达到最高map到0.727.从第五个epoch之后就开始下降,但是都比0.727小。难道是我调整学习率太早进入了局部最低点?所以还是想请教一下 具体训练的时候不加trick是怎么最终到达0.76这个map的。您自己还可以复现这个结果嘛

zhangyu96 commented 5 years ago

请问博主有没有debug_file,以及debug_utils.py中的函数具体是怎么使用的?谢谢

coldlarry commented 4 years ago

我提供一种训练方法,可以很快达到mAP0.76。方法就是初始学习率设置为0.0001,在yolov3.weights的基础上,大概训练第4个Epoch就可以达到0.76.

coldlarry commented 4 years ago

对了,上面说的训练方法,是打开多尺度训练的

alanMachineLeraning commented 4 years ago

感谢楼上