diff --git a/docs/apis/transforms/augment.md b/docs/apis/transforms/augment.md
new file mode 100644
index 0000000000000000000000000000000000000000..bc37d4853034f42361edd23e2719c119cda5a9bb
--- /dev/null
+++ b/docs/apis/transforms/augment.md
@@ -0,0 +1,66 @@
+# 数据增强与imgaug支持
+
+数据增强操作可用于在模型训练时,增加训练样本的多样性,从而提升模型的泛化能力。
+
+## PaddleX内置增强操作
+
+PaddleX对于图像分类、目标检测、实例分割和语义分割内置了部分常见的数据增强操作,如下表所示,
+
+| 任务类型 | 增强方法 |
+| :------- | :------------|
+| 图像分类 | [RandomCrop](cls_transforms.html#randomcrop)、[RandomHorizontalFlip](cls_transforms.html#randomhorizontalflip)、[RandomVerticalFlip](cls_transforms.html#randomverticalflip)、
[RandomRotate](cls_transforms.html#randomratate)、 [RandomDistort](cls_transforms.html#randomdistort) |
+|目标检测
实例分割| [RandomHorizontalFlip](det_transforms.html#randomhorizontalflip)、[RandomDistort](det_transforms.html#randomdistort)、[RandomCrop](det_transforms.html#randomcrop)、
[[MixupImage](det_transforms.html#mixupimage)(仅支持YOLOv3模型)、RandomExpand](det_transforms.html#randomexpand) |
+|语义分割 | [RandomHorizontalFlip](seg_transforms.html#randomhorizontalflip)、[RandomVerticalFlip](seg_transforms.html#randomverticalflip)、[RandomRangeScaling](seg_transforms.html#randomrangescaling)、
[RandomStepScaling](seg_transforms.html#randomstepscaling)、[RandomPaddingCrop](seg_transforms.html#randompaddingcrop)、 [RandomBlur](seg_transforms.html#randomblur)、
[RandomRotation](seg_transforms.html#randomrotation)、[RandomScaleAspect](seg_transforms.html#randomscaleaspect)、[RandomDistort](seg_transforms.html#randomdistort) |
+
+## imgaug增强库的支持
+
+PaddleX目前已适配imgaug图像增强库,用户可以直接在PaddleX构造`transforms`时,调用imgaug的方法, 如下示例
+```
+import paddlex as pdx
+from paddlex.cls import transforms
+import imgaug.augmenters as iaa
+train_transforms = transforms.Compose([
+ # 随机在[0.0 3.0]中选值对图像进行模糊
+ iaa.blur.GaussianBlur(sigma=(0.0, 3.0)),
+ transforms.RandomCrop(crop_size=224),
+ transforms.Normalize()
+])
+```
+除了上述用法,`Compose`接口中也支持imgaug的`Someof`、`Sometimes`、`Sequential`、`Oneof`等操作,开发者可以通过这些方法随意组合出增强流程。由于imgaug对于标注信息(目标检测框和实例分割mask)与PaddleX模型训练逻辑有部分差异,**目前在检测和分割中,只支持pixel-level的增强方法,(即在增强时,不对图像的大小和方向做改变) 其它方法仍在适配中**,详情可见下表,
+
+| 增强方法 | 图像分类 | 目标检测
实例分割 | 语义分割 | 备注 |
+| :------ | :------- | :-------------------- | :------- | :--- |
+| [imgaug.augmenters.arithmetic](https://imgaug.readthedocs.io/en/latest/source/api_augmenters_arithmetic.html) |√ |√ |√ | Cutout, DropoutJpegCompression等|
+| [imgaug.augmenters.artistic](https://imgaug.readthedocs.io/en/latest/source/api_augmenters_artistic.html) |√ |√ |√ | 图像卡通化|
+| [imgaug.augmenters.blur](https://imgaug.readthedocs.io/en/latest/source/api_augmenters_blur.html) |√ |√ |√ | GaussianBlur, AverageBlur等|
+| [imgaug.augmenters.collections](https://imgaug.readthedocs.io/en/latest/source/api_augmenters_collections.html) |√ | | |提供了RandAugment方法 |
+| [imgaug.augmenters.color](https://imgaug.readthedocs.io/en/latest/source/api_augmenters_color.html) |√ |√ |√ | Brightness, Hue等色调的增强方法|
+| [imgaug.augmenters.contrast](https://imgaug.readthedocs.io/en/latest/source/api_augmenters_contrast.html) |√ |√ |√ | 多种对比度增强方式|
+| [imgaug.augmenters.convolutional](https://imgaug.readthedocs.io/en/latest/source/api_augmenters_convolutional.html) |√ |√ |√ | 应用卷积kernel到图像 |
+| [imgaug.augmenters.edges](https://imgaug.readthedocs.io/en/latest/source/api_augmenters_edges.html) |√ |√ |√ | 图像边缘化等方法|
+| [imgaug.augmenters.flip](https://imgaug.readthedocs.io/en/latest/source/api_augmenters_flip.html) |√ | | | Fliplr和Flipud翻转方法|
+| [imgaug.augmenters.geometric](https://imgaug.readthedocs.io/en/latest/source/api_augmenters_geometric.html) |√ | | | Affine、Rotate等增强方法|
+| [imgaug.augmenters.imgcorruptlike](https://imgaug.readthedocs.io/en/latest/source/api_augmenters_imgcorruptlike.html) |√ |√ |√ | GaussianNoise等图像噪声增强方法|
+| [imgaug.augmenters.pillike](https://imgaug.readthedocs.io/en/latest/source/api_augmenters_pillike.html) |√ | | | |
+| [imgaug.augmenters.pooling](https://imgaug.readthedocs.io/en/latest/source/api_augmenters_pooling.html) |√ | | |应用pooling操作到图像 |
+| [imgaug.augmenters.segmentation](https://imgaug.readthedocs.io/en/latest/source/api_augmenters_segmentation.html) |√ | | | 应用分割方法到图像|
+| [imgaug.augmenters.size](https://imgaug.readthedocs.io/en/latest/source/api_augmenters_size.html) |√ | | | Reisze、Crop、Pad等操作|
+| [imgaug.augmenters.weather](https://imgaug.readthedocs.io/en/latest/source/api_augmenters_weather.html) |√ |√ |√ | 多种模拟天气等增强方法|
+
+需要注意的是,imgaug的基础方法中,如`imgaug.augmenters.blur`仅为图像处理操作,并无概率设置,而在CV模型训练中,增强操作往往是以一定概率应用在样本上,因此我们可以通过imgaug的`Someof`、`Sometimes`、`Sequential`、`Oneof`等操作来组合实现,如下代码所示,
+> - `Someof` 执行定义增强方法列表中的部分方法
+> - `Sometimes` 以一定概率执行定义的增强方法列表
+> - `Sequential` 按顺序执行定义的增强方法列表
+```
+image imgaug.augmenters as iaa
+from paddlex.cls import transforms
+# 以0.6的概率对图像样本进行模糊
+img_augmenters = iaa.Sometimes(0.6, [
+ iaa.blur.GaussianBlur(sigma=(0.0, 3.0))
+])
+train_transforms = transforms.Compose([
+ img_augmenters,
+ transforms.RandomCrop(crop_size=224),
+ transforms.Normalize()
+])
+```
diff --git a/docs/apis/transforms/index.rst b/docs/apis/transforms/index.rst
index f6040978134ccf664d08ab39f55db197b752ac37..0a2be9860a32e56b6e1e6b31aa12ab22332e6785 100755
--- a/docs/apis/transforms/index.rst
+++ b/docs/apis/transforms/index.rst
@@ -9,3 +9,4 @@ transforms为PaddleX的模型训练提供了数据的预处理和数据增强接
cls_transforms.md
det_transforms.md
seg_transforms.md
+ augment.md
diff --git a/docs/appendix/metrics.md b/docs/appendix/metrics.md
index 021a95857cf423bf65e23e81459c0ac40257c8be..dea5703650c57ce88011c50bc99916000693293f 100755
--- a/docs/appendix/metrics.md
+++ b/docs/appendix/metrics.md
@@ -6,7 +6,7 @@ PaddleX在模型训练、评估过程中,都会有相应的日志和指标反
PaddleX所有模型在训练过程中,输出的日志信息都包含了6个通用的统计信息,用于辅助用户进行模型训练,例如**分割模型**的训练日志,如下图所示。
-
+
各字段含义如下:
@@ -26,7 +26,7 @@ PaddleX所有模型在训练过程中,输出的日志信息都包含了6个通
PaddleX所有模型在训练过程中会根据用户设定的`save_interval_epochs`参数,每间隔一定轮数进行评估和保存。例如**分类模型**的评估日志,如下图所示。
-
+
上图中第1行表明验证数据集中样本数为240,需要迭代8步才能评估完所有验证数据;第5行用于表明第2轮的模型已经完成保存操作;第6行则表明当前保存的模型中,第2轮的模型在验证集上指标最优(分类任务看`acc1`,此时`acc1`值为0.258333),最优模型会保存在`best_model`目录中。
@@ -38,7 +38,7 @@ PaddleX所有模型在训练过程中会根据用户设定的`save_interval_epoc
> 注: acck准确率是针对一张图片进行计算的:把模型在各个类别上的预测得分按从高往低进行排序,取出前k个预测类别,若这k个预测类别包含了真值类,则认为该图片分类正确。
-
+
上图中第1行中的`acc1`表示参与当前迭代步数的训练样本的平均top1准确率,值越高代表模型越优;`acc5`表示参与当前迭代步数的训练样本的平均top5(若类别数n少于5,则为topn)准确率,值越高代表模型越优。第4行中的`loss`表示整个训练集的平均损失函数值,`acc1`表示整个训练集的平均top1准确率,`acc5`表示整个训练集的平均top5准确率。
@@ -46,7 +46,7 @@ PaddleX所有模型在训练过程中会根据用户设定的`save_interval_epoc
### 评估日志字段
-
+
上图中第3行中的`acc1`表示整个验证集的平均top1准确率,`acc5`表示整个验证集的平均top5准确率。
@@ -59,7 +59,7 @@ PaddleX所有模型在训练过程中会根据用户设定的`save_interval_epoc
YOLOv3的训练日志只包括训练通用统计信息(见上文训练通用统计信息)。
-
+
上图中第5行`loss`表示整个训练集的平均损失函数loss值。
@@ -75,7 +75,7 @@ FasterRCNN的训练日志除了通用统计信息外,还包括`loss_cls`、`lo
| loss_rpn_bbox | RPN子网络中检测框回归损失函数值 |
| loss | 所有子网络损失函数值之和 |
-
+
上图中第1行`loss`, `loss_cls`、`loss_bbox`、`loss_rpn_clss`、`loss_rpn_bbox`都是参与当前迭代步数的训练样本的损失值,而第7行是针整个训练集的损失函数值。
@@ -93,7 +93,7 @@ MaskRCNN的训练日志除了通用统计信息外,还包括`loss_cls`、`loss
| loss_rpn_bbox | RPN子网络中检测框回归损失函数值 |
| loss | 所有子网络损失函数值之和 |
-
+
上图中第1行`loss`, `loss_cls`、`loss_bbox`、`loss_mask`、`loss_rpn_clss`、`loss_rpn_bbox`都是参与当前迭代步数的训练样本的损失值,而第7行是针整个训练集的损失函数值。
@@ -103,7 +103,7 @@ MaskRCNN的训练日志除了通用统计信息外,还包括`loss_cls`、`loss
#### VOC评估标准
-
+
> 注:`map`为平均准确率的平均值,即IoU(Intersection Over Union)取0.5时各个类别的准确率-召回率曲线下面积的平均值。
@@ -115,11 +115,11 @@ MaskRCNN的训练日志除了通用统计信息外,还包括`loss_cls`、`loss
COCO格式的数据集不仅可以用于训练目标检测模型,也可以用于训练实例分割模型。在目标检测中,PaddleX主要反馈针对检测框的`bbox_mmAP`指标;在实例分割中,还包括针对Mask的`seg_mmAP`指标。如下所示,第一张日志截图为目标检测的评估结果,第二张日志截图为实例分割的评估结果。
-
+
上图中红框标注的`bbox_mmap`表示整个验证集的检测框平均准确率平均值。
-
+
上图中红框标注的`bbox_mmap`和`seg_mmap`分别表示整个验证集的检测框平均准确率平均值、Mask平均准确率平均值。
## 分割特有统计信息
@@ -128,7 +128,7 @@ COCO格式的数据集不仅可以用于训练目标检测模型,也可以用
语义分割的训练日志只包括训练通用统计信息(见上文训练通用统计信息)。
-
+
### 评估日志字段
@@ -142,4 +142,4 @@ COCO格式的数据集不仅可以用于训练目标检测模型,也可以用
| category_acc | 各类别的准确率,即各类别预测正确的像素数/预测为该类别的总像素数 |
| kappa | kappa系数,用于一致性检验 |
-
+
diff --git a/docs/xx b/docs/xx
deleted file mode 100644
index c4db2de92166858e0130e90c6333f8f636a99526..0000000000000000000000000000000000000000
--- a/docs/xx
+++ /dev/null
@@ -1,99 +0,0 @@
-.
-./._tutorials
-./._README.md
-./._FAQ.md
-./apis/._visualize.md
-./apis/._deploy.md
-./apis/._images
-./apis/._models.md
-./apis/transforms/._cls_transforms.md
-./apis/transforms/._seg_transforms.md
-./apis/transforms/._det_transforms.md
-./apis/transforms/._index.rst
-./apis/._datasets.md
-./apis/images/._insect_bbox_pr_curve(iou-0.5).png
-./apis/._transforms
-./apis/._load_model.md
-./apis/._slim.md
-./apis/._index.rst
-./._images
-./._conf.py
-./._cv_solutions.md
-./._make.bat
-./images/._voc_eval.png
-./images/._08_deploy.png
-./images/._paddlex.png
-./images/._vdl2.jpg
-./images/._05_train.png
-./images/._faster_eval.png
-./images/._object_detection.png
-./images/._visualized_deeplab.jpg
-./images/._02_newproject.png
-./images/._PaddleX-Pipe-Line.png
-./images/._visualized_fasterrcnn.jpg
-./images/._04_parameter.png
-./images/._cls_train.png
-./images/._instance_segmentation.png
-./images/._paddlex.jpg
-./images/._anaconda_windows.png
-./images/._00_loaddata.png
-./images/._mask_train.png
-./images/._seg_train.png
-./images/._yolo_train.png
-./images/._faster_train.png
-./images/._cls_eval.png
-./images/._mask_eval.png
-./images/._06_VisualDL.png
-./images/._seg_eval.png
-./images/._visualized_maskrcnn.jpeg
-./images/._QQGroup.jpeg
-./images/._garbage.bmp
-./images/._semantic_segmentation.png
-./images/._03_choosedata.png
-./images/._07_evaluate.png
-./images/._01_datasplit.png
-./images/._image_classification.png
-./images/._vdl1.jpg
-./images/._vdl3.jpg
-./._requirements.txt
-./._Makefile
-./._apis
-./appendix/._metrics.md
-./appendix/._how_to_offline_run.md
-./appendix/._index.rst
-./appendix/._gpu_configure.md
-./appendix/._anaconda_install.md
-./._install.md
-./._paddlex_gui.md
-./._index.rst
-./._quick_start.md
-./tutorials/._README.md
-./tutorials/deploy/._deploy.md
-./tutorials/deploy/._images
-./tutorials/deploy/._deploy_cpp_win_vs2019.md
-./tutorials/deploy/._deploy_cpp_linux.md
-./tutorials/deploy/images/._vs2019_step4.png
-./tutorials/deploy/images/._vs2019_step3.png
-./tutorials/deploy/images/._vs2019_step6.png
-./tutorials/deploy/images/._vs2019_step1.png
-./tutorials/deploy/images/._vs2019_step5.png
-./tutorials/deploy/images/._vs2019_step2.png
-./tutorials/._compress
-./tutorials/._datasets.md
-./tutorials/._train
-./tutorials/train/._detection.md
-./tutorials/train/._visualdl.md
-./tutorials/train/._instance_segmentation.md
-./tutorials/train/._classification.md
-./tutorials/train/._index.rst
-./tutorials/train/._segmentation.md
-./tutorials/compress/._slim
-./tutorials/compress/._detection.md
-./tutorials/compress/._classification.md
-./tutorials/compress/._index.rst
-./tutorials/compress/slim/._prune.md
-./tutorials/compress/slim/._quant.md
-./tutorials/compress/slim/._index.rst
-./tutorials/compress/._segmentation.md
-./tutorials/._index.rst
-./tutorials/._deploy
diff --git a/paddlex/__init__.py b/paddlex/__init__.py
index eff1c0a12f41d539d73f55c56bfc2a09e1bcd378..62bd2015cb166c98fdc760973d06780c86a3bcc1 100644
--- a/paddlex/__init__.py
+++ b/paddlex/__init__.py
@@ -48,4 +48,4 @@ load_model = cv.models.load_model
datasets = cv.datasets
log_level = 2
-__version__ = '0.1.7.github'
+__version__ = '0.1.9.github'
diff --git a/setup.py b/setup.py
index e74b57a1db36dd3145d6e71e657f3320578b309e..5fd62a98e0e61a22131790ddee76f76a7ab58a1e 100644
--- a/setup.py
+++ b/setup.py
@@ -19,7 +19,7 @@ long_description = "PaddleX. A end-to-end deeplearning model development toolkit
setuptools.setup(
name="paddlex",
- version='0.1.7',
+ version='0.1.9',
author="paddlex",
author_email="paddlex@baidu.com",
description=long_description,