Skip to content

Latest commit

 

History

History
 
 

object_detection

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 

目标检测模型剪裁

第一步 正常训练目标检测模型

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指定的预训练模型参数。