Albumentations是一个用于图像增强的Python库。图像增强在深度学习和计算机视觉任务中用于提高训练模型的质量。图像增强的目的是从现有数据中创建新的训练样本。
以下是一个示例,展示如何从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的示例与PyTorch和TensorFlow一起使用。
查看库的在线演示。通过它,您可以对不同的图像应用增强并查看结果。此外,我们还有所有可用增强及其目标的列表。
像素级变换只作用于输入图像,不会改变 Target (Label),如 Masks、BBoxs 和 Keypoints。像素级变换列表:
空间级变换将同时改变输入图像及其附加目标,如掩码、边界框和关键点。下表显示了每种变换支持的附加目标。
混合级变换将多个图像合成为一个图像。
变换名称 | 图像 | 掩码 | 边界框 | 关键点 | 全局标签 |
---|---|---|---|---|---|
MixUp(混合叠加) | ✓ | ✓ | ✓ | ||
OverlayElements(叠加元素) | ✓ | ✓ |
若想自行进行基准测试,请按照 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中的文档。
在某些系统中,如果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}
}