【预处理库函数】albumentations库的简单了解和使用

站长亦新
站长亦新
站长亦新
81
文章
0
评论
2020年6月9日23:36:14 评论 382 3431字阅读11分26秒

【预处理库函数】albumentations库的简单了解和使用

在对图片进行处理的时候,之前就使用torch自带的transfrom来对图像做一些反转,平移,随机剪裁,拉伸这样的任务。然而最近的图像分类+语义分割的比赛中,发现了这样的一个库函数:Albumentations。

厉害的大佬都在用这个库函数作为pre-process,那么说明这个库函数非常的有东西,所以这里借这次机会,来好好学习一个这个库函数的内容。

1 关于Albumentations

如果你也是一个大佬,喜欢看文档的那种,可以看这个github链接:
https://github.com/albumentations-team/albumentations

  • 这个库是图片处理的library,处理的图片是在HWC格式下,也就是Height,Width,Channale;
  • 在相同的对图像的处理下,使用这个库函数的速度更快;
  • 基于numpy和OpenCV,这个库从中取其精华;
  • 相比torch自带的,这个库函数有更多的对图像的预处理的办法
  • 对Pytorch很友好,而且这个库函数是kaggle master制作的。

这个库最好的地方就是处理速度快!
【预处理库函数】albumentations库的简单了解和使用
这个图中,可以看到albumentations的处理方法中,很多都是速度最快的。
【如何安装】

pip install albumentations
# 或者
sudo pip install -U git+https://github.com/albu/albumentations

2 竞赛中的实用例子

这篇文章不会吧所有的这个库函数的方法都列举一遍,因为太多了。这里主要就看一个例子好了:

RESIZE_SIZE = 1024 # or 768
train_transform = albumentations.Compose([
        albumentations.Resize(RESIZE_SIZE, RESIZE_SIZE),
        albumentations.OneOf([
            albumentations.RandomGamma(gamma_limit=(60, 120), p=0.9),
            albumentations.RandomBrightnessContrast(brightness_limit=0.2, contrast_limit=0.2, p=0.9),
            albumentations.CLAHE(clip_limit=4.0, tile_grid_size=(4, 4), p=0.9),
        ]),
        albumentations.OneOf([
            albumentations.Blur(blur_limit=4, p=1),
            albumentations.MotionBlur(blur_limit=4, p=1),
            albumentations.MedianBlur(blur_limit=4, p=1)
        ], p=0.5),
        albumentations.HorizontalFlip(p=0.5),
        albumentations.ShiftScaleRotate(shift_limit=0.2, scale_limit=0.2, rotate_limit=20,
                                        interpolation=cv2.INTER_LINEAR, border_mode=cv2.BORDER_CONSTANT, p=1),
        albumentations.Normalize(mean=(0.485, 0.456, 0.406), std=(0.229, 0.224, 0.225), max_pixel_value=255.0, p=1.0)
    ])

其实看起来也不是非常的难理解:
- Resize就是拉伸图片修改尺寸
- RandomGamma就是使用gamma变换
- RandomBrightnessContrast就是随机选择图片的对比度和亮度
- CLAHE是一种对比度受限情况下的自适应直方图均衡化算法
- blur就是用一个随机尺寸的核来模糊图片,这个尺寸小于等于blur_limit
- motion blur和上面一样,随机的核,然后使用运动模糊算法来图例图片,运动模糊简单的说就是因为摄像机运动造成的那种模糊的动感。
- medianBlur就是使用中值滤波。
- HorizontalFlip水平翻转
- ShiftScaleRotate这个就是平移缩放旋转三个一,给力!
- Normalize这个就是图像归一化了。
【原来图像中的处理算法这么多!上课老师讲的实在是九牛一毛啊,回头有时间了好好整理一下上面出现的图形算法的具体过程。】

2 另外两个案例

2.1 返回值是字典?!

import numpy as np # linear algebra
import cv2
import matplotlib.pyplot as plt
import albumentations as albu

image = cv2.imread('../input/neuralstyletransfersample-photo/photo.png')
image = cv2.cvtColor(image,cv2.COLOR_BGR2RGB)
aug = albu.HorizontalFlip(p=1)
img_HorizontalFlip = aug(image=image)

这个经过albu库函数HorizontalFlip处理的增强图像img_HorizontalFlip是一个字典,其中的image属性才是我们想要的图片。
【预处理库函数】albumentations库的简单了解和使用

2.2 旋转翻转放大平移

image = cv2.imread('../input/neuralstyletransfersample-photo/Yangshiyi.png')
image = cv2.cvtColor(image,cv2.COLOR_BGR2RGB)
aug = albu.HorizontalFlip(p=1)
img_HorizontalFlip = aug(image=image)['image']
aug = albu.ShiftScaleRotate(p=1,shift_limit=0.05,rotate_limit = 45)
img_ShiftScaleRotate = aug(image=image)['image']

plt.figure(figsize=(15,5))
plt.subplot(1,3,1)
plt.imshow(image)
plt.subplot(1,3,2)
plt.imshow(img_HorizontalFlip)
plt.subplot(1,3,3)
plt.imshow(img_ShiftScaleRotate)

输出图像如图所示(这是一个非常可爱的小姐姐):
【预处理库函数】albumentations库的简单了解和使用

2.3 颜色增强方案

image = cv2.imread('../input/neuralstyletransfersample-photo/Yangshiyi.png')
image = cv2.cvtColor(image,cv2.COLOR_BGR2RGB)

light = albu.Compose([
    albu.RandomBrightness(p=1),
    albu.RandomContrast(p=1),
    albu.RandomGamma(p=1),
    albu.CLAHE(p=1),
],p=1)

medium = albu.Compose([
    albu.CLAHE(p=1),
    albu.HueSaturationValue(hue_shift_limit = 20,
                          sat_shift_limit = 50,
                          val_shift_limit = 50,
                          p = 1),
],p=1)

strong = albu.Compose([
    albu.ChannelShuffle(p=1),
],p=1)

plt.figure(figsize=(20,5))
plt.subplot(1,4,1)
plt.imshow(image)
plt.title('原图')
plt.subplot(1,4,2)
plt.imshow(light(image=image)['image'])
plt.title('轻微颜色增强')
plt.subplot(1,4,3)
plt.imshow(medium(image=image)['image'])
plt.title('中等颜色增强')
plt.subplot(1,4,4)
plt.imshow(strong(image=image)['image'])
plt.title('强力颜色增强')

输入图像如下:
【预处理库函数】albumentations库的简单了解和使用


喜欢的话,关注一下我们的公众号?【机器学习炼丹术】
【预处理库函数】albumentations库的简单了解和使用

weinxin
我的微信
微信扫一扫
站长亦新
  • 本文由 发表于 2020年6月9日23:36:14
  • 转载请务必保留本文链接:http://helloworld2020.net/393/
工程能力大UP | 《炼丹大法》 公告

工程能力大UP | 《炼丹大法》

xavier、He和随机初始化都要尝试。使用一般的随机均值初始化CNN的参数,acc只能到70%,仅仅改成xavier,acc可以到98%。另外一次,使用xavier初始化效果不好,使用随机初始化效果...
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: