AutoAlbument 用于深度学习的自动数据增强库

AutoAlbument是一种自动搜索数据最佳增强策略的工具。AutoAlbument是一种AutoML工具,它使用更快的自动增强算法从数据中学习图像增强策略。它使用户无需手动选择增强和调整其参数。简而言之,这个想法是使用一种类似GAN的架构,其中生成器对一些输入图像应用增强,鉴别器必须确定图像是否增强。此过程有助于找到将生成与原始图像相似的图像的增强策略。

AutoAlbument的实现是以Faster AutoAugment论文为理论的(Faster AutoAugment的论文可以参考以下链接),是albumentations-team既albumentations之外的又一个开源库。AutoAlbument支持图像分类语义分割任务。AutoAlbument为模型涨点提供了新的思路,当模型性能无法再度提升时可以考虑使用AutoAlbument生成数据增强策略,让模型的性能再度上一个台阶

论文阅读:Faster AutoAugment: Learning Augmentation Strategies using Backpropagation_万里鹏程转瞬至的博客-CSDN博客数据增强是机器学习的一种强大技术,可以增加数据的数量和多样性,提高性能,特别是在图像识别任务中。传统的数据增强方法包括几何变换,如旋转和颜色增强,如自动对比度。与其他超参数类似,数据增强策略的设计者通常根据他们的先验知识(例如,所需的不变性)来选择转换操作。例如,水平翻转被认为对一般的物体识别有效,但可能对数字识别无效。除了选择之外,设计者还需要结合几种操作并设置它们的大小(例如,旋转度)。因此,数据增强策略的设计是一个复杂的组合问题。当以数据分割的方式设计数据增强策略时,人们可以将这个问题看作是搜索空间中https://hpg123.blog.csdn.net/article/details/125676990?spm=1001.2014.3001.5502

AutoAlbument的源代码和问题追溯可在https://github.com/albumentations-team/autoalbument

AutoAlbument安装命令:

pip install -U albumentations

AutoAlbument的官网地址:How to use AutoAlbument - Albumentations Documentation

1、AutoAlbument的示例效果

使用AutoAlbument生成的数据扩充策略训练模型,可以使模型的精度再一次起飞,其有益的效果可以查看官网示例。

Classification任务的精度提升

Dataset Baseline Top-1 Accuracy AutoAlbument Top-1 Accuracy
CIFAR10 91.79 96.02
SVHN 98.31 98.48
ImageNet 73.27 75.17

Semantic segmentation任务的精度提升

Dataset Baseline mIOU AutoAlbument mIOU
Pascal VOC 73.34 75.55
Cityscapes 79.47 79.92

2、基本使用说明

1.您需要创建一个带有AutoAlbument参数的配置文件和一个Python文件,该文件为您的数据实现了自定义PyTorch数据集。

2.接下来,您需要将这些文件传递给AutoAlbument。AutoAlbunt将使用生成对抗网络来发现增强策略,然后创建包含这些策略的文件。

3.最后,您可以使用AutoAlbument从文件中加载增强策略,并在计算机视觉pipeline中使用它们。

在后面章节将会详细描述AutoAlbument的使用流程

3、定义数据加载器和配置文件 

3.1 创建包含配置文件的目录

命令: autoalbument-create --config-dir </path/to/directory> --task <deep_learning_task> --num-classes <num_classes>,

示例:autoalbument-create --config-dir ~/experiments/autoalbument-search-cifar10 --task classification --num-classes 10.

--config-dir选项的值为目录。AutoAlbument将创建此目录并将两个文件(dataset.py和search.yaml)放入其中。search.yaml中--task的值应该包含深度学习任务的名称。支持的task类型是classification 和semantic_segmentation,--num-classes选项的值应包含分类或分段数据集中不同类的数量。

默认情况下,AutoAlbument会创建search.yaml,只包含最重要的配置参数的文件。要探索所有可用的参数,您可以创建一个配置文件,通过提供--generate-full-config参数,例如。autoalbument-create --config-dir ~/experiments/autoalbument-search-cifar10  --task classification  --num-classes 10 --generate-full-config

3.2 配置dataset.py的详细内容

在步骤2.1中 autoalbument-create创建的dataset.py文件中,并不包含加载数据的详情,因此需要补充__len__,__getitem__两个方法的具体实现方式。

分类任务的数据集应返回图像和类标签。分割任务的数据集应返回图像和相关掩码。

3.3 调整search.yaml的参数

您可能需要更改AutoAlbument将用于搜索扩充策略的参数。为此,您需要编辑search.yaml(文件被autoalbument-create创建于步骤2.1)。每个配置参数都包含一个说明设置含义的注释。请参阅“优化搜索参数”部分,其中包含对最关键参数的描述。

4、使用AutoAlbument搜索扩充策略

运行: autoalbument-search --config-dir </path/to/directory>, 即可搜索扩充策略

示例: autoalbument-search --config-dir ~/experiments/autoalbument-search-cifar10.

--config-dir的值应该和 autoalbument-create 在步骤2.1创建的一样

autoalbument-search 将会创建输出目录 (目录格式为 <config_dir>/outputs/<current_date>/<current_time>, 我们可以在 search.yaml指定输出目录的格式)。这个目录将包含在每个搜索阶段的epoch中找到的策略(保存为JSON文件)。

autoalbument-search 是一个被 来自于Hydra的@hydra.main 包裹修饰的命令行参数,调用此命令时,可以使用Hydra的所有功能。

AutoAlbument使用Pythorch搜索扩充策略。您可以使用支持CUDA的GPU来加速搜索。

5、使用策略进行扩充

AutoAlbument 生成的JSON 包含数据扩充策略,可以使用Albumentations加载策略

import albumentations as A
transform = A.load("/path/to/policy.json")

例如,要为分类任务扩充图像:

transformed = transform(image=image)
transformed_image = transformed["image"]

要为语义分割任务扩充图像和掩码,请执行以下操作:

transformed = transform(image=image, mask=mask)
transformed_image = transformed["image"]
transformed_mask = transformed["mask"]

本文绝大部分内容参考自How to use AutoAlbument - Albumentations Documentation

猜你喜欢

转载自blog.csdn.net/a486259/article/details/125687441