PaddleX數據處理_圖像分類-cls.transforms

對圖像分類任務的數據進行操作。可以利用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)

對圖像進行隨機剪裁,模型訓練時的數據增強操作。

  1. 根據lower_scalelower_ratioupper_ratio計算隨機剪裁的高、寬。
  2. 根據隨機剪裁的高、寬隨機選取剪裁的起始點。
  3. 剪裁圖像。
  4. 調整剪裁後的圖像的大小到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])

對圖像進行標準化。

  1. 對圖像進行歸一化到區間[0.0, 1.0]
  2. 對圖像進行減均值除以標準差操作。

參數

  • 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)。

  1. 獲取圖像的長邊和短邊長度。
  2. 根據短邊與short_size的比例,計算長邊的目標長度,此時高、寬的resize比例爲short_size/原圖短邊長度
  3. 如果max_size>0,調整resize比例: 如果長邊的目標長度>max_size,則高、寬的resize比例爲max_size/原圖長邊長度
  4. 根據調整大小的比例對圖像進行resize

參數

  • short_size (int): 調整大小後的圖像目標短邊長度。默認爲256。
  • max_size (int): 長邊目標長度的最大限制。默認爲-1。

6. CenterCrop類 以圖像中心點擴散裁剪正方形

paddlex.cls.transforms.CenterCrop(crop_size=224)

以圖像中心點擴散裁剪長寬爲crop_size的正方形

  1. 計算剪裁的起始點。
  2. 剪裁圖像。

參數

  • 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. 對變換的操作順序進行隨機化操作。
  2. 按照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的過程, 該類中已經包含了RandomCropRandomHorizontalFlip兩種數據增強方式,你仍可以通過add_augmenters函數接口添加新的數據增強方式。ComposedClsTransforms共包括以下幾個步驟:

訓練階段:

  1. 隨機從圖像中crop一塊子圖,並resizecrop_size大小

  2. 將1的輸出按0.5的概率隨機進行水平翻轉

  3. 將圖像進行歸一化

驗證/預測階段:

  1. 將圖像按比例Resize,使得最小邊長度爲crop_size[0] * 1.14

  2. 從圖像中心crop出一個大小爲crop_size的圖像

  3. 將圖像進行歸一化

參數

  • 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()
])
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章