提交 c87a12b8 编写于 作者: F FlyingQianMM

turnoff ir_optim on arm platform

...@@ -3,4 +3,4 @@ name: 4. PaddleX GUI使用问题 ...@@ -3,4 +3,4 @@ name: 4. PaddleX GUI使用问题
about: Paddle GUI客户端使用问题 about: Paddle GUI客户端使用问题
--- ---
PaddleX GUI: https://www.paddlepaddle.org.cn/paddle/paddleX PaddleX GUI: https://www.paddlepaddle.org.cn/paddle/paddleX (请在ISSUE内容中保留此行内容)
...@@ -65,7 +65,11 @@ void Model::create_predictor(const std::string& model_dir, ...@@ -65,7 +65,11 @@ void Model::create_predictor(const std::string& model_dir,
config.SwitchUseFeedFetchOps(false); config.SwitchUseFeedFetchOps(false);
config.SwitchSpecifyInputNames(true); config.SwitchSpecifyInputNames(true);
// 开启图优化 // 开启图优化
#if defined(__arm__) || defined(__aarch64__)
config.SwitchIrOptim(false);
#else
config.SwitchIrOptim(use_ir_optim); config.SwitchIrOptim(use_ir_optim);
#endif
// 开启内存优化 // 开启内存优化
config.EnableMemoryOptim(); config.EnableMemoryOptim();
if (use_trt) { if (use_trt) {
......
# 轻量级服务化部署
## 简介
借助`PaddleHub-Serving`,可以将`PaddleX``Inference Model`进行快速部署,以提供在线预测的能力。
关于`PaddleHub-Serving`的更多信息,可参照[PaddleHub-Serving](https://github.com/PaddlePaddle/PaddleHub/blob/develop/docs/tutorial/serving.md)
**注意:使用此方式部署,需确保自己Python环境中PaddleHub的版本高于1.8.0, 可在命令终端输入`pip show paddlehub`确认版本信息。**
下面,我们按照步骤,实现将一个图像分类模型[MobileNetV3_small_ssld](https://bj.bcebos.com/paddlex/models/mobilenetv3_small_ssld_imagenet.tar.gz)转换成`PaddleHub`的预训练模型,并利用`PaddleHub-Serving`实现一键部署。
# 模型部署
## 1 部署模型准备
部署模型的格式均为目录下包含`__model__``__params__``model.yml`三个文件,如若不然,则参照[部署模型导出文档](./export_model.md)进行导出。
## 2 模型转换
首先,我们将`PaddleX``Inference Model`转换成`PaddleHub`的预训练模型,使用命令`hub convert`即可一键转换,对此命令的说明如下:
```shell
$ hub convert --model_dir XXXX \
--module_name XXXX \
--module_version XXXX \
--output_dir XXXX
```
**参数**
|参数|用途|
|-|-|
|--model_dir/-m|`PaddleX Inference Model`所在的目录|
|--module_name/-n|生成预训练模型的名称|
|--module_version/-v|生成预训练模型的版本,默认为`1.0.0`|
|--output_dir/-o|生成预训练模型的存放位置,默认为`{module_name}_{timestamp}`|
因此,我们仅需要一行命令即可完成预训练模型的转换。
```shell
hub convert --model_dir mobilenetv3_small_ssld_imagenet_hub --module_name mobilenetv3_small_ssld_imagenet_hub
```
转换成功后会打印提示信息,如下:
```shell
$ The converted module is stored in `MobileNetV3_small_ssld_hub_1596077881.868501`.
```
等待生成成功的提示后,我们就在输出目录中得到了一个`PaddleHub`的一个预训练模型。
## 3 模型安装
在模型转换一步中,我们得到了一个`.tar.gz`格式的预训练模型压缩包,在进行部署之前需要先安装到本机,使用命令`hub install`即可一键安装,对此命令的说明如下:
```shell
$ hub install ${MODULE}
```
其中${MODULE}为要安装的预训练模型文件路径。
因此,我们使用`hub install`命令安装:
```shell
hub install MobileNetV3_small_ssld_hub_1596077881.868501/mobilenetv3_small_ssld_imagenet_hub.tar.gz
```
安装成功后会打印提示信息,如下:
```shell
$ Successfully installed mobilenetv3_small_ssld_imagenet_hub
```
## 4 模型部署
下面,我们只需要使用`hub serving`命令即可完成模型的一键部署,对此命令的说明如下:
```shell
$ hub serving start --modules/-m [Module1==Version1, Module2==Version2, ...] \
--port/-p XXXX
--config/-c XXXX
```
**参数**
|参数|用途|
|-|-|
|--modules/-m|PaddleHub Serving预安装模型,以多个Module==Version键值对的形式列出<br>*`当不指定Version时,默认选择最新版本`*|
|--port/-p|服务端口,默认为8866|
|--config/-c|使用配置文件配置模型|
因此,我们仅需要一行代码即可完成模型的部署,如下:
```shell
$ hub serving start -m mobilenetv3_small_ssld_imagenet_hub
```
等待模型加载后,此预训练模型就已经部署在机器上了。
我们还可以使用配置文件对部署的模型进行更多配置,配置文件格式如下:
```json
{
"modules_info": {
"mobilenetv3_small_ssld_imagenet_hub": {
"init_args": {
"version": "1.0.0"
},
"predict_args": {
"batch_size": 1,
"use_gpu": false
}
}
},
"port": 8866
}
```
|参数|用途|
|-|-|
|modules_info|PaddleHub Serving预安装模型,以字典列表形式列出,key为模型名称。其中:<br>`init_args`为模型加载时输入的参数,等同于`paddlehub.Module(**init_args)`<br>`predict_args`为模型预测时输入的参数,以`mobilenetv3_small_ssld_imagenet_hub`为例,等同于`mobilenetv3_small_ssld_imagenet_hub.batch_predict(**predict_args)`
|port|服务端口,默认为8866|
## 5 测试
在第二步模型安装的同时,会生成一个客户端请求示例,存放在模型安装目录,默认为`${HUB_HOME}/.paddlehub/modules`,对于此例,我们可以在`~/.paddlehub/modules/mobilenetv3_small_ssld_imagenet_hub`找到此客户端示例`serving_client_demo.py`,代码如下:
```python
# coding: utf8
import requests
import json
import cv2
import base64
def cv2_to_base64(image):
data = cv2.imencode('.jpg', image)[1]
return base64.b64encode(data.tostring()).decode('utf8')
if __name__ == '__main__':
# 获取图片的base64编码格式
img1 = cv2_to_base64(cv2.imread("IMAGE_PATH1"))
img2 = cv2_to_base64(cv2.imread("IMAGE_PATH2"))
data = {'images': [img1, img2]}
# 指定content-type
headers = {"Content-type": "application/json"}
# 发送HTTP请求
url = "http://127.0.0.1:8866/predict/mobilenetv3_small_ssld_imagenet_hub"
r = requests.post(url=url, headers=headers, data=json.dumps(data))
# 打印预测结果
print(r.json()["results"])
```
使用的测试图片如下:
![](../train/images/test.jpg)
将代码中的`IMAGE_PATH1`改成想要进行预测的图片路径后,在命令行执行:
```python
python ~/.paddlehub/module/MobileNetV3_small_ssld_hub/serving_client_demo.py
```
即可收到预测结果,如下:
```shell
[[{'category': 'envelope', 'category_id': 549, 'score': 0.2141510397195816}]]
````
到此,我们就完成了`PaddleX`模型的一键部署。
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
:caption: 文档目录: :caption: 文档目录:
export_model.md export_model.md
hub_serving.md
server/index server/index
nvidia-jetson.md nvidia-jetson.md
paddlelite/index paddlelite/index
# Nvidia Jetson开发板 # Nvidia Jetson开发板
## 说明 ## 说明
本文档在用Jetpack 4.4刷机的`Linux`平台上使用`GCC 7.4`测试过,如果需要使用更高G++版本编译使用,则需要重新编译Paddle预测库,请参考: [Nvidia Jetson嵌入式硬件预测库源码编译](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/advanced_guide/inference_deployment/inference/build_and_install_lib_cn.html#id12) 本文档在基于Nvidia Jetpack 4.4的`Linux`平台上使用`GCC 7.4`测试过,如需使用不同G++版本,则需要重新编译Paddle预测库,请参考: [NVIDIA Jetson嵌入式硬件预测库源码编译](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/advanced_guide/inference_deployment/inference/build_and_install_lib_cn.html#id12)
## 前置条件 ## 前置条件
* G++ 7.4 * G++ 7.4
* CUDA 9.0 / CUDA 10.0, CUDNN 7+ (仅在使用GPU版本的预测库时需要) * CUDA 10.0 / CUDNN 8 (仅在使用GPU版本的预测库时需要)
* CMake 3.0+ * CMake 3.0+
请确保系统已经安装好上述基本软件,**下面所有示例以工作目录 `/root/projects/`演示** 请确保系统已经安装好上述基本软件,**下面所有示例以工作目录 `/root/projects/`演示**
......
...@@ -51,7 +51,7 @@ paddlex-encryption ...@@ -51,7 +51,7 @@ paddlex-encryption
| |
├── lib # libpmodel-encrypt.so和libpmodel-decrypt.so动态库 ├── lib # libpmodel-encrypt.so和libpmodel-decrypt.so动态库
| |
└── tool # paddlex_encrypt_tool └── tool # paddle_encrypt_tool
``` ```
Windows加密工具包含内容为: Windows加密工具包含内容为:
...@@ -61,7 +61,7 @@ paddlex-encryption ...@@ -61,7 +61,7 @@ paddlex-encryption
| |
├── lib # pmodel-encrypt.dll和pmodel-decrypt.dll动态库 pmodel-encrypt.lib和pmodel-encrypt.lib静态库 ├── lib # pmodel-encrypt.dll和pmodel-decrypt.dll动态库 pmodel-encrypt.lib和pmodel-encrypt.lib静态库
| |
└── tool # paddlex_encrypt_tool.exe 模型加密工具 └── tool # paddle_encrypt_tool.exe 模型加密工具
``` ```
### 1.3 加密PaddleX模型 ### 1.3 加密PaddleX模型
...@@ -71,13 +71,13 @@ paddlex-encryption ...@@ -71,13 +71,13 @@ paddlex-encryption
Linux平台: Linux平台:
``` ```
# 假设模型在/root/projects下 # 假设模型在/root/projects下
./paddlex-encryption/tool/paddlex_encrypt_tool -model_dir /root/projects/paddlex_inference_model -save_dir /root/projects/paddlex_encrypted_model ./paddlex-encryption/tool/paddle_encrypt_tool -model_dir /root/projects/paddlex_inference_model -save_dir /root/projects/paddlex_encrypted_model
``` ```
Windows平台: Windows平台:
``` ```
# 假设模型在D:/projects下 # 假设模型在D:/projects下
.\paddlex-encryption\tool\paddlex_encrypt_tool.exe -model_dir D:\projects\paddlex_inference_model -save_dir D:\projects\paddlex_encrypted_model .\paddlex-encryption\tool\paddle_encrypt_tool.exe -model_dir D:\projects\paddlex_inference_model -save_dir D:\projects\paddlex_encrypted_model
``` ```
`-model_dir`用于指定inference模型路径(参考[导出inference模型](../export_model.md)将模型导出为inference格式模型),可使用[导出小度熊识别模型](../export_model.md)中导出的`inference_model`。加密完成后,加密过的模型会保存至指定的`-save_dir`下,包含`__model__.encrypted``__params__.encrypted``model.yml`三个文件,同时生成密钥信息,命令输出如下图所示,密钥为`kLAl1qOs5uRbFt0/RrIDTZW2+tOf5bzvUIaHGF8lJ1c=` `-model_dir`用于指定inference模型路径(参考[导出inference模型](../export_model.md)将模型导出为inference格式模型),可使用[导出小度熊识别模型](../export_model.md)中导出的`inference_model`。加密完成后,加密过的模型会保存至指定的`-save_dir`下,包含`__model__.encrypted``__params__.encrypted``model.yml`三个文件,同时生成密钥信息,命令输出如下图所示,密钥为`kLAl1qOs5uRbFt0/RrIDTZW2+tOf5bzvUIaHGF8lJ1c=`
......
...@@ -139,8 +139,6 @@ step 4. 编译成功后,可执行文件在`out\build\x64-Release`目录下, ...@@ -139,8 +139,6 @@ step 4. 编译成功后,可执行文件在`out\build\x64-Release`目录下,
| use_gpu | 是否使用 GPU 预测, 支持值为0或1(默认值为0)| | use_gpu | 是否使用 GPU 预测, 支持值为0或1(默认值为0)|
| gpu_id | GPU 设备ID, 默认值为0 | | gpu_id | GPU 设备ID, 默认值为0 |
| save_dir | 保存可视化结果的路径, 默认值为"output"| | save_dir | 保存可视化结果的路径, 默认值为"output"|
| det_key | 检测模型加密过程中产生的密钥信息,默认值为""表示加载的是未加密的检测模型 |
| seg_key | 分割模型加密过程中产生的密钥信息,默认值为""表示加载的是未加密的分割模型 |
| seg_batch_size | 分割的批量大小,默认为2 | | seg_batch_size | 分割的批量大小,默认为2 |
| thread_num | 分割预测的线程数,默认为cpu处理器个数 | | thread_num | 分割预测的线程数,默认为cpu处理器个数 |
| use_camera | 是否使用摄像头采集图片,支持值为0或1(默认值为0) | | use_camera | 是否使用摄像头采集图片,支持值为0或1(默认值为0) |
...@@ -160,6 +158,13 @@ step 5. 推理预测: ...@@ -160,6 +158,13 @@ step 5. 推理预测:
``` ```
* 使用未加密的模型对图像列表做预测 * 使用未加密的模型对图像列表做预测
图像列表image_list.txt内容的格式如下,因绝对路径不同,暂未提供该文件,用户可根据实际情况自行生成:
```
\path\to\images\1.jpg
\path\to\images\2.jpg
...
\path\to\images\n.jpg
```
```shell ```shell
.\paddlex_inference\meter_reader.exe --det_model_dir=\path\to\det_inference_model --seg_model_dir=\path\to\seg_inference_model --image_list=\path\to\meter_test\image_list.txt --use_gpu=1 --use_erode=1 --save_dir=output .\paddlex_inference\meter_reader.exe --det_model_dir=\path\to\det_inference_model --seg_model_dir=\path\to\seg_inference_model --image_list=\path\to\meter_test\image_list.txt --use_gpu=1 --use_erode=1 --save_dir=output
...@@ -223,7 +228,13 @@ step 5. 推理预测: ...@@ -223,7 +228,13 @@ step 5. 推理预测:
``` ```
* 使用未加密的模型对图像列表做预测 * 使用未加密的模型对图像列表做预测
图像列表image_list.txt内容的格式如下,因绝对路径不同,暂未提供该文件,用户可根据实际情况自行生成:
```
\path\to\images\1.jpg
\path\to\images\2.jpg
...
\path\to\images\n.jpg
```
```shell ```shell
./build/meter_reader/meter_reader --det_model_dir=/path/to/det_inference_model --seg_model_dir=/path/to/seg_inference_model --image_list=/path/to/image_list.txt --use_gpu=1 --use_erode=1 --save_dir=output ./build/meter_reader/meter_reader --det_model_dir=/path/to/det_inference_model --seg_model_dir=/path/to/seg_inference_model --image_list=/path/to/image_list.txt --use_gpu=1 --use_erode=1 --save_dir=output
``` ```
......
...@@ -13,3 +13,4 @@ PaddleX集成了PaddleClas、PaddleDetection和PaddleSeg三大CV工具套件中 ...@@ -13,3 +13,4 @@ PaddleX集成了PaddleClas、PaddleDetection和PaddleSeg三大CV工具套件中
instance_segmentation.md instance_segmentation.md
semantic_segmentation.md semantic_segmentation.md
prediction.md prediction.md
visualdl.md
# VisualDL可视化训练指标
在使用PaddleX训练模型过程中,各个训练指标和评估指标会直接输出到标准输出流,同时也可通过VisualDL对训练过程中的指标进行可视化,只需在调用`train`函数时,将`use_vdl`参数设为`True`即可,如下代码所示,
```
model = paddlex.cls.ResNet50(num_classes=1000)
model.train(num_epochs=120, train_dataset=train_dataset,
train_batch_size=32, eval_dataset=eval_dataset,
log_interval_steps=10, save_interval_epochs=10,
save_dir='./output', use_vdl=True)
```
模型在训练过程中,会在`save_dir`下生成`vdl_log`目录,通过在命令行终端执行以下命令,启动VisualDL。
```
visualdl --logdir=output/vdl_log --port=8008
```
在浏览器打开`http://0.0.0.0:8008`便可直接查看随训练迭代动态变化的各个指标(0.0.0.0表示启动VisualDL所在服务器的IP,本机使用0.0.0.0即可)。
在训练分类模型过程中,使用VisualDL进行可视化的示例图如下所示。
> 训练过程中每个Step的`Loss`和相应`Top1准确率`变化趋势:
![](../images/vdl1.jpg)
> 训练过程中每个Step的`学习率lr`和相应`Top5准确率`变化趋势:
![](../images/vdl2.jpg)
> 训练过程中,每次保存模型时,模型在验证数据集上的`Top1准确率`和`Top5准确率`:
![](../images/vdl3.jpg)
...@@ -148,8 +148,6 @@ git clone https://github.com/PaddlePaddle/PaddleX ...@@ -148,8 +148,6 @@ git clone https://github.com/PaddlePaddle/PaddleX
| use_gpu | 是否使用 GPU 预测, 支持值为0或1(默认值为0)| | use_gpu | 是否使用 GPU 预测, 支持值为0或1(默认值为0)|
| gpu_id | GPU 设备ID, 默认值为0 | | gpu_id | GPU 设备ID, 默认值为0 |
| save_dir | 保存可视化结果的路径, 默认值为"output"| | save_dir | 保存可视化结果的路径, 默认值为"output"|
| det_key | 检测模型加密过程中产生的密钥信息,默认值为""表示加载的是未加密的检测模型 |
| seg_key | 分割模型加密过程中产生的密钥信息,默认值为""表示加载的是未加密的分割模型 |
| seg_batch_size | 分割的批量大小,默认为2 | | seg_batch_size | 分割的批量大小,默认为2 |
| thread_num | 分割预测的线程数,默认为cpu处理器个数 | | thread_num | 分割预测的线程数,默认为cpu处理器个数 |
| use_camera | 是否使用摄像头采集图片,支持值为0或1(默认值为0) | | use_camera | 是否使用摄像头采集图片,支持值为0或1(默认值为0) |
...@@ -163,13 +161,20 @@ git clone https://github.com/PaddlePaddle/PaddleX ...@@ -163,13 +161,20 @@ git clone https://github.com/PaddlePaddle/PaddleX
用于部署推理的模型应为inference格式,本案例提供的预训练模型均为inference格式,如若是重新训练的模型,需参考[导出inference模型](https://paddlex.readthedocs.io/zh_CN/latest/tutorials/deploy/deploy_server/deploy_python.html#inference)将模型导出为inference格式。 用于部署推理的模型应为inference格式,本案例提供的预训练模型均为inference格式,如若是重新训练的模型,需参考[导出inference模型](https://paddlex.readthedocs.io/zh_CN/latest/tutorials/deploy/deploy_server/deploy_python.html#inference)将模型导出为inference格式。
* 使用未加密的模型对单张图片做预测 * 使用未加密的模型对单张图片做预测
```shell ```shell
.\paddlex_inference\meter_reader.exe --det_model_dir=\path\to\det_inference_model --seg_model_dir=\path\to\seg_inference_model --image=\path\to\meter_test\20190822_168.jpg --use_gpu=1 --use_erode=1 --save_dir=output .\paddlex_inference\meter_reader.exe --det_model_dir=\path\to\det_inference_model --seg_model_dir=\path\to\seg_inference_model --image=\path\to\meter_test\20190822_168.jpg --use_gpu=1 --use_erode=1 --save_dir=output
``` ```
* 使用未加密的模型对图像列表做预测 * 使用未加密的模型对图像列表做预测
图像列表image_list.txt内容的格式如下,因绝对路径不同,暂未提供该文件,用户可根据实际情况自行生成:
```
\path\to\images\1.jpg
\path\to\images\2.jpg
...
\path\to\images\n.jpg
```
```shell ```shell
.\paddlex_inference\meter_reader.exe --det_model_dir=\path\to\det_inference_model --seg_model_dir=\path\to\seg_inference_model --image_list=\path\to\meter_test\image_list.txt --use_gpu=1 --use_erode=1 --save_dir=output .\paddlex_inference\meter_reader.exe --det_model_dir=\path\to\det_inference_model --seg_model_dir=\path\to\seg_inference_model --image_list=\path\to\meter_test\image_list.txt --use_gpu=1 --use_erode=1 --save_dir=output
``` ```
...@@ -232,6 +237,13 @@ git clone https://github.com/PaddlePaddle/PaddleX ...@@ -232,6 +237,13 @@ git clone https://github.com/PaddlePaddle/PaddleX
``` ```
* 使用未加密的模型对图像列表做预测 * 使用未加密的模型对图像列表做预测
图像列表image_list.txt内容的格式如下,因绝对路径不同,暂未提供该文件,用户可根据实际情况自行生成:
```
\path\to\images\1.jpg
\path\to\images\2.jpg
...
\path\to\images\n.jpg
```
```shell ```shell
./build/meter_reader/meter_reader --det_model_dir=/path/to/det_inference_model --seg_model_dir=/path/to/seg_inference_model --image_list=/path/to/image_list.txt --use_gpu=1 --use_erode=1 --save_dir=output ./build/meter_reader/meter_reader --det_model_dir=/path/to/det_inference_model --seg_model_dir=/path/to/seg_inference_model --image_list=/path/to/image_list.txt --use_gpu=1 --use_erode=1 --save_dir=output
......
...@@ -15,6 +15,8 @@ ...@@ -15,6 +15,8 @@
from __future__ import absolute_import from __future__ import absolute_import
import copy import copy
import os.path as osp import os.path as osp
import six
import sys
import random import random
import numpy as np import numpy as np
import paddlex.utils.logging as logging import paddlex.utils.logging as logging
...@@ -48,6 +50,12 @@ class CocoDetection(VOCDetection): ...@@ -48,6 +50,12 @@ class CocoDetection(VOCDetection):
shuffle=False): shuffle=False):
from pycocotools.coco import COCO from pycocotools.coco import COCO
try:
import shapely.ops
from shapely.geometry import Polygon, MultiPolygon, GeometryCollection
except:
six.reraise(*sys.exc_info())
super(VOCDetection, self).__init__( super(VOCDetection, self).__init__(
transforms=transforms, transforms=transforms,
num_workers=num_workers, num_workers=num_workers,
......
...@@ -360,18 +360,19 @@ class DeepLabv3p(BaseAPI): ...@@ -360,18 +360,19 @@ class DeepLabv3p(BaseAPI):
pred = pred[0:num_samples] pred = pred[0:num_samples]
for i in range(num_samples): for i in range(num_samples):
one_pred = pred[i].astype('uint8') one_pred = np.squeeze(pred[i]).astype('uint8')
one_label = labels[i] one_label = labels[i]
for info in im_info[i][::-1]: for info in im_info[i][::-1]:
if info[0] == 'resize': if info[0] == 'resize':
w, h = info[1][1], info[1][0] w, h = info[1][1], info[1][0]
one_pred = cv2.resize(one_pred, (w, h), cv2.INTER_NEAREST) one_pred = cv2.resize(one_pred, (w, h),
cv2.INTER_NEAREST)
elif info[0] == 'padding': elif info[0] == 'padding':
w, h = info[1][1], info[1][0] w, h = info[1][1], info[1][0]
one_pred = one_pred[0:h, 0:w] one_pred = one_pred[0:h, 0:w]
else: else:
raise Exception("Unexpected info '{}' in im_info".format( raise Exception(
info[0])) "Unexpected info '{}' in im_info".format(info[0]))
one_pred = one_pred.astype('int64') one_pred = one_pred.astype('int64')
one_pred = one_pred[np.newaxis, :, :, np.newaxis] one_pred = one_pred[np.newaxis, :, :, np.newaxis]
one_label = one_label[np.newaxis, np.newaxis, :, :] one_label = one_label[np.newaxis, np.newaxis, :, :]
......
...@@ -28,6 +28,7 @@ class Predictor: ...@@ -28,6 +28,7 @@ class Predictor:
use_gpu=True, use_gpu=True,
gpu_id=0, gpu_id=0,
use_mkl=False, use_mkl=False,
mkl_thread_num=4,
use_trt=False, use_trt=False,
use_glog=False, use_glog=False,
memory_optimize=True): memory_optimize=True):
...@@ -38,6 +39,7 @@ class Predictor: ...@@ -38,6 +39,7 @@ class Predictor:
use_gpu: 是否使用gpu,默认True use_gpu: 是否使用gpu,默认True
gpu_id: 使用gpu的id,默认0 gpu_id: 使用gpu的id,默认0
use_mkl: 是否使用mkldnn计算库,CPU情况下使用,默认False use_mkl: 是否使用mkldnn计算库,CPU情况下使用,默认False
mkl_thread_num: mkldnn计算线程数,默认为4
use_trt: 是否使用TensorRT,默认False use_trt: 是否使用TensorRT,默认False
use_glog: 是否启用glog日志, 默认False use_glog: 是否启用glog日志, 默认False
memory_optimize: 是否启动内存优化,默认True memory_optimize: 是否启动内存优化,默认True
...@@ -72,13 +74,15 @@ class Predictor: ...@@ -72,13 +74,15 @@ class Predictor:
to_rgb = False to_rgb = False
self.transforms = build_transforms(self.model_type, self.transforms = build_transforms(self.model_type,
self.info['Transforms'], to_rgb) self.info['Transforms'], to_rgb)
self.predictor = self.create_predictor( self.predictor = self.create_predictor(use_gpu, gpu_id, use_mkl,
use_gpu, gpu_id, use_mkl, use_trt, use_glog, memory_optimize) mkl_thread_num, use_trt,
use_glog, memory_optimize)
def create_predictor(self, def create_predictor(self,
use_gpu=True, use_gpu=True,
gpu_id=0, gpu_id=0,
use_mkl=False, use_mkl=False,
mkl_thread_num=4,
use_trt=False, use_trt=False,
use_glog=False, use_glog=False,
memory_optimize=True): memory_optimize=True):
...@@ -93,6 +97,7 @@ class Predictor: ...@@ -93,6 +97,7 @@ class Predictor:
config.disable_gpu() config.disable_gpu()
if use_mkl: if use_mkl:
config.enable_mkldnn() config.enable_mkldnn()
config.set_cpu_math_library_num_threads(mkl_thread_num)
if use_glog: if use_glog:
config.enable_glog_info() config.enable_glog_info()
else: else:
......
...@@ -3,16 +3,18 @@ ...@@ -3,16 +3,18 @@
PaddleX提供了两种剪裁训练方式, PaddleX提供了两种剪裁训练方式,
1. 用户自行计算剪裁配置(推荐),整体流程为 1. 用户自行计算剪裁配置(推荐),整体流程为
> 1.使用数据训练原始模型;
> 2.使用第1步训练好的模型,在验证集上计算各个模型参数的敏感度,并将敏感信息保存至本地文件 > 1. 使用数据训练原始模型;
> 3.再次使用数据训练原始模型,在训练时调用`train`接口时,传入第2步计算得到的参数敏感信息文件, > 2. 使用第1步训练好的模型,在验证集上计算各个模型参数的敏感度,并将敏感信息保存至本地文件
> 4.模型在训练过程中,会根据传入的参数敏感信息文件,对模型结构剪裁后,继续迭代训练 > 3. 再次使用数据训练原始模型,在训练时调用`train`接口时,传入第2步计算得到的参数敏感信息文件,
> > 4. 模型在训练过程中,会根据传入的参数敏感信息文件,对模型结构剪裁后,继续迭代训练
2. 使用PaddleX预先计算好的参数敏感度信息文件,整体流程为 2. 使用PaddleX预先计算好的参数敏感度信息文件,整体流程为
> 1. 在训练调用`train`接口时,将`sensetivities_file`参数设为`DEFAULT`字符串 > 1. 在训练调用`train`接口时,将`sensetivities_file`参数设为`DEFAULT`字符串
> 2. 在训练过程中,会自动下载PaddleX预先计算好的模型参数敏感度信息,并对模型结构剪裁,继而迭代训练 > 2. 在训练过程中,会自动下载PaddleX预先计算好的模型参数敏感度信息,并对模型结构剪裁,继而迭代训练
上述两种方式,第1种方法相对比第2种方法少了两步(即用户训练原始模型+自行计算参数敏感度信息),实验验证第1种方法的精度会更高,剪裁的模型效果更好,因此在时间和计算成本允许的前提下,更推荐使用第1种方法。 上述两种方式,第1种方法相对比第2种方法两步(即用户训练原始模型+自行计算参数敏感度信息),实验验证第1种方法的精度会更高,剪裁的模型效果更好,因此在时间和计算成本允许的前提下,更推荐使用第1种方法。
## 开始剪裁训练 ## 开始剪裁训练
......
...@@ -4,15 +4,29 @@ ...@@ -4,15 +4,29 @@
|代码 | 模型任务 | 数据 | |代码 | 模型任务 | 数据 |
|------|--------|---------| |------|--------|---------|
|classification/mobilenetv2.py | 图像分类MobileNetV2 | 蔬菜分类 | |image_classification/alexnet.py | 图像分类AlexyNet | 蔬菜分类 |
|classification/resnet50.py | 图像分类ResNet50 | 蔬菜分类 | |image_classification/mobilenetv2.py | 图像分类MobileNetV2 | 蔬菜分类 |
|detection/faster_rcnn_r50_fpn.py | 目标检测FasterRCNN | 昆虫检测 | |image_classification/mobilenetv3_small_ssld.py | 图像分类MobileNetV3_small_ssld | 蔬菜分类 |
|detection/mask_rcnn_f50_fpn.py | 实例分割MaskRCNN | 垃圾分拣 | |image_classification/resnet50_vd_ssld.py | 图像分类ResNet50_vd_ssld | 蔬菜分类 |
|segmentation/deeplabv3p.py | 语义分割DeepLabV3| 视盘分割 | |image_classification/shufflenetv2.py | 图像分类ShuffleNetV2 | 蔬菜分类 |
|segmentation/unet.py | 语义分割UNet | 视盘分割 | |object_detection/faster_rcnn_hrnet_fpn.py | 目标检测FasterRCNN | 昆虫检测 |
|object_detection/faster_rcnn_r18_fpn.py | 目标检测FasterRCNN | 昆虫检测 |
|object_detection/faster_rcnn_r50_fpn.py | 目标检测FasterRCNN | 昆虫检测 |
|object_detection/yolov3_darknet53.py | 目标检测YOLOv3 | 昆虫检测 |
|object_detection/yolov3_mobilenetv1.py | 目标检测YOLOv3 | 昆虫检测 |
|object_detection/yolov3_mobilenetv3.py | 目标检测YOLOv3 | 昆虫检测 |
|instance_segmentation/mask_rcnn_hrnet_fpn.py | 实例分割MaskRCNN | 小度熊分拣 |
|instance_segmentation/mask_rcnn_r18_fpn.py | 实例分割MaskRCNN | 小度熊分拣 |
|instance_segmentation/mask_rcnn_f50_fpn.py | 实例分割MaskRCNN | 小度熊分拣 |
|semantic_segmentation/deeplabv3p_mobilenetv2.py | 语义分割DeepLabV3 | 视盘分割 |
|semantic_segmentation/deeplabv3p_mobilenetv2_x0.25.py | 语义分割DeepLabV3 | 视盘分割 |
|semantic_segmentation/deeplabv3p_xception65.py | 语义分割DeepLabV3 | 视盘分割 |
|semantic_segmentation/fast_scnn.py | 语义分割FastSCNN | 视盘分割 |
|semantic_segmentation/hrnet.py | 语义分割HRNet | 视盘分割 |
|semantic_segmentation/unet.py | 语义分割UNet | 视盘分割 |
## 开始训练 ## 开始训练
在安装PaddleX后,使用如下命令开始训练 在安装PaddleX后,使用如下命令开始训练
``` ```
python classification/mobilenetv2.py python image_classification/mobilenetv2.py
``` ```
...@@ -13,14 +13,12 @@ pdx.utils.download_and_decompress(veg_dataset, path='./') ...@@ -13,14 +13,12 @@ pdx.utils.download_and_decompress(veg_dataset, path='./')
# 定义训练和验证时的transforms # 定义训练和验证时的transforms
# API说明https://paddlex.readthedocs.io/zh_CN/develop/apis/transforms/cls_transforms.html # API说明https://paddlex.readthedocs.io/zh_CN/develop/apis/transforms/cls_transforms.html
train_transforms = transforms.Compose([ train_transforms = transforms.Compose([
transforms.RandomCrop(crop_size=224), transforms.RandomCrop(crop_size=224), transforms.RandomHorizontalFlip(),
transforms.RandomHorizontalFlip(),
transforms.Normalize() transforms.Normalize()
]) ])
eval_transforms = transforms.Compose([ eval_transforms = transforms.Compose([
transforms.ResizeByShort(short_size=256), transforms.ResizeByShort(short_size=256),
transforms.CenterCrop(crop_size=224), transforms.CenterCrop(crop_size=224), transforms.Normalize()
transforms.Normalize()
]) ])
# 定义训练和验证所用的数据集 # 定义训练和验证所用的数据集
...@@ -38,10 +36,7 @@ eval_dataset = pdx.datasets.ImageNet( ...@@ -38,10 +36,7 @@ eval_dataset = pdx.datasets.ImageNet(
transforms=eval_transforms) transforms=eval_transforms)
# 初始化模型,并进行训练 # 初始化模型,并进行训练
# 可使用VisualDL查看训练指标 # 可使用VisualDL查看训练指标,参考https://paddlex.readthedocs.io/zh_CN/develop/train/visualdl.html
# VisualDL启动方式: visualdl --logdir output/mobilenetv2/vdl_log --port 8001
# 浏览器打开 https://0.0.0.0:8001或https://localhost:8001即可
# 其中0.0.0.0为本机访问,如为远程服务, 改成相应机器IP
model = pdx.cls.AlexNet(num_classes=len(train_dataset.labels)) model = pdx.cls.AlexNet(num_classes=len(train_dataset.labels))
# AlexNet需要指定确定的input_shape # AlexNet需要指定确定的input_shape
model.fixed_input_shape = [224, 224] model.fixed_input_shape = [224, 224]
......
...@@ -13,14 +13,12 @@ pdx.utils.download_and_decompress(veg_dataset, path='./') ...@@ -13,14 +13,12 @@ pdx.utils.download_and_decompress(veg_dataset, path='./')
# 定义训练和验证时的transforms # 定义训练和验证时的transforms
# API说明https://paddlex.readthedocs.io/zh_CN/develop/apis/transforms/cls_transforms.html # API说明https://paddlex.readthedocs.io/zh_CN/develop/apis/transforms/cls_transforms.html
train_transforms = transforms.Compose([ train_transforms = transforms.Compose([
transforms.RandomCrop(crop_size=224), transforms.RandomCrop(crop_size=224), transforms.RandomHorizontalFlip(),
transforms.RandomHorizontalFlip(),
transforms.Normalize() transforms.Normalize()
]) ])
eval_transforms = transforms.Compose([ eval_transforms = transforms.Compose([
transforms.ResizeByShort(short_size=256), transforms.ResizeByShort(short_size=256),
transforms.CenterCrop(crop_size=224), transforms.CenterCrop(crop_size=224), transforms.Normalize()
transforms.Normalize()
]) ])
# 定义训练和验证所用的数据集 # 定义训练和验证所用的数据集
...@@ -38,10 +36,7 @@ eval_dataset = pdx.datasets.ImageNet( ...@@ -38,10 +36,7 @@ eval_dataset = pdx.datasets.ImageNet(
transforms=eval_transforms) transforms=eval_transforms)
# 初始化模型,并进行训练 # 初始化模型,并进行训练
# 可使用VisualDL查看训练指标 # 可使用VisualDL查看训练指标,参考https://paddlex.readthedocs.io/zh_CN/develop/train/visualdl.html
# VisualDL启动方式: visualdl --logdir output/mobilenetv2/vdl_log --port 8001
# 浏览器打开 https://0.0.0.0:8001即可
# 其中0.0.0.0为本机访问,如为远程服务, 改成相应机器IP
model = pdx.cls.MobileNetV2(num_classes=len(train_dataset.labels)) model = pdx.cls.MobileNetV2(num_classes=len(train_dataset.labels))
# API说明:https://paddlex.readthedocs.io/zh_CN/develop/apis/models/classification.html#train # API说明:https://paddlex.readthedocs.io/zh_CN/develop/apis/models/classification.html#train
......
...@@ -13,14 +13,12 @@ pdx.utils.download_and_decompress(veg_dataset, path='./') ...@@ -13,14 +13,12 @@ pdx.utils.download_and_decompress(veg_dataset, path='./')
# 定义训练和验证时的transforms # 定义训练和验证时的transforms
# API说明https://paddlex.readthedocs.io/zh_CN/develop/apis/transforms/cls_transforms.html # API说明https://paddlex.readthedocs.io/zh_CN/develop/apis/transforms/cls_transforms.html
train_transforms = transforms.Compose([ train_transforms = transforms.Compose([
transforms.RandomCrop(crop_size=224), transforms.RandomCrop(crop_size=224), transforms.RandomHorizontalFlip(),
transforms.RandomHorizontalFlip(),
transforms.Normalize() transforms.Normalize()
]) ])
eval_transforms = transforms.Compose([ eval_transforms = transforms.Compose([
transforms.ResizeByShort(short_size=256), transforms.ResizeByShort(short_size=256),
transforms.CenterCrop(crop_size=224), transforms.CenterCrop(crop_size=224), transforms.Normalize()
transforms.Normalize()
]) ])
# 定义训练和验证所用的数据集 # 定义训练和验证所用的数据集
...@@ -38,10 +36,7 @@ eval_dataset = pdx.datasets.ImageNet( ...@@ -38,10 +36,7 @@ eval_dataset = pdx.datasets.ImageNet(
transforms=eval_transforms) transforms=eval_transforms)
# 初始化模型,并进行训练 # 初始化模型,并进行训练
# 可使用VisualDL查看训练指标 # 可使用VisualDL查看训练指标,参考https://paddlex.readthedocs.io/zh_CN/develop/train/visualdl.html
# VisualDL启动方式: visualdl --logdir output/mobilenetv2/vdl_log --port 8001
# 浏览器打开 https://0.0.0.0:8001即可
# 其中0.0.0.0为本机访问,如为远程服务, 改成相应机器IP
model = pdx.cls.MobileNetV3_small_ssld(num_classes=len(train_dataset.labels)) model = pdx.cls.MobileNetV3_small_ssld(num_classes=len(train_dataset.labels))
# API说明:https://paddlex.readthedocs.io/zh_CN/develop/apis/datasets.html#paddlex-datasets-imagenet # API说明:https://paddlex.readthedocs.io/zh_CN/develop/apis/datasets.html#paddlex-datasets-imagenet
......
...@@ -13,14 +13,12 @@ pdx.utils.download_and_decompress(veg_dataset, path='./') ...@@ -13,14 +13,12 @@ pdx.utils.download_and_decompress(veg_dataset, path='./')
# 定义训练和验证时的transforms # 定义训练和验证时的transforms
# API说明https://paddlex.readthedocs.io/zh_CN/develop/apis/transforms/cls_transforms.html # API说明https://paddlex.readthedocs.io/zh_CN/develop/apis/transforms/cls_transforms.html
train_transforms = transforms.Compose([ train_transforms = transforms.Compose([
transforms.RandomCrop(crop_size=224), transforms.RandomCrop(crop_size=224), transforms.RandomHorizontalFlip(),
transforms.RandomHorizontalFlip(),
transforms.Normalize() transforms.Normalize()
]) ])
eval_transforms = transforms.Compose([ eval_transforms = transforms.Compose([
transforms.ResizeByShort(short_size=256), transforms.ResizeByShort(short_size=256),
transforms.CenterCrop(crop_size=224), transforms.CenterCrop(crop_size=224), transforms.Normalize()
transforms.Normalize()
]) ])
# 定义训练和验证所用的数据集 # 定义训练和验证所用的数据集
...@@ -38,10 +36,7 @@ eval_dataset = pdx.datasets.ImageNet( ...@@ -38,10 +36,7 @@ eval_dataset = pdx.datasets.ImageNet(
transforms=eval_transforms) transforms=eval_transforms)
# 初始化模型,并进行训练 # 初始化模型,并进行训练
# 可使用VisualDL查看训练指标 # 可使用VisualDL查看训练指标,参考https://paddlex.readthedocs.io/zh_CN/develop/train/visualdl.html
# VisualDL启动方式: visualdl --logdir output/mobilenetv2/vdl_log --port 8001
# 浏览器打开 https://0.0.0.0:8001即可
# 其中0.0.0.0为本机访问,如为远程服务, 改成相应机器IP
model = pdx.cls.ResNet50_vd_ssld(num_classes=len(train_dataset.labels)) model = pdx.cls.ResNet50_vd_ssld(num_classes=len(train_dataset.labels))
# API说明:https://paddlex.readthedocs.io/zh_CN/develop/apis/models/classification.html#train # API说明:https://paddlex.readthedocs.io/zh_CN/develop/apis/models/classification.html#train
......
...@@ -13,14 +13,12 @@ pdx.utils.download_and_decompress(veg_dataset, path='./') ...@@ -13,14 +13,12 @@ pdx.utils.download_and_decompress(veg_dataset, path='./')
# 定义训练和验证时的transforms # 定义训练和验证时的transforms
# API说明https://paddlex.readthedocs.io/zh_CN/develop/apis/transforms/cls_transforms.html # API说明https://paddlex.readthedocs.io/zh_CN/develop/apis/transforms/cls_transforms.html
train_transforms = transforms.Compose([ train_transforms = transforms.Compose([
transforms.RandomCrop(crop_size=224), transforms.RandomCrop(crop_size=224), transforms.RandomHorizontalFlip(),
transforms.RandomHorizontalFlip(),
transforms.Normalize() transforms.Normalize()
]) ])
eval_transforms = transforms.Compose([ eval_transforms = transforms.Compose([
transforms.ResizeByShort(short_size=256), transforms.ResizeByShort(short_size=256),
transforms.CenterCrop(crop_size=224), transforms.CenterCrop(crop_size=224), transforms.Normalize()
transforms.Normalize()
]) ])
# 定义训练和验证所用的数据集 # 定义训练和验证所用的数据集
...@@ -38,10 +36,7 @@ eval_dataset = pdx.datasets.ImageNet( ...@@ -38,10 +36,7 @@ eval_dataset = pdx.datasets.ImageNet(
transforms=eval_transforms) transforms=eval_transforms)
# 初始化模型,并进行训练 # 初始化模型,并进行训练
# 可使用VisualDL查看训练指标 # 可使用VisualDL查看训练指标,参考https://paddlex.readthedocs.io/zh_CN/develop/train/visualdl.html
# VisualDL启动方式: visualdl --logdir output/mobilenetv2/vdl_log --port 8001
# 浏览器打开 https://0.0.0.0:8001即可
# 其中0.0.0.0为本机访问,如为远程服务, 改成相应机器IP
model = pdx.cls.ShuffleNetV2(num_classes=len(train_dataset.labels)) model = pdx.cls.ShuffleNetV2(num_classes=len(train_dataset.labels))
# API说明:https://paddlex.readthedocs.io/zh_CN/develop/apis/models/classification.html#train # API说明:https://paddlex.readthedocs.io/zh_CN/develop/apis/models/classification.html#train
......
...@@ -13,15 +13,15 @@ pdx.utils.download_and_decompress(xiaoduxiong_dataset, path='./') ...@@ -13,15 +13,15 @@ pdx.utils.download_and_decompress(xiaoduxiong_dataset, path='./')
# 定义训练和验证时的transforms # 定义训练和验证时的transforms
# API说明 https://paddlex.readthedocs.io/zh_CN/develop/apis/transforms/det_transforms.html # API说明 https://paddlex.readthedocs.io/zh_CN/develop/apis/transforms/det_transforms.html
train_transforms = transforms.Compose([ train_transforms = transforms.Compose([
transforms.RandomHorizontalFlip(), transforms.RandomHorizontalFlip(), transforms.Normalize(),
transforms.Normalize(), transforms.ResizeByShort(
transforms.ResizeByShort(short_size=800, max_size=1333), short_size=800, max_size=1333), transforms.Padding(coarsest_stride=32)
transforms.Padding(coarsest_stride=32)
]) ])
eval_transforms = transforms.Compose([ eval_transforms = transforms.Compose([
transforms.Normalize(), transforms.Normalize(),
transforms.ResizeByShort(short_size=800, max_size=1333), transforms.ResizeByShort(
short_size=800, max_size=1333),
transforms.Padding(coarsest_stride=32), transforms.Padding(coarsest_stride=32),
]) ])
...@@ -38,10 +38,7 @@ eval_dataset = pdx.datasets.CocoDetection( ...@@ -38,10 +38,7 @@ eval_dataset = pdx.datasets.CocoDetection(
transforms=eval_transforms) transforms=eval_transforms)
# 初始化模型,并进行训练 # 初始化模型,并进行训练
# 可使用VisualDL查看训练指标 # 可使用VisualDL查看训练指标,参考https://paddlex.readthedocs.io/zh_CN/develop/train/visualdl.html
# VisualDL启动方式: visualdl --logdir output/mask_rcnn_r50_fpn/vdl_log --port 8001
# 浏览器打开 https://0.0.0.0:8001即可
# 其中0.0.0.0为本机访问,如为远程服务, 改成相应机器IP
# num_classes 需要设置为包含背景类的类别数,即: 目标类别数量 + 1 # num_classes 需要设置为包含背景类的类别数,即: 目标类别数量 + 1
num_classes = len(train_dataset.labels) + 1 num_classes = len(train_dataset.labels) + 1
......
...@@ -13,16 +13,14 @@ pdx.utils.download_and_decompress(xiaoduxiong_dataset, path='./') ...@@ -13,16 +13,14 @@ pdx.utils.download_and_decompress(xiaoduxiong_dataset, path='./')
# 定义训练和验证时的transforms # 定义训练和验证时的transforms
# API说明 https://paddlex.readthedocs.io/zh_CN/develop/apis/transforms/det_transforms.html # API说明 https://paddlex.readthedocs.io/zh_CN/develop/apis/transforms/det_transforms.html
train_transforms = transforms.Compose([ train_transforms = transforms.Compose([
transforms.RandomHorizontalFlip(), transforms.RandomHorizontalFlip(), transforms.Normalize(),
transforms.Normalize(), transforms.ResizeByShort(
transforms.ResizeByShort(short_size=800, max_size=1333), short_size=800, max_size=1333), transforms.Padding(coarsest_stride=32)
transforms.Padding(coarsest_stride=32)
]) ])
eval_transforms = transforms.Compose([ eval_transforms = transforms.Compose([
transforms.Normalize(), transforms.Normalize(), transforms.ResizeByShort(
transforms.ResizeByShort(short_size=800, max_size=1333), short_size=800, max_size=1333), transforms.Padding(coarsest_stride=32)
transforms.Padding(coarsest_stride=32)
]) ])
# 定义训练和验证所用的数据集 # 定义训练和验证所用的数据集
...@@ -38,10 +36,7 @@ eval_dataset = pdx.datasets.CocoDetection( ...@@ -38,10 +36,7 @@ eval_dataset = pdx.datasets.CocoDetection(
transforms=eval_transforms) transforms=eval_transforms)
# 初始化模型,并进行训练 # 初始化模型,并进行训练
# 可使用VisualDL查看训练指标 # 可使用VisualDL查看训练指标,参考https://paddlex.readthedocs.io/zh_CN/develop/train/visualdl.html
# VisualDL启动方式: visualdl --logdir output/mask_rcnn_r50_fpn/vdl_log --port 8001
# 浏览器打开 https://0.0.0.0:8001即可
# 其中0.0.0.0为本机访问,如为远程服务, 改成相应机器IP
# num_classes 需要设置为包含背景类的类别数,即: 目标类别数量 + 1 # num_classes 需要设置为包含背景类的类别数,即: 目标类别数量 + 1
num_classes = len(train_dataset.labels) + 1 num_classes = len(train_dataset.labels) + 1
......
...@@ -13,16 +13,14 @@ pdx.utils.download_and_decompress(xiaoduxiong_dataset, path='./') ...@@ -13,16 +13,14 @@ pdx.utils.download_and_decompress(xiaoduxiong_dataset, path='./')
# 定义训练和验证时的transforms # 定义训练和验证时的transforms
# API说明 https://paddlex.readthedocs.io/zh_CN/develop/apis/transforms/det_transforms.html # API说明 https://paddlex.readthedocs.io/zh_CN/develop/apis/transforms/det_transforms.html
train_transforms = transforms.Compose([ train_transforms = transforms.Compose([
transforms.RandomHorizontalFlip(), transforms.RandomHorizontalFlip(), transforms.Normalize(),
transforms.Normalize(), transforms.ResizeByShort(
transforms.ResizeByShort(short_size=800, max_size=1333), short_size=800, max_size=1333), transforms.Padding(coarsest_stride=32)
transforms.Padding(coarsest_stride=32)
]) ])
eval_transforms = transforms.Compose([ eval_transforms = transforms.Compose([
transforms.Normalize(), transforms.Normalize(), transforms.ResizeByShort(
transforms.ResizeByShort(short_size=800, max_size=1333), short_size=800, max_size=1333), transforms.Padding(coarsest_stride=32)
transforms.Padding(coarsest_stride=32)
]) ])
# 定义训练和验证所用的数据集 # 定义训练和验证所用的数据集
...@@ -38,10 +36,7 @@ eval_dataset = pdx.datasets.CocoDetection( ...@@ -38,10 +36,7 @@ eval_dataset = pdx.datasets.CocoDetection(
transforms=eval_transforms) transforms=eval_transforms)
# 初始化模型,并进行训练 # 初始化模型,并进行训练
# 可使用VisualDL查看训练指标 # 可使用VisualDL查看训练指标,参考https://paddlex.readthedocs.io/zh_CN/develop/train/visualdl.html
# VisualDL启动方式: visualdl --logdir output/mask_rcnn_r50_fpn/vdl_log --port 8001
# 浏览器打开 https://0.0.0.0:8001即可
# 其中0.0.0.0为本机访问,如为远程服务, 改成相应机器IP
# num_classes 需要设置为包含背景类的类别数,即: 目标类别数量 + 1 # num_classes 需要设置为包含背景类的类别数,即: 目标类别数量 + 1
num_classes = len(train_dataset.labels) + 1 num_classes = len(train_dataset.labels) + 1
......
...@@ -13,16 +13,14 @@ pdx.utils.download_and_decompress(insect_dataset, path='./') ...@@ -13,16 +13,14 @@ pdx.utils.download_and_decompress(insect_dataset, path='./')
# 定义训练和验证时的transforms # 定义训练和验证时的transforms
# API说明 https://paddlex.readthedocs.io/zh_CN/develop/apis/transforms/det_transforms.html # API说明 https://paddlex.readthedocs.io/zh_CN/develop/apis/transforms/det_transforms.html
train_transforms = transforms.Compose([ train_transforms = transforms.Compose([
transforms.RandomHorizontalFlip(), transforms.RandomHorizontalFlip(), transforms.Normalize(),
transforms.Normalize(), transforms.ResizeByShort(
transforms.ResizeByShort(short_size=800, max_size=1333), short_size=800, max_size=1333), transforms.Padding(coarsest_stride=32)
transforms.Padding(coarsest_stride=32)
]) ])
eval_transforms = transforms.Compose([ eval_transforms = transforms.Compose([
transforms.Normalize(), transforms.Normalize(), transforms.ResizeByShort(
transforms.ResizeByShort(short_size=800, max_size=1333), short_size=800, max_size=1333), transforms.Padding(coarsest_stride=32)
transforms.Padding(coarsest_stride=32)
]) ])
# 定义训练和验证所用的数据集 # 定义训练和验证所用的数据集
...@@ -40,10 +38,7 @@ eval_dataset = pdx.datasets.VOCDetection( ...@@ -40,10 +38,7 @@ eval_dataset = pdx.datasets.VOCDetection(
transforms=eval_transforms) transforms=eval_transforms)
# 初始化模型,并进行训练 # 初始化模型,并进行训练
# 可使用VisualDL查看训练指标 # 可使用VisualDL查看训练指标,参考https://paddlex.readthedocs.io/zh_CN/develop/train/visualdl.html
# VisualDL启动方式: visualdl --logdir output/faster_rcnn_r50_fpn/vdl_log --port 8001
# 浏览器打开 https://0.0.0.0:8001即可
# 其中0.0.0.0为本机访问,如为远程服务, 改成相应机器IP
# num_classes 需要设置为包含背景类的类别数,即: 目标类别数量 + 1 # num_classes 需要设置为包含背景类的类别数,即: 目标类别数量 + 1
num_classes = len(train_dataset.labels) + 1 num_classes = len(train_dataset.labels) + 1
......
...@@ -13,15 +13,15 @@ pdx.utils.download_and_decompress(insect_dataset, path='./') ...@@ -13,15 +13,15 @@ pdx.utils.download_and_decompress(insect_dataset, path='./')
# 定义训练和验证时的transforms # 定义训练和验证时的transforms
# API说明 https://paddlex.readthedocs.io/zh_CN/develop/apis/transforms/det_transforms.html # API说明 https://paddlex.readthedocs.io/zh_CN/develop/apis/transforms/det_transforms.html
train_transforms = transforms.Compose([ train_transforms = transforms.Compose([
transforms.RandomHorizontalFlip(), transforms.RandomHorizontalFlip(), transforms.Normalize(),
transforms.Normalize(), transforms.ResizeByShort(
transforms.ResizeByShort(short_size=800, max_size=1333), short_size=800, max_size=1333), transforms.Padding(coarsest_stride=32)
transforms.Padding(coarsest_stride=32)
]) ])
eval_transforms = transforms.Compose([ eval_transforms = transforms.Compose([
transforms.Normalize(), transforms.Normalize(),
transforms.ResizeByShort(short_size=800, max_size=1333), transforms.ResizeByShort(
short_size=800, max_size=1333),
transforms.Padding(coarsest_stride=32), transforms.Padding(coarsest_stride=32),
]) ])
...@@ -40,10 +40,7 @@ eval_dataset = pdx.datasets.VOCDetection( ...@@ -40,10 +40,7 @@ eval_dataset = pdx.datasets.VOCDetection(
transforms=eval_transforms) transforms=eval_transforms)
# 初始化模型,并进行训练 # 初始化模型,并进行训练
# 可使用VisualDL查看训练指标 # 可使用VisualDL查看训练指标,参考https://paddlex.readthedocs.io/zh_CN/develop/train/visualdl.html
# VisualDL启动方式: visualdl --logdir output/faster_rcnn_r50_fpn/vdl_log --port 8001
# 浏览器打开 https://0.0.0.0:8001即可
# 其中0.0.0.0为本机访问,如为远程服务, 改成相应机器IP
# num_classes 需要设置为包含背景类的类别数,即: 目标类别数量 + 1 # num_classes 需要设置为包含背景类的类别数,即: 目标类别数量 + 1
num_classes = len(train_dataset.labels) + 1 num_classes = len(train_dataset.labels) + 1
......
...@@ -13,15 +13,15 @@ pdx.utils.download_and_decompress(insect_dataset, path='./') ...@@ -13,15 +13,15 @@ pdx.utils.download_and_decompress(insect_dataset, path='./')
# 定义训练和验证时的transforms # 定义训练和验证时的transforms
# API说明 https://paddlex.readthedocs.io/zh_CN/develop/apis/transforms/det_transforms.html # API说明 https://paddlex.readthedocs.io/zh_CN/develop/apis/transforms/det_transforms.html
train_transforms = transforms.Compose([ train_transforms = transforms.Compose([
transforms.RandomHorizontalFlip(), transforms.RandomHorizontalFlip(), transforms.Normalize(),
transforms.Normalize(), transforms.ResizeByShort(
transforms.ResizeByShort(short_size=800, max_size=1333), short_size=800, max_size=1333), transforms.Padding(coarsest_stride=32)
transforms.Padding(coarsest_stride=32)
]) ])
eval_transforms = transforms.Compose([ eval_transforms = transforms.Compose([
transforms.Normalize(), transforms.Normalize(),
transforms.ResizeByShort(short_size=800, max_size=1333), transforms.ResizeByShort(
short_size=800, max_size=1333),
transforms.Padding(coarsest_stride=32), transforms.Padding(coarsest_stride=32),
]) ])
...@@ -40,10 +40,7 @@ eval_dataset = pdx.datasets.VOCDetection( ...@@ -40,10 +40,7 @@ eval_dataset = pdx.datasets.VOCDetection(
transforms=eval_transforms) transforms=eval_transforms)
# 初始化模型,并进行训练 # 初始化模型,并进行训练
# 可使用VisualDL查看训练指标 # 可使用VisualDL查看训练指标,参考https://paddlex.readthedocs.io/zh_CN/develop/train/visualdl.html
# VisualDL启动方式: visualdl --logdir output/faster_rcnn_r50_fpn/vdl_log --port 8001
# 浏览器打开 https://0.0.0.0:8001即可
# 其中0.0.0.0为本机访问,如为远程服务, 改成相应机器IP
# num_classes 需要设置为包含背景类的类别数,即: 目标类别数量 + 1 # num_classes 需要设置为包含背景类的类别数,即: 目标类别数量 + 1
num_classes = len(train_dataset.labels) + 1 num_classes = len(train_dataset.labels) + 1
......
...@@ -13,18 +13,15 @@ pdx.utils.download_and_decompress(insect_dataset, path='./') ...@@ -13,18 +13,15 @@ pdx.utils.download_and_decompress(insect_dataset, path='./')
# 定义训练和验证时的transforms # 定义训练和验证时的transforms
# API说明 https://paddlex.readthedocs.io/zh_CN/develop/apis/transforms/det_transforms.html # API说明 https://paddlex.readthedocs.io/zh_CN/develop/apis/transforms/det_transforms.html
train_transforms = transforms.Compose([ train_transforms = transforms.Compose([
transforms.MixupImage(mixup_epoch=250), transforms.MixupImage(mixup_epoch=250), transforms.RandomDistort(),
transforms.RandomDistort(), transforms.RandomExpand(), transforms.RandomCrop(), transforms.Resize(
transforms.RandomExpand(), target_size=608, interp='RANDOM'), transforms.RandomHorizontalFlip(),
transforms.RandomCrop(),
transforms.Resize(target_size=608, interp='RANDOM'),
transforms.RandomHorizontalFlip(),
transforms.Normalize() transforms.Normalize()
]) ])
eval_transforms = transforms.Compose([ eval_transforms = transforms.Compose([
transforms.Resize(target_size=608, interp='CUBIC'), transforms.Resize(
transforms.Normalize() target_size=608, interp='CUBIC'), transforms.Normalize()
]) ])
# 定义训练和验证所用的数据集 # 定义训练和验证所用的数据集
...@@ -42,10 +39,7 @@ eval_dataset = pdx.datasets.VOCDetection( ...@@ -42,10 +39,7 @@ eval_dataset = pdx.datasets.VOCDetection(
transforms=eval_transforms) transforms=eval_transforms)
# 初始化模型,并进行训练 # 初始化模型,并进行训练
# 可使用VisualDL查看训练指标 # 可使用VisualDL查看训练指标,参考https://paddlex.readthedocs.io/zh_CN/develop/train/visualdl.html
# VisualDL启动方式: visualdl --logdir output/yolov3_darknet/vdl_log --port 8001
# 浏览器打开 https://0.0.0.0:8001即可
# 其中0.0.0.0为本机访问,如为远程服务, 改成相应机器IP
num_classes = len(train_dataset.labels) num_classes = len(train_dataset.labels)
# API说明: https://paddlex.readthedocs.io/zh_CN/develop/apis/models/detection.html#paddlex-det-yolov3 # API说明: https://paddlex.readthedocs.io/zh_CN/develop/apis/models/detection.html#paddlex-det-yolov3
......
...@@ -17,13 +17,15 @@ train_transforms = transforms.Compose([ ...@@ -17,13 +17,15 @@ train_transforms = transforms.Compose([
transforms.RandomDistort(), transforms.RandomDistort(),
transforms.RandomExpand(), transforms.RandomExpand(),
transforms.RandomCrop(), transforms.RandomCrop(),
transforms.Resize(target_size=608, interp='RANDOM'), transforms.Resize(
target_size=608, interp='RANDOM'),
transforms.RandomHorizontalFlip(), transforms.RandomHorizontalFlip(),
transforms.Normalize(), transforms.Normalize(),
]) ])
eval_transforms = transforms.Compose([ eval_transforms = transforms.Compose([
transforms.Resize(target_size=608, interp='CUBIC'), transforms.Resize(
target_size=608, interp='CUBIC'),
transforms.Normalize(), transforms.Normalize(),
]) ])
...@@ -42,10 +44,7 @@ eval_dataset = pdx.datasets.VOCDetection( ...@@ -42,10 +44,7 @@ eval_dataset = pdx.datasets.VOCDetection(
transforms=eval_transforms) transforms=eval_transforms)
# 初始化模型,并进行训练 # 初始化模型,并进行训练
# 可使用VisualDL查看训练指标 # 可使用VisualDL查看训练指标,参考https://paddlex.readthedocs.io/zh_CN/develop/train/visualdl.html
# VisualDL启动方式: visualdl --logdir output/yolov3_darknet/vdl_log --port 8001
# 浏览器打开 https://0.0.0.0:8001即可
# 其中0.0.0.0为本机访问,如为远程服务, 改成相应机器IP
num_classes = len(train_dataset.labels) num_classes = len(train_dataset.labels)
# API说明: https://paddlex.readthedocs.io/zh_CN/develop/apis/models/detection.html#paddlex-det-yolov3 # API说明: https://paddlex.readthedocs.io/zh_CN/develop/apis/models/detection.html#paddlex-det-yolov3
......
...@@ -13,18 +13,15 @@ pdx.utils.download_and_decompress(insect_dataset, path='./') ...@@ -13,18 +13,15 @@ pdx.utils.download_and_decompress(insect_dataset, path='./')
# 定义训练和验证时的transforms # 定义训练和验证时的transforms
# API说明 https://paddlex.readthedocs.io/zh_CN/develop/apis/transforms/det_transforms.html # API说明 https://paddlex.readthedocs.io/zh_CN/develop/apis/transforms/det_transforms.html
train_transforms = transforms.Compose([ train_transforms = transforms.Compose([
transforms.MixupImage(mixup_epoch=250), transforms.MixupImage(mixup_epoch=250), transforms.RandomDistort(),
transforms.RandomDistort(), transforms.RandomExpand(), transforms.RandomCrop(), transforms.Resize(
transforms.RandomExpand(), target_size=608, interp='RANDOM'), transforms.RandomHorizontalFlip(),
transforms.RandomCrop(),
transforms.Resize(target_size=608, interp='RANDOM'),
transforms.RandomHorizontalFlip(),
transforms.Normalize() transforms.Normalize()
]) ])
eval_transforms = transforms.Compose([ eval_transforms = transforms.Compose([
transforms.Resize(target_size=608, interp='CUBIC'), transforms.Resize(
transforms.Normalize() target_size=608, interp='CUBIC'), transforms.Normalize()
]) ])
# 定义训练和验证所用的数据集 # 定义训练和验证所用的数据集
...@@ -42,10 +39,7 @@ eval_dataset = pdx.datasets.VOCDetection( ...@@ -42,10 +39,7 @@ eval_dataset = pdx.datasets.VOCDetection(
transforms=eval_transforms) transforms=eval_transforms)
# 初始化模型,并进行训练 # 初始化模型,并进行训练
# 可使用VisualDL查看训练指标 # 可使用VisualDL查看训练指标,参考https://paddlex.readthedocs.io/zh_CN/develop/train/visualdl.html
# VisualDL启动方式: visualdl --logdir output/yolov3_darknet/vdl_log --port 8001
# 浏览器打开 https://0.0.0.0:8001即可
# 其中0.0.0.0为本机访问,如为远程服务, 改成相应机器IP
num_classes = len(train_dataset.labels) num_classes = len(train_dataset.labels)
# API说明: https://paddlex.readthedocs.io/zh_CN/develop/apis/models/detection.html#paddlex-det-yolov3 # API说明: https://paddlex.readthedocs.io/zh_CN/develop/apis/models/detection.html#paddlex-det-yolov3
......
...@@ -13,16 +13,13 @@ pdx.utils.download_and_decompress(optic_dataset, path='./') ...@@ -13,16 +13,13 @@ pdx.utils.download_and_decompress(optic_dataset, path='./')
# 定义训练和验证时的transforms # 定义训练和验证时的transforms
# API说明 https://paddlex.readthedocs.io/zh_CN/develop/apis/transforms/seg_transforms.html # API说明 https://paddlex.readthedocs.io/zh_CN/develop/apis/transforms/seg_transforms.html
train_transforms = transforms.Compose([ train_transforms = transforms.Compose([
transforms.RandomHorizontalFlip(), transforms.RandomHorizontalFlip(), transforms.ResizeRangeScaling(),
transforms.ResizeRangeScaling(), transforms.RandomPaddingCrop(crop_size=512), transforms.Normalize()
transforms.RandomPaddingCrop(crop_size=512),
transforms.Normalize()
]) ])
eval_transforms = transforms.Compose([ eval_transforms = transforms.Compose([
transforms.ResizeByLong(long_size=512), transforms.ResizeByLong(long_size=512),
transforms.Padding(target_size=512), transforms.Padding(target_size=512), transforms.Normalize()
transforms.Normalize()
]) ])
# 定义训练和验证所用的数据集 # 定义训练和验证所用的数据集
...@@ -40,15 +37,12 @@ eval_dataset = pdx.datasets.SegDataset( ...@@ -40,15 +37,12 @@ eval_dataset = pdx.datasets.SegDataset(
transforms=eval_transforms) transforms=eval_transforms)
# 初始化模型,并进行训练 # 初始化模型,并进行训练
# 可使用VisualDL查看训练指标 # 可使用VisualDL查看训练指标,参考https://paddlex.readthedocs.io/zh_CN/develop/train/visualdl.html
# VisualDL启动方式: visualdl --logdir output/deeplab/vdl_log --port 8001
# 浏览器打开 https://0.0.0.0:8001即可
# 其中0.0.0.0为本机访问,如为远程服务, 改成相应机器IP
num_classes = len(train_dataset.labels) num_classes = len(train_dataset.labels)
# API说明:https://paddlex.readthedocs.io/zh_CN/develop/apis/models/semantic_segmentation.html#paddlex-seg-deeplabv3p # API说明:https://paddlex.readthedocs.io/zh_CN/develop/apis/models/semantic_segmentation.html#paddlex-seg-deeplabv3p
model = pdx.seg.DeepLabv3p(num_classes=num_classes, backbone='MobileNetV2_x1.0') model = pdx.seg.DeepLabv3p(
num_classes=num_classes, backbone='MobileNetV2_x1.0')
# API说明:https://paddlex.readthedocs.io/zh_CN/develop/apis/models/semantic_segmentation.html#train # API说明:https://paddlex.readthedocs.io/zh_CN/develop/apis/models/semantic_segmentation.html#train
# 各参数介绍与调整说明:https://paddlex.readthedocs.io/zh_CN/develop/appendix/parameters.html # 各参数介绍与调整说明:https://paddlex.readthedocs.io/zh_CN/develop/appendix/parameters.html
......
...@@ -13,16 +13,13 @@ pdx.utils.download_and_decompress(optic_dataset, path='./') ...@@ -13,16 +13,13 @@ pdx.utils.download_and_decompress(optic_dataset, path='./')
# 定义训练和验证时的transforms # 定义训练和验证时的transforms
# API说明 https://paddlex.readthedocs.io/zh_CN/develop/apis/transforms/seg_transforms.html # API说明 https://paddlex.readthedocs.io/zh_CN/develop/apis/transforms/seg_transforms.html
train_transforms = transforms.Compose([ train_transforms = transforms.Compose([
transforms.RandomHorizontalFlip(), transforms.RandomHorizontalFlip(), transforms.ResizeRangeScaling(),
transforms.ResizeRangeScaling(), transforms.RandomPaddingCrop(crop_size=512), transforms.Normalize()
transforms.RandomPaddingCrop(crop_size=512),
transforms.Normalize()
]) ])
eval_transforms = transforms.Compose([ eval_transforms = transforms.Compose([
transforms.ResizeByLong(long_size=512), transforms.ResizeByLong(long_size=512),
transforms.Padding(target_size=512), transforms.Padding(target_size=512), transforms.Normalize()
transforms.Normalize()
]) ])
# 定义训练和验证所用的数据集 # 定义训练和验证所用的数据集
...@@ -40,13 +37,8 @@ eval_dataset = pdx.datasets.SegDataset( ...@@ -40,13 +37,8 @@ eval_dataset = pdx.datasets.SegDataset(
transforms=eval_transforms) transforms=eval_transforms)
# 初始化模型,并进行训练 # 初始化模型,并进行训练
# 可使用VisualDL查看训练指标 # 可使用VisualDL查看训练指标,参考https://paddlex.readthedocs.io/zh_CN/develop/train/visualdl.html
# VisualDL启动方式: visualdl --logdir output/unet/vdl_log --port 8001
# 浏览器打开 https://0.0.0.0:8001即可
# 其中0.0.0.0为本机访问,如为远程服务, 改成相应机器IP
num_classes = len(train_dataset.labels) num_classes = len(train_dataset.labels)
# API说明:https://paddlex.readthedocs.io/zh_CN/develop/apis/models/semantic_segmentation.html#paddlex-seg-fastscnn # API说明:https://paddlex.readthedocs.io/zh_CN/develop/apis/models/semantic_segmentation.html#paddlex-seg-fastscnn
model = pdx.seg.FastSCNN(num_classes=num_classes) model = pdx.seg.FastSCNN(num_classes=num_classes)
......
...@@ -13,16 +13,13 @@ pdx.utils.download_and_decompress(optic_dataset, path='./') ...@@ -13,16 +13,13 @@ pdx.utils.download_and_decompress(optic_dataset, path='./')
# 定义训练和验证时的transforms # 定义训练和验证时的transforms
# API说明 https://paddlex.readthedocs.io/zh_CN/develop/apis/transforms/seg_transforms.html # API说明 https://paddlex.readthedocs.io/zh_CN/develop/apis/transforms/seg_transforms.html
train_transforms = transforms.Compose([ train_transforms = transforms.Compose([
transforms.RandomHorizontalFlip(), transforms.RandomHorizontalFlip(), transforms.ResizeRangeScaling(),
transforms.ResizeRangeScaling(), transforms.RandomPaddingCrop(crop_size=512), transforms.Normalize()
transforms.RandomPaddingCrop(crop_size=512),
transforms.Normalize()
]) ])
eval_transforms = transforms.Compose([ eval_transforms = transforms.Compose([
transforms.ResizeByLong(long_size=512), transforms.ResizeByLong(long_size=512),
transforms.Padding(target_size=512), transforms.Padding(target_size=512), transforms.Normalize()
transforms.Normalize()
]) ])
# 定义训练和验证所用的数据集 # 定义训练和验证所用的数据集
...@@ -40,10 +37,7 @@ eval_dataset = pdx.datasets.SegDataset( ...@@ -40,10 +37,7 @@ eval_dataset = pdx.datasets.SegDataset(
transforms=eval_transforms) transforms=eval_transforms)
# 初始化模型,并进行训练 # 初始化模型,并进行训练
# 可使用VisualDL查看训练指标 # 可使用VisualDL查看训练指标,参考https://paddlex.readthedocs.io/zh_CN/develop/train/visualdl.html
# VisualDL启动方式: visualdl --logdir output/unet/vdl_log --port 8001
# 浏览器打开 https://0.0.0.0:8001即可
# 其中0.0.0.0为本机访问,如为远程服务, 改成相应机器IP
num_classes = len(train_dataset.labels) num_classes = len(train_dataset.labels)
# API说明:https://paddlex.readthedocs.io/zh_CN/develop/apis/models/semantic_segmentation.html#paddlex-seg-hrnet # API说明:https://paddlex.readthedocs.io/zh_CN/develop/apis/models/semantic_segmentation.html#paddlex-seg-hrnet
......
...@@ -13,15 +13,13 @@ pdx.utils.download_and_decompress(optic_dataset, path='./') ...@@ -13,15 +13,13 @@ pdx.utils.download_and_decompress(optic_dataset, path='./')
# 定义训练和验证时的transforms # 定义训练和验证时的transforms
# API说明 https://paddlex.readthedocs.io/zh_CN/develop/apis/transforms/seg_transforms.html # API说明 https://paddlex.readthedocs.io/zh_CN/develop/apis/transforms/seg_transforms.html
train_transforms = transforms.Compose([ train_transforms = transforms.Compose([
transforms.RandomHorizontalFlip(), transforms.RandomHorizontalFlip(), transforms.ResizeRangeScaling(),
transforms.ResizeRangeScaling(), transforms.RandomPaddingCrop(crop_size=512), transforms.Normalize()
transforms.RandomPaddingCrop(crop_size=512),
transforms.Normalize()
]) ])
eval_transforms = transforms.Compose([ eval_transforms = transforms.Compose([
transforms.ResizeByLong(long_size=512), transforms.Padding(target_size=512), transforms.ResizeByLong(long_size=512),
transforms.Normalize() transforms.Padding(target_size=512), transforms.Normalize()
]) ])
# 定义训练和验证所用的数据集 # 定义训练和验证所用的数据集
...@@ -39,10 +37,7 @@ eval_dataset = pdx.datasets.SegDataset( ...@@ -39,10 +37,7 @@ eval_dataset = pdx.datasets.SegDataset(
transforms=eval_transforms) transforms=eval_transforms)
# 初始化模型,并进行训练 # 初始化模型,并进行训练
# 可使用VisualDL查看训练指标 # 可使用VisualDL查看训练指标,参考https://paddlex.readthedocs.io/zh_CN/develop/train/visualdl.html
# VisualDL启动方式: visualdl --logdir output/unet/vdl_log --port 8001
# 浏览器打开 https://0.0.0.0:8001即可
# 其中0.0.0.0为本机访问,如为远程服务, 改成相应机器IP
num_classes = len(train_dataset.labels) num_classes = len(train_dataset.labels)
# API说明:https://paddlex.readthedocs.io/zh_CN/develop/apis/models/semantic_segmentation.html#paddlex-seg-deeplabv3p # API说明:https://paddlex.readthedocs.io/zh_CN/develop/apis/models/semantic_segmentation.html#paddlex-seg-deeplabv3p
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册