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

本文探讨了YOLOv3模型的裁剪与优化过程,包括权重文件的裁剪原则、fine-tuning技巧及如何避免训练截止条件提前触发。介绍了两次裁剪实验,分别裁剪20%和10%的卷积核,并调整学习率和迭代次数。提供了GitHub上的两个开源裁剪代码资源。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

GitHub - talebolano/yolov3-network-slimming: yolov3 network slimming剪枝的一种实现

GitHub - violet17/yolov3-channel-pruning

### Fine-tuning 的相关技巧 #### 1. 数据集的选择与准备 在执行 Fine-tuning 之前,确保目标领域数据的质量至关重要。对于图像分类任务,通常需要对数据进行增强操作以提高模型的泛化能力[^2]。常见的数据增强技术包括随机裁剪、水平翻转、颜色抖动等。 #### 2. 学习率调整策略 Fine-tuning 过程中的学习率设置是一个关键因素。一般建议采用较低的学习率来防止破坏预训练模型中已经学到的知识结构。可以尝试使用学习率调度器(Learning Rate Scheduler),例如余弦退火或逐步衰减法,以便动态调整学习率。 #### 3. 层冻结与解冻 为了保护预训练权重不被过早更新而导致性能下降,在初始阶段可以选择只训练网络的最后一层或者几层全连接层,而保持其他卷积层参数不变。随着训练过程推进,再逐渐放开更多层参与训练。 #### 4. 批量大小的影响 批量大小也会影响最终效果。较小批次可能带来更稳定收敛但较慢速度;较大则反之。因此需根据具体硬件资源情况合理设定该值。 #### 5. 正则化手段的应用 为了避免过度拟合新数据集,在 fine-tune 期间可引入正则项如 L2 正则化 或 dropout 方法 来增加模型鲁棒性。 ```python import torch.nn as nn from torchvision import models model = models.resnet18(pretrained=True) # 冻结所有层 for param in model.parameters(): param.requires_grad = False # 修改最后一层适应新的类别数 num_ftrs = model.fc.in_features model.fc = nn.Linear(num_ftrs, num_classes) ``` 上述代码展示了如何加载 ResNet 并仅允许最后线性变换部分接受梯度反向传播的过程。 #### 6. 使用迁移学习框架简化流程 利用现有的深度学习库比如 PyTorch 和 TensorFlow 提供的功能模块能够极大地减少实现复杂性的负担。这些工具不仅提供了丰富的预训练模型集合还内置了许多实用功能支持快速完成定制化的 fine-tuning 工作流。 ---
评论 43
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值