PaddleClas/docs/zh_CN/inference.md

8.8 KiB
Raw Blame History

基于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

四、主体检测、特征提取和向量检索串联

主体检测、特征提取和向量检索的串联预测,可以参考图像识别快速体验

五、图像分类模型推理

下面介绍图像分类模型推理以下命令请进入PaddleClas的deploy目录执行

cd deploy

使用PaddleClas提供的商品特征提取Inference模型进行推理首先请下载预训练模型并导出inference模型具体参见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