ZJU-lishuang / yolov5_prune

yolov5 prune,Support V2, V3, V4 and V6 versions of yolov5
Apache License 2.0
556 stars 136 forks source link

稀疏训练后的通道剪枝策略得到的map都是0 #97

Closed dddmmmyyy1998 closed 2 years ago

dddmmmyyy1998 commented 2 years ago

楼主您好,我使用的是yolov5-6网络。 (更新:发现剪枝率设置为0.1后。各项指标依旧下降为0) 因为在您的yolov5_prune工程中没有找到稀疏训练的train_sparsity代码,所以使用的是您仓库下的yolov5-v6工程里的train_sparsity代码,训练数据集也是您提供的coco_hand。 训练步骤:(不知道是不是这么操作) 1、我稀疏训练了200epoch,在100epoch时因为map没有继续上涨程序自动停止了。 2、得到的权重best.pt用于yolov5_prune工程中的prune_yolov5s.py进行剪枝。模型cfg文件使用的就是您代码中提供的yolov5s_v6_hand.cfg。 出现问题: prune_yolov5s.py在运行的时候,test的current model的P R Map和我train_sparsity的值不一样,差挺多的 且,剪枝后P R mAP F1全部为0。 运行截图 稀疏训练 图片 剪枝 图片 图片

dddmmmyyy1998 commented 2 years ago

更新,作者的指标计算有问题。计算出的P R都与正常训练出来的差别很大。怀疑是导入yolov3模型的问题。 并且只能调用last.pt剪枝,无法调用best.pt剪枝。期待好心人修复Bug

ZJU-lishuang commented 2 years ago

refer to https://github.com/ZJU-lishuang/yolov5_prune/blob/v6/slim_prune_yolov5s_8x.py#L42 for val

dddmmmyyy1998 commented 2 years ago

refer to https://github.com/ZJU-lishuang/yolov5_prune/blob/v6/slim_prune_yolov5s_8x.py#L42 for val

可是剪枝代码中,计算出的原模型的指标和我用yolov5-v6的val.py代码验证的指标差别很大呀。我看您这边大部分是yolov3的代码

dddmmmyyy1998 commented 2 years ago

refer to https://github.com/ZJU-lishuang/yolov5_prune/blob/v6/slim_prune_yolov5s_8x.py#L42 for val 您看这里,测试的原始模型的P很低,R,map等都和我在v5原始项目中测试的指标差别很大。 ![图片](https://user-images.githubusercontent.com/32975302/163383664-d7176fff-611b-4518-9e20-e4293a9ee93e.png

ZJU-lishuang commented 2 years ago

你没看代码吧,代码都没读直接就开始了。 引用那里,是将cfg格式模型转为yolov5格式,然后使用yolov5的验证代码。 思路不是写新的验证代码,而是将模型转为yolov5格式,复用官方的验证代码。 建议使用前看下代码,了解流程。 这个我只在slim_prune_yolov5s_8x.py里面改了。prune_yolov5s.py基本不用就没有浪费时间整理跟进。

dddmmmyyy1998 commented 2 years ago

你没看代码吧,代码都没读直接就开始了。 引用那里,是将cfg格式模型转为yolov5格式,然后使用yolov5的验证代码。 思路不是写新的验证代码,而是将模型转为yolov5格式,复用官方的验证代码。 建议使用前看下代码,了解流程。 这个我只在slim_prune_yolov5s_8x.py里面改了。prune_yolov5s.py基本不用就没有浪费时间整理跟进。

感谢校友回复!我刚刚用您的8倍通道剪枝试了,P R map都是正确的!因为我实验室老放养了,所以代码基础不是很好,所以很多细节没看懂,再次感谢校友!