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(一)相关推荐

  1. facebook最近开源的python图像增强库—Augly

    序言 最近在在github上看到一个很火的仓库:Augly,截止目前已经获得了3600+的标星. Augly是由facebook ai开源的一款用于数据增强的python库,它支持音频.图像.视频.文 ...

  2. augment()图像增强库

    当我们要进行数据增强时候可以选择Keras带的增强ImageDataGenerator.flow_from_directory()函数 from keras.preprocessing.image i ...

  3. 五万字总结,深度学习基础。

    文章目录 1 基本概念 1.1 神经网络组成? 1.2 神经网络有哪些常用模型结构? 1.3 如何选择深度学习开发平台? 1.4 为什么深层神经网络难以训练? 1.5 深度学习和机器学习的异同? 2 ...

  4. InceptionV3实战:tensorflow2.X版本,InceptionV3图像分类任务(大数据集)

    InceptionV3实战:tensorflow2.X版本,InceptionV3图像分类任务(大数据集) 摘要 本例提取了植物幼苗数据集中的部分数据做数据集,数据集共有12种类别,今天我和大家一起实 ...

  5. MobileNet实战:tensorflow2.X版本,MobileNetV3图像分类任务(大数据集)

    MobileNet实战:tensorflow2.X版本,MobileNetV3图像分类任务(大数据集) 摘要 本例提取了植物幼苗数据集中的部分数据做数据集,数据集共有12种类别,今天我和大家一起实现t ...

  6. python图像增强_【Tool】Augmentor和imgaug——python图像数据增强库

    Augmentor和imgaug--python图像数据增强库 Tags: ComputerVision Python 介绍两个图像增强库:Augmentor和imgaug,Augmentor使用比较 ...

  7. pytorch数据增广albumentations

    pytorch数据增广albumentations 图像增强库官方英文介绍 安装 pip install albumentations 支持的目标检测bbox格式 pascal_voc [x_min, ...

  8. 非常好用的Python图像增强工具,适用多个框架

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 作者:mdbloice 编译:ronghuaiyang 图像增强是 ...

  9. albumentations 安装

    Python图像处理库 - Albumentations,可用于深度学习中网络训练时的图片数据增强. Albumentations 图像数据增强库特点: 基于高度优化的 OpenCV 库实现图像快速数 ...

最新文章

  1. CSS3动画过渡的jquery动态弹出框插件
  2. 计算机机房云部署,公共技能云机房建设方案及配置清单-20210405173307.pdf-原创力文档...
  3. jQuery Masonry 一个 jQuery动态网格布局的插件
  4. CPL DPL RPL的区别 一致性代码段和非一致性代码段
  5. tf.InteractiveSession()与tf.Session()
  6. C++知识回顾之__stdcall、__cdcel和__fastcall三者的区别
  7. boost::swap_ranges相关的测试程序
  8. [Python人工智能] 十.Tensorflow+Opencv实现CNN自定义图像分类案例及与机器学习KNN图像分类算法对比
  9. 结构型模式——桥接模式
  10. 基于SharePoint 的企业信息平台架构
  11. C#反射——模仿BeanUtil属性复制
  12. 艾伟_转载:VS2008连接SQL Server数据库文件出错的解决方案
  13. JavaEE项目 Web聊天室(JSP实现)
  14. [转载]追求代码质量: 使用 TestNG-Abbot 实现自动化 GUI 测试
  15. 软件混沌工程原则以及应用介绍(PRINCIPLES OF CHAOS ENGINEERING)
  16. 字体图标svg改变颜色
  17. base64加密和解密(动态密钥)
  18. SSM框架的基本概念(什么是ssm框架?)
  19. getchar()的作用
  20. 如何在 Illustrator 中应用任意形状渐变?

热门文章

  1. Python中range和xrange函数的区别
  2. 调查称中关村IT企业本科生平均月薪2989元
  3. JavaScript的同步异步
  4. 2018年10月自考总结
  5. 案例 | 重庆银行流动数据安全挑战及应对实践
  6. OMRON CP系列PLC非致命错误009B
  7. php cacti,cacti搭建遇到的那些事
  8. 戴尔U盘重装系统Win10步骤和详细教程
  9. qt 获取dpi_Qt 对高 DPI 显示器的支持简介
  10. excel的countif函数常见错误