提交 b889101f 编写于 作者: weixin_46524038's avatar weixin_46524038 提交者: cuicheng01

add docs and config

上级 373a026a
Global:
infer_imgs: "./images/practical/watermark_exists/watermark_example.png"
inference_model_dir: "./models/EfficientNetB3_watermark_infer"
batch_size: 1
use_gpu: True
enable_mkldnn: False
cpu_num_threads: 10
enable_benchmark: True
use_fp16: False
ir_optim: True
use_tensorrt: False
gpu_mem: 8000
enable_profile: False
PreProcess:
transform_ops:
- ResizeImage:
resize_short: 256
- CropImage:
size: 224
- NormalizeImage:
scale: 0.00392157
mean: [0.485, 0.456, 0.406]
std: [0.229, 0.224, 0.225]
order: ''
channel_num: 3
- ToCHWImage:
PostProcess:
main_indicator: ThreshOutput
ThreshOutput:
threshold: 0.5
label_0: contains_watermark
label_1: no_watermark
SavePreLabel:
save_dir: ./pre_label/
# 有水印/无水印分类模型
------
## 目录
- [1. 模型和应用场景介绍](#1)
- [2. 模型快速体验](#2)
- [2.1 安装 paddlepaddle](#2.1)
- [2.2 安装 paddleclas](#2.2)
- [3. 模型预测](#3)
- [3.1 环境配置](#3.1)
- [3.2 模型预测](#3.2)
- [3.2.1 基于训练引擎预测](#3.2.1)
- [3.2.2 基于推理引擎预测](#3.2.2)
<a name="1"></a>
## 1. 模型和应用场景介绍
该案例提供了用户使用 PaddleClas 的基于 EfficientNetB3 网络构建有水印/无水印(这里的水印包括数字照片上留下的一些logo、信息、网址等)的分类模型。该模型可以广泛应用于审核场景、海量数据过滤场景等。具体有无水印的图片对比如下:
<center><img src='https://user-images.githubusercontent.com/94225063/212879681-f115d6f8-85c8-4cda-a07e-5f5b00d8236a.jpeg' width=800></center>
可以看到,左图中有水印,右图中无水印。
<a name="2"></a>
## 2. 模型快速体验
<a name="2.1"></a>
### 2.1 安装 paddlepaddle
- 您的机器安装的是 CUDA9 或 CUDA10,请运行以下命令安装
```bash
python3 -m pip install paddlepaddle-gpu -i https://mirror.baidu.com/pypi/simple
```
- 您的机器是 CPU,请运行以下命令安装
```bash
python3 -m pip install paddlepaddle -i https://mirror.baidu.com/pypi/simple
```
更多的版本需求,请参照[飞桨官网安装文档](https://www.paddlepaddle.org.cn/install/quick)中的说明进行操作。
<a name="2.2"></a>
### 2.2 安装 paddleclas
使用如下命令快速安装 paddleclas:
```
pip3 install paddleclas
```
<a name="3"></a>
## 3. 模型预测
<a name="3.1"></a>
### 3.1 环境配置
* 安装:请先参考文档[环境准备](../../installation.md) 配置 PaddleClas 运行环境。
<a name="3.2"></a>
### 3.2 模型预测
<a name="3.2.1"></a>
### 3.2.1 基于训练引擎预测
模型训练完成之后,可以加载训练得到的预训练模型,进行模型预测。在模型库的 `tools/infer.py` 中提供了完整的示例,只需执行下述命令即可完成模型预测:
```python
python3 tools/infer.py \
-c ./ppcls/configs/practical_models/EfficientNetB3_watermark.yaml \
-o Arch.pretrained=True
```
输出结果如下:
```
[{'class_ids': [0], 'scores': [0.9653296619653702], 'label_names': ['contains_watermark'], 'file_name': 'deploy/images/practical/watermark_exists/watermark_example.png'}]
```
**备注:**
* 这里`-o Arch.pretrained=True"` 指定了使用训练好的预训练权重,如果指定其他权重,只需替换对应的路径即可。
* 默认是对 `deploy/images/practical/watermark_exists/watermark_example.png` 进行预测,此处也可以通过增加字段 `-o Infer.infer_imgs=xxx` 对其他图片预测。
* 二分类默认的阈值为0.5, 如果需要指定阈值,可以重写 `Infer.PostProcess.threshold`
<a name="3.2.2"></a>
### 3.2.2 基于推理引擎预测
Paddle Inference 是飞桨的原生推理库, 作用于服务器端和云端,提供高性能的推理能力。相比于直接基于预训练模型进行预测,Paddle Inference可使用 MKLDNN、CUDNN、TensorRT 进行预测加速,从而实现更优的推理性能。更多关于 Paddle Inference 推理引擎的介绍,可以参考 [Paddle Inference官网教程](https://www.paddlepaddle.org.cn/documentation/docs/zh/guides/infer/inference/inference_cn.html)
首先,我们提供了将权重和模型转换的脚本,执行该脚本可以得到对应的 inference 模型:
```bash
python3 tools/export_model.py \
-c ./ppcls/configs/practical_models/EfficientNetB3_watermark.yaml \
-o Arch.pretrained=True \
-o Global.save_inference_dir=deploy/models/EfficientNetB3_watermark_infer
```
执行完该脚本后会在 `deploy/models/` 下生成 `EfficientNetB3_watermark_infer` 文件夹,`models` 文件夹下应有如下文件结构:
```
├── EfficientNetB3_watermark_infer
│ ├── inference.pdiparams
│ ├── inference.pdiparams.info
│ └── inference.pdmodel
```
当然,也可以选择直接下载的方式:
```
cd deploy/models
# 下载 inference 模型并解压
wget https://paddleclas.bj.bcebos.com/models/practical/inference/EfficientNetB3_watermark_infer.tar && tar -xf EfficientNetB3_watermark_infer.tar
```
解压完毕后,`models` 文件夹下应有如下文件结构:
```
├── EfficientNetB3_watermark_infer
│ ├── inference.pdiparams
│ ├── inference.pdiparams.info
│ └── inference.pdmodel
```
得到 inference 模型之后基于推理引擎进行预测:
返回 `deploy` 目录:
```
cd ../
```
运行下面的命令,对图像 `./images/practical/watermark_exists/watermark_example.png` 进行有水印/无水印分类。
```shell
# 使用下面的命令使用 GPU 进行预测
python3.7 python/predict_cls.py -c ./configs/practical_models/watermark_exists/inference_watermark_exists.yaml
# 使用下面的命令使用 CPU 进行预测
python3.7 python/predict_cls.py -c ./configs/practical_models/watermark_exists/inference_watermark_exists.yaml -o Global.use_gpu=False
```
输出结果如下。
```
watermark_example.png: class id(s): [0], score(s): [0.97], label_name(s): ['contains_watermark']
```
**备注:** 二分类默认的阈值为0.5, 如果需要指定阈值,可以重写 `Infer.PostProcess.threshold`
...@@ -4,7 +4,7 @@ from ..model_zoo.efficientnet import EfficientNetB3, _load_pretrained ...@@ -4,7 +4,7 @@ from ..model_zoo.efficientnet import EfficientNetB3, _load_pretrained
MODEL_URLS = { MODEL_URLS = {
"EfficientNetB3_watermark": "EfficientNetB3_watermark":
"https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/EfficientNetB3_watermark_pretrained.pdparams" "https://paddleclas.bj.bcebos.com/models/practical/pretrained/EfficientNetB3_watermark_pretrained.pdparams"
} }
__all__ = list(MODEL_URLS.keys()) __all__ = list(MODEL_URLS.keys())
...@@ -21,7 +21,7 @@ def EfficientNetB3_watermark(padding_type='DYNAMIC', ...@@ -21,7 +21,7 @@ def EfficientNetB3_watermark(padding_type='DYNAMIC',
# 1536 is the orginal in_features # 1536 is the orginal in_features
nn.Linear( nn.Linear(
in_features=1536, out_features=625), in_features=1536, out_features=625),
nn.ReLU(), # ReLu to be the activation function nn.ReLU(),
nn.Dropout(p=0.3), nn.Dropout(p=0.3),
nn.Linear( nn.Linear(
in_features=625, out_features=256), in_features=625, out_features=256),
......
# global configs
Global:
checkpoints: null
pretrained_model: null
output_dir: ./output/
device: gpu
save_interval: 1
eval_during_train: True
eval_interval: 1
epochs: 50
print_batch_step: 10
use_visualdl: False
# used for static mode and model export
image_shape: [3, 224, 224]
save_inference_dir: ./inference
# training model under @to_static
to_static: False
use_dali: False
# model architecture
Arch:
name: EfficientNetB3_watermark
class_num: 2
# data loader for train and eval
DataLoader:
Train:
dataset:
name: ImageNetDataset
image_root: ./dataset/
cls_label_path: ./dataset/train_list.txt
transform_ops:
- DecodeImage:
to_rgb: True
channel_first: False
- ResizeImage:
size: 224
- RandFlipImage:
flip_code: 1
- NormalizeImage:
scale: 1.0/255.0
mean: [0.485, 0.456, 0.406]
std: [0.229, 0.224, 0.225]
order: ''
sampler:
name: DistributedBatchSampler
batch_size: 128
drop_last: False
shuffle: True
loader:
num_workers: 4
use_shared_memory: False
Infer:
infer_imgs: deploy/images/practical/watermark_exists/watermark_example.png
batch_size: 1
transforms:
- DecodeImage:
to_rgb: True
channel_first: False
- ResizeImage:
resize_short: 256
- CropImage:
size: 224
- NormalizeImage:
scale: 1.0/255.0
mean: [0.485, 0.456, 0.406]
std: [0.229, 0.224, 0.225]
order: ''
- ToCHWImage:
PostProcess:
name: ThreshOutput
threshold: 0.5
label_0: contains_watermark
label_1: no_watermark
Metric:
Eval:
- TprAtFpr:
max_fpr: 0.01
- TopkAcc:
topk: [1, 2]
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册