Albumentations 적용 후 다양한 증강 기법을 조합하며 모델 성능을 비교하는 실험을 진행.

  1. Baseline 설정: 증강을 전혀 적용하지 않은 기본 모델의 성능을 측정. (mAP[0.50:0.95] or mAP[0.75:0.95])
  2. 단계적 증강 적용:
  3. 하이퍼파라미터 튜닝: 모델 성능이 안정적으로 올라가지 않을 때, **학습률(Learning Rate)**이나 배치 크기(Batch Size) 하이퍼파라미터도 함께 조정하며 최적의 조합. 옵티마이져 조정 SGD & AdamW(V-v)
  4. 키포인트(keypoint) 필요성 여부
  5. 결과 분석: 세팅을 변경하며 각 실험 결과를 기록하고, mAP 지표를 비교하며 어떤 증강 조합이 가장 효과적인지 파악. 최종적으로 가장 높은 성능을 보인 모델을 선정.

Sequential apply Examples

class PillDataset(object):
    def __init__(self, ..., is_train=True):
        if is_train:
            self.transform = A.Compose([
                # A.HorizontalFlip(p=0.5),
                # A.RandomBrightnessContrast(p=0.2),
                A.Resize(height=640, width=640)
            ], bbox_params=A.BboxParams(format='yolo'))
        else:
            self.transform = A.Compose([A.Resize(height=640, width=640)])
class PillDataset(object):
    def __init__(self, ..., is_train=True):
        if is_train:
            self.transform = A.Compose([
                A.Resize(height=640, width=640),
                A.HorizontalFlip(p=0.5), #  1차 증강 추가
                A.RandomBrightnessContrast(p=0.2), #  1차 증강 추가
                A.Rotate(limit=10, p=0.5), #  1차 증강 추가
            ], bbox_params=A.BboxParams(format='yolo'))
        else:
            self.transform = A.Compose([A.Resize(height=640, width=640)])
class PillDataset(object):
    def __init__(self, ..., is_train=True):
        if is_train:
            self.transform = A.Compose([
                A.Resize(height=640, width=640),
                A.HorizontalFlip(p=0.5), 
                A.RandomBrightnessContrast(p=0.2),
                A.Rotate(limit=10, p=0.5),
                A.GaussNoise(p=0.2), #  2차 증강 추가
                A.MotionBlur(blur_limit=5, p=0.2), #  2차 증강 추가
            ], bbox_params=A.BboxParams(format='yolo'))
        else:
            self.transform = A.Compose([A.Resize(height=640, width=640)])
class PillDataset(object):
    def __init__(self, ..., is_train=True):
        if is_train:
            self.transform = A.Compose([
                A.Resize(height=640, width=640),
                A.HorizontalFlip(p=0.5), 
                A.RandomBrightnessContrast(p=0.2),
                A.Rotate(limit=10, p=0.5),
                A.GaussNoise(p=0.2),
                A.MotionBlur(blur_limit=5, p=0.2),
			          A.Affine(
					                scale=(0.8, 1.2), rotate=(-15, 15),
					                translate_percent=(-0.1, 0.1), shear=(-10, 10), p=0.8
								           )
            ], bbox_params=A.BboxParams(format='yolo'))
        else:
            self.transform = A.Compose([A.Resize(height=640, width=640)])

선별[ 증강 기법 ]

약의 표면에 특징을 해치지 않고 모델의 성능을 높일 수 있다.

import albumentations as A

train_pipeline = A.Compose(
        A.HorizontalFlip(p=0.5)
        )
import albumentations as A

train_pipeline = A.Compose(
        A.RandomBrightnessContrast(brightness_limit=0.2, contrast_limit=0.2, p=0.8)
				)
import albumentations as A

train_pipeline = A.Compose(
        A.Affine(rotate=(-15, 15) # Rotate by -15 to +15 degrees)
        )