diff --git a/docs/apis/datasets.md b/docs/apis/datasets.md new file mode 100644 index 0000000000000000000000000000000000000000..c02d642842f95c02dc95447d0349afc8e4198b5f --- /dev/null +++ b/docs/apis/datasets.md @@ -0,0 +1,142 @@ +# 数据集读取 + +## paddlex.datasets.ImageNet +> **用于图像分类模型** +``` +paddlex.datasets.ImageNet(data_dir, file_list, label_list, transforms=None, num_workers=‘auto’, buffer_size=100, parallel_method='thread', shuffle=False) +``` +读取ImageNet格式的分类数据集,并对样本进行相应的处理。ImageNet数据集格式的介绍可查看文档:[数据集格式说明](../datasets.md) + +示例:[代码文件](https://github.com/PaddlePaddle/PaddleX/blob/develop/tutorials/train/classification/mobilenetv2.py#L25) + +> **参数** + +> > * **data_dir** (str): 数据集所在的目录路径。 +> > * **file_list** (str): 描述数据集图片文件和类别id的文件路径(文本内每行路径为相对`data_dir`的相对路径)。 +> > * **label_list** (str): 描述数据集包含的类别信息文件路径。 +> > * **transforms** (paddlex.cls.transforms): 数据集中每个样本的预处理/增强算子,详见[paddlex.cls.transforms](./transforms/cls_transforms.md)。 +> > * **num_workers** (int|str):数据集中样本在预处理过程中的线程或进程数。默认为'auto'。当设为'auto'时,根据系统的实际CPU核数设置`num_workers`: 如果CPU核数的一半大于8,则`num_workers`为8,否则为CPU核数的一半。 +> > * **buffer_size** (int): 数据集中样本在预处理过程中队列的缓存长度,以样本数为单位。默认为100。 +> > * **parallel_method** (str): 数据集中样本在预处理过程中并行处理的方式,支持'thread'线程和'process'进程两种方式。默认为'process'(Windows和Mac下会强制使用thread,该参数无效)。 +> > * **shuffle** (bool): 是否需要对数据集中样本打乱顺序。默认为False。 + +## paddlex.datasets.PascalVOC +> **用于目标检测模型** +``` +paddlex.datasets.PascalVOC(data_dir, file_list, label_list, transforms=None, num_workers=‘auto’, buffer_size=100, parallel_method='thread', shuffle=False) +``` + +> 读取PascalVOC格式的检测数据集,并对样本进行相应的处理。PascalVOC数据集格式的介绍可查看文档:[数据集格式说明](../datasets.md) + +> 示例:[代码文件](https://github.com/PaddlePaddle/PaddleX/blob/develop/tutorials/train/detection/yolov3_darknet53.py#L29) + +> **参数** + +> > * **data_dir** (str): 数据集所在的目录路径。 +> > * **file_list** (str): 描述数据集图片文件和对应标注文件的文件路径(文本内每行路径为相对`data_dir`的相对路径)。 +> > * **label_list** (str): 描述数据集包含的类别信息文件路径。 +> > * **transforms** (paddlex.det.transforms): 数据集中每个样本的预处理/增强算子,详见[paddlex.det.transforms](./transforms/det_transforms.md)。 +> > * **num_workers** (int|str):数据集中样本在预处理过程中的线程或进程数。默认为'auto'。当设为'auto'时,根据系统的实际CPU核数设置`num_workers`: 如果CPU核数的一半大于8,则`num_workers`为8,否则为CPU核数的一半。 +> > * **buffer_size** (int): 数据集中样本在预处理过程中队列的缓存长度,以样本数为单位。默认为100。 +> > * **parallel_method** (str): 数据集中样本在预处理过程中并行处理的方式,支持'thread'线程和'process'进程两种方式。默认为'process'(Windows和Mac下会强制使用thread,该参数无效)。 +> > * **shuffle** (bool): 是否需要对数据集中样本打乱顺序。默认为False。 + +## paddlex.datasets.MSCOCO +> **用于实例分割/目标检测模型** +``` +paddlex.datasets.MSCOCO(data_dir, ann_file, transforms=None, num_workers='auto', buffer_size=100, parallel_method='thread', shuffle=False) +``` + +> 读取MSCOCO格式的检测数据集,并对样本进行相应的处理,该格式的数据集同样可以应用到实例分割模型的训练中。MSCOCO数据集格式的介绍可查看文档:[数据集格式说明](../datasets.md) + +> 示例:[代码文件](https://github.com/PaddlePaddle/PaddleX/blob/develop/tutorials/train/detection/mask_rcnn_r50_fpn.py#L27) + +> **参数** + +> > * **data_dir** (str): 数据集所在的目录路径。 +> > * **ann_file** (str): 数据集的标注文件,为一个独立的json格式文件。 +> > * **transforms** (paddlex.det.transforms): 数据集中每个样本的预处理/增强算子,详见[paddlex.det.transforms](./transforms/det_transforms.md)。 +> > * **num_workers** (int|str):数据集中样本在预处理过程中的线程或进程数。默认为'auto'。当设为'auto'时,根据系统的实际CPU核数设置`num_workers`: 如果CPU核数的一半大于8,则`num_workers`为8,否则为CPU核数的一半。 +> > * **buffer_size** (int): 数据集中样本在预处理过程中队列的缓存长度,以样本数为单位。默认为100。 +> > * **parallel_method** (str): 数据集中样本在预处理过程中并行处理的方式,支持'thread'线程和'process'进程两种方式。默认为'process'(Windows和Mac下会强制使用thread,该参数无效)。 +> > * **shuffle** (bool): 是否需要对数据集中样本打乱顺序。默认为False。 + +## paddlex.datasets.SegDataset +> **用于语义分割模型** +``` +paddlex.datasets.SegDataset(data_dir, file_list, label_list, transforms=None, num_workers='auto', buffer_size=100, parallel_method='thread', shuffle=False) +``` + +> 读取语义分割任务数据集,并对样本进行相应的处理。语义分割任务数据集格式的介绍可查看文档:[数据集格式说明](../datasets.md) + +> 示例:[代码文件](https://github.com/PaddlePaddle/PaddleX/blob/develop/tutorials/train/segmentation/unet.py#L27) + +> **参数** + +> > * **data_dir** (str): 数据集所在的目录路径。 +> > * **file_list** (str): 描述数据集图片文件和对应标注文件的文件路径(文本内每行路径为相对`data_dir`的相对路径)。 +> > * **label_list** (str): 描述数据集包含的类别信息文件路径。 +> > * **transforms** (paddlex.seg.transforms): 数据集中每个样本的预处理/增强算子,详见[paddlex.seg.transforms](./transforms/seg_transforms.md)。 +> > * **num_workers** (int|str):数据集中样本在预处理过程中的线程或进程数。默认为'auto'。当设为'auto'时,根据系统的实际CPU核数设置`num_workers`: 如果CPU核数的一半大于8,则`num_workers`为8,否则为CPU核数的一半。 +> > * **buffer_size** (int): 数据集中样本在预处理过程中队列的缓存长度,以样本数为单位。默认为100。 +> > * **parallel_method** (str): 数据集中样本在预处理过程中并行处理的方式,支持'thread'线程和'process'进程两种方式。默认为'process'(Windows和Mac下会强制使用thread,该参数无效)。 +> > * **shuffle** (bool): 是否需要对数据集中样本打乱顺序。默认为False。 + +## paddlex.datasets.EasyDataCls +> **用于图像分类模型** +``` +paddlex.datasets.EasyDataCls(data_dir, file_list, label_list, transforms=None, num_workers='auto', buffer_size=100, parallel_method='thread', shuffle=False) +``` + +> 读取EasyData平台标注图像分类数据集,并对样本进行相应的处理。EasyData图像分类任务数据集格式的介绍可查看文档:[数据集格式说明](../datasets.md)。 + +> **参数** + +> > * **data_dir** (str): 数据集所在的目录路径。 +> > * **file_list** (str): 描述数据集图片文件和对应标注文件的文件路径(文本内每行路径为相对`data_dir`的相对路径)。 +> > * **label_list** (str): 描述数据集包含的类别信息文件路径。 +> > * **transforms** (paddlex.seg.transforms): 数据集中每个样本的预处理/增强算子,详见[paddlex.cls.transforms](./transforms/cls_transforms.md)。 +> > * **num_workers** (int|str):数据集中样本在预处理过程中的线程或进程数。默认为'auto'。当设为'auto'时,根据系统的实际CPU核数设置`num_workers`: 如果CPU核数的一半大于8,则`num_workers`为8,否则为CPU核数的一半。 +> > * **buffer_size** (int): 数据集中样本在预处理过程中队列的缓存长度,以样本数为单位。默认为100。 +> > * **parallel_method** (str): 数据集中样本在预处理过程中并行处理的方式,支持'thread'线程和'process'进程两种方式。默认为'process'(Windows和Mac下会强制使用thread,该参数无效)。 +> > * **shuffle** (bool): 是否需要对数据集中样本打乱顺序。默认为False。 + +## paddlex.datasets.EasyDataDet +> 用于**目标检测/实例分割模型** +``` +paddlex.datasets.EasyDataDet(data_dir, file_list, label_list, transforms=None, num_workers=‘auto’, buffer_size=100, parallel_method='thread', shuffle=False) +``` + +> 读取EasyData目标检测格式数据集,并对样本进行相应的处理,该格式的数据集同样可以应用到实例分割模型的训练中。EasyData目标检测或实例分割任务数据集格式的介绍可查看文档:[数据集格式说明](../datasets.md) + + +> **参数** + +> > * **data_dir** (str): 数据集所在的目录路径。 +> > * **file_list** (str): 描述数据集图片文件和对应标注文件的文件路径(文本内每行路径为相对`data_dir`的相对路径)。 +> > * **label_list** (str): 描述数据集包含的类别信息文件路径。 +> > * **transforms** (paddlex.det.transforms): 数据集中每个样本的预处理/增强算子,详见[paddlex.det.transforms](./transforms/det_transforms.md)。 +> > * **num_workers** (int|str):数据集中样本在预处理过程中的线程或进程数。默认为'auto'。当设为'auto'时,根据系统的实际CPU核数设置`num_workers`: 如果CPU核数的一半大于8,则`num_workers`为8,否则为CPU核数的一半。 +> > * **buffer_size** (int): 数据集中样本在预处理过程中队列的缓存长度,以样本数为单位。默认为100。 +> > * **parallel_method** (str): 数据集中样本在预处理过程中并行处理的方式,支持'thread'线程和'process'进程两种方式。默认为'process'(Windows和Mac下会强制使用thread,该参数无效)。 +> > * **shuffle** (bool): 是否需要对数据集中样本打乱顺序。默认为False。 + +## paddlex.datasets.EasyDataSeg +> **用于语义分割模型** +``` +paddlex.datasets.EasyDataSeg(data_dir, file_list, label_list, transforms=None, num_workers='auto', buffer_size=100, parallel_method='thread', shuffle=False) +``` + +> 读取EasyData语义分割任务数据集,并对样本进行相应的处理。EasyData语义分割任务数据集格式的介绍可查看文档:[数据集格式说明](../datasets.md) + + +> **参数** + +> > * **data_dir** (str): 数据集所在的目录路径。 +> > * **file_list** (str): 描述数据集图片文件和对应标注文件的文件路径(文本内每行路径为相对`data_dir`的相对路径)。 +> > * **label_list** (str): 描述数据集包含的类别信息文件路径。 +> > * **transforms** (paddlex.seg.transforms): 数据集中每个样本的预处理/增强算子,详见[paddlex.seg.transforms](./transforms/seg_transforms.md)。 +> > * **num_workers** (int|str):数据集中样本在预处理过程中的线程或进程数。默认为'auto'。当设为'auto'时,根据系统的实际CPU核数设置`num_workers`: 如果CPU核数的一半大于8,则`num_workers`为8,否则为CPU核数的一半。 +> > * **buffer_size** (int): 数据集中样本在预处理过程中队列的缓存长度,以样本数为单位。默认为100。 +> > * **parallel_method** (str): 数据集中样本在预处理过程中并行处理的方式,支持'thread'线程和'process'进程两种方式。默认为'process'(Windows和Mac下会强制使用thread,该参数无效)。 +> > * **shuffle** (bool): 是否需要对数据集中样本打乱顺序。默认为False。 diff --git a/docs/apis/datasets/classification.md b/docs/apis/datasets/classification.md index 104bdf2dab80acfa8f1de1ef8ee522a126ddb7cc..54eb69a40ec08e2b89f9dd1ce3c0858594f2df0e 100755 --- a/docs/apis/datasets/classification.md +++ b/docs/apis/datasets/classification.md @@ -1,6 +1,6 @@ # 图像分类数据集 -## ImageNet类 +## ImageNet ``` paddlex.datasets.ImageNet(data_dir, file_list, label_list, transforms=None, num_workers=‘auto’, buffer_size=100, parallel_method='thread', shuffle=False) ``` @@ -19,12 +19,12 @@ paddlex.datasets.ImageNet(data_dir, file_list, label_list, transforms=None, num_ > > * **parallel_method** (str): 数据集中样本在预处理过程中并行处理的方式,支持'thread'线程和'process'进程两种方式。默认为'process'(Windows和Mac下会强制使用thread,该参数无效)。 > > * **shuffle** (bool): 是否需要对数据集中样本打乱顺序。默认为False。 -## EasyDataCls类 +## EasyDataCls ``` paddlex.datasets.EasyDatasetCls(data_dir, file_list, label_list, transforms=None, num_workers='auto', buffer_size=100, parallel_method='thread', shuffle=False) ``` -> 读取EasyData平台标注图像分类数据集,并对样本进行相应的处理。EasyData图像分类任务数据集格式的介绍可查看文档:[数据集格式说明](../datasets.md)。 +> 读取EasyData平台标注图像分类数据集,并对样本进行相应的处理。EasyData图像分类任务数据集格式的介绍可查看文档:[数据集格式说明](../datasets.md)。 > **参数** diff --git a/docs/apis/index.rst b/docs/apis/index.rst index 9a7b553ff010d713ef3abf233ffc83cc2e58ee22..142637e8c33d121289e9c329f9b547fcb21404a6 100755 --- a/docs/apis/index.rst +++ b/docs/apis/index.rst @@ -5,8 +5,9 @@ API接口说明 :maxdepth: 2 transforms/index.rst - datasets/index.rst + datasets.md models/index.rst slim.md load_model.md visualize.md + interpret.md diff --git a/docs/apis/interpret.md b/docs/apis/interpret.md new file mode 100644 index 0000000000000000000000000000000000000000..24ab99a1a17b2ebee2dc4388843e5d81176038ac --- /dev/null +++ b/docs/apis/interpret.md @@ -0,0 +1,58 @@ +# 模型可解释性 + +目前PaddleX支持对于图像分类的结果以可视化的方式进行解释,支持LIME和NormLIME两种可解释性算法。 + +## paddlex.interpret.lime +> **LIME可解释性结果可视化** +``` +paddlex.interpret.lime(img_file, + model, + num_samples=3000, + batch_size=50, + save_dir='./') +``` +使用LIME算法将模型预测结果的可解释性可视化。 +LIME表示与模型无关的局部可解释性,可以解释任何模型。LIME的思想是以输入样本为中心,在其附近的空间中进行随机采样,每个采样通过原模型得到新的输出,这样得到一系列的输入和对应的输出,LIME用一个简单的、可解释的模型(比如线性回归模型)来拟合这个映射关系,得到每个输入维度的权重,以此来解释模型。 + +**注意:** 可解释性结果可视化目前只支持分类模型。 + +### 参数 +>* **img_file** (str): 预测图像路径。 +>* **model** (paddlex.cv.models): paddlex中的模型。 +>* **num_samples** (int): LIME用于学习线性模型的采样数,默认为3000。 +>* **batch_size** (int): 预测数据batch大小,默认为50。 +>* **save_dir** (str): 可解释性可视化结果(保存为png格式文件)和中间文件存储路径。 + + +### 使用示例 +> 对预测可解释性结果可视化的过程可参见[代码](https://github.com/PaddlePaddle/PaddleX/blob/develop/tutorials/interpret/lime.py)。 + + +## paddlex.interpret.normlime +> **NormLIME可解释性结果可视化** +``` +paddlex.interpret.normlime(img_file, + model, + dataset=None, + num_samples=3000, + batch_size=50, + save_dir='./', + normlime_weights_file=None) +``` +使用NormLIME算法将模型预测结果的可解释性可视化。 +NormLIME是利用一定数量的样本来出一个全局的解释。由于NormLIME计算量较大,此处采用一种简化的方式:使用一定数量的测试样本(目前默认使用所有测试样本),对每个样本进行特征提取,映射到同一个特征空间;然后以此特征做为输入,以模型输出做为输出,使用线性回归对其进行拟合,得到一个全局的输入和输出的关系。之后,对一测试样本进行解释时,使用NormLIME全局的解释,来对LIME的结果进行滤波,使最终的可视化结果更加稳定。 + +**注意:** 可解释性结果可视化目前只支持分类模型。 + +### 参数 +>* **img_file** (str): 预测图像路径。 +>* **model** (paddlex.cv.models): paddlex中的模型。 +>* **dataset** (paddlex.datasets): 数据集读取器,默认为None。 +>* **num_samples** (int): LIME用于学习线性模型的采样数,默认为3000。 +>* **batch_size** (int): 预测数据batch大小,默认为50。 +>* **save_dir** (str): 可解释性可视化结果(保存为png格式文件)和中间文件存储路径。 +>* **normlime_weights_file** (str): NormLIME初始化文件名,若不存在,则计算一次,保存于该路径;若存在,则直接载入。 + +**注意:** dataset`读取的是一个数据集,该数据集不宜过大,否则计算时间会较长,但应包含所有类别的数据。NormLIME可解释性结果可视化目前只支持分类模型。 +### 使用示例 +> 对预测可解释性结果可视化的过程可参见[代码](https://github.com/PaddlePaddle/PaddleX/blob/develop/tutorials/interpret/normlime.py)。 diff --git a/docs/apis/load_model.md b/docs/apis/load_model.md index 0e460ee583c8bb4030d202372dae40882b7b34dd..e325279a3f3db5c9e832d18fec78dcf4fac6e167 100755 --- a/docs/apis/load_model.md +++ b/docs/apis/load_model.md @@ -1,8 +1,9 @@ -# 模型加载-load_model +# 模型加载 PaddleX提供了统一的模型加载接口,支持加载PaddleX保存的模型,并在验证集上进行评估或对测试图片进行预测 -## 函数接口 +## paddlex.load_model +> **加载PaddleX保存的模型** ``` paddlex.load_model(model_dir) diff --git a/docs/apis/models/classification.md b/docs/apis/models/classification.md index b70b555a7007b77851af22ddd4a775a4b3a8f93b..53314880748714d1da5a92019b91d4668afb65c6 100755 --- a/docs/apis/models/classification.md +++ b/docs/apis/models/classification.md @@ -1,6 +1,6 @@ -# 图像分类 +# Image Classification -## ResNet50类 +## paddlex.cls.ResNet50 ```python paddlex.cls.ResNet50(num_classes=1000) @@ -12,7 +12,7 @@ paddlex.cls.ResNet50(num_classes=1000) > - **num_classes** (int): 类别数。默认为1000。 -### train 训练接口 +### train ```python train(self, num_epochs, train_dataset, train_batch_size=64, eval_dataset=None, save_interval_epochs=1, log_interval_steps=2, save_dir='output', pretrain_weights='IMAGENET', optimizer=None, learning_rate=0.025, warmup_steps=0, warmup_start_lr=0.0, lr_decay_epochs=[30, 60, 90], lr_decay_gamma=0.1, use_vdl=False, sensitivities_file=None, eval_metric_loss=0.05, early_stop=False, early_stop_patience=5, resume_checkpoint=None) @@ -41,7 +41,7 @@ train(self, num_epochs, train_dataset, train_batch_size=64, eval_dataset=None, s > > - **early_stop_patience** (int): 当使用提前终止训练策略时,如果验证集精度在`early_stop_patience`个epoch内连续下降或持平,则终止训练。默认值为5。 > > - **resume_checkpoint** (str): 恢复训练时指定上次训练保存的模型路径。若为None,则不会恢复训练。默认值为None。 -### evaluate 评估接口 +### evaluate ```python evaluate(self, eval_dataset, batch_size=1, epoch_id=None, return_details=False) @@ -59,7 +59,7 @@ evaluate(self, eval_dataset, batch_size=1, epoch_id=None, return_details=False) > > - **dict**: 当return_details为False时,返回dict, 包含关键字:'acc1'、'acc5',分别表示最大值的accuracy、前5个最大值的accuracy。 > > - **tuple** (metrics, eval_details): 当`return_details`为True时,增加返回dict,包含关键字:'true_labels'、'pred_scores',分别代表真实类别id、每个类别的预测得分。 -### predict 预测接口 +### predict ```python predict(self, img_file, transforms=None, topk=5) @@ -78,117 +78,31 @@ predict(self, img_file, transforms=None, topk=5) > > - **list**: 其中元素均为字典。字典的关键字为'category_id'、'category'、'score', > > 分别对应预测类别id、预测类别标签、预测得分。 -## 其它分类器类 - -PaddleX提供了共计22种分类器,所有分类器均提供同`ResNet50`相同的训练`train`,评估`evaluate`和预测`predict`接口,各模型效果可参考[模型库](https://paddlex.readthedocs.io/zh_CN/latest/appendix/model_zoo.html)。 - -### ResNet18 -```python -paddlex.cls.ResNet18(num_classes=1000) -``` - -### ResNet34 -```python -paddlex.cls.ResNet34(num_classes=1000) -``` - - -### ResNet50 -```python -paddlex.cls.ResNet50(num_classes=1000) -``` - -### ResNet50_vd -```python -paddlex.cls.ResNet50_vd(num_classes=1000) -``` - -### ResNet50_vd_ssld -```python -paddlex.cls.ResNet50_vd_ssld(num_classes=1000) -``` - -### ResNet101 -```python -paddlex.cls.ResNet101(num_classes=1000) -``` - -### ResNet101_vd -```python -paddlex.cls.ResNet101_vdnum_classes=1000) -``` - -### ResNet101_vd_ssld -```python -paddlex.cls.ResNet101_vd_ssld(num_classes=1000) -``` - -### DarkNet53 -```python -paddlex.cls.DarkNet53(num_classes=1000) -``` - -### MobileNetV1 -```python -paddlex.cls.MobileNetV1(num_classes=1000) -``` - -### MobileNetV2 -```python -paddlex.cls.MobileNetV2(num_classes=1000) -``` - -### MobileNetV3_small -```python -paddlex.cls.MobileNetV3_small(num_classes=1000) -``` - -### MobileNetV3_small_ssld -```python -paddlex.cls.MobileNetV3_small_ssld(num_classes=1000) -``` - -### MobileNetV3_large -```python -paddlex.cls.MobileNetV3_large(num_classes=1000) -``` - -### MobileNetV3_large_ssld -```python -paddlex.cls.MobileNetV3_large_ssld(num_classes=1000) -``` - -### Xception65 -```python -paddlex.cls.Xception65(num_classes=1000) -``` - -### Xception71 -```python -paddlex.cls.Xception71(num_classes=1000) -``` - -### ShuffleNetV2 -```python -paddlex.cls.ShuffleNetV2(num_classes=1000) -``` - -### DenseNet121 -```python -paddlex.cls.DenseNet121(num_classes=1000) -``` - -### DenseNet161 -```python -paddlex.cls.DenseNet161(num_classes=1000) -``` - -### DenseNet201 -```python -paddlex.cls.DenseNet201(num_classes=1000) -``` - -### HRNet_W18 -```python -paddlex.cls.HRNet_W18(num_classes=1000) -``` +## 其它分类模型 + +PaddleX提供了共计22种分类模型,所有分类模型均提供同`ResNet50`相同的训练`train`,评估`evaluate`和预测`predict`接口,各模型效果可参考[模型库](https://paddlex.readthedocs.io/zh_CN/latest/appendix/model_zoo.html)。 + +| 模型 | 接口 | +| :---------------- | :---------------------- | +| ResNet18 | paddlex.cls.ResNet18(num_classes=1000) | +| ResNet34 | paddlex.cls.ResNet34(num_classes=1000) | +| ResNet50 | paddlex.cls.ResNet50(num_classes=1000) | +| ResNet50_vd | paddlex.cls.ResNet50_vd(num_classes=1000) | +| ResNet50_vd_ssld | paddlex.cls.ResNet50_vd_ssld(num_classes=1000) | +| ResNet101 | paddlex.cls.ResNet101(num_classes=1000) | +| ResNet101_vd | paddlex.cls.ResNet101_vd(num_classes=1000) | +| ResNet101_vd_ssld | paddlex.cls.ResNet101_vd_ssld(num_classes=1000) | +| DarkNet53 | paddlex.cls.DarkNet53(num_classes=1000) | +| MoibileNetV1 | paddlex.cls.MobileNetV1(num_classes=1000) | +| MobileNetV2 | paddlex.cls.MobileNetV2(num_classes=1000) | +| MobileNetV3_small | paddlex.cls.MobileNetV3_small(num_classes=1000) | +| MobileNetV3_small_ssld | paddlex.cls.MobileNetV3_small_ssld(num_classes=1000) | +| MobileNetV3_large | paddlex.cls.MobileNetV3_large(num_classes=1000) | +| MobileNetV3_large_ssld | paddlex.cls.MobileNetV3_large_ssld(num_classes=1000) | +| Xception65 | paddlex.cls.Xception65(num_classes=1000) | +| Xception71 | paddlex.cls.Xception71(num_classes=1000) | +| ShuffleNetV2 | paddlex.cls.ShuffleNetV2(num_classes=1000) | +| DenseNet121 | paddlex.cls.DenseNet121(num_classes=1000) | +| DenseNet161 | paddlex.cls.DenseNet161(num_classes=1000) | +| DenseNet201 | paddlex.cls.DenseNet201(num_classes=1000) | +| HRNet_W18 | paddlex.cls.HRNet_W18(num_classes=1000) | diff --git a/docs/apis/models/detection.md b/docs/apis/models/detection.md index f76e5598636f6c8ac94b90acca7fe1c846708077..47cec854398181c80990af5e13e87c1cbb467d7e 100755 --- a/docs/apis/models/detection.md +++ b/docs/apis/models/detection.md @@ -1,6 +1,6 @@ -# 目标检测 +# Object Detection -## YOLOv3类 +## paddlex.det.YOLOv3 ```python paddlex.det.YOLOv3(num_classes=80, backbone='MobileNetV1', anchors=None, anchor_masks=None, ignore_threshold=0.7, nms_score_threshold=0.01, nms_topk=1000, nms_keep_topk=100, nms_iou_threshold=0.45, label_smooth=False, train_random_shapes=[320, 352, 384, 416, 448, 480, 512, 544, 576, 608]) @@ -25,7 +25,7 @@ paddlex.det.YOLOv3(num_classes=80, backbone='MobileNetV1', anchors=None, anchor_ > > - **label_smooth** (bool): 是否使用label smooth。默认值为False。 > > - **train_random_shapes** (list|tuple): 训练时从列表中随机选择图像大小。默认值为[320, 352, 384, 416, 448, 480, 512, 544, 576, 608]。 -### train 训练接口 +### train ```python train(self, num_epochs, train_dataset, train_batch_size=8, eval_dataset=None, save_interval_epochs=20, log_interval_steps=2, save_dir='output', pretrain_weights='IMAGENET', optimizer=None, learning_rate=1.0/8000, warmup_steps=1000, warmup_start_lr=0.0, lr_decay_epochs=[213, 240], lr_decay_gamma=0.1, metric=None, use_vdl=False, sensitivities_file=None, eval_metric_loss=0.05, early_stop=False, early_stop_patience=5, resume_checkpoint=None) @@ -57,7 +57,7 @@ train(self, num_epochs, train_dataset, train_batch_size=8, eval_dataset=None, sa > > - **early_stop_patience** (int): 当使用提前终止训练策略时,如果验证集精度在`early_stop_patience`个epoch内连续下降或持平,则终止训练。默认值为5。 > > - **resume_checkpoint** (str): 恢复训练时指定上次训练保存的模型路径。若为None,则不会恢复训练。默认值为None。 -### evaluate 评估接口 +### evaluate ```python evaluate(self, eval_dataset, batch_size=1, epoch_id=None, metric=None, return_details=False) @@ -77,7 +77,7 @@ evaluate(self, eval_dataset, batch_size=1, epoch_id=None, metric=None, return_de > > > - **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',对应元素预测结果列表,每个预测结果由图像id、预测框类别id、预测框坐标、预测框得分;’gt‘:真实标注框相关信息。 -### predict 预测接口 +### predict ```python predict(self, img_file, transforms=None) @@ -95,7 +95,7 @@ predict(self, img_file, transforms=None) > > - **list**: 预测结果列表,列表中每个元素均为一个dict,key包括'bbox', 'category', 'category_id', 'score',分别表示每个预测目标的框坐标信息、类别、类别id、置信度,其中框坐标信息为[xmin, ymin, w, h],即左上角x, y坐标和框的宽和高。 -## FasterRCNN类 +## paddlex.det.FasterRCNN ```python paddlex.det.FasterRCNN(num_classes=81, backbone='ResNet50', with_fpn=True, aspect_ratios=[0.5, 1.0, 2.0], anchor_sizes=[32, 64, 128, 256, 512]) @@ -112,7 +112,7 @@ paddlex.det.FasterRCNN(num_classes=81, backbone='ResNet50', with_fpn=True, aspec > > - **aspect_ratios** (list): 生成anchor高宽比的可选值。默认为[0.5, 1.0, 2.0]。 > > - **anchor_sizes** (list): 生成anchor大小的可选值。默认为[32, 64, 128, 256, 512]。 -### train 训练接口 +### train ```python train(self, num_epochs, train_dataset, train_batch_size=2, eval_dataset=None, save_interval_epochs=1, log_interval_steps=2,save_dir='output', pretrain_weights='IMAGENET', optimizer=None, learning_rate=0.0025, warmup_steps=500, warmup_start_lr=1.0/1200, lr_decay_epochs=[8, 11], lr_decay_gamma=0.1, metric=None, use_vdl=False, early_stop=False, early_stop_patience=5, resume_checkpoint=None) @@ -142,7 +142,7 @@ train(self, num_epochs, train_dataset, train_batch_size=2, eval_dataset=None, sa > > - **early_stop_patience** (int): 当使用提前终止训练策略时,如果验证集精度在`early_stop_patience`个epoch内连续下降或持平,则终止训练。默认值为5。 > > - **resume_checkpoint** (str): 恢复训练时指定上次训练保存的模型路径。若为None,则不会恢复训练。默认值为None。 -### evaluate 接口 +### evaluate ```python evaluate(self, eval_dataset, batch_size=1, epoch_id=None, metric=None, return_details=False) @@ -162,7 +162,7 @@ evaluate(self, eval_dataset, batch_size=1, epoch_id=None, metric=None, return_de > > > - **tuple** (metrics, eval_details) | **dict** (metrics): 当`return_details`为True时,返回(metrics, eval_details),当`return_details`为False时,返回metrics。metrics为dict,包含关键字:'bbox_mmap'或者’bbox_map‘,分别表示平均准确率平均值在各个IoU阈值下的结果取平均值的结果(mmAP)、平均准确率平均值(mAP)。eval_details为dict,包含关键字:'bbox',对应元素预测结果列表,每个预测结果由图像id、预测框类别id、预测框坐标、预测框得分;’gt‘:真实标注框相关信息。 -### predict 预测接口 +### predict ```python predict(self, img_file, transforms=None) diff --git a/docs/apis/models/index.rst b/docs/apis/models/index.rst index 5e533189cd44759cb2002e64bf1a0a9b066cfc6e..2cf02d9f011c95ab0f0325dab33b7e9025f4f533 100755 --- a/docs/apis/models/index.rst +++ b/docs/apis/models/index.rst @@ -1,10 +1,10 @@ -模型集-models +视觉模型集 ============================ PaddleX目前支持 `四种视觉任务解决方案 <../../cv_solutions.html>`_ ,包括图像分类、目标检测、实例分割和语义分割。对于每种视觉任务,PaddleX又提供了1种或多种模型,用户可根据需求及应用场景选取。 .. toctree:: - :maxdepth: 2 + :maxdepth: 3 classification.md detection.md diff --git a/docs/apis/models/instance_segmentation.md b/docs/apis/models/instance_segmentation.md index 72d008b2252a0df73648941d8dbee9d6f8a8764a..b1184c4fdcd8a5cbf5da0b774e1c078fad100a79 100755 --- a/docs/apis/models/instance_segmentation.md +++ b/docs/apis/models/instance_segmentation.md @@ -1,6 +1,6 @@ -# 实例分割 +# Instance Segmentation -## MaskRCNN类 +## MaskRCNN ```python paddlex.det.MaskRCNN(num_classes=81, backbone='ResNet50', with_fpn=True, aspect_ratios=[0.5, 1.0, 2.0], anchor_sizes=[32, 64, 128, 256, 512]) @@ -17,7 +17,7 @@ paddlex.det.MaskRCNN(num_classes=81, backbone='ResNet50', with_fpn=True, aspect_ > > - **aspect_ratios** (list): 生成anchor高宽比的可选值。默认为[0.5, 1.0, 2.0]。 > > - **anchor_sizes** (list): 生成anchor大小的可选值。默认为[32, 64, 128, 256, 512]。 -#### train 训练接口 +#### train ```python train(self, num_epochs, train_dataset, train_batch_size=1, eval_dataset=None, save_interval_epochs=1, log_interval_steps=20, save_dir='output', pretrain_weights='IMAGENET', optimizer=None, learning_rate=1.0/800, warmup_steps=500, warmup_start_lr=1.0 / 2400, lr_decay_epochs=[8, 11], lr_decay_gamma=0.1, metric=None, use_vdl=False, early_stop=False, early_stop_patience=5, resume_checkpoint=None) @@ -47,7 +47,7 @@ train(self, num_epochs, train_dataset, train_batch_size=1, eval_dataset=None, sa > > - **early_stop_patience** (int): 当使用提前终止训练策略时,如果验证集精度在`early_stop_patience`个epoch内连续下降或持平,则终止训练。默认值为5。 > > - **resume_checkpoint** (str): 恢复训练时指定上次训练保存的模型路径。若为None,则不会恢复训练。默认值为None。 -#### evaluate 评估接口 +#### evaluate ```python evaluate(self, eval_dataset, batch_size=1, epoch_id=None, metric=None, return_details=False) @@ -67,7 +67,7 @@ evaluate(self, eval_dataset, batch_size=1, epoch_id=None, metric=None, return_de > > > - **tuple** (metrics, eval_details) | **dict** (metrics): 当`return_details`为True时,返回(metrics, eval_details),当return_details为False时,返回metrics。metrics为dict,包含关键字:'bbox_mmap'和'segm_mmap'或者’bbox_map‘和'segm_map',分别表示预测框和分割区域平均准确率平均值在各个IoU阈值下的结果取平均值的结果(mmAP)、平均准确率平均值(mAP)。eval_details为dict,包含关键字:'bbox',对应元素预测框结果列表,每个预测结果由图像id、预测框类别id、预测框坐标、预测框得分;'mask',对应元素预测区域结果列表,每个预测结果由图像id、预测区域类别id、预测区域坐标、预测区域得分;’gt‘:真实标注框和标注区域相关信息。 -#### predict 预测接口 +#### predict ```python predict(self, img_file, transforms=None) diff --git a/docs/apis/models/semantic_segmentation.md b/docs/apis/models/semantic_segmentation.md index 3ff66337fe64b35f29a2a7985cea040fcb233d82..69daf4751a7838589bd78d3a5793e293d2843aa9 100755 --- a/docs/apis/models/semantic_segmentation.md +++ b/docs/apis/models/semantic_segmentation.md @@ -1,6 +1,6 @@ -# 语义分割 +# Semantic Segmentation -## DeepLabv3p类 +## paddlex.seg.DeepLabv3p ```python paddlex.seg.DeepLabv3p(num_classes=2, backbone='MobileNetV2_x1.0', output_stride=16, aspp_with_sep_conv=True, decoder_use_sep_conv=True, encoder_with_aspp=True, enable_decoder=True, use_bce_loss=False, use_dice_loss=False, class_weight=None, ignore_index=255) @@ -23,7 +23,7 @@ paddlex.seg.DeepLabv3p(num_classes=2, backbone='MobileNetV2_x1.0', output_stride > > - **class_weight** (list/str): 交叉熵损失函数各类损失的权重。当`class_weight`为list的时候,长度应为`num_classes`。当`class_weight`为str时, weight.lower()应为'dynamic',这时会根据每一轮各类像素的比重自行计算相应的权重,每一类的权重为:每类的比例 * num_classes。class_weight取默认值None是,各类的权重1,即平时使用的交叉熵损失函数。 > > - **ignore_index** (int): label上忽略的值,label为`ignore_index`的像素不参与损失函数的计算。默认255。 -### train 训练接口 +### train ```python train(self, num_epochs, train_dataset, train_batch_size=2, eval_dataset=None, eval_batch_size=1, save_interval_epochs=1, log_interval_steps=2, save_dir='output', pretrain_weights='IMAGENET', optimizer=None, learning_rate=0.01, lr_decay_power=0.9, use_vdl=False, sensitivities_file=None, eval_metric_loss=0.05, early_stop=False, early_stop_patience=5, resume_checkpoint=None): @@ -51,7 +51,7 @@ train(self, num_epochs, train_dataset, train_batch_size=2, eval_dataset=None, ev > > - **early_stop_patience** (int): 当使用提前终止训练策略时,如果验证集精度在`early_stop_patience`个epoch内连续下降或持平,则终止训练。默认值为5。 > > - **resume_checkpoint** (str): 恢复训练时指定上次训练保存的模型路径。若为None,则不会恢复训练。默认值为None。 -### evaluate 评估接口 +### evaluate ```python evaluate(self, eval_dataset, batch_size=1, epoch_id=None, return_details=False): @@ -73,7 +73,7 @@ evaluate(self, eval_dataset, batch_size=1, epoch_id=None, return_details=False): > > - **tuple** (metrics, eval_details):当`return_details`为True时,增加返回dict (eval_details), > > 包含关键字:'confusion_matrix',表示评估的混淆矩阵。 -### predict 预测接口 +### predict ``` predict(self, im_file, transforms=None): @@ -90,7 +90,7 @@ predict(self, im_file, transforms=None): > > > > - **dict**: 包含关键字'label_map'和'score_map', 'label_map'存储预测结果灰度图,像素值表示对应的类别,'score_map'存储各类别的概率,shape=(h, w, num_classes)。 -## UNet类 +## paddlex.seg.UNet ```python paddlex.seg.UNet(num_classes=2, upsample_mode='bilinear', use_bce_loss=False, use_dice_loss=False, class_weight=None, ignore_index=255) @@ -107,75 +107,11 @@ paddlex.seg.UNet(num_classes=2, upsample_mode='bilinear', use_bce_loss=False, us > > - **class_weight** (list/str): 交叉熵损失函数各类损失的权重。当`class_weight`为list的时候,长度应为`num_classes`。当`class_weight`为str时, weight.lower()应为'dynamic',这时会根据每一轮各类像素的比重自行计算相应的权重,每一类的权重为:每类的比例 * num_classes。class_weight取默认值None是,各类的权重1,即平时使用的交叉熵损失函数。 > > - **ignore_index** (int): label上忽略的值,label为`ignore_index`的像素不参与损失函数的计算。默认255。 -### train 训练接口 +> - train 训练接口说明同 [DeepLabv3p模型train接口](#train) +> - evaluate 评估接口说明同 [DeepLabv3p模型evaluate接口](#evaluate) +> - predict 预测接口说明同 [DeepLabv3p模型predict接口](#predict) -```python -train(self, num_epochs, train_dataset, train_batch_size=2, eval_dataset=None, eval_batch_size=1, save_interval_epochs=1, log_interval_steps=2, save_dir='output', pretrain_weights='COCO', optimizer=None, learning_rate=0.01, lr_decay_power=0.9, use_vdl=False, sensitivities_file=None, eval_metric_loss=0.05, early_stop=False, early_stop_patience=5, resume_checkpoint=None): -``` - -> UNet模型训练接口。 - -> **参数** -> > -> > - **num_epochs** (int): 训练迭代轮数。 -> > - **train_dataset** (paddlex.datasets): 训练数据读取器。 -> > - **train_batch_size** (int): 训练数据batch大小。同时作为验证数据batch大小。默认2。 -> > - **eval_dataset** (paddlex.datasets): 评估数据读取器。 -> > - **save_interval_epochs** (int): 模型保存间隔(单位:迭代轮数)。默认为1。 -> > - **log_interval_steps** (int): 训练日志输出间隔(单位:迭代次数)。默认为2。 -> > - **save_dir** (str): 模型保存路径。默认'output' -> > - **pretrain_weights** (str): 若指定为路径时,则加载路径下预训练模型;若为字符串'COCO',则自动下载在COCO图片数据上预训练的模型权重;若为None,则不使用预训练模型。默认'COCO'。 -> > - **optimizer** (paddle.fluid.optimizer): 优化器。当该参数为None时,使用默认的优化器:使用fluid.optimizer.Momentum优化方法,polynomial的学习率衰减策略。 -> > - **learning_rate** (float): 默认优化器的初始学习率。默认0.01。 -> > - **lr_decay_power** (float): 默认优化器学习率衰减指数。默认0.9。 -> > - **use_vdl** (bool): 是否使用VisualDL进行可视化。默认False。 -> > - **sensitivities_file** (str): 若指定为路径时,则加载路径下敏感度信息进行裁剪;若为字符串'DEFAULT',则自动下载在Cityscapes图片数据上获得的敏感度信息进行裁剪;若为None,则不进行裁剪。默认为None。 -> > - **eval_metric_loss** (float): 可容忍的精度损失。默认为0.05。 -> > - **early_stop** (float): 是否使用提前终止训练策略。默认值为False。 -> > - **early_stop_patience** (int): 当使用提前终止训练策略时,如果验证集精度在`early_stop_patience`个epoch内连续下降或持平,则终止训练。默认值为5。 -> > - **resume_checkpoint** (str): 恢复训练时指定上次训练保存的模型路径。若为None,则不会恢复训练。默认值为None。 - -#### evaluate 评估接口 - -``` -evaluate(self, eval_dataset, batch_size=1, epoch_id=None, return_details=False): -``` - -> UNet模型评估接口。 - -> **参数** -> > -> > - **eval_dataset** (paddlex.datasets): 评估数据读取器。 -> > - **batch_size** (int): 评估时的batch大小。默认1。 -> > - **epoch_id** (int): 当前评估模型所在的训练轮数。 -> > - **return_details** (bool): 是否返回详细信息。默认False。 - -> **返回值** -> > -> > - **dict**: 当return_details为False时,返回dict。包含关键字:'miou'、'category_iou'、'macc'、 -> > 'category_acc'和'kappa',分别表示平均iou、各类别iou、平均准确率、各类别准确率和kappa系数。 -> > - **tuple** (metrics, eval_details):当return_details为True时,增加返回dict (eval_details), -> > 包含关键字:'confusion_matrix',表示评估的混淆矩阵。 - -#### predict 预测接口 - -``` -predict(self, im_file, transforms=None): -``` - -> UNet模型预测接口。需要注意的是,只有在训练过程中定义了eval_dataset,模型在保存时才会将预测时的图像处理流程保存在`UNet.test_transforms`和`UNet.eval_transforms`中。如未在训练时定义eval_dataset,那在调用预测`predict`接口时,用户需要再重新定义test_transforms传入给`predict`接口。 - -> **参数** -> > -> > - **img_file** (str): 预测图像路径。 -> > - **transforms** (paddlex.seg.transforms): 数据预处理操作。 - -> **返回值** -> > -> > - **dict**: 包含关键字'label_map'和'score_map', 'label_map'存储预测结果灰度图,像素值表示对应的类别,'score_map'存储各类别的概率,shape=(h, w, num_classes)。 - - -## HRNet类 +## paddlex.seg.HRNet ```python paddlex.seg.HRNet(num_classes=2, width=18, use_bce_loss=False, use_dice_loss=False, class_weight=None, ignore_index=255) @@ -192,75 +128,11 @@ paddlex.seg.HRNet(num_classes=2, width=18, use_bce_loss=False, use_dice_loss=Fal > > - **class_weight** (list|str): 交叉熵损失函数各类损失的权重。当`class_weight`为list的时候,长度应为`num_classes`。当`class_weight`为str时, weight.lower()应为'dynamic',这时会根据每一轮各类像素的比重自行计算相应的权重,每一类的权重为:每类的比例 * num_classes。class_weight取默认值None是,各类的权重1,即平时使用的交叉熵损失函数。 > > - **ignore_index** (int): label上忽略的值,label为`ignore_index`的像素不参与损失函数的计算。默认255。 -### train 训练接口 - -```python -train(self, num_epochs, train_dataset, train_batch_size=2, eval_dataset=None, eval_batch_size=1, save_interval_epochs=1, log_interval_steps=2, save_dir='output', pretrain_weights='IMAGENET', optimizer=None, learning_rate=0.01, lr_decay_power=0.9, use_vdl=False, sensitivities_file=None, eval_metric_loss=0.05, early_stop=False, early_stop_patience=5, resume_checkpoint=None): -``` - -> HRNet模型训练接口。 - -> **参数** -> > -> > - **num_epochs** (int): 训练迭代轮数。 -> > - **train_dataset** (paddlex.datasets): 训练数据读取器。 -> > - **train_batch_size** (int): 训练数据batch大小。同时作为验证数据batch大小。默认2。 -> > - **eval_dataset** (paddlex.datasets): 评估数据读取器。 -> > - **save_interval_epochs** (int): 模型保存间隔(单位:迭代轮数)。默认为1。 -> > - **log_interval_steps** (int): 训练日志输出间隔(单位:迭代次数)。默认为2。 -> > - **save_dir** (str): 模型保存路径。默认'output' -> > - **pretrain_weights** (str): 若指定为路径时,则加载路径下预训练模型;若为字符串'IMAGENET',则自动下载在ImageNet数据集上预训练的模型权重;若为字符串'CITYSCAPES',则自动下载在CITYSCAPES图片数据上预训练的模型权重(注意:目前仅提供`width`取值为18的CITYSCAPES预训练模型);若为None,则不使用预训练模型。默认'IMAGENET'。 -> > - **optimizer** (paddle.fluid.optimizer): 优化器。当该参数为None时,使用默认的优化器:使用fluid.optimizer.Momentum优化方法,polynomial的学习率衰减策略。 -> > - **learning_rate** (float): 默认优化器的初始学习率。默认0.01。 -> > - **lr_decay_power** (float): 默认优化器学习率衰减指数。默认0.9。 -> > - **use_vdl** (bool): 是否使用VisualDL进行可视化。默认False。 -> > - **sensitivities_file** (str): 若指定为路径时,则加载路径下敏感度信息进行裁剪;若为字符串'DEFAULT',则自动下载在Cityscapes图片数据上获得的敏感度信息进行裁剪;若为None,则不进行裁剪。默认为None。 -> > - **eval_metric_loss** (float): 可容忍的精度损失。默认为0.05。 -> > - **early_stop** (float): 是否使用提前终止训练策略。默认值为False。 -> > - **early_stop_patience** (int): 当使用提前终止训练策略时,如果验证集精度在`early_stop_patience`个epoch内连续下降或持平,则终止训练。默认值为5。 -> > - **resume_checkpoint** (str): 恢复训练时指定上次训练保存的模型路径。若为None,则不会恢复训练。默认值为None。 - -#### evaluate 评估接口 - -``` -evaluate(self, eval_dataset, batch_size=1, epoch_id=None, return_details=False): -``` - -> HRNet模型评估接口。 - -> **参数** -> > -> > - **eval_dataset** (paddlex.datasets): 评估数据读取器。 -> > - **batch_size** (int): 评估时的batch大小。默认1。 -> > - **epoch_id** (int): 当前评估模型所在的训练轮数。 -> > - **return_details** (bool): 是否返回详细信息。默认False。 - -> **返回值** -> > -> > - **dict**: 当return_details为False时,返回dict。包含关键字:'miou'、'category_iou'、'macc'、 -> > 'category_acc'和'kappa',分别表示平均iou、各类别iou、平均准确率、各类别准确率和kappa系数。 -> > - **tuple** (metrics, eval_details):当return_details为True时,增加返回dict (eval_details), -> > 包含关键字:'confusion_matrix',表示评估的混淆矩阵。 - -#### predict 预测接口 - -``` -predict(self, im_file, transforms=None): -``` - -> HRNet模型预测接口。需要注意的是,只有在训练过程中定义了eval_dataset,模型在保存时才会将预测时的图像处理流程保存在`UNet.test_transforms`和`UNet.eval_transforms`中。如未在训练时定义eval_dataset,那在调用预测`predict`接口时,用户需要再重新定义test_transforms传入给`predict`接口。 - -> **参数** -> > -> > - **img_file** (str): 预测图像路径。 -> > - **transforms** (paddlex.seg.transforms): 数据预处理操作。 - -> **返回值** -> > -> > - **dict**: 包含关键字'label_map'和'score_map', 'label_map'存储预测结果灰度图,像素值表示对应的类别,'score_map'存储各类别的概率,shape=(h, w, num_classes)。 - +> - train 训练接口说明同 [DeepLabv3p模型train接口](#train) +> - evaluate 评估接口说明同 [DeepLabv3p模型evaluate接口](#evaluate) +> - predict 预测接口说明同 [DeepLabv3p模型predict接口](#predict) -## FastSCNN类 +## paddlex.seg.FastSCNN ```python paddlex.seg.FastSCNN(num_classes=2, use_bce_loss=False, use_dice_loss=False, class_weight=None, ignore_index=255, multi_loss_weight=[1.0]) @@ -277,69 +149,6 @@ paddlex.seg.FastSCNN(num_classes=2, use_bce_loss=False, use_dice_loss=False, cla > > - **ignore_index** (int): label上忽略的值,label为`ignore_index`的像素不参与损失函数的计算。默认255。 > > - **multi_loss_weight** (list): 多分支上的loss权重。默认计算一个分支上的loss,即默认值为[1.0]。也支持计算两个分支或三个分支上的loss,权重按[fusion_branch_weight, higher_branch_weight, lower_branch_weight]排列,fusion_branch_weight为空间细节分支和全局上下文分支融合后的分支上的loss权重,higher_branch_weight为空间细节分支上的loss权重,lower_branch_weight为全局上下文分支上的loss权重,若higher_branch_weight和lower_branch_weight未设置则不会计算这两个分支上的loss。 -### train 训练接口 - -```python -train(self, num_epochs, train_dataset, train_batch_size=2, eval_dataset=None, eval_batch_size=1, save_interval_epochs=1, log_interval_steps=2, save_dir='output', pretrain_weights='CITYSCAPES', optimizer=None, learning_rate=0.01, lr_decay_power=0.9, use_vdl=False, sensitivities_file=None, eval_metric_loss=0.05, early_stop=False, early_stop_patience=5, resume_checkpoint=None): -``` - -> FastSCNN模型训练接口。 - -> **参数** -> > -> > - **num_epochs** (int): 训练迭代轮数。 -> > - **train_dataset** (paddlex.datasets): 训练数据读取器。 -> > - **train_batch_size** (int): 训练数据batch大小。同时作为验证数据batch大小。默认2。 -> > - **eval_dataset** (paddlex.datasets): 评估数据读取器。 -> > - **save_interval_epochs** (int): 模型保存间隔(单位:迭代轮数)。默认为1。 -> > - **log_interval_steps** (int): 训练日志输出间隔(单位:迭代次数)。默认为2。 -> > - **save_dir** (str): 模型保存路径。默认'output' -> > - **pretrain_weights** (str): 若指定为路径时,则加载路径下预训练模型;若为字符串'CITYSCAPES',则自动下载在CITYSCAPES图片数据上预训练的模型权重;若为None,则不使用预训练模型。默认'CITYSCAPES'。 -> > - **optimizer** (paddle.fluid.optimizer): 优化器。当该参数为None时,使用默认的优化器:使用fluid.optimizer.Momentum优化方法,polynomial的学习率衰减策略。 -> > - **learning_rate** (float): 默认优化器的初始学习率。默认0.01。 -> > - **lr_decay_power** (float): 默认优化器学习率衰减指数。默认0.9。 -> > - **use_vdl** (bool): 是否使用VisualDL进行可视化。默认False。 -> > - **sensitivities_file** (str): 若指定为路径时,则加载路径下敏感度信息进行裁剪;若为字符串'DEFAULT',则自动下载在Cityscapes图片数据上获得的敏感度信息进行裁剪;若为None,则不进行裁剪。默认为None。 -> > - **eval_metric_loss** (float): 可容忍的精度损失。默认为0.05。 -> > - **early_stop** (float): 是否使用提前终止训练策略。默认值为False。 -> > - **early_stop_patience** (int): 当使用提前终止训练策略时,如果验证集精度在`early_stop_patience`个epoch内连续下降或持平,则终止训练。默认值为5。 -> > - **resume_checkpoint** (str): 恢复训练时指定上次训练保存的模型路径。若为None,则不会恢复训练。默认值为None。 - -#### evaluate 评估接口 - -``` -evaluate(self, eval_dataset, batch_size=1, epoch_id=None, return_details=False): -``` - -> FastSCNN模型评估接口。 - -> **参数** -> > -> > - **eval_dataset** (paddlex.datasets): 评估数据读取器。 -> > - **batch_size** (int): 评估时的batch大小。默认1。 -> > - **epoch_id** (int): 当前评估模型所在的训练轮数。 -> > - **return_details** (bool): 是否返回详细信息。默认False。 - -> **返回值** -> > -> > - **dict**: 当return_details为False时,返回dict。包含关键字:'miou'、'category_iou'、'macc'、 -> > 'category_acc'和'kappa',分别表示平均iou、各类别iou、平均准确率、各类别准确率和kappa系数。 -> > - **tuple** (metrics, eval_details):当return_details为True时,增加返回dict (eval_details), -> > 包含关键字:'confusion_matrix',表示评估的混淆矩阵。 - -#### predict 预测接口 - -``` -predict(self, im_file, transforms=None): -``` - -> FastSCNN模型预测接口。需要注意的是,只有在训练过程中定义了eval_dataset,模型在保存时才会将预测时的图像处理流程保存在`UNet.test_transforms`和`UNet.eval_transforms`中。如未在训练时定义eval_dataset,那在调用预测`predict`接口时,用户需要再重新定义test_transforms传入给`predict`接口。 - -> **参数** -> > -> > - **img_file** (str): 预测图像路径。 -> > - **transforms** (paddlex.seg.transforms): 数据预处理操作。 - -> **返回值** -> > -> > - **dict**: 包含关键字'label_map'和'score_map', 'label_map'存储预测结果灰度图,像素值表示对应的类别,'score_map'存储各类别的概率,shape=(h, w, num_classes)。 +> - train 训练接口说明同 [DeepLabv3p模型train接口](#train) +> - evaluate 评估接口说明同 [DeepLabv3p模型evaluate接口](#evaluate) +> - predict 预测接口说明同 [DeepLabv3p模型predict接口](#predict) diff --git a/docs/apis/slim.md b/docs/apis/slim.md index 39557f531f391eb3ff4e3050c2829e5a2ff95f5f..38420a7a8c7a5b2d57f430a7eb32dd326f0a4b83 100755 --- a/docs/apis/slim.md +++ b/docs/apis/slim.md @@ -1,6 +1,7 @@ -# 模型压缩-slim +# 模型压缩 -## 计算参数敏感度 +## paddlex.slim.cal_params_sensitivities +> **计算参数敏感度** ``` paddlex.slim.cal_params_sensitivities(model, save_file, eval_dataset, batch_size=8) ``` @@ -18,7 +19,8 @@ paddlex.slim.cal_params_sensitivities(model, save_file, eval_dataset, batch_size * **batch_size** (int): 评估时的batch_size大小。 -## 导出量化模型 +## paddlex.slim.export_quant_model +> **导出量化模型** ``` paddlex.slim.export_quant_model(model, test_dataset, batch_size=2, batch_num=10, save_dir='./quant_model', cache_dir='./temp') ``` diff --git a/docs/apis/transforms/augment.md b/docs/apis/transforms/augment.md index f8c66b45d2d853fde57c520b079f9974e5fa4d76..3e5e1cc46ed66cd504e72c8f410bd5d01bcf2dc5 100644 --- a/docs/apis/transforms/augment.md +++ b/docs/apis/transforms/augment.md @@ -1,4 +1,4 @@ -# 数据增强与imgaug支持 +# 数据增强与imgaug支持说明 数据增强操作可用于在模型训练时,增加训练样本的多样性,从而提升模型的泛化能力。 @@ -19,11 +19,11 @@ PaddleX目前已适配imgaug图像增强库,用户可以直接在PaddleX构造 import paddlex as pdx from paddlex.cls import transforms import imgaug.augmenters as iaa -train_transforms = transforms.Compose([ +train_transforms = transforms.ComposedClsTransforms(mode='train', crop_size=[224, 224]) +train_transforms.add_augmenters([ # 随机在[0.0 3.0]中选值对图像进行模糊 iaa.blur.GaussianBlur(sigma=(0.0, 3.0)), - transforms.RandomCrop(crop_size=224), - transforms.Normalize() + transforms.RandomCrop(crop_size=224) ]) ``` 除了上述用法,`Compose`接口中也支持imgaug的`Someof`、`Sometimes`、`Sequential`、`Oneof`等操作,开发者可以通过这些方法随意组合出增强流程。由于imgaug对于标注信息(目标检测框和实例分割mask)与PaddleX模型训练逻辑有部分差异,**目前在检测和分割中,只支持pixel-level的增强方法,(即在增强时,不对图像的大小和方向做改变) 其它方法仍在适配中**,详情可见下表, @@ -58,9 +58,9 @@ from paddlex.cls import transforms img_augmenters = iaa.Sometimes(0.6, [ iaa.blur.GaussianBlur(sigma=(0.0, 3.0)) ]) -train_transforms = transforms.Compose([ +train_transforms = transforms.ComposedClsTransforms(mode='train', crop_size=[224, 224]) +train_transforms.add_augmenters([ img_augmenters, - transforms.RandomCrop(crop_size=224), - transforms.Normalize() + transforms.RandomCrop(crop_size=224) ]) ``` diff --git a/docs/apis/transforms/cls_transforms.md b/docs/apis/transforms/cls_transforms.md index 7d124b9bed4445eb7a216587cde8a35532f54a48..405699ae3e6b2fda653eaf9728db2f247aed7763 100755 --- a/docs/apis/transforms/cls_transforms.md +++ b/docs/apis/transforms/cls_transforms.md @@ -1,56 +1,80 @@ -# 图像分类-cls.transforms +# paddlex.cls.transforms 对图像分类任务的数据进行操作。可以利用[Compose](#compose)类将图像预处理/增强操作进行组合。 -## Compose类 +## Compose ```python paddlex.cls.transforms.Compose(transforms) ``` 根据数据预处理/增强算子对输入数据进行操作。 [使用示例](https://github.com/PaddlePaddle/PaddleX/blob/develop/tutorials/train/classification/mobilenetv2.py#L13) -### 参数 -* **transforms** (list): 数据预处理/数据增强列表。 +> **参数** +> * **transforms** (list): 数据预处理/数据增强列表。 -## RandomCrop类 +## ComposedClsTransforms ```python -paddlex.cls.transforms.RandomCrop(crop_size=224, lower_scale=0.08, lower_ratio=3. / 4, upper_ratio=4. / 3) +paddlex.cls.transforms.ComposedClsTransforms(mode, crop_size=[224, 224], mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]) ``` - -对图像进行随机剪裁,模型训练时的数据增强操作。 -1. 根据lower_scale、lower_ratio、upper_ratio计算随机剪裁的高、宽。 -2. 根据随机剪裁的高、宽随机选取剪裁的起始点。 -3. 剪裁图像。 -4. 调整剪裁后的图像的大小到crop_size*crop_size。 +分类模型中已经组合好的数据处理流程,开发者可以直接使用ComposedClsTransforms,简化手动组合transforms的过程, 该类中已经包含了[RandomCrop](#RandomCrop)和[RandomHorizontalFlip](#RandomHorizontalFlip)两种数据增强方式,你仍可以通过[add_augmenters函数接口](#add_augmenters)添加新的数据增强方式。 +ComposedClsTransforms共包括以下几个步骤: +> 训练阶段: +> > 1. 随机从图像中crop一块子图,并resize成crop_size大小 +> > 2. 将1的输出按0.5的概率随机进行水平翻转 +> > 3. 将图像进行归一化 +> 验证/预测阶段: +> > 1. 将图像按比例Resize,使得最小边长度为crop_size[0] * 1.14 +> > 2. 从图像中心crop出一个大小为crop_size的图像 +> > 3. 将图像进行归一化 ### 参数 -* **crop_size** (int): 随机裁剪后重新调整的目标边长。默认为224。 -* **lower_scale** (float): 裁剪面积相对原面积比例的最小限制。默认为0.08。 -* **lower_ratio** (float): 宽变换比例的最小限制。默认为3. / 4。 -* **upper_ratio** (float): 宽变换比例的最小限制。默认为4. / 3。 +* **mode** (str): Transforms所处的阶段,包括`train', 'eval'或'test' +* **crop_size** (int|list): 输入到模型里的图像大小,默认为[224, 224](与原图大小无关,根据上述几个步骤,会将原图处理成该图大小输入给模型训练) +* **mean** (list): 图像均值, 默认为[0.485, 0.456, 0.406]。 +* **std** (list): 图像方差,默认为[0.229, 0.224, 0.225]。 -## RandomHorizontalFlip类 +### 添加数据增强方式 ```python -paddlex.cls.transforms.RandomHorizontalFlip(prob=0.5) +ComposedClsTransforms.add_augmenters(augmenters) ``` +> **参数** +> * **augmenters**(list): 数据增强方式列表 -以一定的概率对图像进行随机水平翻转,模型训练时的数据增强操作。 - -### 参数 -* **prob** (float): 随机水平翻转的概率。默认为0.5。 - -## RandomVerticalFlip类 -```python -paddlex.cls.transforms.RandomVerticalFlip(prob=0.5) +#### 使用示例 ``` +import paddlex as pdx +from paddlex.cls import transforms +train_transforms = transforms.ComposedClsTransforms(mode='train', crop_size=[320, 320]) +eval_transforms = transforms.ComposedClsTransforms(mode='eval', crop_size=[320, 320]) -以一定的概率对图像进行随机垂直翻转,模型训练时的数据增强操作。 - -### 参数 -* **prob** (float): 随机垂直翻转的概率。默认为0.5。 +# 添加数据增强 +import imgaug.augmenters as iaa +train_transforms.add_augmenters([ + transforms.RandomDistort(), + iaa.blur.GaussianBlur(sigma=(0.0, 3.0)) +]) +``` +上面代码等价于 +``` +import paddlex as pdx +from paddlex.cls import transforms +train_transforms = transforms.Composed([ + transforms.RandomDistort(), + iaa.blur.GaussianBlur(sigma=(0.0, 3.0)), + # 上面两个为通过add_augmenters额外添加的数据增强方式 + transforms.RandomCrop(crop_size=320), + transforms.RandomHorizontalFlip(prob=0.5), + transforms.Normalize() +]) +eval_transforms = transforms.Composed([ + transforms.ResizeByShort(short_size=int(320*1.14)), + transforms.CenterCrop(crop_size=320), + transforms.Normalize() +]) +``` -## Normalize类 +## Normalize ```python paddlex.cls.transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]) ``` @@ -63,7 +87,7 @@ paddlex.cls.transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, * **mean** (list): 图像数据集的均值。默认为[0.485, 0.456, 0.406]。 * **std** (list): 图像数据集的标准差。默认为[0.229, 0.224, 0.225]。 -## ResizeByShort类 +## ResizeByShort ```python paddlex.cls.transforms.ResizeByShort(short_size=256, max_size=-1) ``` @@ -79,7 +103,7 @@ paddlex.cls.transforms.ResizeByShort(short_size=256, max_size=-1) * **short_size** (int): 调整大小后的图像目标短边长度。默认为256。 * **max_size** (int): 长边目标长度的最大限制。默认为-1。 -## CenterCrop类 +## CenterCrop ```python paddlex.cls.transforms.CenterCrop(crop_size=224) ``` @@ -91,7 +115,44 @@ paddlex.cls.transforms.CenterCrop(crop_size=224) ### 参数 * **crop_size** (int): 裁剪的目标边长。默认为224。 -## RandomRotate类 +## RandomCrop +```python +paddlex.cls.transforms.RandomCrop(crop_size=224, lower_scale=0.08, lower_ratio=3. / 4, upper_ratio=4. / 3) +``` + +对图像进行随机剪裁,模型训练时的数据增强操作。 +1. 根据lower_scale、lower_ratio、upper_ratio计算随机剪裁的高、宽。 +2. 根据随机剪裁的高、宽随机选取剪裁的起始点。 +3. 剪裁图像。 +4. 调整剪裁后的图像的大小到crop_size*crop_size。 + +### 参数 +* **crop_size** (int): 随机裁剪后重新调整的目标边长。默认为224。 +* **lower_scale** (float): 裁剪面积相对原面积比例的最小限制。默认为0.08。 +* **lower_ratio** (float): 宽变换比例的最小限制。默认为3. / 4。 +* **upper_ratio** (float): 宽变换比例的最小限制。默认为4. / 3。 + +## RandomHorizontalFlip +```python +paddlex.cls.transforms.RandomHorizontalFlip(prob=0.5) +``` + +以一定的概率对图像进行随机水平翻转,模型训练时的数据增强操作。 + +### 参数 +* **prob** (float): 随机水平翻转的概率。默认为0.5。 + +## RandomVerticalFlip +```python +paddlex.cls.transforms.RandomVerticalFlip(prob=0.5) +``` + +以一定的概率对图像进行随机垂直翻转,模型训练时的数据增强操作。 + +### 参数 +* **prob** (float): 随机垂直翻转的概率。默认为0.5。 + +## RandomRotate ```python paddlex.cls.transforms.RandomRotate(rotate_range=30, prob=0.5) ``` @@ -102,7 +163,7 @@ paddlex.cls.transforms.RandomRotate(rotate_range=30, prob=0.5) * **rotate_range** (int): 旋转度数的范围。默认为30。 * **prob** (float): 随机旋转的概率。默认为0.5。 -## RandomDistort类 +## RandomDistort ```python paddlex.cls.transforms.RandomDistort(brightness_range=0.9, brightness_prob=0.5, contrast_range=0.9, contrast_prob=0.5, saturation_range=0.9, saturation_prob=0.5, hue_range=18, hue_prob=0.5) ``` @@ -122,64 +183,3 @@ paddlex.cls.transforms.RandomDistort(brightness_range=0.9, brightness_prob=0.5, * **saturation_prob** (float): 随机调整饱和度的概率。默认为0.5。 * **hue_range** (int): 色调因子的范围。默认为18。 * **hue_prob** (float): 随机调整色调的概率。默认为0.5。 - -## ComposedClsTransforms类 -```python -paddlex.cls.transforms.ComposedClsTransforms(mode, crop_size=[224, 224], mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]) -``` -分类模型中已经组合好的数据处理流程,开发者可以直接使用ComposedClsTransforms,简化手动组合transforms的过程, 该类中已经包含了[RandomCrop](#RandomCrop)和[RandomHorizontalFlip](#RandomHorizontalFlip)两种数据增强方式,你仍可以通过[add_augmenters函数接口](#add_augmenters)添加新的数据增强方式。 -ComposedClsTransforms共包括以下几个步骤: -> 训练阶段: -> > 1. 随机从图像中crop一块子图,并resize成crop_size大小 -> > 2. 将1的输出按0.5的概率随机进行水平翻转 -> > 3. 将图像进行归一化 -> 验证/预测阶段: -> > 1. 将图像按比例Resize,使得最小边长度为crop_size[0] * 1.14 -> > 2. 从图像中心crop出一个大小为crop_size的图像 -> > 3. 将图像进行归一化 - -### 参数 -* **mode** (str): Transforms所处的阶段,包括`train', 'eval'或'test' -* **crop_size** (int|list): 输入到模型里的图像大小,默认为[224, 224](与原图大小无关,根据上述几个步骤,会将原图处理成该图大小输入给模型训练) -* **mean** (list): 图像均值, 默认为[0.485, 0.456, 0.406]。 -* **std** (list): 图像方差,默认为[0.229, 0.224, 0.225]。 - -### 添加数据增强方式 -```python -ComposedClsTransforms.add_augmenters(augmenters) -``` -> **参数** -> * **augmenters**(list): 数据增强方式列表 - -#### 使用示例 -``` -import paddlex as pdx -from paddlex.cls import transforms -train_transforms = transforms.ComposedClsTransforms(mode='train', crop_size=[320, 320]) -eval_transforms = transforms.ComposedClsTransforms(mode='eval', crop_size=[320, 320]) - -# 添加数据增强 -import imgaug.augmenters as iaa -train_transforms.add_augmenters([ - transforms.RandomDistort(), - iaa.blur.GaussianBlur(sigma=(0.0, 3.0)) -]) -``` -上面代码等价于 -``` -import paddlex as pdx -from paddlex.cls import transforms -train_transforms = transforms.Composed([ - transforms.RandomDistort(), - iaa.blur.GaussianBlur(sigma=(0.0, 3.0)), - # 上面两个为通过add_augmenters额外添加的数据增强方式 - transforms.RandomCrop(crop_size=320), - transforms.RandomHorizontalFlip(prob=0.5), - transforms.Normalize() -]) -eval_transforms = transforms.Composed([ - transforms.ResizeByShort(short_size=int(320*1.14)), - transforms.CenterCrop(crop_size=320), - transforms.Normalize() -]) -``` diff --git a/docs/apis/transforms/det_transforms.md b/docs/apis/transforms/det_transforms.md index 3b182a1e4eeb7fdbe2d40c7530989d54919d8ec2..ac7be78819fb04a3392726fe4ce1f20e256959db 100755 --- a/docs/apis/transforms/det_transforms.md +++ b/docs/apis/transforms/det_transforms.md @@ -1,8 +1,8 @@ -# 检测和实例分割-det.transforms +# paddlex.det.transforms -对目标检测任务的数据进行操作。可以利用[Compose](#compose)类将图像预处理/增强操作进行组合。 +对目标检测/实例分割任务的数据进行操作。可以利用[Compose](#compose)类将图像预处理/增强操作进行组合。 -## Compose类 +## Compose ```python paddlex.det.transforms.Compose(transforms) ``` @@ -12,7 +12,150 @@ paddlex.det.transforms.Compose(transforms) ### 参数 * **transforms** (list): 数据预处理/数据增强列表。 -## ResizeByShort类 +## ComposedRCNNTransforms +```python +paddlex.det.transforms.ComposedRCNNTransforms(mode, min_max_size=[224, 224], mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]) +``` +目标检测FasterRCNN和实例分割MaskRCNN模型中已经组合好的数据处理流程,开发者可以直接使用ComposedRCNNTransforms,简化手动组合transforms的过程, 该类中已经包含了[RandomHorizontalFlip](#RandomHorizontalFlip)数据增强方式,你仍可以通过[add_augmenters函数接口](#add_augmenters)添加新的数据增强方式。 +ComposedRCNNTransforms共包括以下几个步骤: +> 训练阶段: +> > 1. 随机以0.5的概率将图像水平翻转 +> > 2. 将图像进行归一化 +> > 3. 图像采用[ResizeByShort](#ResizeByShort)方式,根据min_max_size参数,进行缩入 +> > 4. 使用[Padding](#Padding)将图像的长和宽分别Padding成32的倍数 +> 验证/预测阶段: +> > 1. 将图像进行归一化 +> > 2. 图像采用[ResizeByShort](#ResizeByShort)方式,根据min_max_size参数,进行缩入 +> > 3. 使用[Padding](#Padding)将图像的长和宽分别Padding成32的倍数 + +### 参数 +* **mode** (str): Transforms所处的阶段,包括`train', 'eval'或'test' +* **min_max_size** (list): 输入模型中图像的最短边长度和最长边长度,参考[ResizeByShort](#ResizeByShort)(与原图大小无关,根据上述几个步骤,会将原图处理成相应大小输入给模型训练),默认[800, 1333] +* **mean** (list): 图像均值, 默认为[0.485, 0.456, 0.406]。 +* **std** (list): 图像方差,默认为[0.229, 0.224, 0.225]。 + +### 添加数据增强方式 +```python +ComposedRCNNTransforms.add_augmenters(augmenters) +``` +> **参数** +> * **augmenters**(list): 数据增强方式列表 + +#### 使用示例 +``` +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]) + +# 添加数据增强 +import imgaug.augmenters as iaa +train_transforms.add_augmenters([ + transforms.RandomDistort(), + iaa.blur.GaussianBlur(sigma=(0.0, 3.0)) +]) +``` +上面代码等价于 +``` +import paddlex as pdx +from paddlex.det import transforms +train_transforms = transforms.Composed([ + transforms.RandomDistort(), + iaa.blur.GaussianBlur(sigma=(0.0, 3.0)), + # 上面两个为通过add_augmenters额外添加的数据增强方式 + transforms.RandomHorizontalFlip(prob=0.5), + transforms.Normalize(), + transforms.ResizeByShort(short_size=800, max_size=1333), + transforms.Padding(coarsest_stride=32) +]) +eval_transforms = transforms.Composed([ + transforms.Normalize(), + transforms.ResizeByShort(short_size=800, max_size=1333), + transforms.Padding(coarsest_stride=32) +]) +``` + + +## ComposedYOLOv3Transforms +```python +paddlex.det.transforms.ComposedYOLOv3Transforms(mode, shape=[608, 608], mixup_epoch=250, mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]) +``` +目标检测YOLOv3模型中已经组合好的数据处理流程,开发者可以直接使用ComposedYOLOv3Transforms,简化手动组合transforms的过程, 该类中已经包含了[MixupImage](#MixupImage)、[RandomDistort](#RandomDistort)、[RandomExpand](#RandomExpand)、[RandomCrop](#RandomCrop)、[RandomHorizontalFlip](#RandomHorizontalFlip)5种数据增强方式,你仍可以通过[add_augmenters函数接口](#add_augmenters)添加新的数据增强方式。 +ComposedYOLOv3Transforms共包括以下几个步骤: +> 训练阶段: +> > 1. 在前mixup_epoch轮迭代中,使用MixupImage策略 +> > 2. 对图像进行随机扰动,包括亮度,对比度,饱和度和色调 +> > 3. 随机扩充图像 +> > 4. 随机裁剪图像 +> > 5. 将4步骤的输出图像Resize成shape参数的大小 +> > 6. 随机0.5的概率水平翻转图像 +> > 7. 图像归一化 +> 验证/预测阶段: +> > 1. 将图像Resize成shape参数大小 +> > 2. 图像归一化 + +### 参数 +* **mode** (str): Transforms所处的阶段,包括`train', 'eval'或'test' +* **shape** (list): 输入模型中图像的大小(与原图大小无关,根据上述几个步骤,会将原图处理成相应大小输入给模型训练), 默认[608, 608] +* **mixup_epoch**(int): 模型训练过程中,在前mixup_epoch轮迭代中,使用mixup策略,如果为-1,则不使用mixup策略, 默认250。 +* **mean** (list): 图像均值, 默认为[0.485, 0.456, 0.406]。 +* **std** (list): 图像方差,默认为[0.229, 0.224, 0.225]。 + +### 添加数据增强方式 +```python +ComposedYOLOv3Transforms.add_augmenters(augmenters) +``` +> **参数** +> * **augmenters**(list): 数据增强方式列表 + +#### 使用示例 +``` +import paddlex as pdx +from paddlex.det import transforms +train_transforms = transforms.ComposedYOLOv3Transforms(mode='train', shape=[480, 480]) +eval_transforms = transforms.ComposedYOLOv3Transforms(mode='eval', shape=[480, 480]) + +# 添加数据增强 +import imgaug.augmenters as iaa +train_transforms.add_augmenters([ + iaa.blur.GaussianBlur(sigma=(0.0, 3.0)) +]) +``` +上面代码等价于 +``` +import paddlex as pdx +from paddlex.det import transforms +train_transforms = transforms.Composed([ + iaa.blur.GaussianBlur(sigma=(0.0, 3.0)), + # 上面为通过add_augmenters额外添加的数据增强方式 + transforms.MixupImage(mixup_epoch=250), + transforms.RandomDistort(), + transforms.RandomExpand(), + transforms.RandomCrop(), + transforms.Resize(target_size=480, interp='RANDOM'), + transforms.RandomHorizontalFlip(prob=0.5), + transforms.Normalize() +]) +eval_transforms = transforms.Composed([ + transforms.Resize(target_size=480, interp='CUBIC'), + transforms.Normalize() +]) +``` + +## Normalize +```python +paddlex.det.transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]) +``` + +对图像进行标准化。 +1. 归一化图像到到区间[0.0, 1.0]。 +2. 对图像进行减均值除以标准差操作。 + +### 参数 +* **mean** (list): 图像数据集的均值。默认为[0.485, 0.456, 0.406]。 +* **std** (list): 图像数据集的标准差。默认为[0.229, 0.224, 0.225]。 + +## ResizeByShort ```python paddlex.det.transforms.ResizeByShort(short_size=800, max_size=1333) ``` @@ -28,7 +171,7 @@ paddlex.det.transforms.ResizeByShort(short_size=800, max_size=1333) * **short_size** (int): 短边目标长度。默认为800。 * **max_size** (int): 长边目标长度的最大限制。默认为1333。 -## Padding类 +## Padding ```python paddlex.det.transforms.Padding(coarsest_stride=1) ``` @@ -41,7 +184,7 @@ paddlex.det.transforms.Padding(coarsest_stride=1) ### 参数 * **coarsest_stride** (int): 填充后的图像长、宽为该参数的倍数,默认为1。 -## Resize类 +## Resize ```python paddlex.det.transforms.Resize(target_size=608, interp='LINEAR') ``` @@ -55,7 +198,7 @@ paddlex.det.transforms.Resize(target_size=608, interp='LINEAR') * **target_size** (int/list/tuple): 短边目标长度。默认为608。 * **interp** (str): resize的插值方式,与opencv的插值方式对应,取值范围为['NEAREST', 'LINEAR', 'CUBIC', 'AREA', 'LANCZOS4', 'RANDOM']。默认为"LINEAR"。 -## RandomHorizontalFlip类 +## RandomHorizontalFlip ```python paddlex.det.transforms.RandomHorizontalFlip(prob=0.5) ``` @@ -65,20 +208,7 @@ paddlex.det.transforms.RandomHorizontalFlip(prob=0.5) ### 参数 * **prob** (float): 随机水平翻转的概率。默认为0.5。 -## Normalize类 -```python -paddlex.det.transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]) -``` - -对图像进行标准化。 -1. 归一化图像到到区间[0.0, 1.0]。 -2. 对图像进行减均值除以标准差操作。 - -### 参数 -* **mean** (list): 图像数据集的均值。默认为[0.485, 0.456, 0.406]。 -* **std** (list): 图像数据集的标准差。默认为[0.229, 0.224, 0.225]。 - -## RandomDistort类 +## RandomDistort ```python paddlex.det.transforms.RandomDistort(brightness_range=0.5, brightness_prob=0.5, contrast_range=0.5, contrast_prob=0.5, saturation_range=0.5, saturation_prob=0.5, hue_range=18, hue_prob=0.5) ``` @@ -99,7 +229,7 @@ paddlex.det.transforms.RandomDistort(brightness_range=0.5, brightness_prob=0.5, * **hue_range** (int): 色调因子的范围。默认为18。 * **hue_prob** (float): 随机调整色调的概率。默认为0.5。 -## MixupImage类 +## MixupImage ```python paddlex.det.transforms.MixupImage(alpha=1.5, beta=1.5, mixup_epoch=-1) ``` @@ -141,7 +271,7 @@ paddlex.det.transforms.RandomExpand(ratio=4., prob=0.5, fill_value=[123.675, 116 【注意】该数据增强必须在数据增强Resize、ResizeByShort之前使用。 -## RandomCrop类 +## RandomCrop ```python paddlex.det.transforms.RandomCrop(aspect_ratio=[.5, 2.], thresholds=[.0, .1, .3, .5, .7, .9], scaling=[.3, 1.], num_attempts=50, allow_no_crop=True, cover_all_box=False) ``` @@ -167,133 +297,3 @@ paddlex.det.transforms.RandomCrop(aspect_ratio=[.5, 2.], thresholds=[.0, .1, .3, * **num_attempts** (int): 在放弃寻找有效裁剪区域前尝试的次数。默认值为50。 * **allow_no_crop** (bool): 是否允许未进行裁剪。默认值为True。 * **cover_all_box** (bool): 是否要求所有的真实标注框都必须在裁剪区域内。默认值为False。 - -## ComposedRCNNTransforms类 -```python -paddlex.det.transforms.ComposedRCNNTransforms(mode, min_max_size=[224, 224], mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]) -``` -目标检测FasterRCNN和实例分割MaskRCNN模型中已经组合好的数据处理流程,开发者可以直接使用ComposedRCNNTransforms,简化手动组合transforms的过程, 该类中已经包含了[RandomHorizontalFlip](#RandomHorizontalFlip)数据增强方式,你仍可以通过[add_augmenters函数接口](#add_augmenters)添加新的数据增强方式。 -ComposedRCNNTransforms共包括以下几个步骤: -> 训练阶段: -> > 1. 随机以0.5的概率将图像水平翻转 -> > 2. 将图像进行归一化 -> > 3. 图像采用[ResizeByShort](#ResizeByShort)方式,根据min_max_size参数,进行缩入 -> > 4. 使用[Padding](#Padding)将图像的长和宽分别Padding成32的倍数 -> 验证/预测阶段: -> > 1. 将图像进行归一化 -> > 2. 图像采用[ResizeByShort](#ResizeByShort)方式,根据min_max_size参数,进行缩入 -> > 3. 使用[Padding](#Padding)将图像的长和宽分别Padding成32的倍数 - -### 参数 -* **mode** (str): Transforms所处的阶段,包括`train', 'eval'或'test' -* **min_max_size** (list): 输入模型中图像的最短边长度和最长边长度,参考[ResizeByShort](#ResizeByShort)(与原图大小无关,根据上述几个步骤,会将原图处理成相应大小输入给模型训练),默认[800, 1333] -* **mean** (list): 图像均值, 默认为[0.485, 0.456, 0.406]。 -* **std** (list): 图像方差,默认为[0.229, 0.224, 0.225]。 - -### 添加数据增强方式 -```python -ComposedRCNNTransforms.add_augmenters(augmenters) -``` -> **参数** -> * **augmenters**(list): 数据增强方式列表 - -#### 使用示例 -``` -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]) - -# 添加数据增强 -import imgaug.augmenters as iaa -train_transforms.add_augmenters([ - transforms.RandomDistort(), - iaa.blur.GaussianBlur(sigma=(0.0, 3.0)) -]) -``` -上面代码等价于 -``` -import paddlex as pdx -from paddlex.det import transforms -train_transforms = transforms.Composed([ - transforms.RandomDistort(), - iaa.blur.GaussianBlur(sigma=(0.0, 3.0)), - # 上面两个为通过add_augmenters额外添加的数据增强方式 - transforms.RandomHorizontalFlip(prob=0.5), - transforms.Normalize(), - transforms.ResizeByShort(short_size=800, max_size=1333), - transforms.Padding(coarsest_stride=32) -]) -eval_transforms = transforms.Composed([ - transforms.Normalize(), - transforms.ResizeByShort(short_size=800, max_size=1333), - transforms.Padding(coarsest_stride=32) -]) -``` - - -## ComposedYOLOv3Transforms类 -```python -paddlex.det.transforms.ComposedYOLOv3Transforms(mode, shape=[608, 608], mixup_epoch=250, mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]) -``` -目标检测YOLOv3模型中已经组合好的数据处理流程,开发者可以直接使用ComposedYOLOv3Transforms,简化手动组合transforms的过程, 该类中已经包含了[MixupImage](#MixupImage)、[RandomDistort](#RandomDistort)、[RandomExpand](#RandomExpand)、[RandomCrop](#RandomCrop)、[RandomHorizontalFlip](#RandomHorizontalFlip)5种数据增强方式,你仍可以通过[add_augmenters函数接口](#add_augmenters)添加新的数据增强方式。 -ComposedYOLOv3Transforms共包括以下几个步骤: -> 训练阶段: -> > 1. 在前mixup_epoch轮迭代中,使用MixupImage策略 -> > 2. 对图像进行随机扰动,包括亮度,对比度,饱和度和色调 -> > 3. 随机扩充图像 -> > 4. 随机裁剪图像 -> > 5. 将4步骤的输出图像Resize成shape参数的大小 -> > 6. 随机0.5的概率水平翻转图像 -> > 7. 图像归一化 -> 验证/预测阶段: -> > 1. 将图像Resize成shape参数大小 -> > 2. 图像归一化 - -### 参数 -* **mode** (str): Transforms所处的阶段,包括`train', 'eval'或'test' -* **shape** (list): 输入模型中图像的大小(与原图大小无关,根据上述几个步骤,会将原图处理成相应大小输入给模型训练), 默认[608, 608] -* **mixup_epoch**(int): 模型训练过程中,在前mixup_epoch轮迭代中,使用mixup策略,如果为-1,则不使用mixup策略, 默认250。 -* **mean** (list): 图像均值, 默认为[0.485, 0.456, 0.406]。 -* **std** (list): 图像方差,默认为[0.229, 0.224, 0.225]。 - -### 添加数据增强方式 -```python -ComposedYOLOv3Transforms.add_augmenters(augmenters) -``` -> **参数** -> * **augmenters**(list): 数据增强方式列表 - -#### 使用示例 -``` -import paddlex as pdx -from paddlex.det import transforms -train_transforms = transforms.ComposedYOLOv3Transforms(mode='train', shape=[480, 480]) -eval_transforms = transforms.ComposedYOLOv3Transforms(mode='eval', shape=[480, 480]) - -# 添加数据增强 -import imgaug.augmenters as iaa -train_transforms.add_augmenters([ - iaa.blur.GaussianBlur(sigma=(0.0, 3.0)) -]) -``` -上面代码等价于 -``` -import paddlex as pdx -from paddlex.det import transforms -train_transforms = transforms.Composed([ - iaa.blur.GaussianBlur(sigma=(0.0, 3.0)), - # 上面为通过add_augmenters额外添加的数据增强方式 - transforms.MixupImage(mixup_epoch=250), - transforms.RandomDistort(), - transforms.RandomExpand(), - transforms.RandomCrop(), - transforms.Resize(target_size=480, interp='RANDOM'), - transforms.RandomHorizontalFlip(prob=0.5), - transforms.Normalize() -]) -eval_transforms = transforms.Composed([ - transforms.Resize(target_size=480, interp='CUBIC'), - transforms.Normalize() -]) -``` diff --git a/docs/apis/transforms/index.rst b/docs/apis/transforms/index.rst index 0a2be9860a32e56b6e1e6b31aa12ab22332e6785..2264fb610a03aee0631986912eaa7ce2e82e7478 100755 --- a/docs/apis/transforms/index.rst +++ b/docs/apis/transforms/index.rst @@ -1,4 +1,4 @@ -数据处理-transforms +数据处理与增强 ============================ transforms为PaddleX的模型训练提供了数据的预处理和数据增强接口。 diff --git a/docs/apis/transforms/seg_transforms.md b/docs/apis/transforms/seg_transforms.md index 264af5c472cb824865188a5386a513e5a00fe0ba..975bb9e6e6731bdd3acb9430ddb2dfb086e2a2bb 100755 --- a/docs/apis/transforms/seg_transforms.md +++ b/docs/apis/transforms/seg_transforms.md @@ -1,9 +1,9 @@ -# 语义分割-seg.transforms +# paddlex.seg.transforms 对用于分割任务的数据进行操作。可以利用[Compose](#compose)类将图像预处理/增强操作进行组合。 -## Compose类 +## Compose ```python paddlex.seg.transforms.Compose(transforms) ``` @@ -11,8 +11,66 @@ paddlex.seg.transforms.Compose(transforms) ### 参数 * **transforms** (list): 数据预处理/数据增强列表。 +## ComposedSegTransforms +```python +paddlex.det.transforms.ComposedSegTransforms(mode, train_crop_shape=[769, 769], mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]) +``` +语义分割DeepLab和UNet模型中已经组合好的数据处理流程,开发者可以直接使用ComposedSegTransforms,简化手动组合transforms的过程, 该类中已经包含了[RandomHorizontalFlip](#RandomHorizontalFlip)、[ResizeStepScaling](#ResizeStepScaling)、[RandomPaddingCrop](#RandomPaddingCrop)3种数据增强方式,你仍可以通过[add_augmenters函数接口](#add_augmenters)添加新的数据增强方式。 +ComposedSegTransforms共包括以下几个步骤: + > 训练阶段: +> > 1. 随机对图像以0.5的概率水平翻转 +> > 2. 按不同的比例随机Resize原图 +> > 3. 从原图中随机crop出大小为train_crop_size大小的子图,如若crop出来的图小于train_crop_size,则会将图padding到对应大小 +> > 4. 图像归一化 + > 预测阶段: +> > 1. 图像归一化 + +### 参数 +* **mode** (str): Transforms所处的阶段,包括`train', 'eval'或'test' +* **train_crop_size** (list): 训练过程中随机Crop和Resize后(验证或预测过程中不需配置该参数,自动使用原图大小),输入到模型中图像的大小(与原图大小无关,根据上述几个步骤,会将原图处理成相应大小输入给模型训练), 默认[769, 769] +* **mean** (list): 图像均值, 默认为[0.485, 0.456, 0.406]。 +* **std** (list): 图像方差,默认为[0.229, 0.224, 0.225]。 + +### 添加数据增强方式 +```python +ComposedSegTransforms.add_augmenters(augmenters) +``` +> **参数** +> * **augmenters**(list): 数据增强方式列表 + +#### 使用示例 +``` +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') -## RandomHorizontalFlip类 +# 添加数据增强 +import imgaug.augmenters as iaa +train_transforms.add_augmenters([ + transforms.RandomDistort(), + iaa.blur.GaussianBlur(sigma=(0.0, 3.0)) +]) +``` +上面代码等价于 +``` +import paddlex as pdx +from paddlex.det import transforms +train_transforms = transforms.Composed([ + transforms.RandomDistort(), + iaa.blur.GaussianBlur(sigma=(0.0, 3.0)), + # 上面2行为通过add_augmenters额外添加的数据增强方式 + transforms.RandomHorizontalFlip(prob=0.5), + transforms.ResizeStepScaling(), + transforms.PaddingCrop(crop_size=[512, 512]), + transforms.Normalize() +]) +eval_transforms = transforms.Composed([ + transforms.Normalize() +]) +``` + +## RandomHorizontalFlip ```python paddlex.seg.transforms.RandomHorizontalFlip(prob=0.5) ``` @@ -21,7 +79,7 @@ paddlex.seg.transforms.RandomHorizontalFlip(prob=0.5) * **prob** (float): 随机水平翻转的概率。默认值为0.5。 -## RandomVerticalFlip类 +## RandomVerticalFlip ```python paddlex.seg.transforms.RandomVerticalFlip(prob=0.1) ``` @@ -30,7 +88,7 @@ paddlex.seg.transforms.RandomVerticalFlip(prob=0.1) * **prob** (float): 随机垂直翻转的概率。默认值为0.1。 -## Resize类 +## Resize ```python paddlex.seg.transforms.Resize(target_size, interp='LINEAR') ``` @@ -46,7 +104,7 @@ paddlex.seg.transforms.Resize(target_size, interp='LINEAR') 可选的值为['NEAREST', 'LINEAR', 'CUBIC', 'AREA', 'LANCZOS4'],默认为"LINEAR"。 -## ResizeByLong类 +## ResizeByLong ```python paddlex.seg.transforms.ResizeByLong(long_size) ``` @@ -55,7 +113,7 @@ paddlex.seg.transforms.ResizeByLong(long_size) * **long_size** (int): resize后图像的长边大小。 -## ResizeRangeScaling类 +## ResizeRangeScaling ```python paddlex.seg.transforms.ResizeRangeScaling(min_value=400, max_value=600) ``` @@ -65,7 +123,7 @@ paddlex.seg.transforms.ResizeRangeScaling(min_value=400, max_value=600) * **max_value** (int): 图像长边resize后的最大值。默认值600。 -## ResizeStepScaling类 +## ResizeStepScaling ```python paddlex.seg.transforms.ResizeStepScaling(min_scale_factor=0.75, max_scale_factor=1.25, scale_step_size=0.25) ``` @@ -76,7 +134,7 @@ paddlex.seg.transforms.ResizeStepScaling(min_scale_factor=0.75, max_scale_factor * **scale_step_size** (float), resize尺度范围间隔。默认值0.25。 -## Normalize类 +## Normalize ```python paddlex.seg.transforms.Normalize(mean=[0.5, 0.5, 0.5], std=[0.5, 0.5, 0.5]) ``` @@ -89,7 +147,7 @@ paddlex.seg.transforms.Normalize(mean=[0.5, 0.5, 0.5], std=[0.5, 0.5, 0.5]) * **std** (list): 图像数据集的标准差。默认值[0.5, 0.5, 0.5]。 -## Padding类 +## Padding ```python paddlex.seg.transforms.Padding(target_size, im_padding_value=[127.5, 127.5, 127.5], label_padding_value=255) ``` @@ -100,7 +158,7 @@ paddlex.seg.transforms.Padding(target_size, im_padding_value=[127.5, 127.5, 127. * **label_padding_value** (int): 标注图像padding的值。默认值为255(仅在训练时需要设定该参数)。 -## RandomPaddingCrop类 +## RandomPaddingCrop ```python paddlex.seg.transforms.RandomPaddingCrop(crop_size=512, im_padding_value=[127.5, 127.5, 127.5], label_padding_value=255) ``` @@ -111,7 +169,7 @@ paddlex.seg.transforms.RandomPaddingCrop(crop_size=512, im_padding_value=[127.5, * **label_padding_value** (int): 标注图像padding的值。默认值为255。 -## RandomBlur类 +## RandomBlur ```python paddlex.seg.transforms.RandomBlur(prob=0.1) ``` @@ -120,7 +178,7 @@ paddlex.seg.transforms.RandomBlur(prob=0.1) * **prob** (float): 图像模糊概率。默认为0.1。 -## RandomRotate类 +## RandomRotate ```python paddlex.seg.transforms.RandomRotate(rotate_range=15, im_padding_value=[127.5, 127.5, 127.5], label_padding_value=255) ``` @@ -134,7 +192,7 @@ paddlex.seg.transforms.RandomRotate(rotate_range=15, im_padding_value=[127.5, 12 * **label_padding_value** (int): 标注图像padding的值。默认为255。 -## RandomScaleAspect类 +## RandomScaleAspect ```python paddlex.seg.transforms.RandomScaleAspect(min_scale=0.5, aspect_ratio=0.33) ``` @@ -146,7 +204,7 @@ paddlex.seg.transforms.RandomScaleAspect(min_scale=0.5, aspect_ratio=0.33) * **aspect_ratio** (float): 裁取图像的宽高比范围,非负值,为0时返回原图。默认为0.33。 -## RandomDistort类 +## RandomDistort ```python paddlex.seg.transforms.RandomDistort(brightness_range=0.5, brightness_prob=0.5, contrast_range=0.5, contrast_prob=0.5, saturation_range=0.5, saturation_prob=0.5, hue_range=18, hue_prob=0.5) ``` @@ -166,63 +224,3 @@ paddlex.seg.transforms.RandomDistort(brightness_range=0.5, brightness_prob=0.5, * **saturation_prob** (float): 随机调整饱和度的概率。默认为0.5。 * **hue_range** (int): 色调因子的范围。默认为18。 * **hue_prob** (float): 随机调整色调的概率。默认为0.5。 - -## ComposedSegTransforms类 -```python -paddlex.det.transforms.ComposedSegTransforms(mode, train_crop_shape=[769, 769], mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]) -``` -语义分割DeepLab和UNet模型中已经组合好的数据处理流程,开发者可以直接使用ComposedSegTransforms,简化手动组合transforms的过程, 该类中已经包含了[RandomHorizontalFlip](#RandomHorizontalFlip)、[ResizeStepScaling](#ResizeStepScaling)、[RandomPaddingCrop](#RandomPaddingCrop)3种数据增强方式,你仍可以通过[add_augmenters函数接口](#add_augmenters)添加新的数据增强方式。 -ComposedSegTransforms共包括以下几个步骤: - > 训练阶段: -> > 1. 随机对图像以0.5的概率水平翻转 -> > 2. 按不同的比例随机Resize原图 -> > 3. 从原图中随机crop出大小为train_crop_size大小的子图,如若crop出来的图小于train_crop_size,则会将图padding到对应大小 -> > 4. 图像归一化 - > 预测阶段: -> > 1. 图像归一化 - - -### 参数 -* **mode** (str): Transforms所处的阶段,包括`train', 'eval'或'test' -* **train_crop_size** (list): 训练过程中随机Crop和Resize后(验证或预测过程中不需配置该参数,自动使用原图大小),输入到模型中图像的大小(与原图大小无关,根据上述几个步骤,会将原图处理成相应大小输入给模型训练), 默认[769, 769] -* **mean** (list): 图像均值, 默认为[0.485, 0.456, 0.406]。 -* **std** (list): 图像方差,默认为[0.229, 0.224, 0.225]。 - -### 添加数据增强方式 -```python -ComposedSegTransforms.add_augmenters(augmenters) -``` -> **参数** -> * **augmenters**(list): 数据增强方式列表 - -#### 使用示例 -``` -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') - -# 添加数据增强 -import imgaug.augmenters as iaa -train_transforms.add_augmenters([ - transforms.RandomDistort(), - iaa.blur.GaussianBlur(sigma=(0.0, 3.0)) -]) -``` -上面代码等价于 -``` -import paddlex as pdx -from paddlex.det import transforms -train_transforms = transforms.Composed([ - transforms.RandomDistort(), - iaa.blur.GaussianBlur(sigma=(0.0, 3.0)), - # 上面2行为通过add_augmenters额外添加的数据增强方式 - transforms.RandomHorizontalFlip(prob=0.5), - transforms.ResizeStepScaling(), - transforms.PaddingCrop(crop_size=[512, 512]), - transforms.Normalize() -]) -eval_transforms = transforms.Composed([ - transforms.Normalize() -]) -``` diff --git a/docs/apis/visualize.md b/docs/apis/visualize.md index 2cdc96844758128545ffe3a1ebf815476cae1090..18872f52f0e371122568c8e3ec1545fd268a5323 100755 --- a/docs/apis/visualize.md +++ b/docs/apis/visualize.md @@ -1,7 +1,9 @@ -# 可视化-visualize +# 预测结果可视化 + PaddleX提供了一系列模型预测和结果分析的可视化函数。 -## 目标检测/实例分割预测结果可视化 +## paddlex.det.visualize +> **目标检测/实例分割预测结果可视化** ``` paddlex.det.visualize(image, result, threshold=0.5, save_dir='./') ``` @@ -22,12 +24,36 @@ result = model.predict('xiaoduxiong.jpeg') pdx.det.visualize('xiaoduxiong.jpeg', result, save_dir='./') # 预测结果保存在./visualize_xiaoduxiong.jpeg ``` +## paddlex.seg.visualize +> **语义分割模型预测结果可视化** +``` +paddlex.seg.visualize(image, result, weight=0.6, save_dir='./') +``` +将语义分割模型预测得到的Mask在原图上进行可视化。 + +### 参数 +> * **image** (str): 原图文件路径。 +> * **result** (str): 模型预测结果。 +> * **weight**(float): mask可视化结果与原图权重因子,weight表示原图的权重。默认0.6。 +> * **save_dir**(str): 可视化结果保存路径。若为None,则表示不保存,该函数将可视化的结果以np.ndarray的形式返回;若设为目录路径,则将可视化结果保存至该目录下。默认值为'./'。 + +### 使用示例 +> 点击下载如下示例中的[模型](https://bj.bcebos.com/paddlex/models/cityscape_deeplab.tar.gz)和[测试图片](https://bj.bcebos.com/paddlex/datasets/city.png) +``` +import paddlex as pdx +model = pdx.load_model('cityscape_deeplab') +result = model.predict('city.png') +pdx.det.visualize('city.png', result, save_dir='./') +# 预测结果保存在./visualize_city.png +``` -## 目标检测/实例分割准确率-召回率可视化 +## paddlex.det.draw_pr_curve +> **目标检测/实例分割准确率-召回率可视化** ``` paddlex.det.draw_pr_curve(eval_details_file=None, gt=None, pred_bbox=None, pred_mask=None, iou_thresh=0.5, save_dir='./') ``` 将目标检测/实例分割模型评估结果中各个类别的准确率和召回率的对应关系进行可视化,同时可视化召回率和置信度阈值的对应关系。 +> 注:PaddleX在训练过程中保存的模型目录中,均包含`eval_result.json`文件,可将此文件路径传给`eval_details_file`参数,设定`iou_threshold`即可得到对应模型在验证集上的PR曲线图。 ### 参数 > * **eval_details_file** (str): 模型评估结果的保存路径,包含真值信息和预测结果。默认值为None。 @@ -73,29 +99,9 @@ pdx.det.draw_pr_curve(gt=gt, pred_bbox=bbox, save_dir='./insect') 预测框的各个类别的准确率和召回率的对应关系、召回率和置信度阈值的对应关系可视化如下: ![](./images/insect_bbox_pr_curve(iou-0.5).png) -## 语义分割预测结果可视化 -``` -paddlex.seg.visualize(image, result, weight=0.6, save_dir='./') -``` -将语义分割模型预测得到的Mask在原图上进行可视化。 -### 参数 -> * **image** (str): 原图文件路径。 -> * **result** (str): 模型预测结果。 -> * **weight**(float): mask可视化结果与原图权重因子,weight表示原图的权重。默认0.6。 -> * **save_dir**(str): 可视化结果保存路径。若为None,则表示不保存,该函数将可视化的结果以np.ndarray的形式返回;若设为目录路径,则将可视化结果保存至该目录下。默认值为'./'。 - -### 使用示例 -> 点击下载如下示例中的[模型](https://bj.bcebos.com/paddlex/models/cityscape_deeplab.tar.gz)和[测试图片](https://bj.bcebos.com/paddlex/datasets/city.png) -``` -import paddlex as pdx -model = pdx.load_model('cityscape_deeplab') -result = model.predict('city.png') -pdx.det.visualize('city.png', result, save_dir='./') -# 预测结果保存在./visualize_city.png -``` - -## 模型裁剪比例可视化分析 +## paddlex.slim.visualzie +> **模型裁剪比例可视化分析** ``` paddlex.slim.visualize(model, sensitivities_file) ``` @@ -114,64 +120,11 @@ pdx.slim.visualize(model, 'mobilenetv2.sensitivities', save_dir='./') # 可视化结果保存在./sensitivities.png ``` -## LIME可解释性结果可视化 -``` -paddlex.interpret.lime(img_file, - model, - num_samples=3000, - batch_size=50, - save_dir='./') -``` -使用LIME算法将模型预测结果的可解释性可视化。 -LIME表示与模型无关的局部可解释性,可以解释任何模型。LIME的思想是以输入样本为中心,在其附近的空间中进行随机采样,每个采样通过原模型得到新的输出,这样得到一系列的输入和对应的输出,LIME用一个简单的、可解释的模型(比如线性回归模型)来拟合这个映射关系,得到每个输入维度的权重,以此来解释模型。 - -**注意:** 可解释性结果可视化目前只支持分类模型。 - -### 参数 ->* **img_file** (str): 预测图像路径。 ->* **model** (paddlex.cv.models): paddlex中的模型。 ->* **num_samples** (int): LIME用于学习线性模型的采样数,默认为3000。 ->* **batch_size** (int): 预测数据batch大小,默认为50。 ->* **save_dir** (str): 可解释性可视化结果(保存为png格式文件)和中间文件存储路径。 - - -### 使用示例 -> 对预测可解释性结果可视化的过程可参见[代码](https://github.com/PaddlePaddle/PaddleX/blob/develop/tutorials/interpret/lime.py)。 - - -## NormLIME可解释性结果可视化 -``` -paddlex.interpret.normlime(img_file, - model, - dataset=None, - num_samples=3000, - batch_size=50, - save_dir='./', - normlime_weights_file=None) -``` -使用NormLIME算法将模型预测结果的可解释性可视化。 -NormLIME是利用一定数量的样本来出一个全局的解释。由于NormLIME计算量较大,此处采用一种简化的方式:使用一定数量的测试样本(目前默认使用所有测试样本),对每个样本进行特征提取,映射到同一个特征空间;然后以此特征做为输入,以模型输出做为输出,使用线性回归对其进行拟合,得到一个全局的输入和输出的关系。之后,对一测试样本进行解释时,使用NormLIME全局的解释,来对LIME的结果进行滤波,使最终的可视化结果更加稳定。 - -**注意:** 可解释性结果可视化目前只支持分类模型。 - -### 参数 ->* **img_file** (str): 预测图像路径。 ->* **model** (paddlex.cv.models): paddlex中的模型。 ->* **dataset** (paddlex.datasets): 数据集读取器,默认为None。 ->* **num_samples** (int): LIME用于学习线性模型的采样数,默认为3000。 ->* **batch_size** (int): 预测数据batch大小,默认为50。 ->* **save_dir** (str): 可解释性可视化结果(保存为png格式文件)和中间文件存储路径。 ->* **normlime_weights_file** (str): NormLIME初始化文件名,若不存在,则计算一次,保存于该路径;若存在,则直接载入。 - -**注意:** dataset`读取的是一个数据集,该数据集不宜过大,否则计算时间会较长,但应包含所有类别的数据。NormLIME可解释性结果可视化目前只支持分类模型。 -### 使用示例 -> 对预测可解释性结果可视化的过程可参见[代码](https://github.com/PaddlePaddle/PaddleX/blob/develop/tutorials/interpret/normlime.py)。 - - -## 数据预处理/增强过程可视化 +## paddlex.transforms.visualize +> **数据预处理/增强过程可视化** ``` -paddlex.transforms.visualize(dataset, - img_count=3, +paddlex.transforms.visualize(dataset, + img_count=3, save_dir='vdl_output') ``` 对数据预处理/增强中间结果进行可视化。 @@ -183,4 +136,4 @@ paddlex.transforms.visualize(dataset, ### 参数 >* **dataset** (paddlex.datasets): 数据集读取器。 >* **img_count** (int): 需要进行数据预处理/增强的图像数目。默认为3。 ->* **save_dir** (str): 日志保存的路径。默认为'vdl_output'。 \ No newline at end of file +>* **save_dir** (str): 日志保存的路径。默认为'vdl_output'。