inference.md 8.8 KB
Newer Older
W
weishengyu 已提交
1 2 3 4 5 6 7 8

# 基于Python预测引擎推理

inference 模型(`paddle.jit.save`保存的模型)
一般是模型训练,把模型结构和模型参数保存在文件中的固化模型,多用于预测部署场景。
训练过程中保存的模型是checkpoints模型,保存的只有模型的参数,多用于恢复训练等。
与checkpoints模型相比,inference 模型会额外保存模型的结构信息,在预测部署、加速推理上性能优越,灵活方便,适合于实际系统集成。

W
weishengyu 已提交
9
接下来首先介绍如何将训练的模型转换成inference模型,然后依次介绍主体检测模型、特征提取模型在CPU、GPU上的预测方法,
W
dbg  
weishengyu 已提交
10
之后介绍主体检测、特征提取、特征检索串联的预测方法,最后介绍图像分类的预测方法。
W
weishengyu 已提交
11 12 13


- [一、训练模型转inference模型](#训练模型转inference模型)
W
weishengyu 已提交
14 15
    - [1.1 特征提取模型转inference模型](#特征提取模型转inference模型)  
    - [1.2 分类模型转inference模型](#分类模型转inference模型)
W
weishengyu 已提交
16 17 18 19 20 21 22 23 24 25 26 27 28 29

- [二、主体检测模型推理](#主体检测模型推理)

- [三、特征提取模型推理](#特征提取模型推理)

- [四、主体检测、特征提取和向量检索串联](#主体检测、特征提取和向量检索串联)

- [五、图像分类模型推理](#图像分类模型推理)


<a name="训练模型转inference模型"></a>
## 一、训练模型转inference模型

<a name="特征提取模型转inference模型"></a>
W
weishengyu 已提交
30
### 1.1 特征提取模型转inference模型
W
weishengyu 已提交
31 32 33 34 35 36 37 38 39 40 41 42 43 44
以下命令请在PaddleClas的根目录执行。以商品识别特征提取模型模型为例,首先下载预训练模型:

```shell script
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模型只需要运行如下命令:
``` shell script
# -c 后面设置训练算法的yml配置文件
# -o 配置可选参数
# Global.pretrained_model 参数设置待转换的训练模型地址,不用添加文件后缀 .pdmodel,.pdopt或.pdparams。
# Global.save_inference_dir参数设置转换的模型将保存的地址。

W
dbg  
weishengyu 已提交
45
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
W
weishengyu 已提交
46 47 48 49 50 51 52 53 54 55 56 57
```

这里也可以使用自己训练的模型。转inference模型时,使用的配置文件和训练时使用的配置文件相同。另外,还需要设置配置文件中的`Global.pretrained_model`参数,其指向训练中保存的模型参数文件。
转换成功后,在模型保存目录下有三个文件:
``` 
├── product_ResNet50_vd_aliproduct_v1.0_infer
│   ├── inference.pdiparams         # 识别inference模型的参数文件
│   ├── inference.pdiparams.info    # 识别inference模型的参数信息,可忽略
│   └── inference.pdmodel           # 识别inference模型的program文件
```

<a name="分类模型转inference模型"></a>
W
weishengyu 已提交
58
### 1.2 分类模型转inference模型
W
weishengyu 已提交
59 60 61

下载预训练模型:
``` shell script
W
dbg  
weishengyu 已提交
62
wget -P ./cls_pretrain/ https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/ResNet50_vd_pretrained.pdparams
W
weishengyu 已提交
63 64 65 66 67 68 69 70 71 72
```

上述模型是使用ResNet50_vd在ImageNet上训练的模型,使用的配置文件为`ppcls/configs/ImageNet/ResNet/ResNet50_vd.yaml`
转inference模型与特征提取模型的方式相同,如下:
```
# -c 后面设置训练算法的yml配置文件
# -o 配置可选参数
# Global.pretrained_model 参数设置待转换的训练模型地址,不用添加文件后缀 .pdmodel,.pdopt或.pdparams。
# Global.save_inference_dir参数设置转换的模型将保存的地址。

W
dbg  
weishengyu 已提交
73
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
W
weishengyu 已提交
74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106
```

转换成功后,在目录下有三个文件:
```
├── class_ResNet50_vd_ImageNet_infer
│   ├── inference.pdiparams         # 识别inference模型的参数文件
│   ├── inference.pdiparams.info    # 识别inference模型的参数信息,可忽略
│   └── inference.pdmodel           # 识别inference模型的program文件
```

<a name="主体检测模型推理"></a>
## 二、主体检测模型推理

下面介绍主体检测模型推理,以下命令请进入PaddleClas的deploy目录执行:
```shell script
cd deploy
```
使用PaddleClas提供的主体检测Inference模型进行推理,可以执行:

```shell script
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
```
输入的图像如下所示。
[](../images/recognition/product_demo/wangzai.jpg)
最终输出结果如下:
```text
W
dbg  
weishengyu 已提交
107
[{'class_id': 0, 'score': 0.4762245, 'bbox': array([305.55115, 226.05322, 776.61084, 930.42395], dtype=float32), 'label_name': 'foreground'}]
W
weishengyu 已提交
108 109 110 111
```
检测的可视化结果如下:
[](../images/recognition/product_demo/wangzai_det_result.jpg)

W
weishengyu 已提交
112
如果想要修改图像,可以在`configs/inference_det.yaml`中,修改infer_imgs的值,或使用-o Global.infer_imgs修改,
W
weishengyu 已提交
113 114 115 116 117 118
例如,要使用`images/anmuxi.jpg`可以运行:

```shell script
python3.7 python/predict_det.py -c configs/inference_det.yaml -o Global.infer_imgs=images/anmuxi.jpg
```

W
weishengyu 已提交
119 120
如果想使用CPU进行预测,可以将配置文件中`use_gpu`选项设置为`False`,或者执行命令:
```shell script
W
dbg  
weishengyu 已提交
121
python3.7 python/predict_det.py -c configs/inference_det.yaml  -o Global.use_gpu=False
W
weishengyu 已提交
122 123
```

W
dbg  
weishengyu 已提交
124
<a name="特征提取模型推理"></a>
W
weishengyu 已提交
125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143
## 三、特征提取模型推理

下面以商品特征提取为例,介绍特征提取模型推理。其他应用可以参考图像识别快速开始中的[模型地址](./tutorials/quick_start_recognition.md#2-%E5%9B%BE%E5%83%8F%E8%AF%86%E5%88%AB%E4%BD%93%E9%AA%8C)
将链接替换为相应模型的链接。以下命令请进入PaddleClas的deploy目录执行:
```shell script
cd deploy
```
使用PaddleClas提供的商品特征提取Inference模型进行推理,可以执行:

```shell script
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
```
W
dbg  
weishengyu 已提交
144
预测可以得到一个512特征向量,直接在命令行输出显示。
W
weishengyu 已提交
145 146 147 148 149 150 151 152 153 154

如果想要修改图像,可以在configs/inference_det.yaml中,修改infer_imgs的值,或使用-o Global.infer_imgs修改,
例如,要使用`images/anmuxi.jpg`可以运行:

```shell script
python3.7 python/predict_rec.py -c configs/inference_rec.yaml -o Global.infer_imgs=images/anmuxi.jpg
```

如果想使用CPU进行预测,可以将配置文件中use_gpu选项设置为False,或者执行命令:
```
W
dbg  
weishengyu 已提交
155
python3.7 python/predict_rec.py -c configs/inference_rec.yaml  -o Global.use_gpu=False
W
weishengyu 已提交
156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172
```

<a name="主体检测、特征提取和向量检索串联"></a>
## 四、主体检测、特征提取和向量检索串联
主体检测、特征提取和向量检索的串联预测,可以参考[图像识别快速体验](./tutorials/quick_start_recognition.md)

<a name="图像分类模型推理"></a>
## 五、图像分类模型推理

下面介绍图像分类模型推理,以下命令请进入PaddleClas的deploy目录执行:
```shell script
cd deploy
```
使用PaddleClas提供的商品特征提取Inference模型进行推理,首先请下载预训练模型并导出inference模型,具体参见[2. 分类模型转inference模型](#分类模型转inference模型)

导出inference模型后,可以使用下面的命令预测:
```shell script
W
dbg  
weishengyu 已提交
173
python3.7 python/predict_cls.py -c configs/inference_cls.yaml
W
weishengyu 已提交
174 175 176 177 178 179
```

如果想要修改图像,可以在configs/inference_det.yaml中,修改infer_imgs的值,或使用-o Global.infer_imgs修改,
例如,要使用`images/ILSVRC2012_val_00010010.jpeg`可以运行:

```shell script
W
dbg  
weishengyu 已提交
180
python3.7 python/predict_cls.py -c configs/inference_cls.yaml -o Global.infer_imgs=images/ILSVRC2012_val_00010010.jpeg
W
weishengyu 已提交
181 182 183 184 185

```

如果想使用CPU进行预测,可以将配置文件中use_gpu选项设置为False,或者执行命令:
```
W
dbg  
weishengyu 已提交
186
python3.7 python/predict_cls.py -c configs/inference_cls.yaml  -o Global.use_gpu=False
W
weishengyu 已提交
187 188
```