Преглед изворни кода

Merge pull request #933 from FlyingQianMM/develop_qh

update docs
FlyingQianMM пре 4 година
родитељ
комит
efa4b2a963

+ 6 - 8
dygraph/README.md

@@ -32,12 +32,12 @@
 
 ### 1. 快速上手PaddleX
 
-
 * [快速安装PaddleX](./docs/install.md)
   * [PaddleX API开发模式安装](./docs/install.md#1-paddlex-api开发模式安装)
   * [PadldeX GUI开发模式安装](./docs/install.md#2-padldex-gui开发模式安装)
   * [PaddleX Restful开发模式安装](./docs/install.md#3-paddlex-restful开发模式安装)
 * [10分钟快速上手使用](./docs/quick_start.md)
+* [AIStudio在线项目示例](https://aistudio.baidu.com/aistudio/projectdetail/2159977)
 
 
 ### 2. 数据准备
@@ -58,14 +58,12 @@
     * [API文档](./docs/apis)
       * [数据集读取API](./docs/apis/datasets.md)
       * [数据预处理和数据增强API](./docs/apis/transforms/transforms.md)
-      * [图像分类模型API](./docs/apis/models/classification.md)
-      * [目标检测模型API](./docs/apis/models/detection.md)
-      * [实例分割模型API](./docs/apis/models/instance_segmentation.md)
-      * [图像分割模型API](./docs/apis/models/semantic_segmentation.md)
+      * [模型API/模型加载API](./docs/apis/models/README.md)
+      * [预测结果可视化API](./docs/apis/visualize.md)
     * [模型训练与参数调整](tutorials/train)
       * [模型训练](tutorials/train)
-      * [训练参数调整](./docs//parameters.md)
-    * [VisualDL可视化训练指标](../docs/train/visualdl.md)
+      * [训练参数调整](./docs/parameters.md)
+    * [VisualDL可视化训练指标](./docs/visualdl.md)
     * [加载训好的模型完成预测及预测结果可视化](./docs/apis/prediction.md)
 
 * **PaddleX GUI开发模式:**
@@ -93,7 +91,7 @@
 - [缺陷检测](examples/defect_detection)
 - [机械手抓取](examples/robot_grab)
 - [工业表计读数](examples/meter_reader)
-- [Windows系统下使用C#语言部署](examples/C#_deploy)
+- [Windows系统下使用C#语言部署](examples/C%23_deploy)
 
 ## 版本更新
 

+ 7 - 0
dygraph/docs/apis/models/README.md

@@ -0,0 +1,7 @@
+# 模型API
+
+* [图像分类模型API](./classification.md)
+* [目标检测模型API](./detection.md)
+* [实例分割模型API](./instance_segmentation.md)
+* [图像分割模型API](./semantic_segmentation.md)
+* [模型加载API](./load_model.md)

+ 20 - 8
dygraph/docs/apis/models/classification.md

@@ -1,6 +1,16 @@
 # Image Classification
 
-## paddlex.cls.ResNet50
+## 目录
+* [paddlex.cls.ResNet50](#1)
+  * [train](#11)
+  * [evaluate](#12)
+  * [predict](#13)
+  * [analyze_sensitivity](#14)
+  * [prune](#15)
+  * [quant_aware_train](#16)
+* [其他分类模型](#2)
+
+## <h2 id="1">paddlex.cls.ResNet50</h2>
 
 ```python
 paddlex.cls.ResNet50(num_classes=1000)
@@ -12,7 +22,7 @@ paddlex.cls.ResNet50(num_classes=1000)
 >
 > - **num_classes** (int): 类别数。默认为1000。  
 
-### train
+### <h3 id="11">train</h3>
 
 ```python
 train(self, num_epochs, train_dataset, train_batch_size=64, eval_dataset=None, optimizer=None, save_interval_epochs=1, log_interval_steps=10, save_dir='output', pretrain_weights='IMAGENET', learning_rate=.025, warmup_steps=0, warmup_start_lr=0.0, lr_decay_epochs=(30, 60, 90), lr_decay_gamma=0.1, early_stop=False, early_stop_patience=5, use_vdl=True)
@@ -37,8 +47,9 @@ train(self, num_epochs, train_dataset, train_batch_size=64, eval_dataset=None, o
 > > - **early_stop** (bool): 是否使用提前终止训练策略。默认为False。
 > > - **early_stop_patience** (int): 当使用提前终止训练策略时,如果验证集精度在`early_stop_patience`个epoch内连续下降或持平,则终止训练。默认为5。
 > > - **use_vdl** (bool): 是否使用VisualDL进行可视化。默认为True。
+> > - **resume_checkpoint** (str): 恢复训练时指定上次训练保存的模型路径,例如`output/mobilenetv3_small/best_model`。若为None,则不会恢复训练。默认值为None。
 
-### evaluate
+### <h3 id="12">evaluate</h3>
 
 ```python
 evaluate(self, eval_dataset, batch_size=1, return_details=False)
@@ -54,7 +65,7 @@ evaluate(self, eval_dataset, batch_size=1, return_details=False)
 >
 > > - **tuple** (metrics, eval_details) | **dict** (metrics): 当`return_details`为True时,返回(metrics, eval_details),当`return_details`为False时,返回metrics。 metrics为dict,包含键值:'acc1'、'acc5',分别表示最大值的accuracy、前5个最大值的accuracy。eval_details为dict。包含键值:'true_labels'、'pred_scores',分别代表真实类别id、每个类别的预测得分。
 
-### predict
+### <h3 id="13">predict</h3>
 
 ```python
 predict(self, img_file, transforms=None, topk=1)
@@ -72,7 +83,7 @@ predict(self, img_file, transforms=None, topk=1)
 >
 > > - **dict** | **List[dict]**: 如果输入为单张图像,返回dict。包含的键值为'category_id'、'category'、'score',分别对应预测类别id、预测类别标签、预测得分。如果输入为多张图像,返回由每张图像预测结果组成的列表。
 
-### analyze_sensitivity
+### <h3 id="14">analyze_sensitivity</h3>
 
 ```python
 analyze_sensitivity(self, dataset, batch_size=8, criterion='l1_norm', save_dir='output')
@@ -87,7 +98,7 @@ analyze_sensitivity(self, dataset, batch_size=8, criterion='l1_norm', save_dir='
 > > - **criterion** ({'l1_norm', 'fpgm'}): 进行Filter粒度剪裁时评估,评估Filter重要性的范数标准。如果为'l1_norm',采用L1-Norm标准。如果为'fpgm',采用 [Geometric Median](https://arxiv.org/abs/1811.00250) 标准。
 > > - **save_dir** (str): 计算的得到的sensetives文件的存储路径。
 
-### prune
+### <h3 id="15">prune</h3>
 
 ```python
 prune(self, pruned_flops, save_dir=None)
@@ -99,7 +110,7 @@ prune(self, pruned_flops, save_dir=None)
 > > - **pruned_flops** (float): 每秒浮点数运算次数(FLOPs)的剪裁比例。
 > > - **save_dir** (None or str): 剪裁后模型保存路径。如果为None,剪裁完成后不会对模型进行保存。默认为None。
 
-### quant_aware_train
+### <h3 id="16">quant_aware_train</h3>
 
 ```python
 quant_aware_train(self, num_epochs, train_dataset, train_batch_size=64, eval_dataset=None, optimizer=None, save_interval_epochs=1, log_interval_steps=10, save_dir='output', learning_rate=.000025, warmup_steps=0, warmup_start_lr=0.0, lr_decay_epochs=(30, 60, 90), lr_decay_gamma=0.1, early_stop=False, early_stop_patience=5, use_vdl=True, quant_config=None)
@@ -155,7 +166,8 @@ quant_aware_train(self, num_epochs, train_dataset, train_batch_size=64, eval_dat
 > >  ```
 
 
-## 其它分类模型
+## <h2 id="2">其他分类模型</h2>
+
 
 PaddleX提供了共计38种分类模型,所有分类模型均提供同`ResNet50`相同的训练`train`,评估`evaluate`,预测`predict`,敏感度分析`analyze_sensitivity`,剪裁`prune`和在线量化`quant_aware_train`接口,各模型效果可参考[模型库](../../appendix/model_zoo.md)。
 

+ 28 - 11
dygraph/docs/apis/models/detection.md

@@ -1,6 +1,21 @@
 # Object Detection
 
-## paddlex.det.PPYOLOv2
+
+## 目录
+* [paddlex.det.PPYOLOv2](#1)
+  * [train](#11)
+  * [evaluate](#12)
+  * [predict](#13)
+  * [analyze_sensitivity](#14)
+  * [prune](#15)
+  * [quant_aware_train](#16)
+* [paddlex.det.PPYOLO](#2)
+* [paddlex.det.PPYOLOTiny](#3)
+* [paddlex.det.YOLOv3](#4)
+* [paddlex.det.FasterRCNN](#5)
+
+
+## <h2 id="1">paddlex.det.PPYOLOv2</h2>
 
 ```python
 paddlex.det.PPYOLOv2(num_classes=80, backbone='ResNet50_vd_dcn', anchors=[[10, 13], [16, 30], [33, 23], [30, 61], [62, 45], [59, 119], [116, 90], [156, 198], [373, 326]], anchor_masks=[[6, 7, 8], [3, 4, 5], [0, 1, 2]], use_iou_aware=True, use_spp=True, use_drop_block=True, scale_x_y=1.05, ignore_threshold=0.7, label_smooth=False, use_iou_loss=True, use_matrix_nms=True, nms_score_threshold=0.01, nms_topk=-1, nms_keep_topk=100, nms_iou_threshold=0.45)
@@ -27,7 +42,7 @@ paddlex.det.PPYOLOv2(num_classes=80, backbone='ResNet50_vd_dcn', anchors=[[10, 1
 > > - **nms_keep_topk** (int): 进行NMS后,每个图像要保留的总检测框数。默认为100。
 > > - **nms_iou_threshold** (float): 进行NMS时,用于剔除检测框IOU的阈值。默认为0.45。
 
-### train
+### <h3 id="11">train</h3>
 
 ```python
 train(self, num_epochs, train_dataset, train_batch_size=64, eval_dataset=None, optimizer=None, save_interval_epochs=1, log_interval_steps=10, save_dir='output', pretrain_weights='IMAGENET', learning_rate=.001, warmup_steps=0, warmup_start_lr=0.0, lr_decay_epochs=(216, 243), lr_decay_gamma=0.1, metric=None, use_ema=False, early_stop=False, early_stop_patience=5, use_vdl=True)
@@ -56,8 +71,9 @@ train(self, num_epochs, train_dataset, train_batch_size=64, eval_dataset=None, o
 > > - **early_stop** (bool): 是否使用提前终止训练策略。默认为False。
 > > - **early_stop_patience** (int): 当使用提前终止训练策略时,如果验证集精度在`early_stop_patience`个epoch内连续下降或持平,则终止训练。默认为5。
 > > - **use_vdl** (bool): 是否使用VisualDL进行可视化。默认为True。
+> > - **resume_checkpoint** (str): 恢复训练时指定上次训练保存的模型路径,例如`output/ppyolov2/best_model`。若为None,则不会恢复训练。默认值为None。
 
-### evaluate
+### <h3 id="12">evaluate</h3>
 
 ```python
 evaluate(self, eval_dataset, batch_size=1, metric=None, return_details=False)
@@ -76,7 +92,7 @@ evaluate(self, eval_dataset, batch_size=1, metric=None, return_details=False)
 >
 > > - **tuple** (metrics, eval_details) | **dict** (metrics): 当`return_details`为True时,返回(metrics, eval_details),当`return_details`为False时,返回metrics。metrics为dict,包含关键字:'bbox_mmap'或者’bbox_map‘,分别表示平均准确率平均值在各个阈值下的结果取平均值的结果(mmAP)、平均准确率平均值(mAP)。eval_details为dict,包含bbox和gt两个关键字。其中关键字bbox的键值是一个列表,列表中每个元素代表一个预测结果,一个预测结果是一个由图像id,预测框类别id, 预测框坐标,预测框得分组成的列表。而关键字gt的键值是真实标注框的相关信息。
 
-### predict
+### <h3 id="13">predict</h3>
 
 ```python
 predict(self, img_file, transforms=None)
@@ -93,7 +109,7 @@ predict(self, img_file, transforms=None)
 >
 > > - **list**: 预测结果列表。如果输入为单张图像,列表中每个元素均为一个dict,键值包括'bbox', 'category', 'category_id', 'score',分别表示每个预测目标的框坐标信息、类别、类别id、置信度,其中框坐标信息为[xmin, ymin, w, h],即左上角x, y坐标和框的宽和高。如果输入为多张图像,如果输入为多张图像,返回由每张图像预测结果组成的列表。
 
-### analyze_sensitivity
+### <h3 id="14">analyze_sensitivity</h3>
 
 ```python
 analyze_sensitivity(self, dataset, batch_size=8, criterion='l1_norm', save_dir='output')
@@ -108,7 +124,7 @@ analyze_sensitivity(self, dataset, batch_size=8, criterion='l1_norm', save_dir='
 > > - **criterion** ({'l1_norm', 'fpgm'}): 进行Filter粒度剪裁时评估,评估Filter重要性的范数标准。如果为'l1_norm',采用L1-Norm标准。如果为'fpgm',采用 [Geometric Median](https://arxiv.org/abs/1811.00250) 标准。
 > > - **save_dir** (str): 计算的得到的sensetives文件的存储路径。
 
-### prune
+### <h3 id="15">prune</h3>
 
 ```python
 prune(self, pruned_flops, save_dir=None)
@@ -120,7 +136,7 @@ prune(self, pruned_flops, save_dir=None)
 > > - **pruned_flops** (float): 每秒浮点数运算次数(FLOPs)的剪裁比例。
 > > - **save_dir** (None or str): 剪裁后模型保存路径。如果为None,剪裁完成后不会对模型进行保存。默认为None。
 
-### quant_aware_train
+### <h3 id="16">quant_aware_train</h3>
 
 ```python
 quant_aware_train(self, num_epochs, train_dataset, train_batch_size=64, eval_dataset=None, optimizer=None, save_interval_epochs=1, log_interval_steps=10, save_dir='output', learning_rate=.00001, warmup_steps=0, warmup_start_lr=0.0, lr_decay_epochs=(216, 243), lr_decay_gamma=0.1, metric=None, use_ema=False, early_stop=False, early_stop_patience=5, use_vdl=True, quant_config=None)
@@ -177,7 +193,8 @@ quant_aware_train(self, num_epochs, train_dataset, train_batch_size=64, eval_dat
 > >  }
 > >  ```
 
-## paddlex.det.PPYOLO
+
+## <h2 id="2">paddlex.det.PPYOLO</h2>
 
 ```python
 paddlex.det.PPYOLO(num_classes=80, backbone='ResNet50_vd_dcn', anchors=None, anchor_masks=None, use_coord_conv=True, use_iou_aware=True, use_spp=True, use_drop_block=True, scale_x_y=1.05, ignore_threshold=0.7, label_smooth=False, use_iou_loss=True, use_matrix_nms=True, nms_score_threshold=0.01, nms_topk=-1, nms_keep_topk=100, nms_iou_threshold=0.45)
@@ -212,7 +229,7 @@ paddlex.det.PPYOLO(num_classes=80, backbone='ResNet50_vd_dcn', anchors=None, anc
 > - prune 剪裁接口说明同 [PPYOLOv2模型prune接口](#prune)
 > - quant_aware_train 在线量化接口说明同 [PPYOLOv2模型quant_aware_train接口](#quant_aware_train)
 
-## paddlex.det.PPYOLOTiny
+## <h2 id="3">paddlex.det.PPYOLOTiny</h2>
 ```python
 paddlex.det.PPYOLOTiny(num_classes=80, backbone='MobileNetV3', anchors=[[10, 15], [24, 36], [72, 42], [35, 87], [102, 96], [60, 170], [220, 125], [128, 222], [264, 266]], anchor_masks=[[6, 7, 8], [3, 4, 5], [0, 1, 2]], use_iou_aware=False, use_spp=True, use_drop_block=True, scale_x_y=1.05, ignore_threshold=0.5, label_smooth=False, use_iou_loss=True, use_matrix_nms=False, nms_score_threshold=0.005, nms_topk=1000, nms_keep_topk=100, nms_iou_threshold=0.45)
 ```
@@ -245,7 +262,7 @@ paddlex.det.PPYOLOTiny(num_classes=80, backbone='MobileNetV3', anchors=[[10, 15]
 > - prune 剪裁接口说明同 [PPYOLOv2模型prune接口](#prune)
 > - quant_aware_train 在线量化接口说明同 [PPYOLOv2模型quant_aware_train接口](#quant_aware_train)
 
-## paddlex.det.YOLOv3
+## <h2 id="4">paddlex.det.YOLOv3</h2>
 
 ```python
 paddlex.det.YOLOv3(num_classes=80, backbone='MobileNetV1', anchors=[[10, 13], [16, 30], [33, 23], [30, 61], [62, 45], [59, 119], [116, 90], [156, 198], [373, 326]], anchor_masks=[[6, 7, 8], [3, 4, 5], [0, 1, 2]], ignore_threshold=0.7, nms_score_threshold=0.01, nms_topk=1000, nms_keep_topk=100, nms_iou_threshold=0.45, label_smooth=False)
@@ -274,7 +291,7 @@ paddlex.det.YOLOv3(num_classes=80, backbone='MobileNetV1', anchors=[[10, 13], [1
 > - quant_aware_train 在线量化接口说明同 [PPYOLOv2模型quant_aware_train接口](#quant_aware_train)
 
 
-## paddlex.det.FasterRCNN
+## <h2 id="5">paddlex.det.FasterRCNN</h2>
 
 ```python
 paddlex.det.FasterRCNN(num_classes=80, backbone='ResNet50', with_fpn=True, aspect_ratios=[0.5, 1.0, 2.0], anchor_sizes=[[32], [64], [128], [256], [512]], keep_top_k=100, nms_threshold=0.5, score_threshold=0.05, fpn_num_channels=256, rpn_batch_size_per_im=256, rpn_fg_fraction=0.5, test_pre_nms_top_n=None, test_post_nms_top_n=1000)

+ 18 - 7
dygraph/docs/apis/models/instance_segmentation.md

@@ -1,6 +1,16 @@
 # Instance Segmentation
 
-## MaskRCNN
+## 目录
+* [paddlex.det.MaskRCNN](#1)
+  * [train](#11)
+  * [evaluate](#12)
+  * [predict](#13)
+  * [analyze_sensitivity](#14)
+  * [prune](#15)
+  * [quant_aware_train](#16)
+
+
+## <h2 id="1">paddlex.det.MaskRCNN</h2>
 
 ```python
 paddlex.det.MaskRCNN(num_classes=80, backbone='ResNet50_vd', with_fpn=True, aspect_ratios=[0.5, 1.0, 2.0], anchor_sizes=[[32], [64], [128], [256], [512]], keep_top_k=100, nms_threshold=0.5, score_threshold=0.05, fpn_num_channels=256, rpn_batch_size_per_im=256, rpn_fg_fraction=0.5, test_pre_nms_top_n=None, test_post_nms_top_n=1000)
@@ -24,7 +34,7 @@ paddlex.det.MaskRCNN(num_classes=80, backbone='ResNet50_vd', with_fpn=True, aspe
 > > - **test_pre_nms_top_n** (int):预测阶段,RPN部分做非极大值抑制计算的候选框的数量。若设置为None, 有FPN结构的话,`test_pre_nms_top_n`会被设置成6000, 无FPN结构的话,`test_pre_nms_top_n`会被设置成1000。默认为None。
 > > - **test_post_nms_top_n** (int): 预测阶段,RPN部分做完非极大值抑制后保留的候选框的数量。默认为1000。
 
-### train
+### <h3 id="11">train</h3>
 
 ```python
 train(self, num_epochs, train_dataset, train_batch_size=64, eval_dataset=None, optimizer=None, save_interval_epochs=1, log_interval_steps=10, save_dir='output', pretrain_weights='IMAGENET', learning_rate=.001, warmup_steps=0, warmup_start_lr=0.0, lr_decay_epochs=(216, 243), lr_decay_gamma=0.1, metric=None, use_ema=False, early_stop=False, early_stop_patience=5, use_vdl=True)
@@ -53,8 +63,9 @@ train(self, num_epochs, train_dataset, train_batch_size=64, eval_dataset=None, o
 > > - **early_stop** (bool): 是否使用提前终止训练策略。默认为False。
 > > - **early_stop_patience** (int): 当使用提前终止训练策略时,如果验证集精度在`early_stop_patience`个epoch内连续下降或持平,则终止训练。默认为5。
 > > - **use_vdl** (bool): 是否使用VisualDL进行可视化。默认为True。
+> > - **resume_checkpoint** (str): 恢复训练时指定上次训练保存的模型路径,例如`output/maskrcnn_r50fpn/best_model`。若为None,则不会恢复训练。默认值为None。
 
-### evaluate
+### <h3 id="12">evaluate</h3>
 
 ```python
 evaluate(self, eval_dataset, batch_size=1, metric=None, return_details=False)
@@ -73,7 +84,7 @@ evaluate(self, eval_dataset, batch_size=1, metric=None, return_details=False)
 >
 > > - **tuple** (metrics, eval_details) | **dict** (metrics): 当`return_details`为True时,返回(metrics, eval_details),当`return_details`为False时,返回metrics。metrics为dict,包含关键字:'bbox_mmap'或者’bbox_map‘,分别表示平均准确率平均值在各个阈值下的结果取平均值的结果(mmAP)、平均准确率平均值(mAP)。eval_details为dict,包含bbox和gt两个关键字。其中关键字bbox的键值是一个列表,列表中每个元素代表一个预测结果,一个预测结果是一个由图像id,预测框类别id, 预测框坐标,预测框得分组成的列表。而关键字gt的键值是真实标注框的相关信息。
 
-### predict
+### <h3 id="13">predict</h3>
 
 ```python
 predict(self, img_file, transforms=None)
@@ -90,7 +101,7 @@ predict(self, img_file, transforms=None)
 >
 > > - **list**: 预测结果列表。如果输入为单张图像,列表中每个元素均为一个dict,键值包括'bbox', 'category', 'category_id', 'score',分别表示每个预测目标的框坐标信息、类别、类别id、置信度,其中框坐标信息为[xmin, ymin, w, h],即左上角x, y坐标和框的宽和高。如果输入为多张图像,如果输入为多张图像,返回由每张图像预测结果组成的列表。
 
-### analyze_sensitivity
+### <h3 id="14">analyze_sensitivity</h3>
 
 ```python
 analyze_sensitivity(self, dataset, batch_size=8, criterion='l1_norm', save_dir='output')
@@ -105,7 +116,7 @@ analyze_sensitivity(self, dataset, batch_size=8, criterion='l1_norm', save_dir='
 > > - **criterion** ({'l1_norm', 'fpgm'}): 进行Filter粒度剪裁时评估,评估Filter重要性的范数标准。如果为'l1_norm',采用L1-Norm标准。如果为'fpgm',采用 [Geometric Median](https://arxiv.org/abs/1811.00250) 标准。
 > > - **save_dir** (str): 计算的得到的sensetives文件的存储路径。
 
-### prune
+### <h3 id="15">prune</h3>
 
 ```python
 prune(self, pruned_flops, save_dir=None)
@@ -117,7 +128,7 @@ prune(self, pruned_flops, save_dir=None)
 > > - **pruned_flops** (float): 每秒浮点数运算次数(FLOPs)的剪裁比例。
 > > - **save_dir** (None or str): 剪裁后模型保存路径。如果为None,剪裁完成后不会对模型进行保存。默认为None。
 
-### quant_aware_train
+### <h3 id="16">quant_aware_train</h3>
 
 ```python
 quant_aware_train(self, num_epochs, train_dataset, train_batch_size=64, eval_dataset=None, optimizer=None, save_interval_epochs=1, log_interval_steps=10, save_dir='output', learning_rate=.00001, warmup_steps=0, warmup_start_lr=0.0, lr_decay_epochs=(216, 243), lr_decay_gamma=0.1, metric=None, use_ema=False, early_stop=False, early_stop_patience=5, use_vdl=True, quant_config=None)

+ 127 - 0
dygraph/docs/apis/models/load_model.md

@@ -0,0 +1,127 @@
+# paddlex.load_model模型加载
+
+## 目录
+
+* [加载模型用于训练](#1)
+* [加载模型用于评估](#2)
+* [加载模型用于剪裁](#3)
+* [加载模型用于量化](#4)
+* [加载模型用于预测](#5)
+
+## <h2 id="1">加载模型用于训练</h2>
+
+我们以图像分类模型`MobileNetV3_small`为例,假设我们之前训练并保存好了模型(训练代码可参考[示例代码](../../../tutorials/train/image_classification/mobilenetv3_small.py)),在这次训练时想加载之前训好的参数(之前训好的模型假设位于`output/mobilenetv3_small/best_model`),有两种实现方式:
+
+方式一: 使用paddlex.load_model
+
+```
+import paddlex as pdx
+
+model = pdx.load_model(output/mobilenetv3_small/best_model)
+
+model.train(
+    num_epochs=10,
+    train_dataset=train_dataset,
+    train_batch_size=32,
+    eval_dataset=eval_dataset,
+    lr_decay_epochs=[4, 6, 8],
+    learning_rate=0.01,
+    save_dir='output/mobilenetv3_small_new',
+    use_vdl=True)
+```
+
+方式二: 指定pretrain_weights
+
+```
+import paddlex as pdx
+
+model = pdx.cls.MobileNetV3_small(num_classes=num_classes)
+
+model.train(
+    pretrain_weights='output/mobilenetv3_small/best_model/model.pdparams',
+    num_epochs=10,
+    train_dataset=train_dataset,
+    train_batch_size=32,
+    eval_dataset=eval_dataset,
+    lr_decay_epochs=[4, 6, 8],
+    learning_rate=0.01,
+    save_dir='output/mobilenetv3_small_new',
+    use_vdl=True)
+```
+
+**注意**:`paddlex.load_model`只加载模型参数但不会恢复优化器设置,如果想要恢复训练,需定义模型之后在调用`train()`时指定[`resume_checkpoint`](./classification.md#train)为`output/mobilenetv3_small/best_model`。
+
+## <h2 id="2">加载模型用于评估</h2>
+
+我们以图像分类模型`MobileNetV3_small`为例,假设我们之前训练并保存好了模型(训练代码可参考[示例代码](../../../tutorials/train/image_classification/mobilenetv3_small.py)),在这次想加载之前训好的参数(之前训好的模型假设位于`output/mobilenetv3_small/best_model`)重新评估模型在验证集上的精度,示例代码如下:
+
+```
+import paddlex as pdx
+from paddlex import transforms as T
+
+
+eval_transforms = T.Compose([
+    T.ResizeByShort(short_size=256), T.CenterCrop(crop_size=224), T.Normalize()
+])
+
+eval_dataset = pdx.datasets.ImageNet(
+    data_dir='vegetables_cls',
+    file_list='vegetables_cls/val_list.txt',
+    label_list='vegetables_cls/labels.txt',
+    transforms=eval_transforms)
+
+
+model = pdx.load_model(output/mobilenetv3_small/best_model)
+
+res = model.evaluate(eval_dataset, batch_size=2)
+print(res)
+```
+
+`evaluate`参数和返回值格式可参考[evaluate](./classification.md#evaluate)
+
+## <h2 id="3">加载模型用于剪裁</h2>
+
+模型剪裁时,先使用`paddlex.load_moel`加载模型,而后使用`analyze_sensitivity`、`prune`和`train`三个API完成剪裁:
+```
+model = pdx.load_model('output/mobilenet_v2/best_model')
+
+model.analyze_sensitivity(
+    dataset=eval_dataset, save_dir='output/mobilenet_v2/prune')
+model.prune(pruned_flops=.2, save_dir=None)
+
+model.train(
+    num_epochs=10,
+    train_dataset=train_dataset,
+    train_batch_size=32,
+    eval_dataset=eval_dataset,
+    lr_decay_epochs=[4, 6, 8],
+    learning_rate=0.025,
+    pretrain_weights=None,
+    save_dir='output/mobilenet_v2/prune',
+    use_vdl=True)
+
+```
+具体的代码请参考[模型剪裁示例代码](../../../tutorials/slim/prune/image_classification/)
+
+## <h2 id="4">加载模型用于量化</h2>
+
+模型量化时,先使用`paddlex.load_moel`加载模型,而后使用`quant_aware_train`完成量化:
+
+```
+model = pdx.load_model('output/mobilenet_v2/best_model')
+
+model.quant_aware_train(
+    num_epochs=5,
+    train_dataset=train_dataset,
+    train_batch_size=32,
+    eval_dataset=eval_dataset,
+    learning_rate=0.000025,
+    save_dir='output/mobilenet_v2/quant',
+    use_vdl=True)
+```
+
+具体的代码请参考[模型量化示例代码](../../../tutorials/slim/quantize/)
+
+## <h2 id="5">加载模型用于预测</h2>
+
+请转至文档[加载模型预测](../prediction.md)查看加载模型用于预测的使用方式。

+ 26 - 10
dygraph/docs/apis/models/semantic_segmentation.md

@@ -1,6 +1,21 @@
 # Semantic Segmentation
 
-## paddlex.seg.DeepLabv3p
+
+## 目录
+* [paddlex.seg.DeepLabv3p](#1)
+  * [train](#11)
+  * [evaluate](#12)
+  * [predict](#13)
+  * [analyze_sensitivity](#14)
+  * [prune](#15)
+  * [quant_aware_train](#16)
+* [paddlex.seg.BiSeNetV2](#2)
+* [paddlex.seg.UNet](#3)
+* [paddlex.seg.HRNet](#4)
+* [paddlex.seg.FastSCNN](#5)
+
+
+## <h2 id="1">paddlex.seg.DeepLabv3p</h2>
 
 ```python
 paddlex.seg.DeepLabV3P(num_classes=2, backbone='ResNet50_vd', use_mixed_loss=False, output_stride=8, backbone_indices=(0, 3), aspp_ratios=(1, 12, 24, 36), aspp_out_channels=256, align_corners=False)
@@ -18,7 +33,7 @@ paddlex.seg.DeepLabV3P(num_classes=2, backbone='ResNet50_vd', use_mixed_loss=Fal
 > > - **assp_out_channels** (int): assp模块输出通道数。默认为256。
 > > - **align_corners** (bool): 网络中对特征图进行插值时是否将四个角落像素的中心对齐。若特征图尺寸为偶数,建议设为True。若特征图尺寸为奇数,建议设为False。默认为False。
 
-### train
+### <h3 id="11">train</h3>
 
 ```python
 train(num_epochs, train_dataset, train_batch_size=2, eval_dataset=None, optimizer=None, save_interval_epochs=1, log_interval_steps=2, save_dir='output', pretrain_weights='CITYSCAPES', learning_rate=0.01, lr_decay_power=0.9, early_stop=False, early_stop_patience=5, use_vdl=True)
@@ -41,8 +56,9 @@ train(num_epochs, train_dataset, train_batch_size=2, eval_dataset=None, optimize
 > > - **early_stop** (bool): 是否使用提前终止训练策略。默认为False。
 > > - **early_stop_patience** (int): 当使用提前终止训练策略时,如果验证集精度在`early_stop_patience`个epoch内连续下降或持平,则终止训练。默认为5。
 > > - **use_vdl** (bool): 是否使用VisualDL进行可视化。默认为True。
+> > - **resume_checkpoint** (str): 恢复训练时指定上次训练保存的模型路径,例如`output/deeplabv3p/best_model`。若为None,则不会恢复训练。默认值为None。
 
-### evaluate
+### <h3 id="12">evaluate</h3>
 
 ```python
 evaluate(self, eval_dataset, batch_size=1, return_details=False):
@@ -59,7 +75,7 @@ evaluate(self, eval_dataset, batch_size=1, return_details=False):
 > >
 > > - **tuple** (metrics, eval_details) | **dict** (metrics): 当`return_details`为True时,返回(metrics, eval_details),当`return_details`为False时,返回metrics。metrics为dict,包含关键字:'miou'、'category_iou'、'oacc'、'category_acc'和'kappa',分别表示平均IoU、各类别IoU、总体准确率、各类别准确率和kappa系数。eval_details为dict,包含关键字:'confusion_matrix',表示评估的混淆矩阵。
 
-### predict
+### <h3 id="13">predict</h3>
 
 ```
 predict(self, img_file, transforms=None):
@@ -77,7 +93,7 @@ predict(self, img_file, transforms=None):
 > > - **dict** | **List[dict]**: 如果输入为单张图像,返回dict。包含关键字'label_map'和'score_map', 'label_map'存储预测结果灰度图,像素值表示对应的类别,'score_map'存储各类别的概率,shape=(h, w, num_classes)。如果输入为多张图像,返回由每张图像预测结果组成的列表。
 
 
-### analyze_sensitivity
+### <h3 id="14">analyze_sensitivity</h3>
 
 ```python
 analyze_sensitivity(self, dataset, batch_size=8, criterion='l1_norm', save_dir='output')
@@ -92,7 +108,7 @@ analyze_sensitivity(self, dataset, batch_size=8, criterion='l1_norm', save_dir='
 > > - **criterion** ({'l1_norm', 'fpgm'}): 进行Filter粒度剪裁时评估,评估Filter重要性的范数标准。如果为'l1_norm',采用L1-Norm标准。如果为'fpgm',采用 [Geometric Median](https://arxiv.org/abs/1811.00250) 标准。
 > > - **save_dir** (str): 计算的得到的sensetives文件的存储路径。
 
-### prune
+### <h3 id="15">prune</h3>
 
 ```python
 prune(self, pruned_flops, save_dir=None)
@@ -104,7 +120,7 @@ prune(self, pruned_flops, save_dir=None)
 > > - **pruned_flops** (float): 每秒浮点数运算次数(FLOPs)的剪裁比例。
 > > - **save_dir** (None or str): 剪裁后模型保存路径。如果为None,剪裁完成后不会对模型进行保存。默认为None。
 
-### quant_aware_train
+### <h3 id="16">quant_aware_train</h3>
 
 ```python
 quant_aware_train(self, num_epochs, train_dataset, train_batch_size=2, eval_dataset=None, optimizer=None, save_interval_epochs=1, log_interval_steps=2, save_dir='output', learning_rate=.0001, lr_decay_power=0.9, early_stop=False, early_stop_patience=5, use_vdl=True, quant_config=None)
@@ -156,7 +172,7 @@ quant_aware_train(self, num_epochs, train_dataset, train_batch_size=2, eval_data
 > >  }
 > >  ```
 
-## paddlex.seg.BiSeNetV2
+## <h2 id="2">paddlex.seg.BiSeNetV2</h2>
 
 ```python
 paddlex.seg.BiSeNetV2(num_classes=2, use_mixed_loss=False, align_corners=False)
@@ -199,7 +215,7 @@ paddlex.seg.UNet(num_classes=2, use_mixed_loss=False, use_deconv=False, align_co
 > - prune 剪裁接口说明同 [DeepLabV3P模型prune接口](#prune)
 > - quant_aware_train 在线量化接口说明同 [DeepLabV3P模型quant_aware_train接口](#quant_aware_train)
 
-## paddlex.seg.HRNet
+## <h2 id="3">paddlex.seg.HRNet</h2>
 
 ```python
 paddlex.seg.HRNet(num_classes=2, width=48, use_mixed_loss=False, align_corners=False)
@@ -221,7 +237,7 @@ paddlex.seg.HRNet(num_classes=2, width=48, use_mixed_loss=False, align_corners=F
 > - prune 剪裁接口说明同 [DeepLabV3P模型prune接口](#prune)
 > - quant_aware_train 在线量化接口说明同 [DeepLabV3P模型quant_aware_train接口](#quant_aware_train)
 
-## paddlex.seg.FastSCNN
+## <h2 id="4">paddlex.seg.FastSCNN</h2>
 
 ```python
 paddlex.seg.FastSCNN(num_classes=2, use_mixed_loss=False, align_corners=False)

+ 4 - 5
dygraph/docs/apis/prediction.md

@@ -2,7 +2,6 @@
 
 PaddleX可以使用`paddlex.load_model`接口加载模型(包括训练过程中保存的模型,导出的部署模型,量化模型以及裁剪的模型)进行预测,同时PaddleX中也内置了一系列的可视化工具函数,帮助用户方便地检查模型的效果。
 
-**注意**:使用`paddlex.load_model`接口加载仅用于模型预测,如需要在此模型基础上继续训练,可以将该模型作为预训练模型进行训练,具体做法是在训练代码中,将train函数中的`pretrain_weights`参数指定为预训练模型路径。
 
 ## 图像分类
 
@@ -22,7 +21,7 @@ Predict Result: [{'category_id': 549, 'category': 'envelope', 'score': 0.2906293
 
 ![](images/test.jpg)
 
-- 分类模型predict接口[说明文档](https://github.com/PaddlePaddle/PaddleX/blob/develop/dygraph/docs/apis/models/classification.md#predict)
+- 分类模型predict接口[说明文档](./apis/models/classification.md#predict)
 
 
 ## 目标检测
@@ -39,7 +38,7 @@ result = model.predict(test_jpg)
 # 可视化结果存储在./visualized_test.jpg, 见下图
 pdx.det.visualize(test_jpg, result, threshold=0.3, save_dir='./')
 ```
-- YOLOv3模型predict接口[说明文档](https://github.com/PaddlePaddle/PaddleX/blob/develop/dygraph/docs/apis/models/detection.md#predict)
+- YOLOv3模型predict接口[说明文档](./apis/models/detection.md#predict)
 - 可视化pdx.det.visualize接口[说明文档](https://github.com/PaddlePaddle/PaddleX/blob/d555d26f92cd6f8d3b940636bd7cb9043de93768/dygraph/paddlex/cv/models/utils/visualize.py#L25)
 > 注意:目标检测和实例分割模型在调用`predict`接口得到的结果需用户自行过滤低置信度结果,在`paddlex.det.visualize`接口中,我们提供了`threshold`用于过滤,置信度低于此值的结果将被过滤,不会可视化。
 ![](./images/yolo_predict.jpg)
@@ -58,7 +57,7 @@ result = model.predict(test_jpg)
 # 可视化结果存储在./visualized_test.jpg, 见下图
 pdx.det.visualize(test_jpg, result, threshold=0.5, save_dir='./')
 ```
-- MaskRCNN模型predict接口[说明文档](https://github.com/PaddlePaddle/PaddleX/blob/develop/dygraph/docs/apis/models/instance_segmentation.md#predict)
+- MaskRCNN模型predict接口[说明文档](./apis/models/instance_segmentation.md#predict)
 - 可视化pdx.det.visualize接口[说明文档](https://github.com/PaddlePaddle/PaddleX/blob/develop/dygraph/paddlex/cv/models/utils/visualize.py#L25)
 
 **注意**:目标检测和实例分割模型在调用`predict`接口得到的结果需用户自行过滤低置信度结果,在`paddlex.det.visualize`接口中,我们提供了`threshold`用于过滤,置信度低于此值的结果将被过滤,不会可视化。
@@ -78,6 +77,6 @@ pdx.seg.visualize(test_jpg, result, weight=0.0, save_dir='./')
 
 在上述示例代码中,通过调用`paddlex.seg.visualize`可以对语义分割的预测结果进行可视化,可视化的结果保存在`save_dir`下,见下图。其中`weight`参数用于调整预测结果和原图结果融合展现时的权重,0.0时只展示预测结果mask的可视化,1.0时只展示原图可视化。
 
-- DeepLabv3模型predict接口[说明文档](https://github.com/PaddlePaddle/PaddleX/blob/develop/dygraph/docs/apis/models/semantic_segmentation.md#predict)
+- DeepLabv3模型predict接口[说明文档](./apis/models/semantic_segmentation.md#predict)
 - 可视化pdx.seg.visualize接口[说明文档](https://github.com/PaddlePaddle/PaddleX/blob/d555d26f92cd6f8d3b940636bd7cb9043de93768/dygraph/paddlex/cv/models/utils/visualize.py#L50)
 ![](images/deeplab_predict.jpg)

+ 74 - 0
dygraph/docs/apis/visualize.md

@@ -0,0 +1,74 @@
+# 预测结果可视化
+
+## 目录
+
+* [paddlex.det.visualize](#1)
+* [paddlex.seg.visualize](#2)
+* [paddlex.visualize_det](#3)
+* [paddlex.visualize_seg](#4)
+
+
+## <h2 id="1">paddlex.det.visualize</h2>
+
+```python
+paddlex.det.visualize(image, result, threshold=0.5, save_dir='./', color=None)
+```
+
+> 将目标检测/实例分割模型预测得到的Box框和Mask在原图上进行可视化。
+
+>
+> **参数**
+>
+> > - **image** (str|np.ndarray): 原图文件路径或numpy数组(HWC排列,BGR格式)。
+> > - **result** (str): 模型预测结果。
+> > - **threshold** (float): score阈值,将Box置信度低于该阈值的框过滤不进行可视化。默认0.5
+> > - **save_dir** (str): 可视化结果保存路径。若为None,则表示不保存,该函数将可视化的结果以np.ndarray的形式返回;若设为目录路径,则将可视化结果保存至该目录下。默认值为’./’。
+> > - **color** (list|tuple|np.array): 各类别的BGR颜色值组成的数组,形状为Nx3(N为类别数量),数值范围为[0, 255]。例如针对2个类别的[[255, 0, 0], [0, 255, 0]]。若为None,则自动生成各类别的颜色。默认值为None。
+
+
+使用示例:
+```
+import paddlex as pdx
+model = pdx.load_model('xiaoduxiong_epoch_12')
+result = model.predict('./xiaoduxiong_epoch_12/xiaoduxiong.jpeg')
+pdx.det.visualize('./xiaoduxiong_epoch_12/xiaoduxiong.jpeg', result, save_dir='./')
+# 预测结果保存在./visualize_xiaoduxiong.jpeg
+
+```
+
+
+## <h2 id="2">paddlex.seg.visualize</h2>
+
+```python
+paddlex.seg.visualize(image, result, weight=0.6, save_dir='./', color=None)
+```
+
+> 将语义分割模型预测得到的Mask在原图上进行可视化。
+
+>
+> **参数**
+>
+> > - **image** (str|np.ndarray): 原图文件路径或numpy数组(HWC排列,BGR格式)。
+> > - **result** (str): 模型预测结果。
+> > - **weight**(float): mask可视化结果与原图权重因子,weight表示原图的权重。默认0.6。
+> > - **save_dir** (str): 可视化结果保存路径。若为None,则表示不保存,该函数将可视化的结果以np.ndarray的形式返回;若设为目录路径,则将可视化结果保存至该目录下。默认值为’./’。
+> > - **color** (list): 各类别的BGR颜色值组成的列表。例如两类时可设置为[255, 255, 255, 0, 0, 0]。默认值为None,则使用默认生成的颜色列表。
+
+使用示例:
+
+```
+import paddlex as pdx
+model = pdx.load_model('cityscape_deeplab')
+result = model.predict('city.png')
+pdx.seg.visualize('city.png', result, save_dir='./')
+# 预测结果保存在./visualize_city.png
+```
+
+
+## <h2 id="3">paddlex.visualize_det</h2>
+
+> 是paddlex.det.visualize的别名,接口说明同 [paddlex.det.visualize](./visualize.md#paddlex.det.visualize)
+
+## <h2 id="4">paddlex.visualize_seg</h2>
+
+> 是paddlex.seg.visualize的别名,接口说明同 [paddlex.seg.visualize](./visualize.md#paddlex.seg.visualize)

+ 2 - 2
dygraph/docs/quick_start.md

@@ -116,7 +116,7 @@ model.train(num_epochs=10,
 ```
 visualdl --logdir output/mobilenetv3_small --port 8001
 ```
-服务启动后,通过浏览器打开https://0.0.0.0:8001或https://localhost:8001即可。
+服务启动后,通过浏览器打开https://0.0.0.0:8001或https://localhost:8001 即可。
 
 如果您使用的是AIStudio平台进行训练,不能通过此方式启动visualdl,请参考AIStudio VisualDL启动教程使用
 
@@ -135,7 +135,7 @@ print("Predict Result: ", result)
 ```
 Predict Result: Predict Result: [{'score': 0.9999393, 'category': 'bocai', 'category_id': 0}]
 ```
-- [load_model接口说明](../../docs/train/prediction.md)
+- [load_model接口说明](./apis/prediction.md)
 - [分类模型predict接口说明](./apis/models/classification.md#predict)
 
 

+ 26 - 0
dygraph/docs/visualdl.md

@@ -0,0 +1,26 @@
+# 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)

+ 11 - 3
dygraph/tutorials/train/README.md

@@ -23,10 +23,18 @@
 |semantic_segmentation/hrnet.py | 语义分割HRNet | 视盘分割 |
 |semantic_segmentation/unet.py | 语义分割UNet | 视盘分割 |
 
+可参考API接口说明了解示例代码中的API:
+* [数据集读取API](../../docs/apis/datasets.md)
+* [数据预处理和数据增强API](../../docs/apis/transforms/transforms.md)
+* [模型API/模型加载API](../../docs/apis/models/README.md)
+* [预测结果可视化API](../../docs/apis/visualize.md)
+
+
 # 环境准备
 
 - [PaddlePaddle安装](https://www.paddlepaddle.org.cn/install/quick)
-* 版本要求:PaddlePaddle==2.1.0
+* 版本要求:PaddlePaddle>=2.1.0
+* **运行MaskRCNN要求PaddlePaddle>=2.1.1**
 
 - [PaddleX安装](../../docs/install.md)
 
@@ -43,7 +51,7 @@ python image_classification/mobilenetv3_small.py
 ```
 python -m paddle.distributed.launch --gpus 0,1 image_classification/mobilenetv3_small.py
 ```
-使用多卡时,参考[训练参数调整](https://paddlex.readthedocs.io/zh_CN/develop/appendix/parameters.html)调整学习率和批量大小。
+使用多卡时,参考[训练参数调整](../../docs/parameters.md)调整学习率和批量大小。
 
 
 ## VisualDL可视化训练指标
@@ -57,4 +65,4 @@ visualdl --logdir output/mobilenetv3_small/vdl_log --port 8001
 
 ## 版本升级
 
-由于PaddleX代码的持续更新,版本低于2.0.0的训练脚本、API和模型暂时无法直接使用,如需使用请安装PaddleX 1.3.10版本。如果安装PaddleX 2.0.0,请使用本目录下的训练脚本。
+由于PaddleX代码的持续更新,版本低于2.0.0的训练脚本、API和模型暂时无法直接使用,如需使用请安装PaddleX 1.3.10版本。如果安装PaddleX 2.0.0rc3,请使用本目录下的训练脚本。