對圖像分類任務的數據進行操作。可以利用Compose類將圖像預處理/增強操作進行組合。
Compose類
paddlex.cls.transforms.Compose(transforms)
根據數據預處理/增強算子對輸入數據進行操作。 使用示例
參數
- transforms (list): 數據預處理/數據增強列表。
1. RandomCrop類 隨機裁剪
paddlex.cls.transforms.RandomCrop(crop_size=224, lower_scale=0.08, lower_ratio=3. / 4, upper_ratio=4. / 3)
對圖像進行隨機剪裁,模型訓練時的數據增強操作。
- 根據
lower_scale
、lower_ratio
、upper_ratio
計算隨機剪裁的高、寬。 - 根據隨機剪裁的高、寬隨機選取剪裁的起始點。
- 剪裁圖像。
- 調整剪裁後的圖像的大小到
crop_size*crop_size
。
參數
- crop_size (int): 隨機裁剪後重新調整的目標邊長。默認爲224。
- lower_scale (float): 裁剪面積相對原面積比例的最小限制。默認爲0.08。
- lower_ratio(float): 寬變換比例的最小限制。默認爲3. / 4。
- upper_ratio (float): 寬變換比例的最大限制。默認爲4. / 3。
2. RandomHorizontalFlip類 隨機水平翻轉
paddlex.cls.transforms.RandomHorizontalFlip(prob=0.5)
以一定的概率對圖像進行隨機水平翻轉,模型訓練時的數據增強操作。
參數
- prob (float): 隨機水平翻轉的概率。默認爲0.5。
3. RandomVerticalFlip類 隨機垂直翻轉
paddlex.cls.transforms.RandomVerticalFlip(prob=0.5)
以一定的概率對圖像進行隨機垂直翻轉,模型訓練時的數據增強操作。
參數
- prob (float): 隨機垂直翻轉的概率。默認爲0.5。
4. Normalize類 對圖像進行標準化
paddlex.cls.transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
對圖像進行標準化。
- 對圖像進行歸一化到區間
[0.0, 1.0]
。 - 對圖像進行減均值除以標準差操作。
參數
- mean (list): 圖像數據集的均值。默認爲
[0.485, 0.456, 0.406]
。 - std (list): 圖像數據集的標準差。默認爲
[0.229, 0.224, 0.225]
。
5. ResizeByShort類 根據圖像的短邊調整圖像大小
paddlex.cls.transforms.ResizeByShort(short_size=256, max_size=-1)
根據圖像的短邊調整圖像大小(resize
)。
- 獲取圖像的長邊和短邊長度。
- 根據短邊與
short_size
的比例,計算長邊的目標長度,此時高、寬的resize
比例爲short_size/原圖短邊長度
。 - 如果
max_size>0
,調整resize
比例: 如果長邊的目標長度>max_size
,則高、寬的resize
比例爲max_size/原圖長邊長度
。 - 根據調整大小的比例對圖像進行
resize
。
參數
- short_size (int): 調整大小後的圖像目標短邊長度。默認爲256。
- max_size (int): 長邊目標長度的最大限制。默認爲-1。
6. CenterCrop類 以圖像中心點擴散裁剪正方形
paddlex.cls.transforms.CenterCrop(crop_size=224)
以圖像中心點擴散裁剪長寬爲crop_size
的正方形
- 計算剪裁的起始點。
- 剪裁圖像。
參數
- crop_size (int): 裁剪的目標邊長。默認爲224。
7. RandomRotate類 以一定的概率對圖像進行旋轉
paddlex.cls.transforms.RandomRotate(rotate_range=30, prob=0.5)
以一定的概率對圖像在[-rotate_range, rotate_range]
角度範圍內進行旋轉,模型訓練時的數據增強操作。
參數
- rotate_range (int): 旋轉度數的範圍。默認爲30。
- prob(float): 隨機旋轉的概率。默認爲0.5。
8. RandomDistort類 以一定的概率對圖像進行隨機像素內容變換
paddlex.cls.transforms.RandomDistort(brightness_range=0.9, brightness_prob=0.5, contrast_range=0.9, contrast_prob=0.5, saturation_range=0.9, saturation_prob=0.5, hue_range=18, hue_prob=0.5)
以一定的概率對圖像進行隨機像素內容變換,模型訓練時的數據增強操作。
- 對變換的操作順序進行隨機化操作。
- 按照1中的順序以一定的概率對圖像在範圍
[-range, range]
內進行隨機像素內容變換。
【注意】該數據增強必須在數據增強Normalize
之前使用。
參數
- brightness_range (float): 明亮度因子的範圍。默認爲0.9。
- brightness_prob (float): 隨機調整明亮度的概率。默認爲0.5。
- contrast_range (float): 對比度因子的範圍。默認爲0.9。
- contrast_prob (float): 隨機調整對比度的概率。默認爲0.5。
- saturation_range (float): 飽和度因子的範圍。默認爲0.9。
- saturation_prob (float): 隨機調整飽和度的概率。默認爲0.5。
- hue_range (int): 色調因子的範圍。默認爲18。
- hue_prob (float): 隨機調整色調的概率。默認爲0.5。
9. ComposedClsTransforms類
paddlex.cls.transforms.ComposedClsTransforms(mode, crop_size=[224, 224], mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
分類模型中已經組合好的數據處理流程,開發者可以直接使用ComposedClsTransforms
,簡化手動組合transforms
的過程, 該類中已經包含了RandomCrop和RandomHorizontalFlip兩種數據增強方式,你仍可以通過add_augmenters函數接口添加新的數據增強方式。ComposedClsTransforms
共包括以下幾個步驟:
訓練階段:
-
隨機從圖像中
crop
一塊子圖,並resize
成crop_size
大小 -
將1的輸出按0.5的概率隨機進行水平翻轉
-
將圖像進行歸一化
驗證/預測階段:
-
將圖像按比例
Resize
,使得最小邊長度爲crop_size[0] * 1.14
-
從圖像中心
crop
出一個大小爲crop_size
的圖像 -
將圖像進行歸一化
參數
- mode (str):
Transforms
所處的階段,包括‘train’
,‘eval’
或’test’
- crop_size (int|list): 輸入到模型裏的圖像大小,默認爲
[224, 224]
(與原圖大小無關,根據上述幾個步驟,會將原圖處理成該圖大小輸入給模型訓練) - mean (list): 圖像均值, 默認爲
[0.485, 0.456, 0.406]
。 - std (list): 圖像方差,默認爲
[0.229, 0.224, 0.225]
。
添加數據增強方式
ComposedClsTransforms.add_augmenters(augmenters)
參數
augmenters(list): 數據增強方式列表
使用示例
import paddlex as pdx
from paddlex.cls import transforms
train_transforms = transforms.ComposedClsTransforms(mode='train', crop_size=[320, 320])
eval_transforms = transforms.ComposedClsTransforms(mode='eval', crop_size=[320, 320])
# 添加數據增強
import imgaug.augmenters as iaa
train_transforms.add_augmenters([
transforms.RandomDistort(),
iaa.blur.GaussianBlur(sigma=(0.0, 3.0))
])
上面代碼等價於
import paddlex as pdx
from paddlex.cls import transforms
train_transforms = transforms.Composed([
transforms.RandomDistort(),
iaa.blur.GaussianBlur(sigma=(0.0, 3.0)),
# 上面兩個爲通過add_augmenters額外添加的數據增強方式
transforms.RandomCrop(crop_size=320),
transforms.RandomHorizontalFlip(prob=0.5),
transforms.Normalize()
])
eval_transforms = transforms.Composed([
transforms.ResizeByShort(short_size=int(320*1.14)),
transforms.CenterCrop(crop_size=320),
transforms.Normalize()
])