模型压缩

March 7, 2023 · View on GitHub

在PaddleDetection中, 提供了基于PaddleSlim进行模型压缩的完整教程和benchmark。目前支持的方法:

推荐您使用剪裁和蒸馏联合训练,或者使用剪裁、量化训练和离线量化,进行检测模型压缩。 下面以YOLOv3为例,进行剪裁、蒸馏和量化实验。

实验环境

  • Python 3.7+
  • PaddlePaddle >= 2.1.0
  • PaddleSlim >= 2.1.0
  • CUDA 10.1+
  • cuDNN >=7.6.5

PaddleDetection、 PaddlePaddle与PaddleSlim 版本关系:

PaddleDetection版本PaddlePaddle版本PaddleSlim版本备注
release/2.3>= 2.12.1离线量化依赖Paddle 2.2及PaddleSlim 2.2
release/2.12.2>= 2.1.02.1
release/2.0>= 2.0.12.0量化依赖Paddle 2.1及PaddleSlim 2.1

安装PaddleSlim

  • 方法一:直接安装:
pip install paddleslim -i https://pypi.tuna.tsinghua.edu.cn/simple
  • 方法二:编译安装:
git clone https://github.com/PaddlePaddle/PaddleSlim.git
cd PaddleSlim
python setup.py install

快速开始

训练

python tools/train.py -c configs/{MODEL.yml} --slim_config configs/slim/{SLIM_CONFIG.yml}
  • -c: 指定模型配置文件。
  • --slim_config: 指定压缩策略配置文件。
  • 如果选择使用蒸馏,具体蒸馏方法和更多检测模型的蒸馏,请参考蒸馏策略文档

评估

python tools/eval.py -c configs/{MODEL.yml} --slim_config configs/slim/{SLIM_CONFIG.yml} -o weights=output/{SLIM_CONFIG}/model_final
  • -c: 指定模型配置文件。
  • --slim_config: 指定压缩策略配置文件。
  • -o weights: 指定压缩算法训好的模型路径。

测试

python tools/infer.py -c configs/{MODEL.yml} --slim_config configs/slim/{SLIM_CONFIG.yml} \
    -o weights=output/{SLIM_CONFIG}/model_final
    --infer_img={IMAGE_PATH}
  • -c: 指定模型配置文件。
  • --slim_config: 指定压缩策略配置文件。
  • -o weights: 指定压缩算法训好的模型路径。
  • --infer_img: 指定测试图像路径。

全链条部署

动转静导出模型

python tools/export_model.py -c configs/{MODEL.yml} --slim_config configs/slim/{SLIM_CONFIG.yml} -o weights=output/{SLIM_CONFIG}/model_final
  • -c: 指定模型配置文件。
  • --slim_config: 指定压缩策略配置文件。
  • -o weights: 指定压缩算法训好的模型路径。

部署预测

Benchmark

剪裁

Pascal VOC上benchmark

模型压缩策略GFLOPs模型体积(MB)输入尺寸预测时延(SD855)Box AP下载模型配置文件压缩算法配置文件
YOLOv3-MobileNetV1baseline24.1393608332.0ms75.1下载链接配置文件-
YOLOv3-MobileNetV1剪裁-l1_norm(sensity)15.78(-34.49%)66(-29%)608-78.4(+3.3)下载链接配置文件slim配置文件

COCO上benchmark

模型压缩策略GFLOPs模型体积(MB)输入尺寸预测时延(SD855)Box AP下载模型配置文件压缩算法配置文件
PP-YOLO-MobileNetV3_largebaseline--18.560825.1ms23.2下载链接配置文件-
PP-YOLO-MobileNetV3_large剪裁-FPGM-37%12.6608-22.3下载链接配置文件slim配置文件
YOLOv3-DarkNet53baseline--238.2608-39.0下载链接配置文件-
YOLOv3-DarkNet53剪裁-FPGM-24%-608-37.6下载链接配置文件slim配置文件
PP-YOLO_R50vdbaseline--183.3608-44.8下载链接配置文件-
PP-YOLO_R50vd剪裁-FPGM-35%-608-42.1下载链接配置文件slim配置文件

说明:

  • 目前剪裁除RCNN系列模型外,其余模型均已支持。
  • SD855预测时延为使用PaddleLite部署,使用arm8架构并使用4线程(4 Threads)推理时延。

量化

COCO上benchmark

模型压缩策略输入尺寸模型体积(MB)预测时延(V100)预测时延(SD855)Box AP下载Inference模型下载模型配置文件压缩算法配置文件
PP-YOLOE-lbaseline640-11.2ms(trt_fp32) | 7.7ms(trt_fp16)--50.9下载链接-配置文件-
PP-YOLOE-l普通在线量化640-6.7ms(trt_int8)--48.8下载链接-配置文件配置文件
PP-YOLOv2_R50vdbaseline640208.619.1ms--49.1下载链接下载链接配置文件-
PP-YOLOv2_R50vdPACT在线量化640--17.3ms--48.1下载链接下载链接配置文件配置文件
PP-YOLO_R50vdbaseline608183.317.4ms--44.8下载链接下载链接配置文件-
PP-YOLO_R50vdPACT在线量化60867.313.8ms--44.3下载链接下载链接配置文件配置文件
PP-YOLO-MobileNetV3_largebaseline32018.52.7ms27.9ms23.2下载链接下载链接配置文件-
PP-YOLO-MobileNetV3_large普通在线量化3205.6--25.1ms24.3下载链接下载链接配置文件配置文件
YOLOv3-MobileNetV1baseline60894.28.9ms332ms29.4下载链接下载链接配置文件-
YOLOv3-MobileNetV1普通在线量化60825.46.6ms248ms30.5下载链接下载链接配置文件slim配置文件
YOLOv3-MobileNetV3baseline60890.39.4ms367.2ms31.4下载链接下载链接配置文件-
YOLOv3-MobileNetV3PACT在线量化60824.48.0ms280.0ms31.1下载链接下载链接配置文件slim配置文件
YOLOv3-DarkNet53baseline608238.216.0ms--39.0下载链接下载链接配置文件-
YOLOv3-DarkNet53普通在线量化60878.812.4ms--38.8下载链接下载链接配置文件slim配置文件
SSD-MobileNet_v1baseline30022.54.4ms26.6ms73.8下载链接下载链接配置文件-
SSD-MobileNet_v1普通在线量化3007.1--21.5ms72.9下载链接下载链接配置文件slim配置文件
Mask-ResNet50-FPNbaseline(800, 1333)174.1359.5ms--39.2/35.6下载链接下载链接配置文件-
Mask-ResNet50-FPN普通在线量化(800, 1333)------39.7(+0.5)/35.9(+0.3)下载链接下载链接配置文件slim配置文件

说明:

  • 上述V100预测时延非量化模型均是使用TensorRT-FP32测试,量化模型均使用TensorRT-INT8测试,并且都包含NMS耗时。
  • SD855预测时延为使用PaddleLite部署,使用arm8架构并使用4线程(4 Threads)推理时延。
  • 上述PP-YOLOE模型均在V100,开启TensorRT环境中测速,不包含NMS。(导出模型时指定:-o trt=True exclude_nms=True)

离线量化

需要准备val集,用来对离线量化模型进行校准,运行方式:

python tools/post_quant.py -c configs/{MODEL.yml} --slim_config configs/slim/post_quant/{SLIM_CONFIG.yml}

例如:

python3.7 tools/post_quant.py -c configs/ppyolo/ppyolo_mbv3_large_coco.yml --slim_config=configs/slim/post_quant/ppyolo_mbv3_large_ptq.yml

蒸馏

COCO上benchmark

模型压缩策略输入尺寸Box AP下载模型配置文件压缩算法配置文件
YOLOv3-MobileNetV1baseline60829.4下载链接配置文件-
YOLOv3-MobileNetV1蒸馏60831.0(+1.6)下载链接配置文件slim配置文件

蒸馏剪裁联合策略

COCO上benchmark

模型压缩策略输入尺寸GFLOPs模型体积(MB)预测时延(SD855)Box AP下载模型配置文件压缩算法配置文件
YOLOv3-MobileNetV1baseline60824.6594.2332.0ms29.4下载链接配置文件-
YOLOv3-MobileNetV1蒸馏+剪裁6087.54(-69.4%)30.9(-67.2%)166.1ms28.4(-1.0)下载链接配置文件slim配置文件
YOLOv3-MobileNetV1剪裁+量化608-----配置文件slim配置文件