0 過擬合與圖像增強
通常我們訓練一個深度卷積神經網絡需要足夠多的數據來防止模型過擬合,然而收集任務所需的數據往往代價較大。因此我們需要另辟蹊徑,而圖像增強就是另一種簡單可行的防止過擬合的方法。
本質上,圖像增強就是一個從已有的訓練樣本中創建新的訓練樣本的過程。要制作一個新樣本,可以對原始圖像進行輕微的更改。例如,你可以讓一個新圖像更亮一點;你可以從原始圖像上切下一塊;你可以通過鏡像原來的圖像來創建一個新的圖像等等。
現在圖像增強(包含在廣義的數據增強中)已經成為深度學習訓練過程的標配,下面介紹今天的主角:又快又強的圖像增強庫——albumentations
1 安裝
pip install albumentations
2 使用
給出一個簡單的使用示例:
import albumentations as A
transform = A.Compose([
A.RandomCrop(width=256, height=256),
A.HorizontalFlip(p=0.5),
A.RandomBrightnessContrast(p=0.2),
])
image = cv2.imread("/path/to/image.jpg")
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
transformed_image = transform(image=image)["image"]
注意圖像需要先轉化成numpy數組,針對opencv還需要將BGR格式轉化為RGB格式。
數據增強需要同時對圖像和標簽進行相同的操作,考慮到不同任務的標簽不同,有以下幾種使用對象:
- 圖像
- Mask. 針對分割任務。
- BBox. 針對檢測任務。
- Keypoints.
這里有各種變換及其支持的操作對象列表:
https://albumentations.ai/docs/getting_started/transforms_and_targets/
3 常用操作
這個庫支持的操作太多了,這里列出我個人常用的且實驗確實有效的:
- HorizontalFlip
- VerticalFlip
- Transpose
- RandomResizeCrop
- Rotate
- PadIfNeeded
訓練時目標的大小(scale)很影響模型的泛化性能,增加scale上的數據增強有一定作用。
這里的目標大小指的是:模型輸入的圖像目標相對於卷積核的大小,影響因素有輸入圖像尺寸及目標相對圖像尺寸的大小。