图像增强库Albumentations(一)
1.大体的认识、有用没用的bb
官网:https://albumentations.ai/
github:https://github.com/albumentations-team/albumentations
例子:https://github.com/albumentations-team/albumentations_examples
特点:分类、目标检测、分割等任务都支持增强,与pytorch等框架都兼容,是Pytorch生态的一部分。
1.1 为什么图像增强能提升深度学习的性能?
DNN需要大量数据避免过拟合,数据成本很高:1.训练数据要标注,昂贵;2.有的训练数据本身就很难收集,法律限制等。
图像增强是:根据已有数据,创造新的训练数据的方法。就是对原图进行调整,如裁剪,亮度变化等。例子:
1.2 为什么需要一个单独的图像增强的库?
图像增强看似简单,基本的转换有:mirroring,cropping,改变亮度、分辨率等。很多库都能实现,Pillow与cv2等,但是有很多限制.
1.可以改变label
如,在分割、目标检测与关键点检测的任务里,label需要同image一起进行相应的转化的。torchvision应该是没有现成的实现的,Pillow与cv2应该需要你自己实现,就很复杂的!
对分类任务你只要改变image即可,label是不变的。
但是对分割,旋转了之后,对应的mask的label也要对应改变!
目标检测也一样,框的位置,大小在image调整后,都要进行相应的进行调整。
2.可设置概率与强度(torchvision也可以)
通常数据集大,增强的概率10-30%,强度不需要太大;数据集小,概率40-50%,加大强度。
3.明确的增强进行的pipeline(torchvision也可以)
就是Compose
import albumentations as Atransform = A.Compose([A.RandomCrop(512, 512),A.RandomBrightnessContrast(p=0.3),A.HorizontalFlip(p=0.5),
])
4.严格测试
自己实现的pipeline容易生产垃圾数据,又不会报错。库将操作集成起来,降低风险。
1.3 为什么用Albumentations
1.单一的接口应对多种视觉问题:分类、目标检测、分割、关键点;
2.在工业、学术、竞赛中应用,效果得到了验证;
3.优化了最快的速度与最好的性能;
4.增强方式多,60多种;
2 分类任务的增强
2.1 基础
增强4步走:
1.引包读图,albumentations和OpenCV;
2.定义pipeline;
3.读图;
4.让image通过pipeline,得到增强后的图。
1.引包
import albumentations as A
import cv2读图通常用cv2。
2.pipeline
创建Compose类,接受一个list的增强操作作为Compose的参数,得到一个转换函数transform
transform = Compose([A.RandomCrop(width=256, height=256),A.HorizontalFlip(p=0.5),A.RandomBrightnessContrast(p=0.2),
])
可支持的全部操作看github。
效果在这看:https://albumentations-demo.herokuapp.com
创建一个augmentation就是把一个augmentation class实例化并传入参数。p是概率。
3.读图
pipeline需要的输入是NumPy array,channel是RGB。
image = cv2.imread("/path/to/image.jpg")
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
历史原因,cv读到的图试试BGR,需要转化。
如果用Pillow
from PIL import Image
import numpy as nppillow_image = Image.open("image.jpg") # 对象
image = np.array(pillow_image)
4.过pipeline
调研transform函数,返回的是个dict,只有一个key就是image,value就是增强后的图。
transformed = transform(image=image)
transformed_image = transformed["image"]
因为概率不同,相同的pipeline会得到不同的结果。
2.2 example1–定义1个简单的图像增强pipeline
1.引包
import albumentations as A
import random
import cv2
import matplotlib.pyplot as plt
2.定义可视化函数
def visualize(image):plt.figure(figsize=(10, 10))plt.axis('off')plt.imshow(image)
3.读取,BGR转为RBG空间
原图
历史原因,cv2读进来的是BGR,而Albumentations用的是RGB,所以要转换。
反正记得转就完事了,不然色彩空间会有问题。
image = cv2.imread('./data/input/ButterflyClassification/image/12.jpg')
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)但是注意,如果后面接的是pytorch的处理,那就转换完了就行了。但是如果用cv2.imwrite存储的话,还是用BGR的方式存,所以转为RGB处理后,直接用cv2.imwrite存会有问题。
所以用cv2存Albumentations的结果的话,就不用这步转换,直接进行后续即可。
4.定义单一的增强
水平翻转
transform = A.HorizontalFlip(p=1.0)
augmented_image = transform(image=image)['image']
save_path = '/data/zhaobo/tmp/test.jpg'
cv2.imwrite(save_path, augmented_image)
注意,transform函数的结果是个dict,虽然只有一个key image
{'image':array([[[...]]], dtype:uint8)}
旋转
transform = A.ShiftScaleRotate(p=1.0)训练的时候p=0.5,都是自己定的
5.Compose定义一组pipeline
这个就是自己组合
官方例子transform = A.Compose([A.CLAHE(),A.RandomRotate90(),A.Transpose(),A.ShiftScaleRotate(shift_limit=0.0625, scale_limit=0.50, rotate_limit=45, p=.75),A.Blur(blur_limit=3),A.OpticalDistortion(),A.GridDistortion(),A.HueSaturationValue(),
])或
transform = A.Compose([A.RandomRotate90(),A.Flip(),A.Transpose(),A.OneOf([A.IAAAdditiveGaussianNoise(),A.GaussNoise(),], p=0.2),A.OneOf([A.MotionBlur(p=.2),A.MedianBlur(blur_limit=3, p=0.1),A.Blur(blur_limit=3, p=0.1),], p=0.2),A.ShiftScaleRotate(shift_limit=0.0625, scale_limit=0.2, rotate_limit=45, p=0.2),A.OneOf([A.OpticalDistortion(p=0.3),A.GridDistortion(p=.1),A.IAAPiecewiseAffine(p=0.3),], p=0.2),A.OneOf([A.CLAHE(clip_limit=2),A.IAASharpen(),A.IAAEmboss(),A.RandomBrightnessContrast(),], p=0.3),A.HueSaturationValue(p=0.3),])
kaggle上cvpr 细粒度树叶的大佬的from albumentations.pytorch import ToTensorV2transform = A.Compose([A.RandomResizedCrop(height=SIZE, width=SIZE, p=1.0),A.Flip(),A.ShiftScaleRotate(rotate_limit=1.0, p=0.8),# PixelsA.OneOf([A.IAAEmboss(p=1.0),A.IAASharpen(p=1.0),A.Blur(p=1.0),], p=0.5),# AffineA.OneOf([A.ElasticTransform(p=1.0),A.IAAPiecewiseAffine(p=1.0)], p=0.5),# 这两个训练时加上# A.Normalize(p=1.0),# ToTensorV2(p=1.0),
])测试时
transforms_valid = A.Compose([A.Resize(height=SIZE, width=SIZE, p=1.0),A.Normalize(p=1.0),ToTensorV2(p=1.0),
])
感觉这个增强的有点过分:
甚至直接没了
感觉还是传统的翻转,亮度啥的;或者把大变动的概率调低点。不然容易学错。少搞一点这样的或许能提高泛化能力。
2.3 增强非8bit的图像
增强16bit的tiff,用于卫星图片。下述技术用于所有非8bit的例子,如24bit与32bit等
todo
https://albumentations.ai/docs/examples/example_16_bit_tiff/
2.4 Albumentation的天气增强
增加雨雪效果。
1.随机下雨
transform = A.Compose([A.RandomRain(brightness_coefficient=0.9, drop_width=1, blur_value=5, p=1)],
)
2.随机下雪
transform = A.Compose([A.RandomSnow(brightness_coeff=2.5, snow_point_lower=0.3, snow_point_upper=0.5, p=1)]
)
3.随机逆光
transform = A.Compose([A.RandomSunFlare(flare_roi=(0, 0, 1, 0.5), angle_lower=0.5, p=1)],
)
4.随机阴影
transform = A.Compose([A.RandomShadow(num_shadows_lower=1, num_shadows_upper=1, shadow_dimension=5, shadow_roi=(0, 0.5, 1, 1), p=1)],
)
5.随机雾
transform = A.Compose([A.RandomFog(fog_coef_lower=0.7, fog_coef_upper=0.8, alpha_coef=0.1, p=1)],
)
2.5 比较cool的实际任务应用
todo
https://albumentations.ai/docs/examples/showcase/
图像增强库Albumentations(一)相关推荐
- facebook最近开源的python图像增强库—Augly
序言 最近在在github上看到一个很火的仓库:Augly,截止目前已经获得了3600+的标星. Augly是由facebook ai开源的一款用于数据增强的python库,它支持音频.图像.视频.文 ...
- augment()图像增强库
当我们要进行数据增强时候可以选择Keras带的增强ImageDataGenerator.flow_from_directory()函数 from keras.preprocessing.image i ...
- 五万字总结,深度学习基础。
文章目录 1 基本概念 1.1 神经网络组成? 1.2 神经网络有哪些常用模型结构? 1.3 如何选择深度学习开发平台? 1.4 为什么深层神经网络难以训练? 1.5 深度学习和机器学习的异同? 2 ...
- InceptionV3实战:tensorflow2.X版本,InceptionV3图像分类任务(大数据集)
InceptionV3实战:tensorflow2.X版本,InceptionV3图像分类任务(大数据集) 摘要 本例提取了植物幼苗数据集中的部分数据做数据集,数据集共有12种类别,今天我和大家一起实 ...
- MobileNet实战:tensorflow2.X版本,MobileNetV3图像分类任务(大数据集)
MobileNet实战:tensorflow2.X版本,MobileNetV3图像分类任务(大数据集) 摘要 本例提取了植物幼苗数据集中的部分数据做数据集,数据集共有12种类别,今天我和大家一起实现t ...
- python图像增强_【Tool】Augmentor和imgaug——python图像数据增强库
Augmentor和imgaug--python图像数据增强库 Tags: ComputerVision Python 介绍两个图像增强库:Augmentor和imgaug,Augmentor使用比较 ...
- pytorch数据增广albumentations
pytorch数据增广albumentations 图像增强库官方英文介绍 安装 pip install albumentations 支持的目标检测bbox格式 pascal_voc [x_min, ...
- 非常好用的Python图像增强工具,适用多个框架
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 作者:mdbloice 编译:ronghuaiyang 图像增强是 ...
- albumentations 安装
Python图像处理库 - Albumentations,可用于深度学习中网络训练时的图片数据增强. Albumentations 图像数据增强库特点: 基于高度优化的 OpenCV 库实现图像快速数 ...
最新文章
- CSS3动画过渡的jquery动态弹出框插件
- 计算机机房云部署,公共技能云机房建设方案及配置清单-20210405173307.pdf-原创力文档...
- jQuery Masonry 一个 jQuery动态网格布局的插件
- CPL DPL RPL的区别 一致性代码段和非一致性代码段
- tf.InteractiveSession()与tf.Session()
- C++知识回顾之__stdcall、__cdcel和__fastcall三者的区别
- boost::swap_ranges相关的测试程序
- [Python人工智能] 十.Tensorflow+Opencv实现CNN自定义图像分类案例及与机器学习KNN图像分类算法对比
- 结构型模式——桥接模式
- 基于SharePoint 的企业信息平台架构
- C#反射——模仿BeanUtil属性复制
- 艾伟_转载:VS2008连接SQL Server数据库文件出错的解决方案
- JavaEE项目 Web聊天室(JSP实现)
- [转载]追求代码质量: 使用 TestNG-Abbot 实现自动化 GUI 测试
- 软件混沌工程原则以及应用介绍(PRINCIPLES OF CHAOS ENGINEERING)
- 字体图标svg改变颜色
- base64加密和解密(动态密钥)
- SSM框架的基本概念(什么是ssm框架?)
- getchar()的作用
- 如何在 Illustrator 中应用任意形状渐变?