SpursLipu / YOLOv3v4-ModelCompression-MultidatasetTraining-Multibackbone

YOLO ModelCompression MultidatasetTraining
GNU General Public License v3.0
445 stars 136 forks source link

map上升速度问题 #33

Closed SISTMrL closed 4 years ago

SISTMrL commented 4 years ago

你好,我在对yolov3(best.pt)进行稀疏化剪枝后得到的prune_0.5_yolov3.weights,percent为0.5,然后将best.pt和prune_0.5_yolov3.weights进行蒸馏时,发现map上升的很奇怪,描述如下: epoch=0一直到epoch=4, map: 0.332-->0.528-->0.645-->0.706-->0.801,这段上升的十分快,可是从epoch=5一直到epoch=100,map一直在(0.802,0.83)这段区间内,彷佛蒸馏在前几个epoch就完成了,能否解答这个现象,不是很明白,十分感谢!

SpursLipu commented 4 years ago

你可以试试不带蒸馏直接finetuning的效果.....剪植后保留了网络的权重没相当于使用了预训练,确实可以快速的较高的map这可能不是蒸馏的效果,是使用预训练模型的效果

SISTMrL commented 4 years ago

你的意思是剪枝得到的prune_0.5_yolov3.weights充当了预训练模型的效果?另外当在执行normal_prune.py时,剪枝前后的map变化如下: +------------+----------+----------+ | Metric | Before | After | +------------+----------+----------+ | mAP | 0.840241 | 0.000357 | | Parameters | 61523734 | 21872821 | | Inference | 0.1514 | 0.1094 | +------------+----------+----------+ 看这个map似乎起不到预训练的效果,而且也不懂为何剪纸后map几乎降为0,在进行蒸馏后,上升那么快

SpursLipu commented 4 years ago

剪植的步骤是 稀疏化训练-剪植-finetuning,剪植完后还需要一个finetuning的步骤,全部走完后才能得到效果比较好的剪植模型

SISTMrL commented 4 years ago

哦哦好的,我看readme里写正常剪枝,无需微调,,我再试试微调,重新跑下剪枝后的模型

SpursLipu commented 4 years ago

对于剪植率比较低和数据集简单确实可以无需微调,比率较大数据集复杂还是需要的。

SISTMrL commented 4 years ago

好的,谢谢

SISTMrL commented 4 years ago

你好,请问下finetune有啥可以建议的么,建议调整哪些参数,我就是直接把剪枝后的模型直接拿来重新训练了,指令如下: python train.py --data data/xray.data --batch_size 2 --accumulate 1 -pt --weights weights/yolov3_hand_normal_pruning_0.5percent.weights --cfg cfg/prune_0.5_yolov3/prune_0.5_yolov3.cfg --img_size 608 --epochs 80,

map变化情况: epoch: 0--->12 map: 0.0091, 0.182, 0.335, 0.397, 0.395, 0.374, 0.431, 0.452, 0.472, 0.608, 0.688, 0.722, 0.788 epoch: 13--->80, map几乎都在(0.78, 0.8)之间,感觉map上升的也很快,前十三个epoch就模型几乎达到最优了。所以不知如何调整参数,能否给点意见,因为是第一次做检测,刚入门深度学习不久。诚盼回复,十分感谢

SpursLipu commented 4 years ago

fine tuning的最优结果就是达到原模型的精度,不知道你测试的结果和原模型差的有多少?

SISTMrL commented 4 years ago

我重新跑剪纸的模型最优的map为0.809, 原模型是0.83-0.84之间

SpursLipu commented 4 years ago

呢你可以尝试用蒸馏fine tuning的方式。调参的话可以尝试学习率或者蒸馏时的温度系数。

SISTMrL commented 4 years ago

好的,我尝试下用蒸馏的方式,十分感谢

SISTMrL commented 4 years ago

你好,用蒸馏(温度系数有设为3, 6, 10),学生模型的map没有多大变化,是否是因为重新训练后的模型本身就与原模型相差不到6个百分点的map?(--percent 0.5的情况)。不知道你记不记得,我当时有改过yolo-tiny的结果,加了卷积,shortcut和yololayer结构,然后我将yolov3作为教师网络,yolo-tiny作为学生网络,tiny的best map 由0.654--->0.752, 接近十个百分点,yolov3的best map为0.834. 本身教师网络和学生网络的map就相差较大。

此外我还有一个问题,我又尝试了0.7的剪纸率,--percent 0.7,我将剪纸得到的模型再次重新训练,得到如下map图 results 也是得到了map为0.8的模型,但此时map上升的趋势则较为平稳,直到epoch=40左右到达最优,与上面问题提到的--percent 0.5重新训练时,第13个epoch就基本达到最优,形成鲜明对比。我的猜测是剪纸后由于-- percent 0.5相对于0.7所保留的结构更多,所以优化的更快?是否是这样的原因?

SpursLipu commented 4 years ago

不好意思 由于问题closed了 我没看到问题。剪植率比较低当然更容易回复精度。至于知识蒸馏的问题我还在调试,现在的效果不一定可靠。

SISTMrL commented 4 years ago

好的感谢,我之后也会继续跟进对你repo的研究

SISTMrL commented 4 years ago

你好,另外能否在readme中 写下如何对剪枝后的微调的一些方法的说明,还是有点对剪枝有点模糊,我也会对看点模型压缩的论文丰富经验

SpursLipu commented 4 years ago

行,我之后会更新一些剪植的数据