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个通用的统计信息,用于辅助用户进行模型训练,例如**分割模型**的训练日志,如下图所示。 -![](./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) 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,