Albumentations
文档 | Discord | Twitter | LinkedIn
Albumentations 是一个用于图像增强的 Python 库。图像增强用于深度学习和计算机视觉任务,以提高训练模型的质量。图像增强的目的是从现有数据中创建新的训练样本。
以下是如何应用 Albumentations 的一些 像素级 增强以从原始图像创建新图像的示例:
为什么选择 Albumentations
- Albumentations 支持所有常见的计算机视觉任务,如分类、语义分割、实例分割、目标检测和姿态估计。
- 该库提供 简单统一的 API 来处理所有数据类型:图像(RGB 图像、灰度图像、多光谱图像)、分割掩码、边界框和关键点。
- 该库包含 超过 70 种不同的增强,以从现有数据生成新的训练样本。
- Albumentations 速度快。我们为每个新版本进行基准测试以确保增强提供最大速度。
- 它 支持流行的深度学习框架,如 PyTorch 和 TensorFlow。顺便说一句,Albumentations 是 PyTorch 生态系统 的一部分。
- 由专家编写。作者既有生产计算机视觉系统的工作经验,也有参加机器学习竞赛的经验。许多核心团队成员是 Kaggle 大师和王中王。
- 该库在工业界、深度学习研究、机器学习竞赛和开源项目中被广泛使用。
赞助商
目录
作者
Vladimir I. Iglovikov | Kaggle Grandmaster
Mikhail Druzhinin | Kaggle Expert
Alexander Buslaev — Mapbox 的计算机视觉工程师 | Kaggle Master
Evegene Khvedchenya — Piñata Farms 的计算机视觉研究工程师 | Kaggle Grandmaster
安装
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
另请参见
增强列表
像素级变换
像素级变换将仅改变输入图像,并且不会改变任何附加目标,如掩码、边界框和关键点。像素级变换的列表:
- 高级模糊
- 模糊
- 对比度受限的自适应直方图均衡化
- 通道舍弃
- 通道打乱
- 色差
- 颜色抖动
- 失焦
- 降采样
- 浮雕
- 均衡化
- 频域调整
- 华丽主成分分析
- 从浮点转化
- 高斯噪声
- 高斯模糊
- 玻璃模糊
- 直方图匹配
- 色相饱和度值
- ISO噪声
- 图像压缩
- 图像反转
- 中值模糊
- 运动模糊
- 乘法噪声
- 归一化
- 像素分布自适应
- 普朗克抖动
- 色调分离
- RGB位移
- 随机亮度对比度
- 随机雾化
- 随机伽马校正
- 随机砾石
- 随机下雨
- 随机阴影
- 随机下雪
- 随机太阳耀斑
- 随机色调曲线
- 振铃过冲
- 锐化
- 太阳化
- 溅射
- 超像素
- 模板转换
- 文本图像
- 转为浮点
- 转为灰度
- 转为RGB
- 转为棕褐色
- 非锐化掩模
- 变焦模糊
空间层级转换
空间层级转换将同时改变输入图像以及其他目标,如面具、边界框和关键点。下表显示了每个转换支持的其他目标。
变换 | 图像 | 掩膜 | BBoxes | 关键点 |
---|---|---|---|---|
仿射变换 | ✓ | ✓ | ✓ | ✓ |
BBox安全随机裁剪 | ✓ | ✓ | ✓ | ✓ |
中心裁剪 | ✓ | ✓ | ✓ | ✓ |
粗略丢弃 | ✓ | ✓ | ✓ | |
裁剪 | ✓ | ✓ | ✓ | ✓ |
裁剪和填充 | ✓ | ✓ | ✓ | ✓ |
有掩膜且不为空则裁剪 | ✓ | ✓ | ✓ | ✓ |
D4 | ✓ | ✓ | ✓ | ✓ |
弹性变换 | ✓ | ✓ | ✓ | |
翻转 | ✓ | ✓ | ✓ | ✓ |
网格畸变 | ✓ | ✓ | ✓ | |
网格丢弃 | ✓ | ✓ | ||
水平翻转 | ✓ | ✓ | ✓ | ✓ |
Lambda | ✓ | ✓ | ✓ | ✓ |
最大长宽尺寸 | ✓ | ✓ | ✓ | ✓ |
掩膜丢弃 | ✓ | ✓ | ||
形态学变换 | ✓ | ✓ | ||
无操作 | ✓ | ✓ | ✓ | ✓ |
光学畸变 | ✓ | ✓ | ✓ | |
按需填充 | ✓ | ✓ | ✓ | ✓ |
透视变换 | ✓ | ✓ | ✓ | ✓ |
分段仿射变换 | ✓ | ✓ | ✓ | ✓ |
像素丢弃 | ✓ | ✓ | ||
随机裁剪 | ✓ | ✓ | ✓ | ✓ |
从边界随机裁剪 | ✓ | ✓ | ✓ | ✓ |
随机网格打乱 | ✓ | ✓ | ✓ | |
随机裁剪调整尺寸 | ✓ | ✓ | ✓ | ✓ |
随机旋转90度 | ✓ | ✓ | ✓ | ✓ |
随机缩放 | ✓ | ✓ | ✓ | ✓ |
随机尺寸BBox安全裁剪 | ✓ | ✓ | ✓ | ✓ |
随机尺寸裁剪 | ✓ | ✓ | ✓ | ✓ |
调整尺寸 | ✓ | ✓ | ✓ | ✓ |
旋转 | ✓ | ✓ | ✓ | ✓ |
安全旋转 | ✓ | ✓ | ✓ | ✓ |
平移缩放旋转 | ✓ | ✓ | ✓ | ✓ |
最小最大尺寸 | ✓ | ✓ | ✓ | ✓ |
转置 | ✓ | ✓ | ✓ | ✓ |
垂直翻转 | ✓ | ✓ | ✓ | ✓ |
XY掩膜 | ✓ | ✓ | ✓ |
混合级别变换
将多张图像混合为一张的变换
一些增强的更多示例
Inria数据集上的语义分割
医学成像
在 Mapillary Vistas 数据集上的目标检测和语义分割
关键点增强
基准测试结果
要自己运行基准测试,请按照 benchmark/README.md 中的说明进行操作
在使用 AMD Ryzen Threadripper 3970X CPU 对 ImageNet 验证集的前 2000 张图像运行基准测试的结果。 表格显示了每秒可以在单核上处理多少图像;数字越高越好。
库 | 版本 |
---|---|
Python | 3.10.13 (main, Sep 11 2023, 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 | |
---|---|---|---|---|---|
水平翻转 | 8017 ± 12 | 2436 ± 2 | 935 ± 3 | 3575 ± 4 | 4806 ± 7 |
垂直翻转 | 7366 ± 7 | 2563 ± 8 | 943 ± 1 | 4949 ± 5 | 8159 ± 21 |
旋转 | 570 ± 12 | 152 ± 2 | 207 ± 1 | 633 ± 2 | 496 ± 2 |
仿射 | 1382 ± 31 | 162 ± 1 | 201 ± 1 | - | 682 ± 2 |
均衡 | 1027 ± 2 | 336 ± 2 | 77 ± 1 | - | 1183 ± 1 |
随机裁剪64 | 19986 ± 57 | 15336 ± 16 | 811 ± 1 | 19882 ± 356 | 5410 ± 5 |
随机缩放裁剪 | 2308 ± 7 | 1046 ± 3 | 187 ± 1 | - | - |
RGB 移位 | 1240 ± 3 | - | 425 ± 2 | - | 1554 ± 6 |
大小调整 | 2314 ± 9 | 1272 ± 3 | 201 ± 3 | 431 ± 1 | 1715 ± 2 |
随机伽马 | 2552 ± 2 | 232 ± 1 | 211 ± 1 | - | 1794 ± 1 |
灰度 | 7313 ± 4 | 1652 ± 2 | 443 ± 2 | 2639 ± 2 | 1171 ± 23 |
颜色抖动 | 396 ± 1 | 51 ± 1 | 50 ± 1 | 224 ± 1 | - |
普朗克抖动 | 449 ± 1 | - | 598 ± 1 | - | - |
随机透视 | 471 ± 1 | 123 ± 1 | 114 ± 1 | - | 478 ± 2 |
高斯模糊 | 2099 ± 2 | 113 ± 2 | 79 ± 2 | 165 ± 1 | 1244 ± 2 |
中值模糊 | 538 ± 1 | - | 3 ± 1 | - | 565 ± 1 |
运动模糊 | 2197 ± 9 | - | 102 ± 1 | - | 508 ± 1 |
海报化 | 2449 ± 1 | 2587 ± 3 | 339 ± 6 | - | 1547 ± 1 |
JPEG压缩 | 827 ± 1 | - | 50 ± 2 | 684 ± 1 | 428 ± 4 |
高斯噪声 | 78 ± 1 | - | - | 67 ± 1 | 128 ± 1 |
弹性 | 127 ± 1 | 3 ± 1 | 1 ± 1 | - | 130 ± 1 |
规格化 | 971 ± 2 | 449 ± 1 | 415 ± 1 | - | - |
贡献
要向存储库创建拉取请求,请按照 CONTRIBUTING.md 中的文档进行操作
社区与支持
注释
在某些系统中,在多GPU情况下,如果 OpenCV 使用了 OpenCL 优化,PyTorch 可能会导致 DataLoader 死锁。在库导入之前添加以下两行代码可能有帮助。详情请参见 https://github.com/pytorch/pytorch/issues/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}
}