diff --git a/docs/data/annotation.md b/docs/data/annotation.md
new file mode 100755
index 0000000000000000000000000000000000000000..7b65f82c99643c6f1cfd964daeb781623f101f2d
--- /dev/null
+++ b/docs/data/annotation.md
@@ -0,0 +1,31 @@
+# 数据标注工具
+
+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`指定标注文件所在的目录路径
diff --git a/docs/data/annotation/classification.md b/docs/data/annotation/classification.md
deleted file mode 100644
index d6f03649ec0f0e19a2a018c147e4643170bd7dd3..0000000000000000000000000000000000000000
--- a/docs/data/annotation/classification.md
+++ /dev/null
@@ -1 +0,0 @@
-# 图像分类数据准备
diff --git a/docs/data/annotation/conversion.md b/docs/data/annotation/conversion.md
deleted file mode 100644
index 368061a6e07a3ac664e6bf475e2b65d07eaa8dc6..0000000000000000000000000000000000000000
--- a/docs/data/annotation/conversion.md
+++ /dev/null
@@ -1 +0,0 @@
-# 标注数据格式转换
diff --git a/docs/data/annotation/index.rst b/docs/data/annotation/index.rst
deleted file mode 100755
index 27eee50ecab85e3e090f96e492c9bcb9b7bae2bd..0000000000000000000000000000000000000000
--- a/docs/data/annotation/index.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-数据标注
-=======================================
-
-
-.. toctree::
- :maxdepth: 2
- :caption: 文档目录:
-
- classification.md
- object_detection.md
- instance_segmentation.md
- semantic_segmentation.md
- conversion.md
diff --git a/docs/data/annotation/instance_segmentation.md b/docs/data/annotation/instance_segmentation.md
deleted file mode 100644
index 86d1597d385021fbfac799bd9952836a068caaa6..0000000000000000000000000000000000000000
--- a/docs/data/annotation/instance_segmentation.md
+++ /dev/null
@@ -1 +0,0 @@
-# 实例分割数据标注
diff --git a/docs/data/annotation/object_detection.md b/docs/data/annotation/object_detection.md
deleted file mode 100644
index 0472b4e37403f16a74f2826f48418e647d9862fa..0000000000000000000000000000000000000000
--- a/docs/data/annotation/object_detection.md
+++ /dev/null
@@ -1 +0,0 @@
-# 目标检测数据标注
diff --git a/docs/data/annotation/semantic_segmentation.md b/docs/data/annotation/semantic_segmentation.md
deleted file mode 100644
index c87407888e213d2effc8630545e87e8315aa3500..0000000000000000000000000000000000000000
--- a/docs/data/annotation/semantic_segmentation.md
+++ /dev/null
@@ -1 +0,0 @@
-# 语义分割数据标注
diff --git a/docs/data/format/classification.md b/docs/data/format/classification.md
index b0e756aea5155b88218d5cfddbd785f28b33362d..70ed5ac34e07ee97321b9eb51168f964ed82f274 100644
--- a/docs/data/format/classification.md
+++ b/docs/data/format/classification.md
@@ -1 +1,75 @@
-# 图像分类
+# 图像分类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)
+```
diff --git a/docs/data/format/detection.md b/docs/data/format/detection.md
index 1659d9cad37505bc829e5fe2c6d2adca8055f63a..19d2ed339bb1424df57b519abf100ae398f35f96 100644
--- a/docs/data/format/detection.md
+++ b/docs/data/format/detection.md
@@ -1 +1,73 @@
-# 目标检测和实例分割
+# 目标检测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)
+
+```
diff --git a/docs/data/format/index.rst b/docs/data/format/index.rst
index a89ba94739f3b59d9ed889f245b58f6541816bd7..98157ad2b3450eb10be43dc4e91fa159dbfdd4a4 100755
--- a/docs/data/format/index.rst
+++ b/docs/data/format/index.rst
@@ -1,4 +1,4 @@
-PaddleX数据格式说明
+数据格式说明
=======================================
@@ -8,4 +8,5 @@ PaddleX数据格式说明
classification.md
detection.md
+ instance_segmentation.md
segmentation.md
diff --git a/docs/data/format/instance_segmentation.md b/docs/data/format/instance_segmentation.md
new file mode 100644
index 0000000000000000000000000000000000000000..d28852485aee17fbebe57d5a0cc32754a6740713
--- /dev/null
+++ b/docs/data/format/instance_segmentation.md
@@ -0,0 +1,44 @@
+# 实例分割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)
+```
diff --git a/docs/data/format/segmentation.md b/docs/data/format/segmentation.md
index ea2f90de05f3d7ddcf4aca6b6eded7e8ab6369c9..f91a9ea28368e8e0d14462a002ed0482d3843d25 100644
--- a/docs/data/format/segmentation.md
+++ b/docs/data/format/segmentation.md
@@ -1 +1,75 @@
-# 语义分割
+# 语义分割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)
+
+```
diff --git a/docs/data/index.rst b/docs/data/index.rst
index aa7350873494aec0bb0f5cc74fd1b1ee2cc99ba4..419ed81f528fe786dca3e6a0d777c1412859dfb7 100755
--- a/docs/data/index.rst
+++ b/docs/data/index.rst
@@ -6,5 +6,5 @@
:maxdepth: 2
:caption: 文档目录:
- annotation/index
+ annotation.md
format/index
diff --git a/docs/deploy/export_model.md b/docs/deploy/export_model.md
new file mode 100644
index 0000000000000000000000000000000000000000..7e9eed088c3db7925cf6564b8d4cb892499209f1
--- /dev/null
+++ b/docs/deploy/export_model.md
@@ -0,0 +1 @@
+# 部署模型导出
diff --git a/docs/deploy/index.rst b/docs/deploy/index.rst
index d2c963a0f2063dd83ae4810438914950941cf608..23337c7d279ce624a22c048c6ffc716c72d89090 100755
--- a/docs/deploy/index.rst
+++ b/docs/deploy/index.rst
@@ -6,6 +6,7 @@
:maxdepth: 2
:caption: 文档目录:
+ export_model.md
server/index
nvidia-jetson.md
openvino/index
diff --git a/docs/deploy/server/cpp/index.rst b/docs/deploy/server/cpp/index.rst
new file mode 100755
index 0000000000000000000000000000000000000000..b366d1e6aeba1ef191b3a2319825df84ecaf81de
--- /dev/null
+++ b/docs/deploy/server/cpp/index.rst
@@ -0,0 +1,10 @@
+服务端C++部署
+=======================================
+
+
+.. toctree::
+ :maxdepth: 2
+ :caption: 文档目录:
+
+ windows.md
+ linux.md
diff --git a/docs/deploy/server/cpp/linux.md b/docs/deploy/server/cpp/linux.md
new file mode 100644
index 0000000000000000000000000000000000000000..6e2e0c20b536fff2d273cbad3dee9c3002f02123
--- /dev/null
+++ b/docs/deploy/server/cpp/linux.md
@@ -0,0 +1 @@
+# Linux编译部署
diff --git a/docs/deploy/server/cpp/windows.md b/docs/deploy/server/cpp/windows.md
new file mode 100644
index 0000000000000000000000000000000000000000..863bda3b00f1b7d6e11a12f680ba8a9065ac1346
--- /dev/null
+++ b/docs/deploy/server/cpp/windows.md
@@ -0,0 +1 @@
+# Windows编译部署
diff --git a/docs/deploy/server/index.rst b/docs/deploy/server/index.rst
index 0fc4985f0277897ca39de06d031520a139052643..f362afa915f85a832ed1aa152d845333f3764f45 100755
--- a/docs/deploy/server/index.rst
+++ b/docs/deploy/server/index.rst
@@ -6,6 +6,6 @@
:maxdepth: 2
:caption: 文档目录:
- windows.md
- linux.md
+ python.md
+ cpp/index
encryption.md
diff --git a/docs/deploy/server/linux.md b/docs/deploy/server/linux.md
deleted file mode 100644
index 345abeee1b8c41a835479eca02f7d48473a9ee7f..0000000000000000000000000000000000000000
--- a/docs/deploy/server/linux.md
+++ /dev/null
@@ -1 +0,0 @@
-# Linux服务端部署
diff --git a/docs/deploy/server/python.md b/docs/deploy/server/python.md
new file mode 100644
index 0000000000000000000000000000000000000000..3017d972bb5934f456adb2535ef669290dcced57
--- /dev/null
+++ b/docs/deploy/server/python.md
@@ -0,0 +1 @@
+# 服务端Python部署
diff --git a/docs/deploy/server/windows.md b/docs/deploy/server/windows.md
deleted file mode 100644
index 06bcee7d4f96a60505476ff0cf0dc5f2740c6d28..0000000000000000000000000000000000000000
--- a/docs/deploy/server/windows.md
+++ /dev/null
@@ -1 +0,0 @@
-# Windows服务端部署
diff --git a/docs/index.rst b/docs/index.rst
index 45616d4bbe043c236ff5762e4c364c433cb0380c..8308b56bf1eb330fcf608ddd33132339dd47d7d5 100755
--- a/docs/index.rst
+++ b/docs/index.rst
@@ -3,23 +3,10 @@
PaddleX是基于飞桨核心框架、开发套件和工具组件的深度学习全流程开发工具。具备 **全流程打通** 、**融合产业实践** 、**易用易集成** 三大特点。
-全流程打通
- | - **数据准备**: 支持 `EasyData智能数据服务平台数据协议 `_ ,通过平台便捷完成智能标注,低质数据清洗工作;同时兼容主流标注工具协议, 助力开发者更快完成数据准备工作。
- | - **模型训练**: 基于飞桨核心框架集成 `PaddleClas `_ ,`PaddleDetection `_ ,`PaddleSeg `_ 视觉开发套件,丰富的高质量预训练模型,更快实现工业级模型训练。
- | - **模型调优**: 内置模型可解释性模块、`VisualDL `_ 可视化分析组件,提供丰富的信息更好地理解模型,优化模型。
- | - **多端安全部署**: 内置 `PaddleSlim `_ 模型压缩工具和AES模型加密SDK,结合Paddle Inference和 `Paddle Lite `_ 便捷完成高性能的多端安全部署。
-
-融合产业实践
- | - 精选飞桨产业实践的成熟模型结构,开放案例实践教程,加速开发者产业落地。
-
-易用易集成
- | - 统一易用的全流程API,5步完成模型训练,10行代码实现Python/C++高性能部署。
- | - 提供以PaddleX为核心集成的跨平台可视化开发工具PaddleX-GUI,更低门槛快速体验飞桨深度学习全流程。
-
.. toctree::
:maxdepth: 2
- :caption: 文档目录:
+ :caption: PaddleX使用文档目录
quick_start.md
install.md
diff --git a/docs/install.md b/docs/install.md
index cdbc84cab3dc825e69e325348b3c528d83bcd225..d513fab442c8d6139c3850b3d1228dae6e52a671 100755
--- a/docs/install.md
+++ b/docs/install.md
@@ -1,10 +1,13 @@
# 快速安装
-以下安装过程默认用户已安装好**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)
+- pip安装PaddleX
+- github代码安装PaddleX
+- pycocotools安装问题
-## pip安装
+
+**安装方式一 pip安装**
> 注意其中pycocotools在Windows安装较为特殊,可参考下面的Windows安装命令
@@ -12,8 +15,9 @@
pip install paddlex -i https://mirror.baidu.com/pypi/simple
```
+
+**安装方式二 Github代码安装**
-## Github代码安装
github代码会跟随开发进度不断更新
```
@@ -24,18 +28,17 @@ python setup.py install
```
-## 安装问题
-### 1. pycocotools安装问题
+
+**pycocotools安装问题**
> PaddleX依赖pycocotools包,如安装pycocotools失败,可参照如下方式安装pycocotools
-**Windows**
-> Windows安装时可能会提示缺少`Microsoft Visual C++ 2015 build tools`,[点击下载](https://go.microsoft.com/fwlink/?LinkId=691126)安装再执行如下pip命令
+> Windows安装时可能会提示缺少`Microsoft Visual C++ 2015 build tools`,[点击下载VC build tools](https://go.microsoft.com/fwlink/?LinkId=691126)安装再执行如下pip命令
```
pip install cython
pip install git+https://gitee.com/jiangjiajun/philferriere-cocoapi.git#subdirectory=PythonAPI
```
-**Linux/Mac安装**
+> Linux/Mac系统下,直接使用pip安装如下两个依赖即可
```
pip install cython
pip install pycocotools
diff --git a/docs/quick_start.md b/docs/quick_start.md
index a24cdadf410abd738750a18b4f5e99b8265cb7d3..5baa679bad17c61b315c21bb421bbbdd55a87bcf 100644
--- a/docs/quick_start.md
+++ b/docs/quick_start.md
@@ -2,47 +2,51 @@
本文档在一个小数据集上展示了如何通过PaddleX进行训练,您可以阅读PaddleX的**使用教程**来了解更多模型任务的训练使用方式。本示例同步在AIStudio上,可直接[在线体验模型训练](https://aistudio.baidu.com/aistudio/projectdetail/439860)
+PaddleX的模型训练都分为以下几个步骤
+> 1.定义训练/验证图像处理流程transforms
+> 2.定义dataset加载数据集
+> 3.定义模型开始训练
+> 4.加载训练保存的模型进行预测
-## 1. 安装PaddleX
+
+**1. 安装PaddleX**
> 安装相关过程和问题可以参考PaddleX的[安装文档](./install.md)。
```
pip install paddlex -i https://mirror.baidu.com/pypi/simple
```
-## 2. 准备蔬菜分类数据集
+
+**2. 准备蔬菜分类数据集**
```
wget https://bj.bcebos.com/paddlex/datasets/vegetables_cls.tar.gz
tar xzvf vegetables_cls.tar.gz
```
-## 3. 训练代码开发
-PaddleX的所有模型训练和预测均只涉及到5个API接口,分别是
-> - [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. 定义训练/验证图像处理流程transforms**
-### 3.1 定义`transforms`数据处理流程
-由于训练时数据增强操作的加入,因此模型在训练和验证过程中,数据处理流程需要分别进行定义。如下所示,代码在`train_transforms`中加入了[RandomCrop](apis/transforms/cls_transforms.html#RandomCrop)和[RandomHorizontalFlip](apis/transforms/cls_transforms.html#RandomHorizontalFlip)两种数据增强方式, 更多方法可以参考[数据增强文档](apis/transforms/augment.md)。
+使用PaddleX内置的分类模型训练图像处理流程`ComposedClsTransforms`,点击查看[API文档说明](apis/transforms/classification.html#composedclstransforms)。`ComposedClsTransforms`内置`RandomHorizontalFlip`图像增强,用户也可通过`add_augmenters`函数,为训练过程添加更多数据增强操作,目前分类过程支持多程数据增强操作,详情查阅[数据增强文档](apis/transforms/data_augmentations.md)
```
from paddlex.cls import transforms
-train_transforms = transforms.Compose([
- transforms.RandomCrop(crop_size=224),
- transforms.RandomHorizontalFlip(),
- transforms.Normalize()
-])
-eval_transforms = transforms.Compose([
- transforms.ResizeByShort(short_size=256),
- transforms.CenterCrop(crop_size=224),
- transforms.Normalize()
-])
+train_transforms = transforms.ComposedClsTransforms(
+ mode='train',
+ crop_size=[224, 224])
+eval_transforms = transforms.ComposedClsTransforms(
+ mode='eval',
+ crop_size=[224, 224])
```
+通过`add_augmenters`添加更多训练过程中的数据增强操作,例如
+```
+train_transforms.add_augmenters([transforms.RandomDistort()])
+```
+
+
+**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(
data_dir='vegetables_cls',
@@ -57,53 +61,53 @@ eval_dataset = pdx.datasets.ImageNet(
transforms=eval_transforms)
```
-### 3.3 定义分类模型
+
+**5. 使用MobileNetV3_small_ssld模型开始训练**
+
本文档中使用百度基于蒸馏方法得到的MobileNetV3预训练模型,模型结构与MobileNetV3一致,但精度更高。PaddleX内置了20多种分类模型,查阅[PaddleX模型库](appendix/model_zoo.md)了解更多分类模型。
```
num_classes = len(train_dataset.labels)
model = pdx.cls.MobileNetV3_small_ssld(num_classes=num_classes)
-```
-### 3.4 定义训练参数
-定义好模型后,即可直接调用`train`接口,定义训练时的参数,分类模型内置了`piecewise_decay`学习率衰减策略,相关参数见[分类train接口文档](apis/models/classification.html#train)。
-```
-model.train(num_epochs=10,
+model.train(num_epochs=20,
train_dataset=train_dataset,
train_batch_size=32,
eval_dataset=eval_dataset,
lr_decay_epochs=[4, 6, 8],
- learning_rate=0.025,
- save_dir='output/mobilenetv2',
+ save_dir='output/mobilenetv3_small_ssld',
use_vdl=True)
```
-## 4. 模型开始训练
-`train.py`与解压后的数据集目录`vegetables_cls`放在同一目录下,在此目录下运行`train.py`即可开始训练。如果您的电脑上有GPU,这将会在10分钟内训练完成,如果为CPU也大概会在30分钟内训练完毕。
-```
-python train.py
-```
+
+**6. 训练过程使用VisualDL查看训练指标变化**
-## 5. 训练过程中查看训练指标
-模型在训练过程中,所有的迭代信息将以标注输出流的形式,输出到命令执行的终端上,用户也可通过visualdl以可视化的方式查看训练指标的变化,通过如下方式启动visualdl后,在浏览器打开https://0.0.0.0:8001 (或 https://localhost:8001)即可。
+模型在训练过程中,训练指标和在验证集上的指标,均会以标准输出流形式,输出到命令终端。在用户设定`use_vdl=True`的前提下,也会使用VisualDL格式打点到`save_dir`目录下的`vdl_log`文件夹,用户可都终端通过如下命令启动visualdl,查看可视化的指标变化趋势。
```
-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启动教程使用
+
+
+**7. 加载训练保存的模型预测**
-## 6. 训练完成使用模型进行测试
-如下代码使用训练过程中第8轮保存的模型进行测试。
+模型在训练过程中,会每间隔一定轮数保存一次模型,在验证集上评估效果最好的一轮会保存在`save_dir`目录下的`best_model`文件夹。通过如下方式可加载模型,进行预测。
+- [load_model接口说明](apis/load_model.md)
+- [分类模型predict接口说明](apis/models/classification.html#predict)
```
import paddlex as pdx
-model = pdx.load_model('output/mobilenetv2/epoch_8')
-result = model.predict('vegetables_cls/bocai/100.jpg', topk=3)
-print("Predict Result:", result)
+model = pdx.load_model('output/mobilenetv3_small_ssld/best_model')
+result = model.predict('vegetables_cls/bocai/100.jpg')
+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}]
```
-## 其它推荐
+
+**更多使用教程**
- 1.[目标检测模型训练](tutorials/train/detection.md)
- 2.[语义分割模型训练](tutorials/train/segmentation.md)
- 3.[实例分割模型训练](tutorials/train/instance_segmentation.md)
diff --git a/docs/train/classification.md b/docs/train/classification.md
index b0e756aea5155b88218d5cfddbd785f28b33362d..6ed0a428afa73d5173542f5acc0f8748f41baf07 100644
--- a/docs/train/classification.md
+++ b/docs/train/classification.md
@@ -1 +1,24 @@
# 图像分类
+
+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资源在线训练模型。[——>>传送门]()
diff --git a/docs/train/index.rst b/docs/train/index.rst
index 5995489d59cb87ad4f82913c7f6e7b5647b3bce8..d88ea52dce1b5b9dbdb9d0101454fde8d4aac5c7 100755
--- a/docs/train/index.rst
+++ b/docs/train/index.rst
@@ -5,7 +5,7 @@ PaddleX目前集成了XX模型,涵盖视觉领域的图像分类、目标检
.. toctree::
- :maxdepth: 2
+ :maxdepth: 1
:caption: 文档目录:
classification.md
diff --git a/docs/train/instance_segmentation.md b/docs/train/instance_segmentation.md
index ec1d364fb6e011f89f383da3e7b07b60300011f9..2117dc3124c83c5c1df29d224f416f6671b12866 100644
--- a/docs/train/instance_segmentation.md
+++ b/docs/train/instance_segmentation.md
@@ -1 +1,15 @@
# 实例分割
+
+| 模型 | 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资源在线训练模型。[——>>传送门]()
diff --git a/docs/train/object_detection.md b/docs/train/object_detection.md
index 61e17735f2e59a8d23021fd7d9f32bd05cab794d..20c070c075e886121099edc597b0030acebb2e28 100644
--- a/docs/train/object_detection.md
+++ b/docs/train/object_detection.md
@@ -1,2 +1,18 @@
# 目标检测
+| 模型 | 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资源在线训练模型。[——>>传送门]()
diff --git a/docs/train/prediction.md b/docs/train/prediction.md
index c323cf1122aec605a13ca52b81cb9652e5ea4075..22a7dacabb87b0e8fe23b704bfe099e088c29608 100644
--- a/docs/train/prediction.md
+++ b/docs/train/prediction.md
@@ -1 +1,40 @@
# 模型预测可视化
+
+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++部署]()
diff --git a/docs/train/semantic_segmentation.md b/docs/train/semantic_segmentation.md
index ea2f90de05f3d7ddcf4aca6b6eded7e8ab6369c9..09866b7f13bd30e51799f6bc0a87e9908c76d9ff 100644
--- a/docs/train/semantic_segmentation.md
+++ b/docs/train/semantic_segmentation.md
@@ -1 +1,17 @@
# 语义分割
+
+| 模型 | 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资源在线训练模型。[——>>传送门]()
diff --git a/paddlex/cv/models/base.py b/paddlex/cv/models/base.py
index 9256bd17a067e9346be760ad00e06fda8a38f2bb..1bf3a2c97a3ef9680aae64206aeb72207b759642 100644
--- a/paddlex/cv/models/base.py
+++ b/paddlex/cv/models/base.py
@@ -356,23 +356,24 @@ class BaseAPI:
def export_inference_model(self, save_dir):
test_input_names = [var.name for var in list(self.test_inputs.values())]
test_outputs = list(self.test_outputs.values())
- if self.__class__.__name__ == 'MaskRCNN':
- from paddlex.utils.save import save_mask_inference_model
- save_mask_inference_model(
- dirname=save_dir,
- executor=self.exe,
- params_filename='__params__',
- feeded_var_names=test_input_names,
- target_vars=test_outputs,
- main_program=self.test_prog)
- else:
- fluid.io.save_inference_model(
- dirname=save_dir,
- executor=self.exe,
- params_filename='__params__',
- feeded_var_names=test_input_names,
- target_vars=test_outputs,
- main_program=self.test_prog)
+ with fluid.scope_guard(self.scope):
+ if self.__class__.__name__ == 'MaskRCNN':
+ from paddlex.utils.save import save_mask_inference_model
+ save_mask_inference_model(
+ dirname=save_dir,
+ executor=self.exe,
+ params_filename='__params__',
+ feeded_var_names=test_input_names,
+ target_vars=test_outputs,
+ main_program=self.test_prog)
+ else:
+ fluid.io.save_inference_model(
+ dirname=save_dir,
+ executor=self.exe,
+ params_filename='__params__',
+ feeded_var_names=test_input_names,
+ target_vars=test_outputs,
+ main_program=self.test_prog)
model_info = self.get_model_info()
model_info['status'] = 'Infer'