最近接觸到這個

在2D影像分類上
很重視資料數量
所以如何增加訓練資料的種類
增強模型的強健性 Robustness
就很重要了

這邊有很棒的說明
https://zhuanlan.zhihu.com/p/30197320

 

以下是我註解的使用範例

# ImageDataGenerator 用來變化影像內容的類
train_datagen = ImageDataGenerator(
rotation_range=0, #旋轉角度
width_shift_range=0,#水平偏移
height_shift_range=0,#上下偏移
shear_range=0.01,#斜向變形
zoom_range=0.01, #放大縮小比例
channel_shift_range=1,#色偏
horizontal_flip=True, #隨機水平翻轉
vertical_flip=True,#隨機垂直翻轉
fill_mode='reflect', #填充模式
rescale=1/255, #輸出時候的數值變化.正規化,例如訓練通常會把0~255改成0~1
)

#flow_from_dataframe 用來給訓練或驗證資料的類
#flow_from_dataframe 重點在於是批次讀取影像檔案,而非一開始都放在記憶體上
#因為很多情況下,影像可能會破萬張,無法一次性放在記憶體中
train_generator = train_datagen.flow_from_dataframe(
dataframe=trainDataFrame,# 資料的DataFrame
directory=cacheImgPath, # 資料中影像的資料夾
x_col="filename", # 資料中影像的欄位名稱
y_col=dataFrameKeys, #label 資料欄,可以是多個
target_size=IMAGE_SIZE, #目標的影像大小
color_mode="rgb", # 影像類型,這邊蠻重要的,如果是用CV讀取影像,記得要轉成RGB再進去預測
class_mode="raw", # label 的資料使用 raw data ,就是直接使用DataFrame的資料作label,依照y_col指定的欄位
batch_size=batch_size, # 每次多少影像
shuffle=True, # 隨機排列
)

而這個 train_generator 就是給 model 讀取訓練或驗證資料的類了
例如

model.fit_generator(
generator=train_generator,
steps_per_epoch=10,
validation_data=valid_generator,
validation_steps=10,
epochs=10
)

給大家參考囉~