Skip to content

AllenW-Hiter/albumentations

 
 

Repository files navigation

Albumentations

Albumentations是一个用于图像增强的Python库。图像增强在深度学习和计算机视觉任务中用于提高训练模型的质量。图像增强的目的是从现有数据中创建新的训练样本。

以下是一个示例,展示如何从Albumentations应用一些像素级增强来创建从原始图像生成的新图像: parrot

为什么选择 Albumentations

  • Albumentations 支持所有常见的计算机视觉任务 如分类、语义分割、实例分割、目标检测和姿态估计。
  • 该库提供**一个简单的统一API**来处理所有数据类型:图像(RGB图像、灰度图像、多光谱图像)、分割掩码、边界框和关键点。
  • 该库包含**超过70种不同的增强**来从现有数据生成新的训练样本。
  • Albumentations是快速的。我们会对每个新版本进行基准测试,以确保增强提供最大的速度。
  • 它**与流行的深度学习框架兼容**,如PyTorch和TensorFlow。顺便说一下,Albumentations是PyTorch生态系统的一部分。
  • 由专家编写。作者既有在生产计算机视觉系统上工作的经验,也参与了竞争激烈的机器学习。许多核心团队成员是Kaggle大师和特级大师。
  • 该库在工业界、深度学习研究、机器学习竞赛和开源项目中广泛使用

目录

安装

Albumentations要求使用Python 3.8或更高版本。要从PyPI安装最新版本:

pip install -U albumentations

其他安装选项在文档中有描述。

文档

完整文档可在 https://albumentations.ai/docs/ 查看。

一个简单的示例

import albumentations as A
import cv2

# 声明一个增强流程
transform = A.Compose([
    A.RandomCrop(width=256, height=256),
    A.HorizontalFlip(p=0.5),
    A.RandomBrightnessContrast(p=0.2),
])

# 使用OpenCV读取图片并转换为RGB颜色空间
image = cv2.imread("image.jpg")
image = cv2.cvtColor(image, cv2.COLOR

_BGR2RGB)

# 增强图片
transformed = transform(image=image)
transformed_image = transformed["image"]

入门

图像增强的新手

请从关于为什么图像增强重要以及它如何帮助构建更好的模型的介绍文章开始。

将Albumentations用于特定任务,如分类或分割

如果您想将Albumentations用于诸如分类、分割或目标检测等特定任务,请参阅一系列文章,其中详细描述了这项任务。我们还有一个关于如何将Albumentations应用于不同用例的示例列表

如何将Albumentations与深度学习框架一起使用

我们有使用Albumentations的示例与PyTorch和TensorFlow一起使用。

探索增强并看到Albumentations的实际操作

查看库的在线演示。通过它,您可以对不同的图像应用增强并查看结果。此外,我们还有所有可用增强及其目标的列表

谁在使用Albumentations

增强列表

像素级变换

像素级变换只作用于输入图像,不会改变 Target (Label),如 Masks、BBoxs 和 Keypoints。像素级变换列表:

空间级变换

空间级变换将同时改变输入图像及其附加目标,如掩码、边界框和关键点。下表显示了每种变换支持的附加目标。

变换名称 图像 掩码 边界框 关键点
Affine(仿射变换)
BBoxSafeRandomCrop(边界框安全随机裁剪)
CenterCrop(中心裁剪)
CoarseDropout(粗略随机丢失)
Crop(裁剪)
CropAndPad(裁剪和填充)
CropNonEmptyMaskIfExists(如果存在非空掩码则裁剪)
D4(四重数据增强)
ElasticTransform(弹性变换)
Flip(翻转)
GridDistortion(网格失真)
GridDropout(网格丢失)
HorizontalFlip(水平翻转)
Lambda(自定义函数)
LongestMaxSize(最大尺寸调整)
MaskDropout(掩码丢失)
Morphological(形态学变换)
NoOp(无操作)
OpticalDistortion(光学失真)
PadIfNeeded(根据需要填充)
Perspective(透视变换)
PiecewiseAffine(分段仿射)
PixelDropout(像素丢失)
RandomCrop(随机裁剪)
RandomCropFromBorders(从边界随机裁剪)
RandomGridShuffle(随机网格洗牌)
RandomResizedCrop(随机调整大小的裁剪)
RandomRotate90(随机旋转90度)
RandomScale(随机缩放)
RandomSizedBBoxSafeCrop(随机尺寸边界框安全裁剪)
RandomSizedCrop(随机尺寸裁剪)
Resize(调整大小)
Rotate(旋转)
SafeRotate(安全旋转)
ShiftScaleRotate(位移缩放旋转)
SmallestMaxSize(最小最大尺寸)
Transpose(转置)
VerticalFlip(垂直翻转)
XYMasking(XY掩码)

混合级变换

混合级变换将多个图像合成为一个图像。

变换名称 图像 掩码 边界框 关键点 全局标签
MixUp(混合叠加)
OverlayElements(叠加元素)

更多增强实例

Inria数据集上的语义分割

inria

医学影像

medical

Mapillary Vistas数据集上的目标检测和语义分割

vistas

关键点增强

基准测试结果

若想自行进行基准测试,请按照 benchmark/README.md 中的说明操作。

使用AMD Ryzen Threadripper 3970X CPU对ImageNet验证集的前2000张图片进行基准测试的结果。表格显示了单个核心每秒可以处理的图像数量;数值越大越好。

版本
Python 3.10.13 (主版本, 2023年9月11日, 13:44:35) [GCC 11.2.0]
albumentations 1.4.11
imgaug 0.4.0
torchvision 0.18.1+rocm6.0
numpy 1.26.4
opencv-python-headless 4.10.0.84
scikit-image 0.24.0
scipy 1.14.0
pillow 10.4.0
kornia 0.7.3
augly 1.0.0
albumentations
1.4.11
torchvision
0.18.1+rocm6.0
kornia
0.7.3
augly
1.0.0
imgaug
0.4.0
HorizontalFlip 8017 ± 12 2436 ± 2 935 ± 3 3575 ± 4 4806 ± 7
VerticalFlip 7366 ± 7 2563 ± 8 943 ± 1 4949 ± 5 8159 ± 21
Rotate 570 ± 12 152 ± 2 207 ± 1 633 ± 2 496 ± 2
Affine 1382 ± 31 162 ± 1 201 ± 1 - 682 ± 2
Equalize 1027 ± 2 336 ± 2 77 ± 1 - 1183 ± 1
RandomCrop64 19986 ± 57 15336 ± 16 811 ± 1 19882 ± 356 5410 ± 5
RandomResizedCrop 2308 ± 7 1046 ± 3 187 ± 1 - -
ShiftRGB 1240 ± 3 - 425 ± 2 - 1554 ± 6
Resize 2314 ± 9 1272 ± 3 201 ± 3 431 ± 1 1715 ± 2
RandomGamma 2552 ± 2 232 ± 1 211 ± 1 - 1794 ± 1
Grayscale 7313 ± 4 1652 ± 2 443 ± 2 2639 ± 2 1171 ± 23
ColorJitter 396 ± 1 51 ± 1 50 ± 1 224 ± 1 -
PlankianJitter 449 ± 1 - 598 ± 1 - -
RandomPerspective 471 ± 1 123 ± 1 114 ± 1 - 478 ± 2
GaussianBlur 2099 ± 2 113 ± 2 79 ± 2 165 ± 1 1244 ± 2
MedianBlur 538 ± 1 - 3 ± 1 - 565 ± 1
MotionBlur 2197 ± 9 - 102 ± 1 - 508 ± 1
Posterize 2449 ± 1 2587 ± 3 339 ± 6 - 1547 ± 1
JpegCompression 827 ± 1 - 50 ± 2 684 ± 1 428 ± 4
GaussianNoise 78 ± 1 - - 67 ± 1 128 ± 1
Elastic 127 ± 1 3 ± 1 1 ± 1 - 130 ± 1
Normalize 971 ± 2 449 ± 1 415 ± 1 - -

参与贡献

若想对仓库创建拉取请求,请遵循CONTRIBUTING.md中的文档。

https://github.com/albuemntations-team/albumentation/graphs/contributors

社区与支持

评论

在某些系统中,如果OpenCV编译了OpenCL优化,在多GPU模式下,PyTorch可能会使DataLoader死锁。在导入库之前添加以下两行代码可能会有帮助。更多详情请访问pytorch/pytorch#1355

cv2.setNumThreads(0)
cv2.ocl.setUseOpenCL(False)

引用

如果您认为这个库对您的研究有用,请考虑引用Albumentations: Fast and Flexible Image Augmentations:

@Article{info11020125,
    AUTHOR = {Buslaev, Alexander and Iglovikov, Vladimir I. and Khvedchenya, Eugene and Parinov, Alex and Druzhinin, Mikhail and Kalinin, Alexandr A.},
    TITLE = {Albumentations: Fast and Flexible Image Augmentations},
    JOURNAL = {Information},
    VOLUME = {11},
    YEAR = {2020},
    NUMBER = {2},
    ARTICLE-NUMBER = {125},
    URL = {https://www.mdpi.com/2078-2489/11/2/125},
    ISSN = {2078-2489},
    DOI = {10.3390/info11020125}
}

Releases

No releases published

Packages

No packages published

Languages

  • Python 99.9%
  • Shell 0.1%