⚙️ utralytics 8.2.128 기준이며, 이전 포스팅에서 이어지는 내용입니다.
[컴퓨터비전] YOLOv8 객체 탐지 모델 학습 따라하기
1. YOLOv8이란? YOLO(You Only Look Once)는 실시간 객체 탐지를 위한 대표적인 딥러닝 모델입니다.YOLOv8은 Ultralytic에서 출시한 버전으로, 다음과 같은 특징이 있습니다.Pytorch 기반 단일 .pt 파일 사용YOLOv5
hgk5722.tistory.com
YOLOv8 학습을 하다보면 증강이 자연스럽게 적용됩니다. 한정된 학습 데이터 자원을 이용하여 더 높은 성능의 모델을 만들기 위해 모델 고도화 방법을 고려하다보니 데이터 증강(augmentation)에 관심이 가게 되었습니다. 나만의 커스텀 증강 방법을 만들기 위해선 YOLO가 학습시 적용시켜주는 기본 증강을 OFF해야 하는데 오늘은 그 방법에 대해서 공유하며 함께 공부해볼까 합니다.
1. YOLO 모델 학습 중 albumentations: 로그가 출력되는 이유
🔍 Ultralytics YOLOv8은 학습 시 자동으로 "내장된 픽셀 기반 증강(Albumentations)"을 적용합니다. 이는 기본 값이며 사용자가 따로 설정하지 않아도 다음과 같은 transform들이 활성화 됩니다.
# ultralytics.data.augment.Albumentations 클래스 내부
A.Blur(p=0.01)
A.MedianBlur(p=0.01)
A.ToGray(p=0.01)
A.CLAHE(p=0.01)
➡️ 그래서 YOLO 학습 중 train() 함수를 호출하면 아래 로그가 자동으로 출력됩니다.
albumentations: Blur(p=0.01), MedianBlur(p=0.01), ToGray(p=0.01), CLAHE(p=0.01)
📂 파일의 위치는 다음과 같습니다.
"\ultralytics\ultralytics\data\augment.py"
📌 파일 내부 증강 관련 부분은 아래와 같이 기본값이 되어 있습니다.
clsss Albumentations:
def __init__(self, p=0.1):
# ...(중략)...
# Transforms
T = [
A.Blur(p=0.01),
A.MedianBlur(p=0.01),
A.ToGray(p=0.01),
A.CLAHE(p=0.01),
A.RandomBrightnessContrast(p=0.0),
A.RandomGamma(p=0.0),
A.ImageCompression(quality_range=(75, 100), p=0.0),
]
# ...(후략)...
Transforms 안의 내용을 수정하여 원하는 증강을 추가 or 제거가 가능합니다.
2. transform이란?
이미지 하나에 증강(augmentation)을 적용하는 객체 또는 함수
YOLOv8에선 하나의 transform이 아닌, 여러 증강을 순서대로 실행하는 transform 리스트를 Compose([...])
로 묶습니다.
3. YOLOv8의 기본 transform은 어디서 정의되나?
# 📂위치: ultralytics/data/augment.py
def v8_transforms(dataset, imgsz, hyp, stretch=False):
이 함수가 YOLOv8 학습시 transform 리스트를 구성하며, 마지막 반환하는 Compose([...])
가 YOLO 학습 전체에 쓰이는 transforms입니다.
return Compose(
[
pre_transform, # Mosaic, Perspective 등
MixUp(dataset, pre_transform=pre_transform, p=hyp.mixup),
CutMix(dataset, pre_transform=pre_transform, p=hyp.cutmix),
Albumentations(p=1.0),
RandomHSV(hgain=hyp.hsv_h, sgain=hyp.hsv_s, vgain=hyp.hsv_v),
RandomFlip(direction="vertical", p=hyp.flipud),
RandomFlip(direction="horizontal", p=hyp.fliplr, flip_idx=flip_idx),
]
) # transforms
v8_transforms() 함수가 Compose()를 반환하며 그 안에 있는 함수들(mosaic, copypaste, MixUP, CutMix, Albumentations, ...)을 차례대로 실행합니다.
내부적으로도 YOLO 클래스의 .train()
메서드 실행 → DetectionTrainer
→ get_dataloader()
→ v8_transforms()
호출되는 방식입니다.
4. 기본 증강 OFF
그래서 저희는 .train()
메서드를 실행할 때 class Albumentaions:
의 T = [ ]
만 수정해주면 증강 ON/OFF를 쉽게 할 수 있습니다.
# Transforms
T = [
A.Blur(p=0.0),
A.MedianBlur(p=0.0),
A.ToGray(p=0.0),
A.CLAHE(p=0.0),
A.RandomBrightnessContrast(brightness_limit=0.3, contrast_limit=0.3, p=0.0),
A.RandomGamma(gamma_limit=(80, 120), p=0.0),
A.ImageCompression(quality_range=(50, 100), p=0.0),
]
🎯 이렇게 모든 p=0.0
으로 수정해주면, train() 메서드 실행시 출력되는 로그가 아래와 같이 바뀌게 됩니다.
albumentations:
Initialized 7 Albumentations transforms:
1) Blur p=0.00
2) MedianBlur p=0.00
3) ToGray p=0.00
4) CLAHE p=0.00
5) RandomBrightnessContrast p=0.00
6) RandomGamma p=0.00
7) ImageCompression p=0.00
정상적으로 Albumentations가 OFF 되었다는걸 알 수 있습니다.
5. 필요 라이브러리
pip install albumentations>=1.0.3 opencv-python-headless
☑️설치 후 다음 명령어로 버전을 확인
python -m pip show albumentations
# result
name: albumentations
version: 1.x.x
'[컴퓨터비전]' 카테고리의 다른 글
[OpenCV] 한글 깨짐 -> 대체 함수 사용 (1) | 2025.05.23 |
---|---|
[컴퓨터비전] editable mode 설정해서 git clone한 Ultralytics 라이브러리 커스텀하기 (0) | 2025.05.11 |
[컴퓨터비전] YOLOv8 객체 탐지 모델 학습 따라하기 (0) | 2025.04.18 |