Procházet zdrojové kódy

add doc for augment

jiangjiajun před 5 roky
rodič
revize
fe0a2f22bb

+ 66 - 0
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)、 <br> [RandomRotate](cls_transforms.html#randomratate)、 [RandomDistort](cls_transforms.html#randomdistort) |
+|目标检测<br>实例分割| [RandomHorizontalFlip](det_transforms.html#randomhorizontalflip)、[RandomDistort](det_transforms.html#randomdistort)、[RandomCrop](det_transforms.html#randomcrop)、<br> [[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)、<br> [RandomStepScaling](seg_transforms.html#randomstepscaling)、[RandomPaddingCrop](seg_transforms.html#randompaddingcrop)、 [RandomBlur](seg_transforms.html#randomblur)、<br> [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的增强方法,(即在增强时,不对图像的大小和方向做改变) 其它方法仍在适配中**,详情可见下表,
+
+| 增强方法 | 图像分类 | 目标检测<br> 实例分割 | 语义分割 | 备注 |
+| :------  | :------- | :-------------------- | :------- | :--- |
+| [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()
+])
+```

+ 1 - 0
docs/apis/transforms/index.rst

@@ -9,3 +9,4 @@ transforms为PaddleX的模型训练提供了数据的预处理和数据增强接
    cls_transforms.md
    det_transforms.md
    seg_transforms.md
+   augment.md

+ 12 - 12
docs/appendix/metrics.md

@@ -6,7 +6,7 @@ PaddleX在模型训练、评估过程中,都会有相应的日志和指标反
 
 PaddleX所有模型在训练过程中,输出的日志信息都包含了6个通用的统计信息,用于辅助用户进行模型训练,例如**分割模型**的训练日志,如下图所示。
 
-![](./images/seg_train.png)
+![](../images/seg_train.png)
 
 各字段含义如下:
 
@@ -26,7 +26,7 @@ PaddleX所有模型在训练过程中,输出的日志信息都包含了6个通
 
 PaddleX所有模型在训练过程中会根据用户设定的`save_interval_epochs`参数,每间隔一定轮数进行评估和保存。例如**分类模型**的评估日志,如下图所示。
 
-![](images/cls_eval.png)
+![](../images/cls_eval.png)
 
 上图中第1行表明验证数据集中样本数为240,需要迭代8步才能评估完所有验证数据;第5行用于表明第2轮的模型已经完成保存操作;第6行则表明当前保存的模型中,第2轮的模型在验证集上指标最优(分类任务看`acc1`,此时`acc1`值为0.258333),最优模型会保存在`best_model`目录中。
 
@@ -38,7 +38,7 @@ PaddleX所有模型在训练过程中会根据用户设定的`save_interval_epoc
 
 > 注: acck准确率是针对一张图片进行计算的:把模型在各个类别上的预测得分按从高往低进行排序,取出前k个预测类别,若这k个预测类别包含了真值类,则认为该图片分类正确。
 
-![](images/cls_train.png)
+![](../images/cls_train.png)
 
 
 上图中第1行中的`acc1`表示参与当前迭代步数的训练样本的平均top1准确率,值越高代表模型越优;`acc5`表示参与当前迭代步数的训练样本的平均top5(若类别数n少于5,则为topn)准确率,值越高代表模型越优。第4行中的`loss`表示整个训练集的平均损失函数值,`acc1`表示整个训练集的平均top1准确率,`acc5`表示整个训练集的平均top5准确率。
@@ -46,7 +46,7 @@ PaddleX所有模型在训练过程中会根据用户设定的`save_interval_epoc
 
 ### 评估日志字段
 
-![](images/cls_eval.png)
+![](../images/cls_eval.png)
 
 上图中第3行中的`acc1`表示整个验证集的平均top1准确率,`acc5`表示整个验证集的平均top5准确率。
 
@@ -59,7 +59,7 @@ PaddleX所有模型在训练过程中会根据用户设定的`save_interval_epoc
 
 YOLOv3的训练日志只包括训练通用统计信息(见上文训练通用统计信息)。
 
-![](images/yolo_train.png)
+![](../images/yolo_train.png)
 
 上图中第5行`loss`表示整个训练集的平均损失函数loss值。
 
@@ -75,7 +75,7 @@ FasterRCNN的训练日志除了通用统计信息外,还包括`loss_cls`、`lo
 | loss_rpn_bbox      | RPN子网络中检测框回归损失函数值  |
 | loss              | 所有子网络损失函数值之和          |
 
-![](images/faster_train.png)
+![](../images/faster_train.png)
 
 上图中第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              | 所有子网络损失函数值之和          |
 
-![](images/mask_train.png)
+![](../images/mask_train.png)
 
 上图中第1行`loss`, `loss_cls`、`loss_bbox`、`loss_mask`、`loss_rpn_clss`、`loss_rpn_bbox`都是参与当前迭代步数的训练样本的损失值,而第7行是针整个训练集的损失函数值。
 
@@ -103,7 +103,7 @@ MaskRCNN的训练日志除了通用统计信息外,还包括`loss_cls`、`loss
 
 #### VOC评估标准
 
-![](images/voc_eval.png)
+![](../images/voc_eval.png)
 
 > 注:`map`为平均准确率的平均值,即IoU(Intersection Over Union)取0.5时各个类别的准确率-召回率曲线下面积的平均值。
 
@@ -115,11 +115,11 @@ MaskRCNN的训练日志除了通用统计信息外,还包括`loss_cls`、`loss
 
 COCO格式的数据集不仅可以用于训练目标检测模型,也可以用于训练实例分割模型。在目标检测中,PaddleX主要反馈针对检测框的`bbox_mmAP`指标;在实例分割中,还包括针对Mask的`seg_mmAP`指标。如下所示,第一张日志截图为目标检测的评估结果,第二张日志截图为实例分割的评估结果。
 
-![](images/faster_eval.png)
+![](../images/faster_eval.png)
 
 上图中红框标注的`bbox_mmap`表示整个验证集的检测框平均准确率平均值。
 
-![](images/mask_eval.png)
+![](../images/mask_eval.png)
 上图中红框标注的`bbox_mmap`和`seg_mmap`分别表示整个验证集的检测框平均准确率平均值、Mask平均准确率平均值。
 
 ## 分割特有统计信息
@@ -128,7 +128,7 @@ COCO格式的数据集不仅可以用于训练目标检测模型,也可以用
 
 语义分割的训练日志只包括训练通用统计信息(见上文训练通用统计信息)。
 
-![](images/seg_train.png)
+![](../images/seg_train.png)
 
 ### 评估日志字段
 
@@ -142,4 +142,4 @@ COCO格式的数据集不仅可以用于训练目标检测模型,也可以用
 | category_acc       | 各类别的准确率,即各类别预测正确的像素数/预测为该类别的总像素数  |
 | kappa      | kappa系数,用于一致性检验  |
 
-![](images/seg_eval.png)
+![](../images/seg_eval.png)

+ 0 - 99
docs/xx

@@ -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

+ 1 - 1
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'

+ 1 - 1
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,