Module sagemaker_defect_detection.transforms
None
None
View Source
from typing import Callable
import torchvision.transforms as transforms
import albumentations as albu
import albumentations.pytorch.transforms as albu_transforms
PROBABILITY = 0.5
ROTATION_ANGLE = 90
NUM_CHANNELS = 3
# required for resnet
IMAGE_RESIZE_HEIGHT = 256
IMAGE_RESIZE_WIDTH = 256
IMAGE_HEIGHT = 224
IMAGE_WIDTH = 224
# standard imagenet1k mean and standard deviation of RGB channels
MEAN_RED = 0.485
MEAN_GREEN = 0.456
MEAN_BLUE = 0.406
STD_RED = 0.229
STD_GREEN = 0.224
STD_BLUE = 0.225
def get_transform(split: str) -> Callable:
"""
Image data transformations such as normalization for train split for classification task
Parameters
----------
split : str
train or else
Returns
-------
Callable
Image transformation function
"""
normalize = transforms.Normalize(mean=[MEAN_RED, MEAN_GREEN, MEAN_BLUE], std=[STD_RED, STD_GREEN, STD_BLUE])
if split == "train":
return transforms.Compose(
[
transforms.RandomResizedCrop(IMAGE_HEIGHT),
transforms.RandomRotation(ROTATION_ANGLE),
transforms.RandomHorizontalFlip(),
transforms.ToTensor(),
normalize,
]
)
else:
return transforms.Compose(
[
transforms.Resize(IMAGE_RESIZE_HEIGHT),
transforms.CenterCrop(IMAGE_HEIGHT),
transforms.ToTensor(),
normalize,
]
)
def get_augmentation(split: str) -> Callable:
"""
Obtains proper image augmentation in train split for detection task.
We have splitted transformations done for detection task into augmentation and preprocessing
for clarity
Parameters
----------
split : str
train or else
Returns
-------
Callable
Image augmentation function
"""
if split == "train":
return albu.Compose(
[
albu.Resize(IMAGE_RESIZE_HEIGHT, IMAGE_RESIZE_WIDTH, always_apply=True),
albu.RandomCrop(IMAGE_HEIGHT, IMAGE_WIDTH, always_apply=True),
albu.RandomRotate90(p=PROBABILITY),
albu.HorizontalFlip(p=PROBABILITY),
albu.RandomBrightness(p=PROBABILITY),
],
bbox_params=albu.BboxParams(
format="pascal_voc",
label_fields=["labels"],
min_visibility=0.2,
),
)
else:
return albu.Compose(
[albu.Resize(IMAGE_HEIGHT, IMAGE_WIDTH)],
bbox_params=albu.BboxParams(format="pascal_voc", label_fields=["labels"]),
)
def get_preprocess() -> Callable:
"""
Image normalization using albumentation for detection task that aligns well with image augmentation
Returns
-------
Callable
Image normalization function
"""
return albu.Compose(
[
albu.Normalize(mean=[MEAN_RED, MEAN_GREEN, MEAN_BLUE], std=[STD_RED, STD_GREEN, STD_BLUE]),
albu_transforms.ToTensorV2(),
]
)
Variables
IMAGE_HEIGHT
IMAGE_RESIZE_HEIGHT
IMAGE_RESIZE_WIDTH
IMAGE_WIDTH
MEAN_BLUE
MEAN_GREEN
MEAN_RED
NUM_CHANNELS
PROBABILITY
ROTATION_ANGLE
STD_BLUE
STD_GREEN
STD_RED
Functions
get_augmentation
def get_augmentation(
split: str
) -> Callable
Obtains proper image augmentation in train split for detection task.
We have splitted transformations done for detection task into augmentation and preprocessing for clarity
Parameters:
Name | Type | Description | Default |
---|---|---|---|
split | str | train or else | None |
Returns:
Type | Description |
---|---|
Callable | Image augmentation function |
View Source
def get_augmentation(split: str) -> Callable:
"""
Obtains proper image augmentation in train split for detection task.
We have splitted transformations done for detection task into augmentation and preprocessing
for clarity
Parameters
----------
split : str
train or else
Returns
-------
Callable
Image augmentation function
"""
if split == "train":
return albu.Compose(
[
albu.Resize(IMAGE_RESIZE_HEIGHT, IMAGE_RESIZE_WIDTH, always_apply=True),
albu.RandomCrop(IMAGE_HEIGHT, IMAGE_WIDTH, always_apply=True),
albu.RandomRotate90(p=PROBABILITY),
albu.HorizontalFlip(p=PROBABILITY),
albu.RandomBrightness(p=PROBABILITY),
],
bbox_params=albu.BboxParams(
format="pascal_voc",
label_fields=["labels"],
min_visibility=0.2,
),
)
else:
return albu.Compose(
[albu.Resize(IMAGE_HEIGHT, IMAGE_WIDTH)],
bbox_params=albu.BboxParams(format="pascal_voc", label_fields=["labels"]),
)
get_preprocess
def get_preprocess(
) -> Callable
Image normalization using albumentation for detection task that aligns well with image augmentation
Returns:
Type | Description |
---|---|
Callable | Image normalization function |
View Source
def get_preprocess() -> Callable:
"""
Image normalization using albumentation for detection task that aligns well with image augmentation
Returns
-------
Callable
Image normalization function
"""
return albu.Compose(
[
albu.Normalize(mean=[MEAN_RED, MEAN_GREEN, MEAN_BLUE], std=[STD_RED, STD_GREEN, STD_BLUE]),
albu_transforms.ToTensorV2(),
]
)
get_transform
def get_transform(
split: str
) -> Callable
Image data transformations such as normalization for train split for classification task
Parameters:
Name | Type | Description | Default |
---|---|---|---|
split | str | train or else | None |
Returns:
Type | Description |
---|---|
Callable | Image transformation function |
View Source
def get_transform(split: str) -> Callable:
"""
Image data transformations such as normalization for train split for classification task
Parameters
----------
split : str
train or else
Returns
-------
Callable
Image transformation function
"""
normalize = transforms.Normalize(mean=[MEAN_RED, MEAN_GREEN, MEAN_BLUE], std=[STD_RED, STD_GREEN, STD_BLUE])
if split == "train":
return transforms.Compose(
[
transforms.RandomResizedCrop(IMAGE_HEIGHT),
transforms.RandomRotation(ROTATION_ANGLE),
transforms.RandomHorizontalFlip(),
transforms.ToTensor(),
normalize,
]
)
else:
return transforms.Compose(
[
transforms.Resize(IMAGE_RESIZE_HEIGHT),
transforms.CenterCrop(IMAGE_HEIGHT),
transforms.ToTensor(),
normalize,
]
)