天天看点

对YOLOv3训练出的权重文件做网络裁剪后的fine-tuning操作记录总结

1、使用darknet训练处的YOLOv3权重文件的大小一般在200M+左右,这对于在应用阶段做模型加载的时候时间非常的长,因此我们项目组打算对训练好的模型做裁剪,就是把一些不必要的卷积核及其参数删除掉,(删除的原则就是设置一阈值,当小于某一个阈值的时候踢出该卷积核和对应的参数),在此基础对裁剪完成后的权重文件重新fine-tuning,保持权重文件中参数的平衡,在模型缩小的情况下保持检测精度的基本不变性。

2、当同事给我修改好的权重文件后,我直接拿daknet对准备好数据修改的yolo.weight做fine-tuning后,发现每次都是一开始就结束了,并能够保存模型。原因是这些网络都是在imagenet上训练过,设置的迭代次数应该是远大于cfg中的max_batch或者其他参数,所以刚开始训练便达到了截止条件。不做fine-tuning,没有好的初始化又很难训练出好模型。因此需要重新提取基础特征提取层

./darknet partial cfg/yolov3-coco.cfg yolov.weights darknet53.conv.74 74

74表示提取yolov3前74层,从而得到darknet53.conv.74作为网络初始化的初始模型

3、2019年3月18日,用pruning对新训练出来的剪裁之后的权重进行新的论的剪裁10%,之前那次是20%。剪裁完成后计划用之前的partital完成提取网络权重然后训练。但现在对剪裁后的权重文件直接训练,设置学习率为初始学习率,0.001.设置最大迭代次数为10000200,居然能迭代起来,但是显示的当前的迭代次数与batch有关,这次修改了batch-128,之前等于64.因此显示了当前迭代次数为250100.对第一次裁剪后的网络迭代到了500200次,设置的参数与之前的无异。

Github上的两个对yolov3模型裁剪的开源代码:

https://github.com/Lam1360/YOLOv3-model-pruning

https://github.com/talebolano/yolov3-network-slimming

https://github.com/violet17/yolov3-channel-pruning

继续阅读