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来储存最佳的停留点,也就是最佳数据。
Posted on Jan 28, 2020