Ultralytics YOLO를 사용한 데이터 증강(Data Augmentation)
소개
데이터 증강(Data augmentation)은 컴퓨터 비전에서 기존 이미지에 다양한 변환을 적용하여 훈련 데이터셋을 인위적으로 확장하는 중요한 기술입니다. deep learning Ultralytics YOLO와 같은 모델을 훈련할 때, 데이터 증강은 모델의 견고성(robustness)을 개선하고 과적합(overfitting)을 줄이며 실제 환경에 대한 일반화(generalization) 성능을 향상시키는 데 도움을 줍니다.
Watch: How to use Mosaic, MixUp & more Data Augmentations to help Ultralytics YOLO Models generalize better 🚀
데이터 증강이 중요한 이유
데이터 증강은 컴퓨터 비전 모델 훈련에 있어 다음과 같은 여러 중요한 목적을 수행합니다:
- 확장된 데이터셋: 기존 이미지의 변형을 생성함으로써, 새로운 데이터를 수집하지 않고도 훈련 데이터셋의 크기를 효과적으로 늘릴 수 있습니다.
- 향상된 일반화: 모델이 다양한 조건에서 객체를 인식하는 방법을 학습하여, 실제 애플리케이션에서 더욱 견고해집니다.
- 과적합 감소: 훈련 데이터에 변동성을 도입함으로써, 모델이 특정 이미지의 특성을 암기할 가능성을 낮춥니다.
- 성능 향상: 적절한 증강을 거쳐 훈련된 모델은 일반적으로 검증 및 테스트 세트에서 더 나은 정확도을 달성합니다.
Ultralytics YOLO의 구현은 포괄적인 증강 기술 모음을 제공하며, 각 기술은 특정 목적을 수행하고 다양한 방식으로 모델 성능에 기여합니다. 이 가이드에서는 각 증강 파라미터를 자세히 살펴보고, 프로젝트에서 언제 어떻게 효과적으로 사용할 수 있는지 이해하도록 돕겠습니다.
구성 예시
Python API, CLI(명령줄 인터페이스) 또는 구성 파일을 사용하여 각 파라미터를 사용자 정의할 수 있습니다. 각 방법으로 데이터 증강을 설정하는 예시는 다음과 같습니다.
import albumentations as A
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n.pt")
# Training with custom augmentation parameters
model.train(data="coco.yaml", epochs=100, hsv_h=0.03, hsv_s=0.6, hsv_v=0.5)
# Training without any augmentations (disabled values omitted for clarity)
model.train(
data="coco.yaml",
epochs=100,
hsv_h=0.0,
hsv_s=0.0,
hsv_v=0.0,
translate=0.0,
scale=0.0,
fliplr=0.0,
mosaic=0.0,
erasing=0.0,
auto_augment=None,
)
# Training with custom Albumentations transforms (Python API only)
custom_transforms = [
A.Blur(blur_limit=7, p=0.5),
A.CLAHE(clip_limit=4.0, p=0.5),
]
model.train(data="coco.yaml", epochs=100, augmentations=custom_transforms)구성 파일 사용
YAML 구성 파일(예: train_custom.yaml)에서 증강을 포함한 모든 훈련 파라미터를 정의할 수 있습니다. mode 파라미터는 CLI를 사용할 때만 필수입니다. 이 새로운 YAML 파일은 기본 설정 파일을 재정의하게 되며, 이는 ultralytics 패키지를 conda로 설치합니다.
# train_custom.yaml
# 'mode' is required only for CLI usage
mode: train
data: coco8.yaml
model: yolo26n.pt
epochs: 100
hsv_h: 0.03
hsv_s: 0.6
hsv_v: 0.5에 위치합니다. 그런 다음 Python API로 훈련을 시작합니다:
from ultralytics import YOLO
# Load a COCO-pretrained YOLO26n model
model = YOLO("yolo26n.pt")
# Train the model with custom configuration
model.train(cfg="train_custom.yaml")색 공간 증강
색조(Hue) 조정 (hsv_h)
- 범위:
0.0-1.0 - 기본값:
0.015 - 사용법: 색상 관계를 유지하면서 이미지 색상을 변경합니다.
hsv_h하이퍼파라미터는 변경 범위를 정의하며, 최종 조정값은-hsv_h및hsv_h사이에서 무작위로 선택됩니다. 예를 들어,hsv_h=0.3인 경우, 변경값은-0.3에서0.3이내에서 무작위로 선택됩니다.0.5이상의 값에 대해서는 색조가 색상환을 따라 순환하므로,0.5및-0.5. - 목적 사이의 증강 결과가 동일하게 보입니다: 조명 상태가 객체의 외관에 큰 영향을 줄 수 있는 실외 시나리오에서 특히 유용합니다. 예를 들어, 바나나는 밝은 햇빛 아래서는 노란색으로 보이지만 실내에서는 녹색을 띠게 보일 수 있습니다.
- Ultralytics의 구현: RandomHSV
-0.5 | -0.25 | 0.0 | 0.25 | 0.5 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
채도(Saturation) 조정 (hsv_s)
- 범위:
0.0-1.0 - 기본값:
0.7 - 사용법: 이미지 내 색상의 강도를 수정합니다.
hsv_s하이퍼파라미터는 변경 범위를 정의하며, 최종 조정값은-hsv_s및hsv_s사이에서 무작위로 선택됩니다. 예를 들어,hsv_s=0.7, 강도는-0.7에서0.7. - 목적 이내에서 무작위로 선택됩니다: 모델이 다양한 날씨 상태와 카메라 설정을 처리하는 데 도움을 줍니다. 예를 들어, 빨간색 교통 표지판은 맑은 날에는 매우 선명하게 보이지만 안개가 낀 날에는 흐릿하게 보일 수 있습니다.
- Ultralytics의 구현: RandomHSV
-1.0 | -0.5 | 0.0 | 0.5 | 1.0 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
밝기(Brightness) 조정 (hsv_v)
- 범위:
0.0-1.0 - 기본값:
0.4 - 사용법: 이미지의 밝기를 변경합니다.
hsv_v하이퍼파라미터는 변경 범위를 정의하며, 최종 조정값은-hsv_v및hsv_v사이에서 무작위로 선택됩니다. 예를 들어,hsv_v=0.4, 강도는-0.4에서0.4. - 목적: 다양한 조명 조건에서 성능을 발휘해야 하는 모델을 훈련하는 데 필수적입니다. 예를 들어, 빨간색 사과는 햇빛 아래서는 밝게 보이지만 그늘에서는 훨씬 더 어둡게 보일 수 있습니다.
- Ultralytics의 구현: RandomHSV
-1.0 | -0.5 | 0.0 | 0.5 | 1.0 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
기하학적 변환
회전 (degrees)
- 범위:
0.0에서180 - 기본값:
0 - 사용법: 지정된 범위 내에서 이미지를 무작위로 회전합니다.
degrees하이퍼파라미터는 회전 각도를 정의하며, 최종 조정값은-degrees및degrees사이에서 무작위로 선택됩니다. 예를 들어,degrees=10.0사이에서 무작위로 선택됩니다.-10.0에서10.0. - 목적: 객체가 다양한 방향으로 나타날 수 있는 애플리케이션에 매우 중요합니다. 예를 들어, 드론 항공 이미지에서는 차량이 어떤 방향으로든 배치될 수 있으므로, 모델은 객체의 회전 여부와 관계없이 인식해야 합니다.
- Ultralytics의 구현: RandomPerspective
-180 | -90 | 0.0 | 90 | 180 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
이동(Translation) (translate)
- 범위:
0.0-1.0 - 기본값:
0.1 - 사용법: 이미지 크기의 무작위 분율만큼 이미지를 수평 및 수직으로 이동합니다.
translate하이퍼파라미터는 이동 크기를 정의하며, 최종 조정값은-translate및translate사이에서 무작위로 선택됩니다. 예를 들어,translate=0.5범위 내에서 두 번(각 축에 대해 한 번씩) 무작위로 선택됩니다.-0.5에서0.5, x축에 대해 - 목적 이내에서 무작위로 이동이 선택되고, y축에 대해서는 동일한 범위 내에서 별도의 무작위 값이 선택됩니다: 모델이 부분적으로만 보이는 객체를 탐지하도록 학습하고 객체 위치에 대한 견고성을 높이는 데 도움을 줍니다. 예를 들어, 차량 손상 평가 애플리케이션에서는 촬영자의 위치와 거리에 따라 자동차 부품이 전체 혹은 부분적으로 프레임에 나타날 수 있으며, 이동 증강은 모델이 이러한 기능들을 온전한 상태나 위치와 관계없이 인식하도록 가르칩니다.
- Ultralytics의 구현: RandomPerspective
- 참고: 간결함을 위해 아래에 적용된 이동은
x및y축 모두에 대해 동일합니다.-1.0및1.0값은 이미지를 프레임 밖으로 완전히 밀어내기 때문에 표시되지 않습니다.
-0.5 | -0.25 | 0.0 | 0.25 | 0.5 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
크기 조절(Scale) (scale)
- 범위:
0.0-1.0 - 기본값:
0.5 - 사용법: 지정된 범위 내에서 무작위 인수를 사용하여 이미지 크기를 조정합니다.
scale하이퍼파라미터는 스케일링 인수를 정의하며, 최종 조정값은1-scale및1+scale사이에서 무작위로 선택됩니다. 예를 들어,scale=0.5사이에서 무작위로 선택됩니다.0.5에서1.5. - 목적: 모델이 서로 다른 거리와 크기의 객체를 처리할 수 있게 합니다. 예를 들어, 자율 주행 애플리케이션에서 차량은 카메라로부터 다양한 거리에서 나타날 수 있으며, 모델은 크기와 관계없이 이를 인식해야 합니다.
- Ultralytics의 구현: RandomPerspective
- 참고:
- 값
-1.0은 이미지가 사라지게 하므로 표시되지 않으며,1.0은 단순히 2배 줌 결과를 낳습니다. - 아래 표에 표시된 값은 하이퍼파라미터
scale을 통해 적용된 것이며, 최종 스케일 인수값은 아닙니다. - 만약
scale이1.0보다 크면, 스케일링 인수가1-scale및1+scale사이에서 무작위로 선택됩니다. 예를 들어,scale=3.0사이에서 무작위로 선택됩니다.-2.0에서4.0사이에서 무작위로 선택되므로 이미지가 매우 작아지거나 뒤집힐 수 있습니다. 음수 값이 선택되면 이미지가 뒤집힙니다.
- 값
-0.5 | -0.25 | 0.0 | 0.25 | 0.5 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
전단(Shear) (shear)
- 범위:
-180에서+180 - 기본값:
0 - 사용법: x축과 y축을 따라 이미지를 비틀어 평행선을 유지하면서 이미지의 일부를 한 방향으로 이동시키는 기하학적 변환을 도입합니다.
shear하이퍼파라미터는 전단 각도를 정의하며, 최종 조정값은-shear및shear사이에서 무작위로 선택됩니다. 예를 들어,shear=10.0사이에서 무작위로 선택됩니다.-10에서10, x축에 대해 - 목적: 약간의 기울어짐이나 비스듬한 시점으로 인해 발생하는 시야각 변화에 모델이 일반화되도록 돕습니다. 예를 들어, 교통 모니터링에서 자동차나 도로 표지판과 같은 객체는 카메라가 수직으로 배치되지 않아 기울어져 보일 수 있습니다. 전단 증강을 적용하면 이러한 왜곡에도 불구하고 모델이 객체를 인식하도록 보장합니다.
- Ultralytics의 구현: RandomPerspective
- 참고:
shear값은 이미지를 급격하게 왜곡할 수 있으므로, 작은 값으로 시작하여 점진적으로 증가시키는 것이 좋습니다.- 원근 변환과 달리, 전단은 깊이나 소실점을 도입하지 않고 대신 반대쪽 변을 평행하게 유지하면서 각도를 변경하여 객체의 모양을 왜곡합니다.
-10 | -5 | 0.0 | 5 | 10 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
원근(Perspective) (perspective)
- 범위:
0.0-0.001 - 기본값:
0 - 사용법: x축과 y축 모두에 걸쳐 전체 원근 변환을 적용하여, 객체가 서로 다른 깊이나 각도에서 볼 때 어떻게 보이는지 시뮬레이션합니다.
perspective하이퍼파라미터는 원근 정도를 정의하며, 최종 조정값은-perspective및perspective사이에서 무작위로 선택됩니다. 예를 들어,perspective=0.001사이에서 무작위로 선택됩니다.-0.001에서0.001, x축에 대해 - 목적: 원근 증강은 특히 객체가 원근 변화로 인해 단축되거나 왜곡되어 보이는 극단적인 시점 변화를 처리하는 데 중요합니다. 예를 들어, 드론 기반 객체 탐지에서 건물, 도로, 차량은 드론의 기울기 및 고도에 따라 늘어나거나 압축되어 보일 수 있습니다. 원근 변환을 적용함으로써, 모델은 이러한 왜곡에도 불구하고 객체를 인식하도록 학습하여 실제 환경에서의 견고성을 향상시킵니다.
- Ultralytics의 구현: RandomPerspective
-0.001 | -0.0005 | 0.0 | 0.0005 | 0.001 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
상하 반전(Flip Up-Down) (flipud)
- 범위:
0.0-1.0 - 기본값:
0 - 사용법: y축을 따라 이미지를 뒤집어 수직 반전을 수행합니다. 이 변환은 이미지 전체를 거꾸로 미러링하지만 객체 간의 모든 공간적 관계는 보존합니다. flipud 하이퍼파라미터는 변환 적용 확률을 정의하며, 값이
flipud=1.0이면 모든 이미지가 반전되고,flipud=0.0이면 변환이 완전히 비활성화됩니다. 예를 들어flipud=0.5인 경우, 각 이미지는 50%의 확률로 상하 반전됩니다. - 목적: 객체가 거꾸로 나타날 수 있는 시나리오에 유용합니다. 예를 들어, 로봇 비전 시스템에서 컨베이어 벨트나 로봇 팔의 객체는 다양한 방향으로 집어 올려질 수 있습니다. 수직 반전은 모델이 상단-하단 위치와 관계없이 객체를 인식하도록 돕습니다.
- Ultralytics의 구현: RandomFlip
flipud off | flipud on |
|---|---|
![]() | ![]() |
좌우 반전(Flip Left-Right) (fliplr)
- 범위:
0.0-1.0 - 기본값:
0.5 - 사용법: x축을 따라 이미지를 미러링하여 수평 반전을 수행합니다. 이 변환은 공간적 일관성을 유지하면서 좌우 측면을 교체하며, 이는 모델이 미러링된 방향으로 나타나는 객체에 일반화되도록 돕습니다.
fliplr하이퍼파라미터는 변환 적용 확률을 정의하며, 값이fliplr=1.0이면 모든 이미지가 반전되고,fliplr=0.0이면 변환이 완전히 비활성화됩니다. 예를 들어fliplr=0.5인 경우, 각 이미지는 50%의 확률로 좌우 반전됩니다. - 목적: 수평 반전은 좌우 변동에 대한 견고성을 향상시키기 위해 객체 탐지, 포즈 추정, 얼굴 인식 분야에서 널리 사용됩니다. 예를 들어, 자율 주행에서 차량과 보행자는 도로의 양쪽 어디에서나 나타날 수 있으며, 수평 반전은 모델이 두 방향 모두에서 동일하게 잘 인식하도록 돕습니다.
- Ultralytics의 구현: RandomFlip
fliplr off | fliplr on |
|---|---|
![]() | ![]() |
BGR 채널 교환 (bgr)
- 범위:
0.0-1.0 - 기본값:
0 - 사용법: 이미지의 색상 채널을 RGB에서 BGR로 교환하여 색상이 표현되는 순서를 변경합니다.
bgr하이퍼파라미터는 변환 적용 확률을 정의하며,bgr=1.0모든 이미지가 채널 스왑 및bgr=0.0비활성화합니다. 예를 들어bgr=0.5를 사용하면 각 이미지가 RGB에서 BGR로 변환될 확률이 50%가 됩니다. - 목적: 다양한 색상 채널 순서에 대한 견고성을 높입니다. 예를 들어, RGB 및 BGR 형식이 일관되지 않게 사용되는 여러 카메라 시스템 및 이미징 라이브러리에서 작동해야 하는 모델을 학습시킬 때, 또는 입력 색상 형식이 학습 데이터와 다를 수 있는 환경에 모델을 배포할 때 유용합니다.
- Ultralytics의 구현: 형식
bgr off | bgr on |
|---|---|
![]() | ![]() |
Mosaic (mosaic)
- 범위:
0.0-1.0 - 기본값:
1 - 사용법: 4개의 학습 이미지를 하나로 결합합니다.
mosaic하이퍼파라미터는 변환 적용 확률을 정의하며,mosaic=1.0모든 이미지가 결합되고mosaic=0.0변환을 비활성화합니다. 예를 들어mosaic=0.5를 사용하면 각 이미지가 다른 3개의 이미지와 결합될 확률이 50%가 됩니다. - 목적: 소형 객체 탐지 및 맥락 이해력을 향상시키는 데 매우 효과적입니다. 예를 들어 동물이 다양한 거리와 크기로 나타날 수 있는 야생 동물 보호 프로젝트에서 Mosaic augmentation은 제한된 데이터로부터 다양한 학습 샘플을 인위적으로 생성하여, 모델이 서로 다른 크기, 부분적 가림, 환경적 맥락 전반에 걸쳐 동일한 종을 인식하도록 학습하는 데 도움을 줍니다.
- Ultralytics의 구현: Mosaic
- 참고:
- 비록
mosaicaugmentation이 모델을 더 견고하게 만들지만, 학습 과정을 더 어렵게 만들 수도 있습니다. mosaicaugmentation은 학습 종료 직전에close_mosaic를 비활성화할 에포크 수로 설정하여 비활성화할 수 있습니다. 예를 들어epochs가200및close_mosaic가20함수는 'path/to/last.pt' 파일에 저장된 상태를 사용하여 중단된 지점부터 학습을 계속합니다.mosaic로 설정되면180augmentation은close_mosaic가0함수는 'path/to/last.pt' 파일에 저장된 상태를 사용하여 중단된 지점부터 학습을 계속합니다.mosaic에포크 후에 비활성화됩니다. 만약- augmentation은 전체 학습 과정 동안 활성화됩니다. 생성된 Mosaic의 중심은 무작위 값에 의해 결정되며, 이미지 내부 또는 외부에 위치할 수 있습니다.
- 현재
mosaicaugmentation 구현은 데이터셋에서 무작위로 선택된 4개의 이미지를 결합합니다. 데이터셋이 작을 경우 동일한 이미지가 같은 Mosaic에 여러 번 사용될 수 있습니다.
- 비록
mosaic off | mosaic on |
|---|---|
![]() | ![]() |
Mixup (mixup)
- 범위:
0.0-1.0 - 기본값:
0 - 사용법: 주어진 확률로 두 이미지와 해당 라벨을 혼합합니다.
mixup하이퍼파라미터는 변환 적용 확률을 정의하며,mixup=1.0모든 이미지가 혼합되고mixup=0.0변환을 비활성화합니다. 예를 들어mixup=0.5를 사용하면, 각 이미지가 다른 이미지와 혼합될 확률이 50%가 됩니다. - 목적: 모델의 견고성을 향상시키고 과적합을 줄입니다. 예를 들어 소매 제품 인식 시스템에서 Mixup은 서로 다른 제품의 이미지를 혼합하여 모델이 더 견고한 특징을 학습하도록 돕고, 혼잡한 매장 진열대에서 제품이 부분적으로 보이거나 다른 제품에 가려져도 이를 식별할 수 있도록 가르칩니다.
- Ultralytics의 구현: Mixup
- 참고:
mixup비율은np.random.beta(32.0, 32.0)베타 분포에서 선택된 무작위 값이며, 이는 각 이미지가 약 50%씩 기여하고 약간의 변동이 있음을 의미합니다.
첫 번째 이미지, mixup off | 두 번째 이미지, mixup off | mixup on |
|---|---|---|
![]() | ![]() | ![]() |
CutMix (cutmix)
- 범위:
0.0-1.0 - 기본값:
0 - 사용법: 주어진 확률로 한 이미지에서 직사각형 영역을 잘라내어 다른 이미지에 붙여넣습니다.
cutmix하이퍼파라미터는 변환 적용 확률을 정의하며,cutmix=1.0모든 이미지가 이 변환을 거치고cutmix=0.0완전히 비활성화합니다. 예를 들어cutmix=0.5를 사용하면, 각 이미지가 다른 이미지의 패치로 영역이 대체될 확률이 50%가 됩니다. - 목적: 로컬 특징 무결성을 유지하면서 현실적인 가림 시나리오를 생성하여 모델 성능을 향상시킵니다. 예를 들어 자율 주행 시스템에서 CutMix는 차량이나 보행자가 다른 물체에 의해 부분적으로 가려진 경우에도 모델이 이를 인식하도록 학습하여, 물체가 겹치는 복잡한 실제 환경에서의 탐지 정확도를 개선합니다.
- Ultralytics의 구현: CutMix
- 참고:
- 잘라낸 영역의 크기와 위치는 적용할 때마다 무작위로 결정됩니다.
- 픽셀 값을 전역적으로 혼합하는 Mixup과 달리,
cutmix는 잘라낸 영역 내의 원래 픽셀 강도를 유지하여 로컬 특징을 보존합니다. - 영역은 기존 bbox와 겹치지 않는 경우에만 대상 이미지에 붙여넣어집니다. 또한, 붙여넣은 영역 내에서 원래 면적의 최소
0.1(10%) 이상을 유지하는 bbox만 보존됩니다. - 이 최소 bbox 면적 임계값은 현재 구현에서 변경할 수 없으며 기본적으로
0.1로 설정되어 있습니다.
첫 번째 이미지, cutmix off | 두 번째 이미지, cutmix off | cutmix on |
|---|---|---|
![]() | ![]() | ![]() |
세그멘테이션 전용 Augmentation
Copy-Paste (copy_paste)
- 범위:
0.0-1.0 - 기본값:
0 - 사용법: 세그멘테이션 작업에서만 작동하며, 이 augmentation은 지정된 확률에 따라 이미지 내 또는 이미지 간에 객체를 복사합니다.
copy_paste_mode필드에 COCO 어노테이션의copy_paste하이퍼파라미터는 변환 적용 확률을 정의하며,copy_paste=1.0모든 이미지가 복사되고copy_paste=0.0변환을 비활성화합니다. 예를 들어copy_paste=0.5를 사용하면, 각 이미지가 다른 이미지에서 객체를 복사해 올 확률이 50%가 됩니다. - 목적: 인스턴스 세그멘테이션 작업 및 희귀 객체 클래스에 특히 유용합니다. 예를 들어 특정 유형의 결함이 드물게 나타나는 산업용 결함 탐지에서, Copy-Paste augmentation은 한 이미지에서 다른 이미지로 결함 객체를 복사하여 이러한 희귀 결함의 발생 빈도를 인위적으로 늘릴 수 있으며, 추가적인 결함 샘플 없이도 모델이 이러한 부족한 사례를 더 잘 학습하도록 돕습니다.
- Ultralytics의 구현: CopyPaste
- 참고:
- 아래 gif와 같이
copy_pasteaugmentation을 사용하여 한 이미지에서 다른 이미지로 객체를 복사할 수 있습니다. - 객체가 복사되면
copy_paste_mode와 관계없이 원본 이미지의 모든 객체와 IoA(Intersection over Area)가 계산됩니다. 모든 IoA가0.3(30%) 미만이면 객체가 대상 이미지에 붙여넣어집니다. IoA 중 하나라도0.3를 초과하면 객체가 대상 이미지에 붙여넣어지지 않습니다. - IoA 임계값은 현재 구현에서 변경할 수 없으며
0.3로 설정되어 있습니다.
- 아래 gif와 같이
copy_paste off | copy_paste로 설정되어 있습니다.copy_paste_mode=flip | 과정 시각화copy_pasteCopy-Paste 모드 ( |
|---|---|---|
![]() | ![]() | ![]() |
옵션copy_paste_mode)
- : :
'flip','mixup' - 기본값:
'flip' - 사용법 augmentation에 사용되는 방법을 결정합니다. 만약 데이터 증강(으)로 설정하면 객체는 동일한 이미지에서 가져오고,
'flip'(은)는 다른 이미지에서 객체를 복사할 수 있도록 합니다.'mixup': 복사된 객체가 대상 이미지에 통합되는 방식에 유연성을 제공합니다. - 목적IoA 원칙은
- Ultralytics의 구현: CopyPaste
- 참고:
- 둘 다 동일하지만 객체가 복사되는 방식이 다릅니다.
copy_paste_mode이미지 크기에 따라 객체가 프레임 밖으로 부분적으로 또는 전체적으로 복사될 수 있습니다. - 폴리곤 어노테이션 품질에 따라 복사된 객체는 원본과 비교하여 약간의 모양 변화가 있을 수 있습니다.
- 참조 이미지
- 둘 다 동일하지만 객체가 복사되는 방식이 다릅니다.
| 선택된 이미지 | 분류 전용 Augmentationcopy_paste | copy_paste로 설정되어 있습니다.copy_paste_mode=mixup |
|---|---|---|
![]() | ![]() | ![]() |
Auto Augment (
: 분류를 위한 자동화된 augmentation 정책을 적용합니다. auto_augment)
- : :
'randaugment','autoaugment','augmix',None - 기본값:
'randaugment' - 사용법 옵션은 RandAugment를 사용하고,
'randaugment'(은)는 AutoAugment를,'autoaugment'(은)는 AugMix를 사용합니다.'augmix'(으)로 설정하면 자동화된 augmentation이 비활성화됩니다.None: 분류 작업을 위해 augmentation 전략을 자동으로 최적화합니다. 차이점은 다음과 같습니다: - 목적AutoAugment
- : 이 모드는 ImageNet, CIFAR10, SVHN과 같은 데이터셋에서 학습된 사전 정의된 augmentation 정책을 적용합니다. 사용자는 이러한 기존 정책을 선택할 수는 있지만 Torchvision 내에서 새로운 정책을 학습시킬 수는 없습니다. 특정 데이터셋에 대한 최적의 augmentation 전략을 찾으려면 외부 라이브러리나 사용자 지정 구현이 필요합니다. AutoAugment 논문 참고..
- RandAugment: 균일한 크기로 무작위 변환을 선택하여 적용합니다. 이 접근 방식은 광범위한 검색 단계의 필요성을 줄여 계산 효율성을 높이면서도 모델의 견고성을 강화합니다. RandAugment 논문.
- 참고.AugMix: AugMix는 단순한 변환의 무작위 조합을 통해 다양한 이미지 변형을 생성하여 모델의 견고성을 향상시키는 데이터 augmentation 방법입니다. .
- Ultralytics의 구현: AugMix 논문
- 참고:
- 참고.
- classify_augmentations() 기본적으로 세 가지 방법의 주요 차이점은 augmentation 정책이 정의되고 적용되는 방식입니다.세 가지 방법을 자세히 비교한 이 문서
를 참조할 수 있습니다.erasing)
- 범위:
0.0-0.9 - 기본값:
0.4 - 사용법Random Erasing (
erasing하이퍼파라미터는 변환 적용 확률을 정의하며,erasing=0.9거의 모든 이미지가 지워지도록 보장하며erasing=0.0변환을 비활성화합니다. 예를 들어erasing=0.5, 각 이미지는 50% 확률로 일부가 지워집니다. - 목적: 모델이 강건한 특징을 학습하도록 돕고 특정 이미지 영역에 대한 과도한 의존을 방지합니다. 예를 들어, 얼굴 인식 시스템에서 random erasing은 선글라스, 마스크 또는 얼굴 특징을 부분적으로 가릴 수 있는 다른 객체와 같은 부분적 가림(occlusion)에 대해 모델이 더 강건해지도록 돕습니다. 이는 모델이 가려질 수 있는 특징에만 의존하는 대신 여러 얼굴 특징을 사용하여 개인을 식별하도록 강제함으로써 실제 환경에서의 성능을 향상시킵니다.
- Ultralytics의 구현: AugMix 논문
- 참고:
erasing off | erasing on (예제 1) | erasing on (예제 2) | erasing on (예제 3) |
|---|---|---|---|
![]() | ![]() | ![]() | ![]() |
고급 증강 기능
사용자 정의 Albumentations 변환 (augmentations)
- 유형:
listAlbumentations 변환의 - 기본값:
None - 사용법: Python API를 사용하여 데이터 증강을 위한 사용자 정의 Albumentations 변환을 제공할 수 있습니다. 이 파라미터는 기본 Albumentations 변환 대신 학습 중에 적용될 Albumentations 변환 객체 리스트를 허용합니다.
- 목적: 광범위한 Albumentations 변환 라이브러리를 활용하여 데이터 증강 전략을 세밀하게 제어할 수 있습니다. 이는 내장된 YOLO 옵션을 넘어선 고급 색상 조정, 노이즈 주입 또는 도메인 특화 변환과 같은 전문적인 증강이 필요할 때 특히 유용합니다.
- Ultralytics의 구현: Albumentations
import albumentations as A
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n.pt")
# Define custom Albumentations transforms
custom_transforms = [
A.Blur(blur_limit=7, p=0.5),
A.GaussNoise(var_limit=(10.0, 50.0), p=0.3),
A.CLAHE(clip_limit=4.0, p=0.5),
A.RandomBrightnessContrast(brightness_limit=0.2, contrast_limit=0.2, p=0.5),
A.HueSaturationValue(hue_shift_limit=20, sat_shift_limit=30, val_shift_limit=20, p=0.5),
]
# Train with custom Albumentations transforms
model.train(
data="coco8.yaml",
epochs=100,
augmentations=custom_transforms, # Pass custom transforms
imgsz=640,
)주요 포인트:
- Python API 전용: 사용자 정의 Albumentations 변환은 현재 Python API를 통해서만 지원됩니다. CLI 또는 YAML 구성 파일을 통해서는 지정할 수 없습니다.
- 기본 변환 대체:
augmentations파라미터를 통해 사용자 정의 변환을 제공하면 기본 Albumentations 변환을 완전히 대체합니다. 기본 YOLO 증강(예:mosaic,hsv_h,hsv_s,degrees, 등)은 활성 상태로 유지되며 독립적으로 적용됩니다.. - Bounding Box 호환성: 공간 변환(이미지의 기하학적 구조를 변경하는 변환)을 사용할 때는 주의하십시오. Ultralytics는 BBox 조정을 자동으로 처리하지만, 일부 복잡한 변환은 추가 구성이 필요할 수 있습니다.
- 방대한 라이브러리: Albumentations는 70개 이상의 다양한 변환을 제공합니다. Albumentations 문서를 탐색하여 사용 가능한 모든 옵션을 확인하십시오.
- 성능 고려 사항: 너무 많은 증강을 추가하거나 연산 비용이 많이 드는 변환을 사용하면 학습 속도가 느려질 수 있습니다. 작은 세트부터 시작하여 학습 속도를 모니터링하십시오.
일반적인 사용 사례:
- 의료 영상: X-ray 또는 MRI 이미지 증강을 위해 탄성 변형이나 그리드 왜곡과 같은 특수 변환 적용
- 항공/위성 이미지: 상공 투영법에 최적화된 변환 사용
- 저조도 환경: 까다로운 조명을 시뮬레이션하기 위해 노이즈 및 밝기 조정 적용
- 산업 검사: 품질 관리 애플리케이션을 위한 결함 유사 패턴 또는 질감 변화 추가
호환성 참고 사항:
- Albumentations 버전 1.0.3 이상 필요
- 모든 YOLO 탐지 및 세그멘테이션 작업과 호환됨
- 분류 작업에는 적용 불가(분류는 다른 증강 파이프라인 사용)
Albumentations 및 사용 가능한 변환에 대한 자세한 정보는 공식 Albumentations 문서.
FAQ
를 방문하십시오.
선택할 수 있는 증강이 너무 많습니다. 무엇을 사용해야 할지 어떻게 알 수 있나요?
- 적절한 증강 선택은 특정 사용 사례와 데이터셋에 따라 다릅니다. 결정을 내리는 데 도움이 되는 몇 가지 일반적인 지침은 다음과 같습니다:
hsv_h,hsv_s, 그리고hsv_v: - 의 기본값은 좋은 출발점입니다. 카메라의 관점이 일관되고 모델 배포 후에도 변경되지 않는다면,
rotation,translation,scale,shear)을 결정합니다. 성능 평가를 위해 데이터 세그먼트를 선택하는 데 유연성을 제공합니다.perspective과 같은 기하학적 변환은 생략해도 됩니다. 그러나 카메라 각도가 변할 수 있고 모델이 더 강건해져야 한다면 이러한 증강을 유지하는 것이 좋습니다. - 명령어를 사용하여 학습을 시작합니다. (각
mosaic부분적으로 가려진 객체나 이미지당 여러 객체가 있어도 허용되며 라벨 값을 변경하지 않는 경우에만 증강을 사용하십시오. 또는mosaic을(를) 활성 상태로 유지하되close_mosaic값을 높여 학습 과정 후반부에 비활성화할 수 있습니다.
요약하자면, 간단하게 유지하십시오. 적은 수의 증강으로 시작하여 필요에 따라 점진적으로 추가하십시오. 목표는 학습 과정을 복잡하게 만드는 것이 아니라 모델의 일반화 및 강건성을 향상시키는 것입니다. 또한, 적용하는 증강이 모델이 실제 환경에서 접하게 될 데이터 분포를 반영하는지 확인하십시오.
학습을 시작할 때 albumentations: Blur[...] 참조가 보입니다. Ultralytics YOLO가 블러 처리와 같은 추가 증강을 실행한다는 뜻인가요?
만약 albumentations 패키지가 설치되어 있다면, Ultralytics는 이를 사용하여 일련의 추가 이미지 증강을 자동으로 적용합니다. 이러한 증강은 내부적으로 처리되며 추가 구성이 필요하지 않습니다.
적용된 전체 변환 목록은 기술 문서와 Albumentations 통합 가이드에서 확인할 수 있습니다. 확률이 p보다 큰 0 증강만 활성화된다는 점을 참고하십시오. 이는 블러나 그레이스케일 효과와 같은 실제 시각적 아티팩트를 모방하기 위해 낮은 빈도로 의도적으로 적용됩니다.
Python API를 사용하여 직접 사용자 정의 Albumentations 변환을 제공할 수도 있습니다. 자세한 내용은 고급 증강 기능 섹션을 참조하십시오.
학습을 시작할 때 albumentations에 대한 참조가 보이지 않습니다. 왜 그럴까요?
Check if the albumentations 패키지가 설치되었는지 확인하십시오. 설치되지 않았다면 pip install albumentations를 실행하여 설치할 수 있습니다. 일단 설치되면, 해당 패키지는 Ultralytics에 의해 자동으로 감지되고 사용됩니다.
증강을 어떻게 커스터마이징하나요?
사용자 정의 데이터셋 클래스와 트레이너를 생성하여 증강을 커스터마이징할 수 있습니다. 예를 들어, 기본 Ultralytics 분류 증강을 PyTorch의 torchvision.transforms.Resize 또는 다른 변환으로 대체할 수 있습니다. 구현 세부 정보는 분류 문서의 사용자 정의 학습 예제를 참조하십시오.
















































