基于Python预测引擎推理
inference 模型(paddle.jit.save
保存的模型)
一般是模型训练,把模型结构和模型参数保存在文件中的固化模型,多用于预测部署场景。
训练过程中保存的模型是 checkpoints
模型,保存的只有模型的参数,多用于恢复训练等。
与 checkpoints
模型相比,inference
模型会额外保存模型的结构信息,在预测部署、加速推理上性能优越,灵活方便,适合于实际系统集成。
接下来首先介绍如何将训练的模型转换成 inference 模型,然后依次介绍主体检测模型、特征提取模型在 CPU、GPU 上的预测方法;之后介绍主体检测、特征提取、特征检索串联的预测方法;最后介绍图像分类的预测方法。
一、训练模型转 inference 模型
1.1 特征提取模型转 inference 模型
以下命令请在 PaddleClas 的根目录执行。以商品识别特征提取模型模型为例,首先下载预训练模型:
wget -P ./product_pretrain/ https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/rec/models/pretrain/product_ResNet50_vd_Aliproduct_v1.0_pretrained.pdparams
上述模型是 ResNet50_vd 在 AliProduct 上训练的模型,训练使用的配置文件为ppcls/configs/Products/ResNet50_vd_Aliproduct.yaml
将训练好的模型转换成 inference 模型只需要运行如下命令:
# -c 后面设置训练算法的 yml 配置文件
# -o 配置可选参数
# Global.pretrained_model 参数设置待转换的训练模型地址,不用添加文件后缀 .pdmodel,.pdopt 或 .pdparams。
# Global.save_inference_dir 参数设置转换的模型将保存的地址。
python3.7 tools/export_model.py -c ppcls/configs/Products/ResNet50_vd_Aliproduct.yaml -o Global.pretrained_model=./product_pretrain/product_ResNet50_vd_Aliproduct_v1.0_pretrained -o Global.save_inference_dir=./deploy/models/product_ResNet50_vd_aliproduct_v1.0_infer
这里也可以使用自己训练的模型。转 inference 模型时,使用的配置文件和训练时使用的配置文件相同。另外,还需要设置配置文件中的 Global.pretrained_model
参数,其指向训练中保存的模型参数文件。
转换成功后,在模型保存目录下有三个文件:
├── product_ResNet50_vd_aliproduct_v1.0_infer
│ ├── inference.pdiparams # 识别 inference 模型的参数文件
│ ├── inference.pdiparams.info # 识别 inference 模型的参数信息,可忽略
│ └── inference.pdmodel # 识别 inference 模型的 program 文件
1.2 分类模型转 inference 模型
下载预训练模型:
wget -P ./cls_pretrain/ https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/ResNet50_vd_pretrained.pdparams
上述模型是使用 ResNet50_vd 在 ImageNet 上训练的模型,使用的配置文件为ppcls/configs/ImageNet/ResNet/ResNet50_vd.yaml
。
转 inference 模型与特征提取模型的方式相同,如下:
# -c 后面设置训练算法的yml配置文件
# -o 配置可选参数
# Global.pretrained_model 参数设置待转换的训练模型地址,不用添加文件后缀 .pdmodel,.pdopt或.pdparams。
# Global.save_inference_dir 参数设置转换的模型将保存的地址。
python3.7 tools/export_model.py -c ppcls/configs/ImageNet/ResNet/ResNet50_vd.yaml -o Global.pretrained_model=./cls_pretrain/ResNet50_vd_pretrained -o Global.save_inference_dir=./deploy/models/class_ResNet50_vd_ImageNet_infer
转换成功后,在目录下有三个文件:
├── class_ResNet50_vd_ImageNet_infer
│ ├── inference.pdiparams # 识别 inference 模型的参数文件
│ ├── inference.pdiparams.info # 识别 inference 模型的参数信息,可忽略
│ └── inference.pdmodel # 识别 inference 模型的 program 文件
二、主体检测模型推理
下面介绍主体检测模型推理,以下命令请进入 PaddleClas 的 deploy 目录执行:
cd deploy
使用 PaddleClas 提供的主体检测 inference 模型进行推理,可以执行:
mkdir -p models
cd models
# 下载通用检测inference模型并解压
wget https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/rec/models/inference/ppyolov2_r50vd_dcn_mainbody_v1.0_infer.tar && tar -xf ppyolov2_r50vd_dcn_mainbody_v1.0_infer.tar
cd ..
# 用下载的inference模型进行预测
python3.7 python/predict_det.py -c configs/inference_det.yaml
输入的图像如下所示。
最终输出结果如下:
[{'class_id': 0, 'score': 0.4762245, 'bbox': array([305.55115, 226.05322, 776.61084, 930.42395], dtype=float32), 'label_name': 'foreground'}]
检测的可视化结果如下:
如果想要修改图像,可以在 configs/inference_det.yaml
中,修改 infer_imgs 的值,或使用 -o Global.infer_imgs
修改,例如,要使用 images/anmuxi.jpg
可以运行:
python3.7 python/predict_det.py -c configs/inference_det.yaml -o Global.infer_imgs=images/anmuxi.jpg
如果想使用 CPU 进行预测,可以将配置文件中 use_gpu
选项设置为 False
,或者执行命令:
python3.7 python/predict_det.py -c configs/inference_det.yaml -o Global.use_gpu=False
三、特征提取模型推理
下面以商品特征提取为例,介绍特征提取模型推理。以下命令请进入 PaddleClas 的 deploy 目录执行:
cd deploy
使用 PaddleClas 提供的商品特征提取 inference 模型进行推理,可以执行:
mkdir -p models
cd models
# 下载商品特征提取 inference 模型并解压
wget https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/rec/models/inference/product_ResNet50_vd_aliproduct_v1.0_infer.tar && tar -xf product_ResNet50_vd_aliproduct_v1.0_infer.tar
cd ..
# 用下载的 inference 模型进行预测
python3.7 python/predict_rec.py -c configs/inference_rec.yaml
预测可以得到一个 512 特征向量,直接在命令行输出显示。
如果想要修改图像,可以在 configs/inference_det.yaml
中,修改 infer_imgs
的值,或使用 -o Global.infer_imgs
修改,例如,要使用 images/anmuxi.jpg
可以运行:
python3.7 python/predict_rec.py -c configs/inference_rec.yaml -o Global.infer_imgs=images/anmuxi.jpg
如果想使用 CPU 进行预测,可以将配置文件中 use_gpu
选项设置为 False
,或者执行命令:
python3.7 python/predict_rec.py -c configs/inference_rec.yaml -o Global.use_gpu=False
四、主体检测、特征提取和向量检索串联
4.1 环境配置
-
安装:请先参考 快速安装 配置PaddleClas运行环境。(这一部分单独会写一章节进行环境准备)
-
进入
deploy
运行目录。本部分所有内容与命令均需要在deploy
目录下运行,可以通过下面的命令进入deploy
目录。cd deploy
4.2 图像识别体验
这一部分直接参照另一部分内容即可:paddleclas 学习笔记:图像识别
五、图像分类模型推理
下面介绍图像分类模型推理,以下命令请进入 PaddleClas 的 deploy 目录执行:
cd deploy
使用 PaddleClas 提供的商品特征提取 inference 模型进行推理,首先请下载预训练模型并导出 inference 模型,具体参见上面 1.2 分类模型转 inference 模型。
导出 inference 模型后,可以使用下面的命令预测:
python3.7 python/predict_cls.py -c configs/inference_cls.yaml
如果想要修改图像,可以在 configs/inference_det.yaml
中,修改 infer_imgs
的值,或使用 -o Global.infer_imgs
修改,例如,要使用 images/ILSVRC2012_val_00010010.jpeg
可以运行:
python3.7 python/predict_cls.py -c configs/inference_cls.yaml -o Global.infer_imgs=images/ILSVRC2012_val_00010010.jpeg
如果想使用 CPU 进行预测,可以将配置文件中 use_gpu 选项设置为 False,或者执行命令:
python3.7 python/predict_cls.py -c configs/inference_cls.yaml -o Global.use_gpu=False