本文来源公众号“OpenCV与AI深度学习”,仅用于学术分享,侵权删,干货满满。
原文链接:深度学习懒人图像增强库——Albumentations
对于任何机器学习应用来说,数据集的大小都至关重要。数据集越大,模型的学习效果就越好,推理能力也就越强。尤其是图像分类模型,需要训练数据集具有高度的多样性才能确保令人满意的性能。
但收集图像数据并非易事。为了有效地训练深度学习模型,你不仅需要为每个类别收集数千张图像,而且这些图像还需要反映模型在推理过程中会遇到的真实世界的多样性——不同的光照、角度、背景、噪声等等。
应对这一挑战的一种方法是通过图像增强。无需收集新图像并进行注释,只需在现有图像中引入变化即可。图像增强的示例包括翻转图像、调整亮度、旋转、模糊、裁剪或添加噪点,以模拟图像中物体在现实世界中的外观(例如雨水或太阳耀斑)。这些增强图像扩展了数据集,确保深度学习模型能够看到足够多的物体视图,以便日后能够识别它。
当数据集较小时,图像增强是最简单、最强大的提升泛化能力的工具之一,而Albumentations则能让你的工作更加轻松。
这个 Python 库简单易用,使用起来也非常直观,甚至感觉像个作弊码——事实也确实如此。它支持 60 多种不同的图像增强技术,并与 PyTorch、TensorFlow 和 Keras 等热门深度学习框架兼容。源代码可在下方链接获取:
https://github.com/albumentations-team/albumentations
我会向你展示我做的一个小演示,演示如何使用Albumentations 。我在 Kaggle 上找到的这个名为“场景分类”的数据集上测试了一些图像增强。该数据集包含来自世界各地的约 25,000 张自然场景图片,分为 6 类——建筑、森林、山脉、冰川、街道和海洋。我将其缩小到原来的 30%,然后在缩放后的数据集中为每张图片添加了 10 种不同的图像增强,使其规模扩大了 10 倍。
以下是从Albumentations库中选择我的增强功能的代码:
import albumentations as A
augmentations = {
'HorizontalFlip': A.HorizontalFlip(p=1),
'RandomBrightnessContrast': A.RandomBrightnessContrast(p=1),
'RandomGamma': A.RandomGamma(p=1),
'HueSaturationValue': A.HueSaturationValue(p=1),
'MotionBlur': A.MotionBlur(p=1),
'GaussNoise': A.GaussNoise(p=1),
'ShiftScaleRotate': A.ShiftScaleRotate(shift_limit=0.1, scale_limit=0.1, rotate_limit=15, p=1),
'ElasticTransform': A.ElasticTransform(p=1),
'GridDistortion': A.GridDistortion(p=1),
'Cutout': A.CoarseDropout(max_holes=8, max_height=16, max_width=16, fill_value=0, p=1),
}
以下是每个功能的作用:
-
-
HorizontalFlip:从左到右镜像图像。
-
RandomBrightnessContrast:调整亮度和对比度以模拟各种光照条件。
-
RandomGamma:改变伽马曲线,模拟不同的曝光水平。
-
HueSaturationValue:调整色调、饱和度和值,从本质上改变图像颜色。
-
运动模糊:添加模仿相机运动或快速移动物体的模糊效果。
-
GaussNoise:将高斯噪声注入图像以模仿颗粒状或低质量的图像。
-
ShiftScaleRotate:应用小的随机移动、缩放和旋转。
-
ElasticTransform:应用轻微的弹性变形来模拟小的变形——比如波浪形或拉伸的纹理。
-
GridDistortion:沿网格图案扭曲图像。
-
剪切(CoarseDropout):随机遮挡图像中的矩形区域。
-
最后,以下是经过各种增强处理后的美丽山景图片:
Albumentations还可以和opencv结合使用:
import albumentations as A
import cv2
# Declare an augmentation pipeline
transform = A.Compose([
A.RandomCrop(width=256, height=256),
A.HorizontalFlip(p=0.5),
A.RandomBrightnessContrast(p=0.2),
])
# Read an image with OpenCV and convert it to the RGB colorspace
image = cv2.imread("image.jpg")
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
# Augment an image
transformed = transform(image=image)
transformed_image = transformed["image"]
更多增强实例:
THE END !
文章结束,感谢阅读。您的点赞,收藏,评论是我继续更新的动力。大家有推荐的公众号可以评论区留言,共同学习,一起进步。