資料增強庫Albumentations
阿新 • • 發佈:2020-08-17
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上的資料增強有一定作用。
這裡的目標大小指的是:模型輸入的影象目標相對於卷積核的大小,影響因素有輸入影象尺寸及目標相對影象尺寸的大小。