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.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)
])
val_transform = albumentations.Compose([
albumentations.Normalize(mean=(0.485, 0.456, 0.406), std=(0.229, 0.224, 0.225), max_pixel_value=255.0, p=1.0)
])
这个随意写的,具体的设置可以参考我以前写的文章:
图像增强库Albumentations使用总结_AI浩-CSDN博客_albumentations
写了两个数据增强,一个是用于训练,一个用于验证。验证集只需要对图片做归一化处理。
generator的主要作用是处理图像,并迭代的方式返回一个batch的图像以及对应的label。
思路:
在while循环:
-
初始化input_samples和input_labels,连个list分别用来存放image和image对应的标签。
-
循环batch_size次数:
-
- 随机一个index
-
分别从file_pathList和labels,得到图片的路径和对应的label
-
读取图片
-
如果是训练就训练的transform,如果不是就执行验证的transform。
-
resize图片
-
将image转数组
-
将图像和label分别放到input_samples和input_labels
-
将list转numpy数组。
-
返回一次迭代
def generator(file_pathList,labels,batch_size,train_action=False):
L = len(file_pathList)
while True:
input_labels = []
input_samples = []
for row in range(0, batch_size):
temp = np.random.randint(0, L)
X = file_pathList[temp]
Y = labels[temp]
image = cv2.imdecode(np.fromfile(X, dtype=np.uint8), -1)
if image.shape[2] > 3:
image = image[:, :, :3]
if train_action:
image=train_transform(image=image)[‘image’]
else:
image = val_transform(image=image)[‘image’]
image = cv2.resize(image, (norm_size, norm_size), interpolation=cv2.INTER_LANCZOS4)
image =