tanluren / yolov3-channel-and-layer-pruning

yolov3 yolov4 channel and layer pruning, Knowledge Distillation 层剪枝,通道剪枝,知识蒸馏
Apache License 2.0
1.5k stars 446 forks source link

yolov4模型剪枝后模型大小下降,FPS也下降了 #101

Open yonghui-bluvec opened 4 years ago

yonghui-bluvec commented 4 years ago

我用alex的darknet训练了一个260MB的yolov4模型,然后用了该方法将模型压缩到120MB。不过原本在jetson Xaiver NX 上FPS是3.8 现在只有3.1了,求问为什么会这样呢?

yishunzhijian commented 4 years ago

我用alex的darknet训练了一个260MB的yolov4模型,然后用了该方法将模型压缩到120MB。不过原本在jetson Xaiver NX 上FPS是3.8 现在只有3.1了,求问为什么会这样呢?

我也是用alex的darknet训练的yolov4模型,但是稀疏训练第80epoch map从90多降到50多,这正常吗? 请问你的学习率和s如何设置的

qybing commented 4 years ago

@yishunzhijian 是先用darknet训练的yolov4模型,在进行稀疏训练吗,我也是这么训练的,map 一直下降

yishunzhijian commented 4 years ago

是啊,问题很大

yonghui-bluvec commented 4 years ago

我用alex的darknet训练了一个260MB的yolov4模型,然后用了该方法将模型压缩到120MB。不过原本在jetson Xaiver NX 上FPS是3.8 现在只有3.1了,求问为什么会这样呢?

我也是用alex的darknet训练的yolov4模型,但是稀疏训练第80epoch map从90多降到50多,这正常吗? 请问你的学习率和s如何设置的

就是和作者用的一样的,--prune 1。 刚开始mAP波动,等学习率大了以后mAP下降,等到后来学习率下降以后,mAP又升回来了。推荐你训练的时候用tensorboard观察bn weights。bn weights在l1的作用下变动的时候mAP掉的厉害,但是当分布稳定的时侯,mAP又上来了。 我是150个epoch

yishunzhijian commented 4 years ago

我用alex的darknet训练了一个260MB的yolov4模型,然后用了该方法将模型压缩到120MB。不过原本在jetson Xaiver NX 上FPS是3.8 现在只有3.1了,求问为什么会这样呢?

我也是用alex的darknet训练的yolov4模型,但是稀疏训练第80epoch map从90多降到50多,这正常吗? 请问你的学习率和s如何设置的

就是和作者用的一样的,--prune 1。 刚开始mAP波动,等学习率大了以后mAP下降,等到后来学习率下降以后,mAP又升回来了。推荐你训练的时候用tensorboard观察bn weights。bn weights在l1的作用下变动的时候mAP掉的厉害,但是当分布稳定的时侯,mAP又上来了。 我是150个epoch

你用的什么数据集 啊

yonghui-bluvec commented 4 years ago

我用alex的darknet训练了一个260MB的yolov4模型,然后用了该方法将模型压缩到120MB。不过原本在jetson Xaiver NX 上FPS是3.8 现在只有3.1了,求问为什么会这样呢?

我也是用alex的darknet训练的yolov4模型,但是稀疏训练第80epoch map从90多降到50多,这正常吗? 请问你的学习率和s如何设置的

就是和作者用的一样的,--prune 1。 刚开始mAP波动,等学习率大了以后mAP下降,等到后来学习率下降以后,mAP又升回来了。推荐你训练的时候用tensorboard观察bn weights。bn weights在l1的作用下变动的时候mAP掉的厉害,但是当分布稳定的时侯,mAP又上来了。 我是150个epoch

你用的什么数据集 啊

公司的数据,没试coco和其他公共数据。 刚刚又跑了一次,剪到80MB。我这边剪channel对速度提升没有提升,貌似还导致在NX上面一定的下降。 只有剪layer有效果。我最后剪了16个shortcut, channel的slim是0.35。2080ti从60FPS到79FPS,但是jetson NX还是没提升。

yishunzhijian commented 4 years ago

我用alex的darknet训练了一个260MB的yolov4模型,然后用了该方法将模型压缩到120MB。不过原本在jetson Xaiver NX 上FPS是3.8 现在只有3.1了,求问为什么会这样呢?

我也是用alex的darknet训练的yolov4模型,但是稀疏训练第80epoch map从90多降到50多,这正常吗? 请问你的学习率和s如何设置的

就是和作者用的一样的,--prune 1。 刚开始mAP波动,等学习率大了以后mAP下降,等到后来学习率下降以后,mAP又升回来了。推荐你训练的时候用tensorboard观察bn weights。bn weights在l1的作用下变动的时候mAP掉的厉害,但是当分布稳定的时侯,mAP又上来了。 我是150个epoch

你用的什么数据集 啊

公司的数据,没试coco和其他公共数据。 刚刚又跑了一次,剪到80MB。我这边剪channel对速度提升没有提升,貌似还导致在NX上面一定的下降。 只有剪layer有效果。我最后剪了16个shortcut, channel的slim是0.35。2080ti从60FPS到79FPS,但是jetson NX还是没提升。

可以分享一下稀疏训练的bn图和map变化的图嘛,我这个可能是数据集的问题

yonghui-bluvec commented 4 years ago

我用alex的darknet训练了一个260MB的yolov4模型,然后用了该方法将模型压缩到120MB。不过原本在jetson Xaiver NX 上FPS是3.8 现在只有3.1了,求问为什么会这样呢?

我也是用alex的darknet训练的yolov4模型,但是稀疏训练第80epoch map从90多降到50多,这正常吗? 请问你的学习率和s如何设置的

就是和作者用的一样的,--prune 1。 刚开始mAP波动,等学习率大了以后mAP下降,等到后来学习率下降以后,mAP又升回来了。推荐你训练的时候用tensorboard观察bn weights。bn weights在l1的作用下变动的时候mAP掉的厉害,但是当分布稳定的时侯,mAP又上来了。 我是150个epoch

你用的什么数据集 啊

公司的数据,没试coco和其他公共数据。 刚刚又跑了一次,剪到80MB。我这边剪channel对速度提升没有提升,貌似还导致在NX上面一定的下降。 只有剪layer有效果。我最后剪了16个shortcut, channel的slim是0.35。2080ti从60FPS到79FPS,但是jetson NX还是没提升。

可以分享一下稀疏训练的bn图和map变化的图嘛,我这个可能是数据集的问题

Screenshot from 2020-07-30 15-13-08 BN是稀疏训练前后的对比

Screenshot from 2020-07-30 15-13-34 trainloss和mAP 包括后来的蒸馏学习部分。 模型从250MB到80MB, 精度基本保持,但是再次吐槽xaiver NX的FPS没变

tanluren commented 4 years ago

这是每层的bn图,你应该看总的统计;稀疏未够充分,所以剪枝率低

chumingqian commented 3 years ago

就是和作者用的一样的,--prune 1。 刚开始mAP波动,等学习率大了以后mAP下降,等到后来学习率下降以后,mAP又升回来了。推荐你训练的时候用tensorboard观察bn weights。bn weights在l1的作用下变动的时候mAP掉的厉害,但是当分布稳定的时侯,mAP又上来了。 我是150个epoch

@yonghui-bluvec @zbyuan @yishunzhijian 请问一下,您用的数据集是多少个类? 并且您训练的时候 稀疏度 --sr s=是多少啊? 我这边在voc 数据集上,稀疏化训练的 s= 0.001, prune =1 ; 已经训练了 150个epoch 了, 精度 可以回升, 但召回率始终很低? 610272BF1AB42D4ED35DDD0B5433E45B

sparseTrain
wuyexingkong commented 2 years ago

python train.py --cfg cfg\yolov4_digital.cfg --data data\digital.data --weights weights\yolov4_digital.weights --epochs 20 --batch-size 4 -sr --s 0.001 --prune 1

训练到第18个epochs,报错内存不足: image 有没有大佬能给支个招?

yishunzhijian commented 2 years ago

batch-size设置为1试试

发自我的iPhone

------------------ 原始邮件 ------------------ 发件人: zhaopeng @.> 发送时间: 2022年5月24日 11:12 收件人: tanluren/yolov3-channel-and-layer-pruning @.> 抄送: yishunzhijian @.>, Mention @.> 主题: Re: [tanluren/yolov3-channel-and-layer-pruning] yolov4模型剪枝后模型大小下降,FPS也下降了 (#101)

zbyuan commented 2 years ago

bs小点 建议上好点的服务器 20个周期进行稀疏化效果可能不是很好

zbyuan commented 2 years ago

v4在激活函数 网络结构 数据增强等要吃显存 正常的

wuyexingkong commented 2 years ago

python train.py --cfg cfg\yolov4_digital.cfg --data data\digital.data --weights weights\yolov4_digital.weights --epochs 80 --batch-size 1 -sr --s 0.001 --prune 1

bs减小为1后,还是会报内存溢出错误: image

事情果然没有想象的那么简单,各位有没有碰到过呢?

wuyexingkong commented 2 years ago

python train.py --cfg cfg\yolov4_digital.cfg --data data\digital.data --weights weights\yolov4_digital.weights --epochs 80 --batch-size 2 -sr --s 0.001 --prune 1 运行到一定epoch会报内存溢出错误!

同样的模型,把名字yolov4_digital.weights改为yolov4.weights,如下 python train.py --cfg cfg\yolov4_digital.cfg --data data\digital.data --weights weights\yolov4.weights --epochs 80 --batch-size 2 -sr --s 0.001 --prune 1 直接报错: image