README_Albumentations
一、文档:
GitHub: https://github.com/albumentations-team/albumentations
官方文档:Albumentations Documentation
二、Installation
pip install -U albumentations
三、Keypoints augmentation Example:
1. Import the required libraries
import albumentations as A
import cv2
2. Define an augmentation pipeline.
transform = A.Compose([
A.RandomCrop(width=330, height=330),
A.RandomBrightnessContrast(p=0.2),
],keypoint_params=A.KeypointParams(format='xy',label_fields=['class_labels'], remove_invisible =False))
#对图片的操作放在第一个参数的列表中,可支持多种操作,p 参数表示进行该操作的概率。
#A.KeypointParams()中,format 参数定义 ground_truth 的坐标点格式,还有“yx”、“xysa”等;label_fields 定义 ground_truth 中标签的名称,此参数是一个列表,可以设置多个标签;remove_invisible 参数用来设置是否移除数据增强后超出图片范围的点,默认为 True,若为 True 则不显示不可见的点,若为 False 则显示不可见的点
3. Read images, keypoints and class_labels
image = cv2.imread("/path/image.jpg")
#image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
keypoints = [
(264, 203),
(86, 88),
(254, 160),
(193, 103),
(65, 341),
]
#关键点信息以坐标的形式放入一个列表中,格式与 format 参数设置的格式同步
class_labels = [
'left_elbow',
'right_elbow',
'left_wrist',
'right_wrist',
'right_hip',
]
4. Pass an image and keypoints to the augmentation pipeline and receive augmented images and points.
#对数据进行变换
transformed = transform(image=image, keypoints=keypoints, class_labels=class_labels)
#读取变换后的数据
transformed_image = transformed['image']
transformed_keypoints = transformed['keypoints']
transformed_class_labels = transformed['class_labels']
四、List of augmentations
1、Spatial-level transforms (空间变换)
(1)、仿射变换
Affine(scale=None, translate_percent=None, translate_px=None, rotate=None, shear=None, interpolation=1, mask_interpolation=0, cval=0, cval_mask=0, mode=0, fit_output=False, always_apply=False, p=0.5) -support keypoints
#仿射变换
该变换包括 Translation(移动)、Rotation(旋转)、Scaling(缩放)、Shear(剪切为梯形),其中:
scale 参数,表示缩放的比例,支持数字、元组、字典;若为元组或字典,则从多个数字中等概率的取一个值对数据进行对应处理
translate_percent 参数,按比例进行移动(x、y 轴上都进行移动)
translate_px 参数,表示移动像素点的距离(x、y 轴上都进行移动),仅支持整数类型
rotate 参数,表示旋转度数(不是弧度),范围为[-360, 360],以图像中心为旋转点
shear 参数,表示以度为单位进行剪切,预期值为[-360, 360],合理值范围为[-45, 45],如果是一个数字,则只进行 x 轴上的剪切;如果是元组(a,b),则分别在 x 轴与 y 轴上进行剪切
cval 参数,填充新创建的像素时使用的常量值
fit_output 参数,是否使变换后的整个输出图像始终包含在图像平面中,默认为 False:接受图像平面之外的图像,若为 True 的话:则只包含在图像平面中
p 参数,表示应用变换的概率,默认值:0.5。
Perspective(scale=(0.05, 0.1), keep_size=True, pad_mode=0, pad_val=0, mask_pad_val=0, fit_output=False, interpolation=1, always_apply=False, p=0.5) (support keypoints)
#随机四点透视变换
其中:
scale 参数,表示正态分布的标准差,用于对子图像的角与完整图像的角的随机距离进行采样。默认值:(0.05, 0.1),也可自己设置范围[float,float]
keep_size 参数,是否在应用透视变换后将图像调整回其原始大小。默认值:真,如果设置为 False,生成的图像可能最终具有不同的形状。
fit_output 参数,如果为 True,将调整图像平面大小和位置以在透视变换后仍捕获整个图像,默认值:假。
p 参数,应用变换的概率。默认值:0.5。
PiecewiseAffine
(scale=(0.03, 0.05), nb_rows=4, nb_cols=4, interpolation=1, mask_interpolation=0, cval=0, cval_mask=0, mode='constant', absolute_scale=False, always_apply=False, keypoints_threshold=0.01, p=0.5)
(support keypoints)
#局部区域进行仿射变换
ShiftScaleRotate(shift_limit=0.0625, scale_limit=0.1, rotate_limit=45, interpolation=1, border_mode=4, value=None, mask_value=None, shift_limit_x=None, shift_limit_y=None, always_apply=False, p=0.5) (support keypoints)
#随机应用仿射变换:平移、缩放和旋转
其中:
shift_limit 参数,平移操作的长宽限制,默认为 (-0.0625, 0.0625)
scale_limit 参数,缩放操作的范围限制,默认为 (-0.1, 0.1)
rotate_limit 参数,旋转操作的范围限制,默认为(-45,45)
p 参数,应用此变换的概率,默认为 0.5
ElasticTransform #图像弹性变形
(2)、裁剪
Crop(x_min=0, y_min=0, x_max=1024, y_max=1024, always_apply=False, p=1.0) (support keypoints)
#裁剪自定义区域
x_min 参数:左上角 x 坐标
y_min 参数:左上角 y 坐标
x_max 参数:右下角 x 坐标
y_max 参数:右下角 y 坐标
CenterCrop
(height, width, always_apply=False, p=1.0)
(support keypoints)
#裁剪中心区域
height 参数:裁剪的高度
width 参数:裁剪的宽度
p 参数:执行此操作的概率,默认为 1
CropAndPad
(px=None, percent=None, pad_mode=0, pad_cval=0, pad_cval_mask=0, keep_size=True, sample_independently=True, interpolation=1, always_apply=False, p=1.0)
(support keypoints)
#裁剪/填充
px 参数,要裁剪/填充的像素数,负数为裁剪,正数为填充;
percent 参数,要裁剪/填充的比例,同样负数为裁剪,正数为填充,范围为[-1,1];
keep_size 参数,表示是否保持输入图像的大小,默认为 True。
CropNonEmptyMaskIfExists
(height, width, ignore_values=None, ignore_channels=None, always_apply=False, p=1.0)
(support keypoints)
#如果 Mask 非空,则使用掩码裁剪区域,否则进行随机裁剪
height 参数:高的大小(以像素为单位)
width 参数:宽的大小(以像素为单位)
RandomCrop (height, width, always_apply=False, p=1.0) (support keypoints)
#根据设置的长宽随机剪裁
RandomCropNearBBox(max_part_shift=(0.3,0.3), cropping_box_key='cropping_bbox', always_apply=False, p=1.0) (support keypoints)
#随机剪裁矩形框
RandomResizedCrop
(height, width, scale=(0.08, 1.0), ratio=(0.75, 1.3333333333333333), interpolation=1, always_apply=False, p=1.0)
(support keypoints)
#随机裁剪并调整大小为 height、width
RandomSizedCrop
(min_max_height, height, width, w2h_ratio=1.0, interpolation=1, always_apply=False, p=1.0)
(support keypoints)
#随机剪裁并缩放到定义大小
min_max_height
参数:表示裁剪高的大小限制,格式为
[int
,
int]
height
参数:剪裁并调整大小后的高
width
参数:参数:剪裁并调整大小后的宽
w2h_ratio
参数:剪裁比例,默认为
1.0
p
参数:表示应用此变换的概率,默认为
1.0
(3)、翻转
Flip.apply
(self, img, d=0, **params)
(support keypoints)
#翻转,包括水平翻转、垂直翻转、水平垂直同时进行翻转
d 参数:0 表示进行垂直翻转,1 表示进行水平翻转,-1 表示同时进行水平与垂直翻转
p 参数:表示应用此变换的概率,默认为 0.5
HorizontalFlip (support keypoints)
#水平翻转
p 参数:表示应用此变换的概率,默认为 0.5
VerticalFlip (support keypoints)
#垂直翻转
p 参数:表示应用此变换的概率,默认为 0.5
(4)、旋转
RandomRotate90 (support keypoints)
#随机旋转 90 度 0 次或多次
p
参数:表示应用此变换的概率,默认为
0.5
Rotate
(limit=90, interpolation=1, border_mode=4, value=None, mask_value=None, always_apply=False, p=0.5)
(support keypoints)
#从定义的范围中随机旋转一个角度
limit
参数:表示旋转的范围限制,范围为(
-limit,limit
),默认为(
-90,90
)
p
参数:表示应用此变换的概率,默认为
0.5
SafeRotate
(limit=90, interpolation=1, border_mode=4, value=None, mask_value=None, always_apply=False, p=0.5)
(support keypoints)
#从定义的范围中随机旋转一个角度
(5)、缩放
LongestMaxSize
(max_size=1024, interpolation=1, always_apply=False, p=1)
(support keypoints)
#重新缩放图像,使最大边等于 max_size,保持初始图像的纵横比。
RandomScale
(scale_limit=0.1, interpolation=1, always_apply=False, p=0.5)
(support keypoints)
#随机缩放
scale_limit
参数:表示缩放范围,为(
1-scale_limit,1+scale_limit
)
,
默认为(
0.9,1.1
)
p
参数:表示应用此变换的概率,默认为
0.5
Resize
(height, width, interpolation=1, always_apply=False, p=1)
(support keypoints)
#调整为给定的大小
SmallestMaxSize
(max_size=1024, interpolation=1, always_apply=False, p=1)
(support keypoints)
#缩放图像,将最小边等于max_size
(6)、填充
PadIfNeeded
(min_height=1024, min_width=1024, pad_height_divisor=None, pad_width_divisor=None, position=<PositionType.CENTER: 'center'>, border_mode=4, value=None, mask_value=None, always_apply=False, p=1.0)
(support keypoints)
#如果图片大小小于需要的大小,可以对图片进行填充
(7)、其他
Lambda
(image=None, mask=None, keypoint=None, bbox=None, name=None, always_apply=False, p=1.0)
(support keypoints)
#可自定义的变换函数
image
参数:图像变换函数
mask
参数:掩码变换函数
keypoint
参数:关键点变换函数
bbox
参数:边框变换函数
always_apply
参数:是否这个变换总是应用
p
参数:应用此变换的概率,默认为
1.0
NoOp (support keypoints) #什么也不做
Transpose (support keypoints)
#转置:交换行与列
p 参数:表示应用此变换的概率,默认为 0.5
(8)、不支持关键点的变换
CoarseDropout
GridDistortion
GridDropout
MaskDropout
OpticalDistortion
RandomGridShuffle
RandomSizedBBoxSafeCrop
2、Pixel-level transforms (support any additional targets) (像素变换)
评论