提交 6fd93453 编写于 作者: J jiangjiajun

update docs

上级 3cb494f3
# 数据标注工具
PaddleX支持图像分类、目标检测、实例分割和语义分割四大视觉领域常见的任务,对于每类视觉任务,都支持了特定的数据格式。PaddleX目前支持了图像分类的ImageNet格式,目标检测的PascalVOC格式,实例分割的MSCOCO格式(MSCOCO也可以用于目标检测)以及语义分割数据格式。
## 常见标注工具
> 图像分类无需标注工具,用户只需以txt文件记录每张图片的类别标签即可。
> 对于目标检测、实例分割和语义分割,PaddleX已经与主流的标注工具进行了适配,用户可根据自己的需求,选择以下标注工具进行数据标注。
| 标注工具 | 图像分类 | 目标检测 | 实例分割 | 语义分割 | 安装 |
| :--------- | :------- | :------ | :------ | :------- | :----------------------------------------------- |
| Labelme | - | √ | √ | √ | pip install labelme (本地数据标注) |
| 精灵标注 | √ | √ | √ | √ | [官网下载](http://www.jinglingbiaozhu.com/) (本地数据标注) |
| EasyData | √ | √ | √ | √ | [Web页面标注](https://ai.baidu.com/easydata/) (需上传数据进行标注) |
数据标注完成后,参照如下流程,将标注数据转为可用PaddleX模型训练的数据组织格式。
## 标注数据格式转换
目前所有标注工具,生成的标注文件,均为与原图同名的json格式文件,如`1.jpg`在标注完成后,则会在标注文件保存的目录生成`1.json`文件。转换时参照以下步骤
> 1. 将所有的原图文件放在同一个目录下,如`pics`目录
> 2. 将所有的标注json文件放在同一个目录下,如`annotations`目录
> 3. 使用如下命令进行转换
```
paddlex --data_conversion --from labelme --to PascalVOC --pics ./pics --annotations ./annotations --save_dir ./converted_dataset_dir
```
> `--from`表示数据标注来源,支持`labelme`、`jingling`和`easydata`(分别表示数据来源于LabelMe,精灵标注助手和EasyData)
> `--to`表示数据需要转换成为的格式,支持`PascalVOC`(目标检测),`MSCOCO`(实例分割,也可用于目标检测)和`SEG`(语义分割)
> `--pics`指定原图所在的目录路径
> `--annotations`指定标注文件所在的目录路径
# 图像分类 # 图像分类ImageNet
## 数据文件夹结构
在PaddleX中,图像分类支持ImageNet数据集格式。数据集目录`data_dir`下包含多个文件夹,每个文件夹中的图像均属于同一个类别,文件夹的命名即为类别名(注意路径中不要包括中文,空格)。
如下为示例结构
```
MyDataset/ # 图像分类数据集根目录
|--dog/ # 当前文件夹所有图片属于dog类别
| |--d1.jpg
| |--d2.jpg
| |--...
| |--...
|
|--...
|
|--snake/ # 当前文件夹所有图片属于snake类别
| |--s1.jpg
| |--s2.jpg
| |--...
| |--...
```
## 划分训练集验证集
**为了用于训练,我们需要在`MyDataset`目录下准备`train_list.txt`, `val_list.txt`和`labels.txt`三个文件**,分别用于表示训练集列表,验证集列表和类别标签列表。[点击下载图像分类示例数据集](https://bj.bcebos.com/paddlex/datasets/vegetables_cls.tar.gz)
> 注:也可使用PaddleX自带工具,对数据集进行随机划分,**在数据集按照上面格式组织后**,使用如下命令即可快速完成数据集随机划分,其中split指标训练集的比例,剩余的比例用于验证集。
> ```
> paddlex --split_dataset --from ImageNet --split 0.8 --save_dir ./splited_dataset_dir
> ```
**labels.txt**
labels.txt用于列出所有类别,类别对应行号表示模型训练过程中类别的id(行号从0开始计数),例如labels.txt为以下内容
```
dog
cat
snake
```
即表示该分类数据集中共有3个类别,分别为`dog``cat``snake`,在模型训练中`dog`对应的类别id为0, `cat`对应1,以此类推
**train_list.txt**
train_list.txt列出用于训练时的图片集合,与其对应的类别id,示例如下
```
dog/d1.jpg 0
dog/d2.jpg 0
cat/c1.jpg 1
... ...
snake/s1.jpg 2
```
其中第一列为相对对`MyDataset`的相对路径,第二列为图片对应类别的类别id
**val_list.txt**
val_list列出用于验证时的图片集成,与其对应的类别id,格式与train_list.txt一致
## PaddleX数据集加载
示例代码如下,
```
import paddlex as pdx
from paddlex.cls import transforms
train_transforms = transforms.ComposedClsTransforms(mode='train', crop_size=[224, 224])
eval_transforms = transforms.ComposedClsTransforms(mode='eval', crop_size=[224, 224])
train_dataset = pdx.datasets.ImageNet(
data_dir='./MyDataset',
file_list='./MyDataset/train_list.txt',
label_list='./MyDataset/labels.txt',
transforms=train_transforms)
eval_dataset = pdx.datasets.ImageNet(
data_dir='./MyDataset',
file_list='./MyDataset/eval_list.txt',
label_list='./MyDataset/labels.txt',
transforms=eval_transforms)
```
# 目标检测和实例分割 # 目标检测PascalVOC
## 数据集文件夹结构
在PaddleX中,目标检测支持PascalVOC数据集格式。建议用户将数据集按照如下方式进行组织,原图均放在同一目录,如`JPEGImages`,标注的同名xml文件均放在同一目录,如`Annotations`,示例如下
```
MyDataset/ # 目标检测数据集根目录
|--JPEGImages/ # 原图文件所在目录
| |--1.jpg
| |--2.jpg
| |--...
| |--...
|
|--Annotations/ # 标注文件所在目录
| |--1.xml
| |--2.xml
| |--...
| |--...
```
## 划分训练集验证集
**为了用于训练,我们需要在`MyDataset`目录下准备`train_list.txt`, `val_list.txt`和`labels.txt`三个文件**,分别用于表示训练集列表,验证集列表和类别标签列表。[点击下载目标检测示例数据集](https://bj.bcebos.com/paddlex/datasets/insect_det.tar.gz)
> 注:也可使用PaddleX自带工具,对数据集进行随机划分,**在数据集按照上面格式组织后**,使用如下命令即可快速完成数据集随机划分,其中split指标训练集的比例,剩余的比例用于验证集。
> ```
> paddlex --split_dataset --from PascalVOC --pics ./JPEGImages --annotations ./Annotations --split 0.8 --save_dir ./splited_dataset_dir
> ```
**labels.txt**
labels.txt用于列出所有类别,类别对应行号表示模型训练过程中类别的id(行号从0开始计数),例如labels.txt为以下内容
```
dog
cat
snake
```
表示该检测数据集中共有3个目标类别,分别为`dog``cat``snake`,在模型训练中`dog`对应的类别id为0, `cat`对应1,以此类推
**train_list.txt**
train_list.txt列出用于训练时的图片集合,与其对应的标注文件,示例如下
```
JPEGImages/1.jpg Annotations/1.xml
JPEGImages/2.jpg Annotations/2.xml
... ...
```
其中第一列为原图相对`MyDataset`的相对路径,第二列为标注文件相对`MyDataset`的相对路径
**val_list.txt**
val_list列出用于验证时的图片集成,与其对应的标注文件,格式与val_list.txt一致
## PaddleX数据集加载
示例代码如下,
```
import paddlex as pdx
from paddlex.det import transforms
train_transforms = transforms.ComposedYOLOv3Transforms(mode='train', shape=[608, 608])
eval_transforms = transforms.ComposedYOLOv3Transforms(mode='eval', shape=[608, 608])
train_dataset = pdx.datasets.VOCDetection(
data_dir='./MyDataset',
file_list='./MyDataset/train_list.txt',
label_list='./MyDataset/labels.txt',
transforms=train_transforms)
eval_dataset = pdx.datasets.VOCDetection(
data_dir='./MyDataset',
file_list='./MyDataset/val_list.txt',
label_list='MyDataset/labels.txt',
transforms=eval_transforms)
```
PaddleX数据格式说明 数据格式说明
======================================= =======================================
...@@ -8,4 +8,5 @@ PaddleX数据格式说明 ...@@ -8,4 +8,5 @@ PaddleX数据格式说明
classification.md classification.md
detection.md detection.md
instance_segmentation.md
segmentation.md segmentation.md
# 实例分割MSCOCO
## 数据集文件夹结构
在PaddleX中,实例分割支持MSCOCO数据集格式(MSCOCO格式同样也可以用于目标检测)。建议用户将数据集按照如下方式进行组织,原图均放在同一目录,如JPEGImages,标注文件(如annotations.json)放在与JPEGImages所在目录同级目录下,示例结构如下
```
MyDataset/ # 实例分割数据集根目录
|--JPEGImages/ # 原图文件所在目录
| |--1.jpg
| |--2.jpg
| |--...
| |--...
|
|--annotations.json # 标注文件所在目录
```
## 划分训练集验证集
在PaddleX中,为了区分训练集和验证集,在`MyDataset`同级目录,使用不同的json表示数据的划分,例如`train.json``val.json`[点击下载实例分割示例数据集](https://bj.bcebos.com/paddlex/datasets/garbage_ins_det.tar.gz)
> 注:也可使用PaddleX自带工具,对数据集进行随机划分,在数据按照上述示例组织结构后,使用如下命令,即可快速完成数据集随机划分,其中split指定训练集的比例,剩余比例用于验证集。
> ```
> paddlex --split_dataset --from MSCOCO --pics ./JPEGImages --annotations ./annotations.json --split 0.8 --save_dir ./splited_dataset_dir
> ```
MSCOCO数据的标注文件采用json格式,用户可使用Labelme, 精灵标注助手或EasyData等标注工具进行标注,参见[数据标注工具](../annotations.md)
## PaddleX加载数据集
示例代码如下,
```
import paddlex as pdx
from paddlex.det import transforms
train_transforms = transforms.ComposedRCNNTransforms(mode='train', min_max_size=[800, 1333])
eval_transforms = transforms.ComposedRCNNTransforms(mode='eval', min_max_size=[800, 1333])
train_dataset = pdx.dataset.CocoDetection(
data_dir='./MyDataset/JPEGImages',
ann_file='./MyDataset/train.json',
transforms=train_transforms)
eval_dataset = pdx.dataset.CocoDetection(
data_dir='./MyDataset/JPEGImages',
ann_file='./MyDataset/val.json',
transforms=eval_transforms)
```
# 语义分割 # 语义分割Seg
## 数据集文件夹结构
在PaddleX中,**标注文件为png文件**。建议用户将数据集按照如下方式进行组织,原图均放在同一目录,如`JPEGImages`,标注的同名png文件均放在同一目录,如`Annotations`,示例如下
```
MyDataset/ # 语义分割数据集根目录
|--JPEGImages/ # 原图文件所在目录
| |--1.jpg
| |--2.jpg
| |--...
| |--...
|
|--Annotations/ # 标注文件所在目录
| |--1.png
| |--2.png
| |--...
| |--...
```
语义分割的标注图像,如1.png,为单通道图像,像素标注类别需要从0开始递增(一般0表示background背景), 例如0, 1, 2, 3表示4种类别,标注类别最多255个类别(其中像素值255不参与训练和评估)。
## 划分训练集验证集
**为了用于训练,我们需要在`MyDataset`目录下准备`train_list.txt`, `val_list.txt`和`labels.txt`三个文件**,分别用于表示训练集列表,验证集列表和类别标签列表。[点击下载语义分割示例数据集](https://bj.bcebos.com/paddlex/datasets/optic_disc_seg.tar.gz)
> 注:也可使用PaddleX自带工具,对数据集进行随机划分,**在数据集按照上面格式组织后**,使用如下命令即可快速完成数据集随机划分,其中split指标训练集的比例,剩余的比例用于验证集。
> ```
> paddlex --split_dataset --from Seg --pics ./JPEGImages --annotations ./Annotations --split 0.8 --save_dir ./splited_dataset_dir
> ```
**labels.txt**
labels.txt用于列出所有类别,类别对应行号表示模型训练过程中类别的id(行号从0开始计数),例如labels.txt为以下内容
```
backgrond
human
car
```
表示该检测数据集中共有3个分割类别,分别为`background``human``car`,在模型训练中`background`对应的类别id为0, `human`对应1,以此类推,如不知具体类别标签,可直接在labels.txt逐行写0,1,2...序列即可。
**train_list.txt**
train_list.txt列出用于训练时的图片集合,与其对应的标注文件,示例如下
```
JPEGImages/1.jpg Annotations/1.png
JPEGImages/2.jpg Annotations/2.png
... ...
```
其中第一列为原图相对`MyDataset`的相对路径,第二列为标注文件相对`MyDataset`的相对路径
**val_list.txt**
val_list列出用于验证时的图片集成,与其对应的标注文件,格式与val_list.txt一致
## PaddleX数据集加载
示例代码如下,
```
import paddlex as pdx
from paddlex.seg import transforms
train_transforms = transforms.ComposedSegTransforms(mode='train', train_crop_size=[512, 512])
eval_transforms = transforms.ComposedSegTransforms(mode='eval', train_crop_size=[512, 512])
train_dataset = pdx.datasets.SegDataset(
data_dir='./MyDataset',
file_list='./MyDataset/train_list.txt',
label_list='./MyDataset/labels.txt',
transforms=train_transforms)
eval_dataset = pdx.datasets.SegDataset(
data_dir='./MyDataset',
file_list='./MyDataset/val_list.txt',
label_list='MyDataset/labels.txt',
transforms=eval_transforms)
```
...@@ -6,5 +6,5 @@ ...@@ -6,5 +6,5 @@
:maxdepth: 2 :maxdepth: 2
:caption: 文档目录: :caption: 文档目录:
annotation/index annotation.md
format/index format/index
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
:maxdepth: 2 :maxdepth: 2
:caption: 文档目录: :caption: 文档目录:
export_model.md
server/index server/index
nvidia-jetson.md nvidia-jetson.md
openvino/index openvino/index
......
数据标注 服务端C++部署
======================================= =======================================
...@@ -6,8 +6,5 @@ ...@@ -6,8 +6,5 @@
:maxdepth: 2 :maxdepth: 2
:caption: 文档目录: :caption: 文档目录:
classification.md windows.md
object_detection.md linux.md
instance_segmentation.md
semantic_segmentation.md
conversion.md
...@@ -6,6 +6,6 @@ ...@@ -6,6 +6,6 @@
:maxdepth: 2 :maxdepth: 2
:caption: 文档目录: :caption: 文档目录:
windows.md python.md
linux.md cpp/index
encryption.md encryption.md
# 服务端Python部署
...@@ -3,23 +3,10 @@ ...@@ -3,23 +3,10 @@
PaddleX是基于飞桨核心框架、开发套件和工具组件的深度学习全流程开发工具。具备 **全流程打通** 、**融合产业实践** 、**易用易集成** 三大特点。 PaddleX是基于飞桨核心框架、开发套件和工具组件的深度学习全流程开发工具。具备 **全流程打通** 、**融合产业实践** 、**易用易集成** 三大特点。
全流程打通
| - **数据准备**: 支持 `EasyData智能数据服务平台数据协议 <https://ai.baidu.com/easydata/>`_ ,通过平台便捷完成智能标注,低质数据清洗工作;同时兼容主流标注工具协议, 助力开发者更快完成数据准备工作。
| - **模型训练**: 基于飞桨核心框架集成 `PaddleClas <https://github.com/PaddlePaddle/PaddleClas>`_ ,`PaddleDetection <https://github.com/PaddlePaddle/PaddleDetection>`_ ,`PaddleSeg <https://github.com/PaddlePaddle/PaddleSeg>`_ 视觉开发套件,丰富的高质量预训练模型,更快实现工业级模型训练。
| - **模型调优**: 内置模型可解释性模块、`VisualDL <https://github.com/PaddlePaddle/VisualDL>`_ 可视化分析组件,提供丰富的信息更好地理解模型,优化模型。
| - **多端安全部署**: 内置 `PaddleSlim <https://github.com/PaddlePaddle/PaddleSlim>`_ 模型压缩工具和AES模型加密SDK,结合Paddle Inference和 `Paddle Lite <https://github.com/PaddlePaddle/Paddle-Lite>`_ 便捷完成高性能的多端安全部署。
融合产业实践
| - 精选飞桨产业实践的成熟模型结构,开放案例实践教程,加速开发者产业落地。
易用易集成
| - 统一易用的全流程API,5步完成模型训练,10行代码实现Python/C++高性能部署。
| - 提供以PaddleX为核心集成的跨平台可视化开发工具PaddleX-GUI,更低门槛快速体验飞桨深度学习全流程。
.. toctree:: .. toctree::
:maxdepth: 2 :maxdepth: 2
:caption: 文档目录: :caption: PaddleX使用文档目录
quick_start.md quick_start.md
install.md install.md
......
# 快速安装 # 快速安装
以下安装过程默认用户已安装好**paddlepaddle-gpu或paddlepaddle(版本大于或等于1.7.1)**,paddlepaddle安装方式参照[飞桨官网](https://www.paddlepaddle.org.cn/install/quick) 以下安装过程默认用户已安装好**paddlepaddle-gpu或paddlepaddle(版本大于或等于1.8.1)**,paddlepaddle安装方式参照[飞桨官网](https://www.paddlepaddle.org.cn/install/quick)
> 推荐使用Anaconda Python环境,Anaconda下安装PaddleX参考文档[Anaconda安装使用](../appendix/anaconda_install.md) - <a href="#pip安装">pip安装PaddleX</a>
- <a href="#github代码安装">github代码安装PaddleX</a>
- <a href="#pycocotools安装问题">pycocotools安装问题</a>
## pip安装 <a name="pip安装"></a>
**安装方式一 pip安装**
> 注意其中pycocotools在Windows安装较为特殊,可参考下面的Windows安装命令 > 注意其中pycocotools在Windows安装较为特殊,可参考下面的Windows安装命令
...@@ -12,8 +15,9 @@ ...@@ -12,8 +15,9 @@
pip install paddlex -i https://mirror.baidu.com/pypi/simple pip install paddlex -i https://mirror.baidu.com/pypi/simple
``` ```
<a name="github代码安装"></a>
**安装方式二 Github代码安装**
## Github代码安装
github代码会跟随开发进度不断更新 github代码会跟随开发进度不断更新
``` ```
...@@ -24,18 +28,17 @@ python setup.py install ...@@ -24,18 +28,17 @@ python setup.py install
``` ```
## 安装问题 <a name="pycocotools安装问题"></a>
### 1. pycocotools安装问题 **pycocotools安装问题**
> PaddleX依赖pycocotools包,如安装pycocotools失败,可参照如下方式安装pycocotools > PaddleX依赖pycocotools包,如安装pycocotools失败,可参照如下方式安装pycocotools
**Windows** > Windows安装时可能会提示缺少`Microsoft Visual C++ 2015 build tools`,[点击下载VC build tools](https://go.microsoft.com/fwlink/?LinkId=691126)安装再执行如下pip命令
> Windows安装时可能会提示缺少`Microsoft Visual C++ 2015 build tools`,[点击下载](https://go.microsoft.com/fwlink/?LinkId=691126)安装再执行如下pip命令
``` ```
pip install cython pip install cython
pip install git+https://gitee.com/jiangjiajun/philferriere-cocoapi.git#subdirectory=PythonAPI pip install git+https://gitee.com/jiangjiajun/philferriere-cocoapi.git#subdirectory=PythonAPI
``` ```
**Linux/Mac安装** > Linux/Mac系统下,直接使用pip安装如下两个依赖即可
``` ```
pip install cython pip install cython
pip install pycocotools pip install pycocotools
......
...@@ -2,47 +2,51 @@ ...@@ -2,47 +2,51 @@
本文档在一个小数据集上展示了如何通过PaddleX进行训练,您可以阅读PaddleX的**使用教程**来了解更多模型任务的训练使用方式。本示例同步在AIStudio上,可直接[在线体验模型训练](https://aistudio.baidu.com/aistudio/projectdetail/439860) 本文档在一个小数据集上展示了如何通过PaddleX进行训练,您可以阅读PaddleX的**使用教程**来了解更多模型任务的训练使用方式。本示例同步在AIStudio上,可直接[在线体验模型训练](https://aistudio.baidu.com/aistudio/projectdetail/439860)
PaddleX的模型训练都分为以下几个步骤
> 1.<a href="#定义训练验证图像处理流程transforms">定义训练/验证图像处理流程transforms</a>
> 2.<a href="#定义dataset加载图像分类数据集">定义dataset加载数据集</a>
> 3.<a href="#使用MoibleNetV3_small_ssld模型开始训练">定义模型开始训练</a>
> 4.<a href="#加载训练保存的模型预测">加载训练保存的模型进行预测</a>
## 1. 安装PaddleX <a name="安装PaddleX"></a>
**1. 安装PaddleX**
> 安装相关过程和问题可以参考PaddleX的[安装文档](./install.md)。 > 安装相关过程和问题可以参考PaddleX的[安装文档](./install.md)。
``` ```
pip install paddlex -i https://mirror.baidu.com/pypi/simple pip install paddlex -i https://mirror.baidu.com/pypi/simple
``` ```
## 2. 准备蔬菜分类数据集 <a name="准备蔬菜分类数据集"></a>
**2. 准备蔬菜分类数据集**
``` ```
wget https://bj.bcebos.com/paddlex/datasets/vegetables_cls.tar.gz wget https://bj.bcebos.com/paddlex/datasets/vegetables_cls.tar.gz
tar xzvf vegetables_cls.tar.gz tar xzvf vegetables_cls.tar.gz
``` ```
## 3. 训练代码开发 <a name="定义训练验证图像处理流程transforms"></a>
PaddleX的所有模型训练和预测均只涉及到5个API接口,分别是 **3. 定义训练/验证图像处理流程transforms**
> - [transforms](apis/transforms/index.html) 图像数据处理
> - [datasets](apis/datasets/classification.md) 数据集加载
> - [models](apis/models/classification.md) 模型类型定义
> - [train](apis/models/classification.html#train) 开始训练
> - [predict](apis/models/classification.html#predict) 模型预测
在本示例,通过如下`train.py`代码进行训练, 训练环境为1张Tesla P40 GPU卡。
### 3.1 定义`transforms`数据处理流程 使用PaddleX内置的分类模型训练图像处理流程`ComposedClsTransforms`,点击查看[API文档说明](apis/transforms/classification.html#composedclstransforms)`ComposedClsTransforms`内置`RandomHorizontalFlip`图像增强,用户也可通过`add_augmenters`函数,为训练过程添加更多数据增强操作,目前分类过程支持多程数据增强操作,详情查阅[数据增强文档](apis/transforms/data_augmentations.md)
由于训练时数据增强操作的加入,因此模型在训练和验证过程中,数据处理流程需要分别进行定义。如下所示,代码在`train_transforms`中加入了[RandomCrop](apis/transforms/cls_transforms.html#RandomCrop)[RandomHorizontalFlip](apis/transforms/cls_transforms.html#RandomHorizontalFlip)两种数据增强方式, 更多方法可以参考[数据增强文档](apis/transforms/augment.md)
``` ```
from paddlex.cls import transforms from paddlex.cls import transforms
train_transforms = transforms.Compose([ train_transforms = transforms.ComposedClsTransforms(
transforms.RandomCrop(crop_size=224), mode='train',
transforms.RandomHorizontalFlip(), crop_size=[224, 224])
transforms.Normalize() eval_transforms = transforms.ComposedClsTransforms(
]) mode='eval',
eval_transforms = transforms.Compose([ crop_size=[224, 224])
transforms.ResizeByShort(short_size=256),
transforms.CenterCrop(crop_size=224),
transforms.Normalize()
])
``` ```
通过`add_augmenters`添加更多训练过程中的数据增强操作,例如
```
train_transforms.add_augmenters([transforms.RandomDistort()])
```
<a name="定义dataset加载图像分类数据集"></a>
**4. 定义`dataset`加载图像分类数据集**
定义数据集,`pdx.datasets.ImageNet`表示读取ImageNet格式的分类数据集
- [paddlex.datasets.ImageNet接口说明](apis/datasets/classification.md)
- [ImageNet数据格式说明](data/format/classification.md)
### 3.2 定义`dataset`加载数据集
定义数据集,`pdx.datasets.ImageNet`表示读取ImageNet格式的分类数据集, 更多数据集细节可以查阅[数据集格式说明](datasets.md)[ImageNet接口文档](apis/datasets/classification.md)
``` ```
train_dataset = pdx.datasets.ImageNet( train_dataset = pdx.datasets.ImageNet(
data_dir='vegetables_cls', data_dir='vegetables_cls',
...@@ -57,53 +61,53 @@ eval_dataset = pdx.datasets.ImageNet( ...@@ -57,53 +61,53 @@ eval_dataset = pdx.datasets.ImageNet(
transforms=eval_transforms) transforms=eval_transforms)
``` ```
### 3.3 定义分类模型 <a name="使用MoibleNetV3_small_ssld模型开始训练"></a>
**5. 使用MobileNetV3_small_ssld模型开始训练**
本文档中使用百度基于蒸馏方法得到的MobileNetV3预训练模型,模型结构与MobileNetV3一致,但精度更高。PaddleX内置了20多种分类模型,查阅[PaddleX模型库](appendix/model_zoo.md)了解更多分类模型。 本文档中使用百度基于蒸馏方法得到的MobileNetV3预训练模型,模型结构与MobileNetV3一致,但精度更高。PaddleX内置了20多种分类模型,查阅[PaddleX模型库](appendix/model_zoo.md)了解更多分类模型。
``` ```
num_classes = len(train_dataset.labels) num_classes = len(train_dataset.labels)
model = pdx.cls.MobileNetV3_small_ssld(num_classes=num_classes) model = pdx.cls.MobileNetV3_small_ssld(num_classes=num_classes)
```
### 3.4 定义训练参数 model.train(num_epochs=20,
定义好模型后,即可直接调用`train`接口,定义训练时的参数,分类模型内置了`piecewise_decay`学习率衰减策略,相关参数见[分类train接口文档](apis/models/classification.html#train)
```
model.train(num_epochs=10,
train_dataset=train_dataset, train_dataset=train_dataset,
train_batch_size=32, train_batch_size=32,
eval_dataset=eval_dataset, eval_dataset=eval_dataset,
lr_decay_epochs=[4, 6, 8], lr_decay_epochs=[4, 6, 8],
learning_rate=0.025, save_dir='output/mobilenetv3_small_ssld',
save_dir='output/mobilenetv2',
use_vdl=True) use_vdl=True)
``` ```
## 4. 模型开始训练 <a name="训练过程使用VisualDL查看训练指标变化"></a>
`train.py`与解压后的数据集目录`vegetables_cls`放在同一目录下,在此目录下运行`train.py`即可开始训练。如果您的电脑上有GPU,这将会在10分钟内训练完成,如果为CPU也大概会在30分钟内训练完毕。 **6. 训练过程使用VisualDL查看训练指标变化**
```
python train.py
```
## 5. 训练过程中查看训练指标 模型在训练过程中,训练指标和在验证集上的指标,均会以标准输出流形式,输出到命令终端。在用户设定`use_vdl=True`的前提下,也会使用VisualDL格式打点到`save_dir`目录下的`vdl_log`文件夹,用户可都终端通过如下命令启动visualdl,查看可视化的指标变化趋势。
模型在训练过程中,所有的迭代信息将以标注输出流的形式,输出到命令执行的终端上,用户也可通过visualdl以可视化的方式查看训练指标的变化,通过如下方式启动visualdl后,在浏览器打开https://0.0.0.0:8001 (或 https://localhost:8001)即可。
``` ```
visualdl --logdir output/mobilenetv2/vdl_log --port 8001 visualdl --logdir output/mobilenetv3_small_ssld --port 8001
``` ```
![](./images/vdl1.jpg) 服务启动后,通过浏览器打开https://0.0.0.0:8001或https://localhost:8001即可。
> 如果您使用的是AIStudio平台进行训练,不能通过此方式启动visualdl,请参考AIStudio VisualDL启动教程使用
<a name="加载训练保存的模型预测"></a>
**7. 加载训练保存的模型预测**
## 6. 训练完成使用模型进行测试 模型在训练过程中,会每间隔一定轮数保存一次模型,在验证集上评估效果最好的一轮会保存在`save_dir`目录下的`best_model`文件夹。通过如下方式可加载模型,进行预测。
如下代码使用训练过程中第8轮保存的模型进行测试。 - [load_model接口说明](apis/load_model.md)
- [分类模型predict接口说明](apis/models/classification.html#predict)
``` ```
import paddlex as pdx import paddlex as pdx
model = pdx.load_model('output/mobilenetv2/epoch_8') model = pdx.load_model('output/mobilenetv3_small_ssld/best_model')
result = model.predict('vegetables_cls/bocai/100.jpg', topk=3) result = model.predict('vegetables_cls/bocai/100.jpg')
print("Predict Result:", result) print("Predict Result: ", result)
``` ```
> 预测结果输出如下,预测按score进行排序,得到前三分类结果 预测结果输出如下,
``` ```
Predict Result: Predict Result: [{'score': 0.9999393, 'category': 'bocai', 'category_id': 0}, {'score': 6.010089e-05, 'category': 'hongxiancai', 'category_id': 2}, {'score': 5.593914e-07, 'category': 'xilanhua', 'category_id': 5}] Predict Result: Predict Result: [{'score': 0.9999393, 'category': 'bocai', 'category_id': 0}]
``` ```
## 其它推荐 <a name="更多使用教程"></a>
**更多使用教程**
- 1.[目标检测模型训练](tutorials/train/detection.md) - 1.[目标检测模型训练](tutorials/train/detection.md)
- 2.[语义分割模型训练](tutorials/train/segmentation.md) - 2.[语义分割模型训练](tutorials/train/segmentation.md)
- 3.[实例分割模型训练](tutorials/train/instance_segmentation.md) - 3.[实例分割模型训练](tutorials/train/instance_segmentation.md)
......
# 图像分类 # 图像分类
PaddleX共提供了20+的图像分类模型,包括基于大规模数据训练的
点击表格中模型名,可获取各模型训练的教程代码
| 模型 | Top1精度 | 模型大小 | GPU预测速度 | Arm预测速度 | 备注 |
| :---------------- | :------- | :------- | :--------- | :--------- | |
| ResNet50_vd_ssld | 97.5% | 22M | 10ms | 200ms | |
| ResNet101_vd_ssld | | | | | |
| MobileNetV3_small_ssld | | | | | |
| MobileNetV3_large_ssld | | | | | |
| MobileNetV2 | | | | | |
| ShuffleNetV2 | | | | | |
| AlexNet | | | | | |
将对应模型的训练代码保存到本地后,即可直接训练,训练代码会自动下载训练数据开始训练,如保存为`resnet50_vd_ssld.py`,如下命令即可开始训练
```
python resnet50_vd_ssld.py
```
- 针对自己的机器环境和数据,调整训练参数?先了解下PaddleX中训练参数。[——>>传送门]()
- 没有机器资源?使用AIStudio免费的GPU资源在线训练模型。[——>>传送门]()
...@@ -5,7 +5,7 @@ PaddleX目前集成了XX模型,涵盖视觉领域的图像分类、目标检 ...@@ -5,7 +5,7 @@ PaddleX目前集成了XX模型,涵盖视觉领域的图像分类、目标检
.. toctree:: .. toctree::
:maxdepth: 2 :maxdepth: 1
:caption: 文档目录: :caption: 文档目录:
classification.md classification.md
......
# 实例分割 # 实例分割
| 模型 | Top1精度 | 模型大小 | GPU预测速度 | Arm预测速度 | 备注 |
| :---------------- | :------- | :------- | :--------- | :--------- | |
| MaskRCNN-ResNet50-FPN | 97.5% | 22M | 10ms | 200ms | |
| MaskRCNN-ResNet101-FPN | | | | | |
| MaskRCNN-HRNet-FPN | | | | | |
将对应模型的训练代码保存到本地后,即可直接训练,训练代码会自动下载训练数据开始训练,如保存为`mask_r50_fpn.py`,如下命令即可开始训练
```
python mask_r50_fpn.py
```
- 针对自己的机器环境和数据,调整训练参数?先了解下PaddleX中训练参数。[——>>传送门]()
- 没有机器资源?使用AIStudio免费的GPU资源在线训练模型。[——>>传送门]()
# 目标检测 # 目标检测
| 模型 | Top1精度 | 模型大小 | GPU预测速度 | Arm预测速度 | 备注 |
| :---------------- | :------- | :------- | :--------- | :--------- | |
| YOLOv3-MobileNetV1 | 97.5% | 22M | 10ms | 200ms | |
| YOLOv3-MobileNetV3 | | | | | |
| YOLOv3-DarkNet53 | | | | | |
| FasterRCNN-ResNet50-FPN | | | | | |
| FasterRCNN-ResNet101-FPN | | | | | |
| FasterRCNN-HRNet-FPN | | | | | |
将对应模型的训练代码保存到本地后,即可直接训练,训练代码会自动下载训练数据开始训练,如保存为`faster_r50_fpn.py`,如下命令即可开始训练
```
python faster_r50_fpn.py
```
- 针对自己的机器环境和数据,调整训练参数?先了解下PaddleX中训练参数。[——>>传送门]()
- 没有机器资源?使用AIStudio免费的GPU资源在线训练模型。[——>>传送门]()
# 模型预测可视化 # 模型预测可视化
PaddleX可以使用`load_model`接口加载模型(包括训练过程中保存的模型,导出的部署模型,量化模型以及裁剪的模型)进行预测,同时PaddleX中也内置了一系列的可视化工具函数,帮助用户方便地检查模型的效果。
## 图像分类
```
import paddlex as pdx
model = pdx.load_model('./mobilenetv2')
result = model.predict('./mobilenetv2/test.jpg')
print("Predict Result: ", result)
```
## 目标检测和实例分割
```
import paddlex as pdx
test_jpg = './xiaoduxiong_epoch_12/test.jpg'
model = pdx.load_model('./xiaoduxiong_epoch_12')
result = model.predict(test_jpg)
pdx.det.visualize(test_jpg, result, thresh=0.5, save_dir='./')
```
在上述示例代码中,通过调用`paddlex.det.visualize`可以对目标检测/实例分割的预测结果进行可视化,可视化的结果保存在`save_dir`下。
> 注意:目标检测和实例分割模型在调用`predict`接口得到的结果需用户自行过滤低置信度结果,在`paddlex.det.visualize`接口中,我们提供了`thresh`用于过滤,置信度低于此值的结果将被过滤,不会可视化。
## 语义分割
```
import paddlex as pdx
test_jpg = './deeplabv3p_mobilenetv2_coco/test.jpg'
model = pdx.load_model('./deeplabv3p_mobilenetv2_coco')
result = model.predict(test_jpg)
pdx.seg.visualize(test_jpg, result, weight=0.0, save_dir='./')
```
在上述示例代码中,通过调用`paddlex.seg.visualize`可以对语义分割的预测结果进行可视化,可视化的结果保存在`save_dir`下。其中`weight`参数用于调整预测结果和原图结果融合展现时的权重,0.0时只展示预测结果mask的可视化,1.0时只展示原图可视化。
PaddleX的`load_model`接口可以满足用户一般的模型调研需求,如若为更高性能的预测部署,可以参考如下文档
- [服务端Python部署]()
- [服务端C++部署]()
# 语义分割 # 语义分割
| 模型 | Top1精度 | 模型大小 | GPU预测速度 | Arm预测速度 | 备注 |
| :---------------- | :------- | :------- | :--------- | :--------- | |
| DeepLabv3p-MobileNetV2 | 97.5% | 22M | 10ms | 200ms | |
| DeepLabv3p-Xception65 | | | | | |
| UNet | | | | | |
| HRNet | | | | | |
| FastSCNN | | | | | |
将对应模型的训练代码保存到本地后,即可直接训练,训练代码会自动下载训练数据开始训练,如保存为`deeplab_mobilenetv2.py`,如下命令即可开始训练
```
python deeplab_mobilenetv2.py
```
- 针对自己的机器环境和数据,调整训练参数?先了解下PaddleX中训练参数。[——>>传送门]()
- 没有机器资源?使用AIStudio免费的GPU资源在线训练模型。[——>>传送门]()
...@@ -356,23 +356,24 @@ class BaseAPI: ...@@ -356,23 +356,24 @@ class BaseAPI:
def export_inference_model(self, save_dir): def export_inference_model(self, save_dir):
test_input_names = [var.name for var in list(self.test_inputs.values())] test_input_names = [var.name for var in list(self.test_inputs.values())]
test_outputs = list(self.test_outputs.values()) test_outputs = list(self.test_outputs.values())
if self.__class__.__name__ == 'MaskRCNN': with fluid.scope_guard(self.scope):
from paddlex.utils.save import save_mask_inference_model if self.__class__.__name__ == 'MaskRCNN':
save_mask_inference_model( from paddlex.utils.save import save_mask_inference_model
dirname=save_dir, save_mask_inference_model(
executor=self.exe, dirname=save_dir,
params_filename='__params__', executor=self.exe,
feeded_var_names=test_input_names, params_filename='__params__',
target_vars=test_outputs, feeded_var_names=test_input_names,
main_program=self.test_prog) target_vars=test_outputs,
else: main_program=self.test_prog)
fluid.io.save_inference_model( else:
dirname=save_dir, fluid.io.save_inference_model(
executor=self.exe, dirname=save_dir,
params_filename='__params__', executor=self.exe,
feeded_var_names=test_input_names, params_filename='__params__',
target_vars=test_outputs, feeded_var_names=test_input_names,
main_program=self.test_prog) target_vars=test_outputs,
main_program=self.test_prog)
model_info = self.get_model_info() model_info = self.get_model_info()
model_info['status'] = 'Infer' model_info['status'] = 'Infer'
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册