python yolov3_train.py
在此步骤中,训练的模型会保存在output/yolov3_darknet53
目录下
注意:目标检测模型的剪裁依赖PaddleSlim 2.1.0
python yolov3_prune.py
yolov3_prune.py
中主要执行了以下API:
step 1: 分析模型各层参数在不同的剪裁比例下的敏感度
主要由两个API完成:
model = pdx.load_model('output/yolov3_darknet53/best_model')
model.analyze_sensitivity(
dataset=eval_dataset,
batch_size=1,
save_dir='output/yolov3_darknet53/prune')
参数分析完后,output/yolov3_darknet53/prune
目录下会得到model.sensi.data
文件,此文件保存了不同剪裁比例下各层参数的敏感度信息。
注意: 如果之前运行过该步骤,第二次运行时会自动加载已有的output/yolov3_darknet53/prune/model.sensi.data
,不再进行敏感度分析。
step 2: 根据选择的FLOPs减小比例对模型进行剪裁
model.prune(pruned_flops=.2, save_dir=None)
注意: 如果想直接保存剪裁完的模型参数,设置save_dir
即可。但我们强烈建议对剪裁过的模型重新进行训练,以保证模型精度损失能尽可能少。
step 3: 对剪裁后的模型重新训练
model.train(
num_epochs=270,
train_dataset=train_dataset,
train_batch_size=8,
eval_dataset=eval_dataset,
learning_rate=0.001 / 8,
warmup_steps=1000,
warmup_start_lr=0.0,
save_interval_epochs=5,
lr_decay_epochs=[216, 243],
save_dir='output/yolov3_darknet53/prune')
重新训练后的模型保存在output/yolov3_darknet53/prune
。
注意: 重新训练时需将pretrain_weights
设置为None
,否则模型会加载pretrain_weights
指定的预训练模型参数。