
在对图片进行处理的时候,之前就使用torch自带的transfrom来对图像做一些反转,平移,随机剪裁,拉伸这样的任务。然而最近的图像分类+语义分割的比赛中,发现了这样的一个库函数:Albumentations。
厉害的大佬都在用这个库函数作为pre-process,那么说明这个库函数非常的有东西,所以这里借这次机会,来好好学习一个这个库函数的内容。
如果你也是一个大佬,喜欢看文档的那种,可以看这个github链接:https://github.com/albumentations-team/albumentations
这个库最好的地方就是处理速度快!

这个图中,可以看到albumentations的处理方法中,很多都是速度最快的。【如何安装】:
pip install albumentations
# 或者
sudo pip install -U git+https://github.com/albu/albumentations
这篇文章不会把所有的这个库函数的方法都列举一遍,因为太多了。这里主要就看一个例子好了:
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)
])
其实看起来也不是非常的难理解:
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属性才是我们想要的图片。

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)
输出图像如图所示(这是一个非常可爱的小姐姐):

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('强力颜色增强')
输入图像如下:

喜欢的话,关注一下我们的公众号吧。
【机器学习炼丹术】