Deep Learning 6 CV
[TOC]
CV-数据增强
手动人工数据增强
-
数据为非图形化的数据「本身不是图片」
- 例如Digit Recognization,通过把所有像素点放进了表格里边
-
数据为图形化的数据「本身是图片」
- 例如Facial Keypoints Detection,通过对已经是图片的进行变形。
- 变形包括:
- 垂直镜像对称 mirroring on vertical axis
- 旋转类 rotation
- 水平翻转 horizontal flip
- 旋转增强 rotation augmentation
- 色彩转换 color shifting
- 亮度增强 brightness augmentation
- RGB变化 RGB shifting (PCA采样,AlexNet PCA色彩增强)
- 剪裁类 shearing
- 转移/移动增强 shifit agumentation
- 随机剪裁 random cropping
- 变形类 warping
- 局部变形 local warping
- 随机噪声增强 random-noise augmentation
利用albumentations
进行数据增强
要点:
1、利用compose
构造,把各种数据增强的函数/方式放进一个list中[func1, func2, ……]
构造一个数据增强策略:
2、有一个参数,在每个函数都有一个参数p,并且参数p经常设置为0.5。p=0.5
-
利用函数进行封装
from albumentations import ( HorizontalFlip, IAAPerspective, ShiftScaleRotate, CLAHE, RandomRotate90, Transpose, ShiftScaleRotate, Blur, OpticalDistortion, GridDistortion, HueSaturationValue, IAAAdditiveGaussianNoise, GaussNoise, MotionBlur, MedianBlur, IAAPiecewiseAffine, IAASharpen, IAAEmboss, RandomBrightnessContrast, Flip, OneOf, Compose ) def augment_flips_color(p=.5): return Compose([ CLAHE(), RandomRotate90(), Transpose(), ShiftScaleRotate(shift_limit=0.0625, scale_limit=0.50, rotate_limit=45, p=.75), Blur(blur_limit=3), OpticalDistortion(), GridDistortion(), HueSaturationValue() ], p=p)
直接创建对象
import albumentation as A
# 第一个参数就是一个存放所有数据增强策略的一个数组。
transform = A.compose([
A.ShiftScaleRotate(rotate_limit=30, p=0.5),
A.RandomBrightnessContrast(p=0.5),
A.GaussianBlur(p=0.5),
A.GaussNoise(var_limit=(1e-5, 1e-3), p=0.5),
], keypoint_params=A.KeypointParams(format='xy', remove_invisible=False))
# then data augmentation
train_loader = DataLoader(X_train, y_train, batch_size=128, augmentations=transform)
# 把上面获得的数据增强传进训练的参数中
history = model.fit(train_loader, steps_per_epoch=len(train_loader), validation_data=(X_val, y_val), epochs=500, verbose=True, callbacks=[earlystopping, modelcheckpoint])
CV 调用已经有的模型
例如,下面调用深度残差网络
# 直接作为sequential序列中的一个元素add进去即可
from keras.applications import ResNet50
model.add(ResNet50(param1=xxx, param2=xxx))
CV 整个过程
-
build model
-
compile
model.compile(optimizer='adam', loss='val_loss', metrics=['accuracy', m='mae'])
-
optimizer
- RMSprop
- Adam
-
loss
'val_loss'
'crossentropy'
交叉熵
-
metrics
'accuracy'
'mae'
-
-
fit
model.fit(X_train, y_train, validation=(X_val, y_val), callbacks=[earlystopping, modelcheckpoint])
- validation_data
- callbacks
- EarlyStopping
- ModelCheckpoint可以利用
ModelCheckpoint
来储存最佳的停留点,也就是最佳数据。