提交 b0129e93 编写于 作者: F FlyingQianMM

fix exit unnormally when shapely cannot be imported, fix doc error for meter...

fix exit unnormally when shapely cannot be imported, fix doc error for meter reader, add vdltrain in docs, add mkl_thread_num
上级 7e912885
# Nvidia Jetson开发板 # Nvidia Jetson开发板
## 说明 ## 说明
本文档在 `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=`
......
...@@ -46,13 +46,13 @@ ...@@ -46,13 +46,13 @@
#### 测试表计读数 #### 测试表计读数
1. 下载PaddleX源码: step 1. 下载PaddleX源码:
``` ```
git clone https://github.com/PaddlePaddle/PaddleX git clone https://github.com/PaddlePaddle/PaddleX
``` ```
2. 预测执行文件位于`PaddleX/examples/meter_reader/`,进入该目录: step 2. 预测执行文件位于`PaddleX/examples/meter_reader/`,进入该目录:
``` ```
cd PaddleX/examples/meter_reader/ cd PaddleX/examples/meter_reader/
...@@ -76,7 +76,7 @@ cd PaddleX/examples/meter_reader/ ...@@ -76,7 +76,7 @@ cd PaddleX/examples/meter_reader/
| use_erode | 是否使用图像腐蚀对分割预测图进行细分,默认为False | | use_erode | 是否使用图像腐蚀对分割预测图进行细分,默认为False |
| erode_kernel | 图像腐蚀操作时的卷积核大小,默认值为4 | | erode_kernel | 图像腐蚀操作时的卷积核大小,默认值为4 |
3. 预测 step 3. 预测
若要使用GPU,则指定GPU卡号(以0号卡为例): 若要使用GPU,则指定GPU卡号(以0号卡为例):
...@@ -112,17 +112,17 @@ python3 reader_infer.py --detector_dir /path/to/det_inference_model --segmenter_ ...@@ -112,17 +112,17 @@ python3 reader_infer.py --detector_dir /path/to/det_inference_model --segmenter_
#### c++部署 #### c++部署
1. 下载PaddleX源码: step 1. 下载PaddleX源码:
``` ```
git clone https://github.com/PaddlePaddle/PaddleX git clone https://github.com/PaddlePaddle/PaddleX
``` ```
2.`PaddleX\examples\meter_reader\deploy\cpp`下的`meter_reader`文件夹和`CMakeList.txt`拷贝至`PaddleX\deploy\cpp`目录下,拷贝之前可以将`PaddleX\deploy\cpp`下原本的`CMakeList.txt`做好备份。 step 2. 将`PaddleX\examples\meter_reader\deploy\cpp`下的`meter_reader`文件夹和`CMakeList.txt`拷贝至`PaddleX\deploy\cpp`目录下,拷贝之前可以将`PaddleX\deploy\cpp`下原本的`CMakeList.txt`做好备份。
3. 按照[Windows平台部署](../deploy/server/cpp/windows.md)中的Step2至Step4完成C++预测代码的编译。 step 3. 按照[Windows平台部署](../deploy/server/cpp/windows.md)中的Step2至Step4完成C++预测代码的编译。
4. 编译成功后,可执行文件在`out\build\x64-Release`目录下,打开`cmd`,并切换到该目录: step 4. 编译成功后,可执行文件在`out\build\x64-Release`目录下,打开`cmd`,并切换到该目录:
``` ```
cd PaddleX\deploy\cpp\out\build\x64-Release cd PaddleX\deploy\cpp\out\build\x64-Release
...@@ -139,8 +139,6 @@ git clone https://github.com/PaddlePaddle/PaddleX ...@@ -139,8 +139,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) |
...@@ -149,7 +147,7 @@ git clone https://github.com/PaddlePaddle/PaddleX ...@@ -149,7 +147,7 @@ git clone https://github.com/PaddlePaddle/PaddleX
| erode_kernel | 图像腐蚀操作时的卷积核大小,默认值为4 | | erode_kernel | 图像腐蚀操作时的卷积核大小,默认值为4 |
| score_threshold | 检测模型输出结果中,预测得分低于该阈值的框将被滤除,默认值为0.5| | score_threshold | 检测模型输出结果中,预测得分低于该阈值的框将被滤除,默认值为0.5|
5. 推理预测: step 5. 推理预测:
用于部署推理的模型应为inference格式,本案例提供的预训练模型均为inference格式,如若是重新训练的模型,需参考[部署模型导出](../deploy/export_model.md)将模型导出为inference格式。 用于部署推理的模型应为inference格式,本案例提供的预训练模型均为inference格式,如若是重新训练的模型,需参考[部署模型导出](../deploy/export_model.md)将模型导出为inference格式。
...@@ -160,6 +158,13 @@ git clone https://github.com/PaddlePaddle/PaddleX ...@@ -160,6 +158,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
.\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
...@@ -171,29 +176,21 @@ git clone https://github.com/PaddlePaddle/PaddleX ...@@ -171,29 +176,21 @@ git clone https://github.com/PaddlePaddle/PaddleX
.\paddlex_inference\meter_reader.exe --det_model_dir=\path\to\det_inference_model --seg_model_dir=\path\to\seg_inference_model --use_camera=1 --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 --use_camera=1 --use_gpu=1 --use_erode=1 --save_dir=output
``` ```
* 使用加密后的模型对单张图片做预测
如果未对模型进行加密,请参考[加密PaddleX模型](../deploy/server/encryption.html#paddlex)对模型进行加密。例如加密后的检测模型所在目录为`\path\to\encrypted_det_inference_model`,密钥为`yEBLDiBOdlj+5EsNNrABhfDuQGkdcreYcHcncqwdbx0=`;加密后的分割模型所在目录为`\path\to\encrypted_seg_inference_model`,密钥为`DbVS64I9pFRo5XmQ8MNV2kSGsfEr4FKA6OH9OUhRrsY=`
```shell
.\paddlex_inference\meter_reader.exe --det_model_dir=\path\to\encrypted_det_inference_model --seg_model_dir=\path\to\encrypted_seg_inference_model --image=\path\to\test.jpg --use_gpu=1 --use_erode=1 --save_dir=output --det_key yEBLDiBOdlj+5EsNNrABhfDuQGkdcreYcHcncqwdbx0= --seg_key DbVS64I9pFRo5XmQ8MNV2kSGsfEr4FKA6OH9OUhRrsY=
```
### Linux系统的jetson嵌入式设备安全部署 ### Linux系统的jetson嵌入式设备安全部署
#### c++部署 #### c++部署
1. 下载PaddleX源码: step 1. 下载PaddleX源码:
``` ```
git clone https://github.com/PaddlePaddle/PaddleX git clone https://github.com/PaddlePaddle/PaddleX
``` ```
2.`PaddleX/examples/meter_reader/deploy/cpp`下的`meter_reader`文件夹和`CMakeList.txt`拷贝至`PaddleX/deploy/cpp`目录下,拷贝之前可以将`PaddleX/deploy/cpp`下原本的`CMakeList.txt`做好备份。 step 2. 将`PaddleX/examples/meter_reader/deploy/cpp`下的`meter_reader`文件夹和`CMakeList.txt`拷贝至`PaddleX/deploy/cpp`目录下,拷贝之前可以将`PaddleX/deploy/cpp`下原本的`CMakeList.txt`做好备份。
3. 按照[Nvidia Jetson开发板部署](../deploy/nvidia-jetson.md)中的Step2至Step3完成C++预测代码的编译。 step 3. 按照[Nvidia Jetson开发板部署](../deploy/nvidia-jetson.md)中的Step2至Step3完成C++预测代码的编译。
4. 编译成功后,可执行程为`build/meter_reader/meter_reader`,其主要命令参数说明如下: step 4. 编译成功后,可执行程为`build/meter_reader/meter_reader`,其主要命令参数说明如下:
| 参数 | 说明 | | 参数 | 说明 |
| ---- | ---- | | ---- | ---- |
...@@ -204,8 +201,6 @@ git clone https://github.com/PaddlePaddle/PaddleX ...@@ -204,8 +201,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) |
...@@ -214,7 +209,7 @@ git clone https://github.com/PaddlePaddle/PaddleX ...@@ -214,7 +209,7 @@ git clone https://github.com/PaddlePaddle/PaddleX
| erode_kernel | 图像腐蚀操作时的卷积核大小,默认值为4 | | erode_kernel | 图像腐蚀操作时的卷积核大小,默认值为4 |
| score_threshold | 检测模型输出结果中,预测得分低于该阈值的框将被滤除,默认值为0.5| | score_threshold | 检测模型输出结果中,预测得分低于该阈值的框将被滤除,默认值为0.5|
5. 推理预测: step 5. 推理预测:
用于部署推理的模型应为inference格式,本案例提供的预训练模型均为inference格式,如若是重新训练的模型,需参考[部署模型导出](../deploy/export_model.md)将模型导出为inference格式。 用于部署推理的模型应为inference格式,本案例提供的预训练模型均为inference格式,如若是重新训练的模型,需参考[部署模型导出](../deploy/export_model.md)将模型导出为inference格式。
...@@ -225,7 +220,13 @@ git clone https://github.com/PaddlePaddle/PaddleX ...@@ -225,7 +220,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
``` ```
...@@ -236,14 +237,6 @@ git clone https://github.com/PaddlePaddle/PaddleX ...@@ -236,14 +237,6 @@ git clone https://github.com/PaddlePaddle/PaddleX
./build/meter_reader/meter_reader --det_model_dir=/path/to/det_inference_model --seg_model_dir=/path/to/seg_inference_model --use_camera=1 --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 --use_camera=1 --use_gpu=1 --use_erode=1 --save_dir=output
``` ```
* 使用加密后的模型对单张图片做预测
如果未对模型进行加密,请参考[加密PaddleX模型](../deploy/server/encryption.html#paddlex)对模型进行加密。例如加密后的检测模型所在目录为`/path/to/encrypted_det_inference_model`,密钥为`yEBLDiBOdlj+5EsNNrABhfDuQGkdcreYcHcncqwdbx0=`;加密后的分割模型所在目录为`/path/to/encrypted_seg_inference_model`,密钥为`DbVS64I9pFRo5XmQ8MNV2kSGsfEr4FKA6OH9OUhRrsY=`
```shell
./build/meter_reader/meter_reader --det_model_dir=/path/to/encrypted_det_inference_model --seg_model_dir=/path/to/encrypted_seg_inference_model --image=/path/to/test.jpg --use_gpu=1 --use_erode=1 --save_dir=output --det_key yEBLDiBOdlj+5EsNNrABhfDuQGkdcreYcHcncqwdbx0= --seg_key DbVS64I9pFRo5XmQ8MNV2kSGsfEr4FKA6OH9OUhRrsY=
```
## 模型训练 ## 模型训练
......
...@@ -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
``` ```
...@@ -180,14 +185,6 @@ git clone https://github.com/PaddlePaddle/PaddleX ...@@ -180,14 +185,6 @@ git clone https://github.com/PaddlePaddle/PaddleX
.\paddlex_inference\meter_reader.exe --det_model_dir=\path\to\det_inference_model --seg_model_dir=\path\to\seg_inference_model --use_camera=1 --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 --use_camera=1 --use_gpu=1 --use_erode=1 --save_dir=output
``` ```
* 使用加密后的模型对单张图片做预测
如果未对模型进行加密,请参考[加密PaddleX模型](../../docs/deploy/server/encryption.md#13-加密paddlex模型)对模型进行加密。例如加密后的检测模型所在目录为`\path\to\encrypted_det_inference_model`,密钥为`yEBLDiBOdlj+5EsNNrABhfDuQGkdcreYcHcncqwdbx0=`;加密后的分割模型所在目录为`\path\to\encrypted_seg_inference_model`,密钥为`DbVS64I9pFRo5XmQ8MNV2kSGsfEr4FKA6OH9OUhRrsY=`
```shell
.\paddlex_inference\meter_reader.exe --det_model_dir=\path\to\encrypted_det_inference_model --seg_model_dir=\path\to\encrypted_seg_inference_model --image=\path\to\test.jpg --use_gpu=1 --use_erode=1 --save_dir=output --det_key yEBLDiBOdlj+5EsNNrABhfDuQGkdcreYcHcncqwdbx0= --seg_key DbVS64I9pFRo5XmQ8MNV2kSGsfEr4FKA6OH9OUhRrsY=
```
### Linux系统的jetson嵌入式设备安全部署 ### Linux系统的jetson嵌入式设备安全部署
#### c++部署 #### c++部署
...@@ -213,8 +210,6 @@ git clone https://github.com/PaddlePaddle/PaddleX ...@@ -213,8 +210,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) |
...@@ -234,6 +229,13 @@ git clone https://github.com/PaddlePaddle/PaddleX ...@@ -234,6 +229,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
...@@ -245,15 +247,6 @@ git clone https://github.com/PaddlePaddle/PaddleX ...@@ -245,15 +247,6 @@ git clone https://github.com/PaddlePaddle/PaddleX
./build/meter_reader/meter_reader --det_model_dir=/path/to/det_inference_model --seg_model_dir=/path/to/seg_inference_model --use_camera=1 --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 --use_camera=1 --use_gpu=1 --use_erode=1 --save_dir=output
``` ```
* 使用加密后的模型对单张图片做预测
如果未对模型进行加密,请参考[加密PaddleX模型](../../docs/deploy/server/encryption.md#13-加密paddlex模型)对模型进行加密。例如加密后的检测模型所在目录为`/path/to/encrypted_det_inference_model`,密钥为`yEBLDiBOdlj+5EsNNrABhfDuQGkdcreYcHcncqwdbx0=`;加密后的分割模型所在目录为`/path/to/encrypted_seg_inference_model`,密钥为`DbVS64I9pFRo5XmQ8MNV2kSGsfEr4FKA6OH9OUhRrsY=`
```shell
./build/meter_reader/meter_reader --det_model_dir=/path/to/encrypted_det_inference_model --seg_model_dir=/path/to/encrypted_seg_inference_model --image=/path/to/test.jpg --use_gpu=1 --use_erode=1 --save_dir=output --det_key yEBLDiBOdlj+5EsNNrABhfDuQGkdcreYcHcncqwdbx0= --seg_key DbVS64I9pFRo5XmQ8MNV2kSGsfEr4FKA6OH9OUhRrsY=
```
## <h2 id="5">模型训练</h2> ## <h2 id="5">模型训练</h2>
......
...@@ -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,
......
...@@ -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:
......
...@@ -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
``` ```
...@@ -17,4 +17,4 @@ python mobilenetv3_small_ssld.py ...@@ -17,4 +17,4 @@ python mobilenetv3_small_ssld.py
visualdl --logdir output/mobilenetv3_small_ssld/vdl_log --port 8001 visualdl --logdir output/mobilenetv3_small_ssld/vdl_log --port 8001
``` ```
服务启动后,使用浏览器打开 https://0.0.0.0:8001 或 https://localhost:8001 服务启动后,使用浏览器打开 https://0.0.0.0:8001 或 https://localhost:8001
...@@ -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.
先完成此消息的编辑!
想要评论请 注册