Ultralytics YOLO를 사용한 데이터 증강#
소개#
Data augmentation은(는) 기존 이미지에 다양한 변환을 적용하여 학습 데이터셋을 인위적으로 확장하는 컴퓨터 비전의 핵심 기술입니다. Ultralytics YOLO와 같은 deep learning 모델을 학습할 때 데이터 증강은 모델의 견고성을 높이고 과적합을 줄이며 실제 환경에 대한 일반화 성능을 향상시킵니다.
Watch: How to use Mosaic, MixUp & more Data Augmentations to help Ultralytics YOLO Models generalize better 🚀
데이터 증강이 중요한 이유#
데이터 증강은 컴퓨터 비전 모델 학습에 있어 여러 가지 중요한 목적을 수행합니다:
- 확장된 데이터셋: 기존 이미지의 변형을 생성함으로써 새로운 데이터를 수집하지 않고도 학습 데이터셋 크기를 효과적으로 늘릴 수 있습니다.
- 일반화 성능 향상: 모델이 다양한 조건에서 객체를 인식하는 방법을 학습하여 실제 애플리케이션에서 더 견고해집니다.
- 과적합 감소: 학습 데이터에 가변성을 도입함으로써 모델이 특정 이미지의 특징을 암기할 가능성을 줄여줍니다.
- 향상된 성능: 적절한 증강을 사용하여 학습된 모델은 일반적으로 검증 및 테스트 세트에서 더 나은 accuracy을(를) 달성합니다.
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="coco8.yaml", epochs=100, hsv_h=0.03, hsv_s=0.6, hsv_v=0.5)
# Training with every configurable augmentation disabled (disabled values omitted for clarity)
model.train(
data="coco8.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="coco8.yaml", epochs=100, augmentations=custom_transforms)이 페이지에 나열된 변환은 학습 인수를 통해 제어하는 항목들입니다. 또한 Ultralytics는 albumentations 패키지가 설치되어 있고 default.yaml에 이를 비활성화하는 인수가 없는 경우, 블러, 미디언 블러, 그레이스케일, CLAHE 등 각각 p=0.01 비율의 소규모 Albumentations 세트를 적용합니다. 이를 제거하려면 패키지를 제거하거나, augmentations에 자신만의 목록을 전달하여 교체하십시오.
설정 파일 사용하기#
증강을 포함한 모든 학습 파라미터를 YAML 설정 파일(예: train_custom.yaml)에 정의할 수 있습니다. mode 파라미터는 CLI를 사용할 때만 필요합니다. 이 새로운 YAML 파일은 ultralytics 패키지에 있는 기본 파일을 재정의합니다.
# 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")색 공간 증강#
색조 조정 (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 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
채도 조정 (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 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
명도 조정 (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 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
이동 (translate)#
- 범위:
0.0-1.0 - 기본값:
0.1 - 사용법: 이미지 크기의 무작위 비율만큼 이미지를 수평 및 수직으로 이동합니다.
translate하이퍼파라미터는 이동 크기를 정의하며, 최종 조정은 범위-translate및translate내에서 (각 축마다 한 번씩) 두 번 무작위로 선택됩니다. 예를 들어translate=0.5의 경우 x축에서는-0.5에서0.5사이에서 변환이 무작위로 선택되고 y축에서도 동일한 범위 내에서 다른 독립적인 무작위 값이 선택됩니다. - 목적: 부분적으로 보이는 객체를 모델이 탐지하도록 돕고 객체 위치에 대한 견고성을 향상시킵니다. 예를 들어, 차량 손상 평가 애플리케이션에서 자동차 부품은 촬영자의 위치와 거리에 따라 프레임에 완전히 나타나거나 부분적으로 나타날 수 있습니다. 이동 증강은 모델이 객체의 완전성이나 위치와 관계없이 이러한 특징을 인식하도록 가르칩니다.
- Ultralytics 구현: RandomPerspective
- 참고: 단순화를 위해 아래에 적용된 변환은
x축과y축 모두에서 매번 동일합니다. 값-1.0및1.0은 이미지를 프레임 완전히 밖으로 이동시키기 때문에 표시되지 않습니다.
-0.5 | -0.25 | 0.0 | 0.25 | 0.5 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
크기 조절 (scale)#
- 범위:
0.0-1.0사이의 실수, 또는 명시적인(min, max)튜플 - 기본값:
0.5 - 사용법: 지정된 범위 내의 임의의 배율로 이미지를 조절합니다. 실수로서
scale하이퍼파라미터는 스케일링 게인을 정의하며, 최종 배율은1-scale과1+scale사이에서 무작위로 선택됩니다. 예를 들어scale=0.5인 경우, 스케일링은0.5에서1.5사이에서 무작위로 선택됩니다. 튜플의 경우scale이 해당 범위를 직접 설정하므로scale=(0.5, 2.0)은0.5과2.0사이에서 배율을 샘플링합니다. - 목적: 모델이 다양한 거리와 크기의 객체를 처리할 수 있게 합니다. 예를 들어, 자율 주행 애플리케이션에서 차량은 카메라로부터 다양한 거리에 나타날 수 있으며, 모델은 크기와 관계없이 이를 인식해야 합니다.
- Ultralytics 구현: RandomPerspective
- 참고:
-1.0값은 이미지를 사라지게 하므로 표시되지 않으며,1.0은 단순히 2배 줌인 결과를 가져옵니다.- 아래 표에 표시된 값은
scale하이퍼파라미터에 전달하는 값이 아니라 실제 적용된 스케일 델타입니다. - 실수 형식은
0.0-1.0범위로 검증되며, 이 범위를 벗어나는 값은ValueError를 발생시킵니다. 2배 줌을 초과하는 배율을 샘플링하려면 대신(min, max)튜플 형식을 전달하세요. - 튜플 형식은 기하학적 작업에만 적용됩니다. 분류 학습은 실수(
1.0 - scale부터1.0까지)로부터 자체적인 자르기 범위를 유도하므로, 해당 위치에 튜플을 전달하면TypeError가 발생합니다.
-0.5 | -0.25 | 0.0 | 0.25 | 0.5 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
전단 변환 (shear)#
- 범위:
-180~+180 - 기본값:
0 - 사용법: 평행선을 유지하면서 이미지의 일부를 한 방향으로 이동시키는 방식으로 x축과 y축을 따라 이미지를 기울이는 기하학적 변환을 도입합니다.
shear하이퍼파라미터는 전단 각도를 정의하며, 최종 조정값은-shear과shear사이에서 무작위로 선택됩니다. 예를 들어shear=10.0의 경우 x축에서는-10에서10사이에서 전단이 무작위로 선택되며 y축에서도 동일한 범위 내에서 다른 독립적인 무작위 값이 선택됩니다. - 목적: 모델이 약간의 기울어짐이나 비스듬한 시점으로 인해 발생하는 보기 각도의 변화를 일반화하도록 돕습니다. 예를 들어, 교통 모니터링에서 자동차나 도로 표지판과 같은 객체는 카메라 배치가 수직이 아닐 경우 비스듬하게 보일 수 있습니다. 전단 증강을 적용하면 모델이 이러한 비틀린 왜곡에도 불구하고 객체를 인식하도록 학습할 수 있습니다.
- Ultralytics 구현: RandomPerspective
- 참고:
shear값은 이미지를 빠르게 왜곡할 수 있으므로 작은 값으로 시작하여 점차 늘리는 것이 좋습니다.- 원근 변환과 달리, 전단은 깊이나 소실점을 도입하지 않고 대신 반대편을 평행하게 유지하면서 객체의 각도를 변경하여 형태를 왜곡합니다.
-10 | -5 | 0.0 | 5 | 10 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
원근 변환 (perspective)#
- 범위:
0.0-0.001 - 기본값:
0 - 사용법: 다양한 심도나 각도에서 볼 때 객체가 어떻게 보이는지 시뮬레이션하여 x축과 y축 모두에서 전체 원근 변환을 적용합니다.
perspective하이퍼파라미터는 원근 크기를 정의하며, 최종 조정값은-perspective과perspective사이에서 무작위로 선택됩니다. 예를 들어perspective=0.001의 경우 x축에서는-0.001에서0.001사이에서 원근이 무작위로 선택되며 y축에서도 동일한 범위 내에서 다른 독립적인 무작위 값이 선택됩니다. - 목적: 원근감 증강(augmentation)은 극단적인 시점 변화를 처리하는 데 중요하며, 특히 원근 이동으로 인해 객체가 단축되거나 왜곡되어 보이는 상황에서 유용합니다. 예를 들어 드론 기반 객체 탐지에서 건물, 도로, 차량은 드론의 기울기와 고도에 따라 늘어나거나 압축되어 보일 수 있습니다. 원근 변환을 적용함으로써 모델은 이러한 원근 왜곡에도 불구하고 객체를 인식하도록 학습하여 실제 환경에서의 배포 견고성을 향상시킵니다.
- Ultralytics 구현: RandomPerspective
-0.001 | -0.0005 | 0.0 | 0.0005 | 0.001 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
상하 반전 (flipud)#
- 범위:
0.0-1.0 - 기본값:
0 - 사용법: y축을 따라 이미지를 반전하여 수직 반전을 수행합니다. 이 변환은 전체 이미지를 위아래로 미러링하지만 객체 간의 모든 공간적 관계를 보존합니다. flipud 하이퍼파라미터는 변환 적용 확률을 정의하며,
flipud=1.0값은 모든 이미지가 반전되도록 하고flipud=0.0값은 변환을 완전히 비활성화합니다. 예를 들어flipud=0.5의 경우 각 이미지가 위아래로 반전될 확률은 50%입니다. - 목적: 객체가 거꾸로 나타날 수 있는 시나리오에서 유용합니다. 예를 들어 로봇 비전 시스템에서 컨베이어 벨트나 로봇 팔 위의 객체는 다양한 방향으로 집어 올려질 수 있습니다. 수직 반전은 모델이 상하 위치와 관계없이 객체를 인식하도록 돕습니다.
- Ultralytics 구현: RandomFlip
flipud 꺼짐 | flipud 켜짐 |
|---|---|
![]() | ![]() |
좌우 반전 (fliplr)#
- 범위:
0.0-1.0 - 기본값:
0.5 - 사용법: x축을 따라 이미지를 미러링하여 수평 반전을 수행합니다. 이 변환은 공간적 일관성을 유지하면서 좌우 측면을 바꾸어 모델이 미러링된 방향으로 나타나는 객체에 일반화하는 데 도움이 됩니다.
fliplr하이퍼파라미터는 변환 적용 확률을 정의하며,fliplr=1.0값은 모든 이미지가 반전되도록 하고fliplr=0.0값은 변환을 완전히 비활성화합니다. 예를 들어fliplr=0.5의 경우 각 이미지가 좌우로 반전될 확률은 50%입니다. - 목적: 수평 반전은 객체 탐지, 자세 추정 및 얼굴 인식에서 좌우 변형에 대한 견고성을 향상시키기 위해 널리 사용됩니다. 예를 들어 자율 주행에서 차량과 보행자는 도로의 양쪽 어디에나 나타날 수 있으며, 수평 반전은 모델이 두 방향 모두에서 동일하게 잘 인식하도록 돕습니다.
- Ultralytics 구현: RandomFlip
fliplr 꺼짐 | fliplr 켜짐 |
|---|---|
![]() | ![]() |
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 구현: Format
bgr 꺼짐 | bgr 켜짐 |
|---|---|
![]() | ![]() |
모자이크 (mosaic)#
- 범위:
0.0-1.0 - 기본값:
1 - 사용법: 4개의 학습 이미지를 하나로 결합합니다.
mosaic하이퍼파라미터는 변환 적용 확률을 정의하며,mosaic=1.0은 모든 이미지가 결합되도록 하고mosaic=0.0는 변환을 비활성화합니다. 예를 들어mosaic=0.5의 경우 각 이미지가 다른 3개의 이미지와 결합될 확률은 50%입니다. - 목적: 작은 객체 탐지 및 문맥 이해도를 향상시키는 데 매우 효과적입니다. 예를 들어 동물들이 다양한 거리와 규모로 나타날 수 있는 야생 동물 보호 프로젝트에서, 모자이크 증강은 제한된 데이터로부터 인위적으로 다양한 학습 샘플을 생성하여 모델이 다른 크기, 부분적 가림(occlusion) 및 환경적 맥락 전반에서 동일한 종을 인식하도록 학습하는 데 도움을 줍니다.
- Ultralytics 구현: Mosaic
- 참고:
mosaic증강이 모델을 더 견고하게 만들 수 있더라도 학습 프로세스를 더 어렵게 만들 수도 있습니다.mosaic증강은 완료 전 꺼져야 할 에포크 수를close_mosaic에 설정하여 학습 종료 무렵에 비활성화할 수 있습니다. 예를 들어epochs가200으로 설정되고close_mosaic가20로 설정된 경우,mosaic증강은180에포크 후에 비활성화됩니다.close_mosaic이0로 설정된 경우 전체 학습 프로세스 동안mosaic증강이 활성화됩니다.- 모자이크를 닫으면 동일한 에폭에서
copy_paste,mixup,cutmix도 비활성화됩니다. 네 가지가 함께 꺼지므로, 기하학적 변환, HSV, 대칭 및 Albumentations를 포함한 다른 모든 증강은 계속 실행되면서 마지막 에폭들은 이러한 요소 없이 학습됩니다. 기본flip모드의copy_paste은 여러 개를 결합하는 대신 단일 이미지 내에서 작동한다는 점에 유의하세요. - 생성된 모자이크의 중심점은 무작위 값으로 결정되며, 이미지 내부 또는 외부에 위치할 수 있습니다.
mosaic증강의 현재 구현은 현재 이미지를 최근에 로드된 이미지 버퍼 또는cache='ram'일 때 데이터셋의 어느 곳에서든 가져온 다른 3개의 이미지와 결합합니다. 어느 쪽이든 복원 추출(with replacement)로 샘플링되므로, 단일 모자이크에 동일한 이미지가 두 번 이상 나타날 수 있습니다.
mosaic 꺼짐 | mosaic 켜짐 |
|---|---|
![]() | ![]() |
믹스업 (mixup)#
- 범위:
0.0-1.0 - 기본값:
0 - 사용법: 주어진 확률로 두 이미지와 해당 라벨을 혼합합니다.
mixup하이퍼파라미터는 변환 적용 확률을 정의하며,mixup=1.0은 모든 이미지가 혼합되도록 하고mixup=0.0는 변환을 비활성화합니다. 예를 들어mixup=0.5의 경우 각 이미지가 다른 이미지와 혼합될 확률은 50%입니다. - 목적: 모델의 견고성을 향상시키고 과적합(overfitting)을 줄입니다. 예를 들어 소매 제품 인식 시스템에서 믹스업은 다양한 제품의 이미지를 혼합하여 모델이 더 견고한 특징을 학습하도록 돕고, 복잡한 매장 진열대에서 다른 제품에 의해 가려지거나 부분적으로만 보이는 경우에도 항목을 식별하도록 가르칩니다.
- Ultralytics 구현: Mixup
- 참고:
mixup비율은np.random.beta(32.0, 32.0)베타 분포에서 선택된 무작위 값이며, 이는 각 이미지가 약간의 변동과 함께 약 50%씩 기여함을 의미합니다.
첫 번째 이미지, mixup 꺼짐 | 두 번째 이미지, mixup 꺼짐 | mixup 켜짐 |
|---|---|---|
![]() | ![]() | ![]() |
컷믹스 (cutmix)#
- 범위:
0.0-1.0 - 기본값:
0 - 사용법: 주어진 확률로 한 이미지에서 직사각형 영역을 잘라내어 다른 이미지에 붙여넣습니다.
cutmix하이퍼파라미터는 변환 적용 확률을 정의하며,cutmix=1.0은 모든 이미지가 이 변환을 거치도록 하고cutmix=0.0는 이를 완전히 비활성화합니다. 예를 들어cutmix=0.5의 경우 각 이미지의 영역이 다른 이미지의 패치로 교체될 확률은 50%입니다. - 목적: 지역적 특징 무결성을 유지하면서 현실적인 가림 상황을 생성하여 모델 성능을 향상시킵니다. 예를 들어 자율 주행 시스템에서 컷믹스는 차량이나 보행자가 다른 객체에 의해 부분적으로 가려진 경우에도 인식하도록 모델을 학습시켜, 겹치는 객체가 있는 복잡한 실제 환경에서 탐지 정확도를 향상시킵니다.
- Ultralytics 구현: CutMix
- 참고:
- 잘라낸 영역의 크기와 위치는 적용할 때마다 무작위로 결정됩니다.
- 픽셀 값을 전역적으로 혼합하는 믹스업과 달리
cutmix은 잘라낸 영역 내의 원래 픽셀 강도를 유지하여 로컬 특징을 보존합니다. - 영역은 기존 바운딩 박스와 겹치지 않는 경우에만 대상 이미지에 붙여넣어집니다. 또한 붙여넣은 영역 내에서 원래 영역의 충분한 부분을 유지하는 바운딩 박스만 보존됩니다.
- 이 최소 바운딩 박스 면적 임계값은 현재 구현으로 변경할 수 없습니다. 감지 레이블의 경우
0.1(10%)이며, 레이블에 세그먼트가 포함되면0.01(1%)입니다.
첫 번째 이미지, cutmix 꺼짐 | 두 번째 이미지, cutmix 꺼짐 | cutmix 켜짐 |
|---|---|---|
![]() | ![]() | ![]() |
복사-붙여넣기 증강 (Copy-Paste Augmentations)#
복사-붙여넣기 (copy_paste)#
- 범위:
0.0-1.0 - 기본값:
0 - 사용법: 폴리곤 라벨이 필요하므로 세그먼트(segment) 및 OBB 작업에 적용됩니다. 이 증강은 이미지 내에서 또는 이미지 간에 객체를 복사하며,
copy_paste_mode에 의해 제어됩니다.flip모드에서copy_paste은 복사된 대상 객체의 비율입니다. 예를 들어 대상 객체가 6개인 이미지에copy_paste=0.5가 적용되면 3개의 복사본이 추가됩니다.mixup모드에서는 동일한 값이 복사-붙여넣기 실행 확률도 제어합니다.copy_paste=0.0은 이 변환을 비활성화합니다. - 목적: 인스턴스 세분화 작업과 희귀 객체 클래스에 특히 유용합니다. 예를 들어 특정 결함 유형이 드물게 나타나는 산업용 결함 탐지에서, 복사-붙여넣기 증강은 이 희귀 결함을 한 이미지에서 다른 이미지로 복사하여 인위적으로 발생 빈도를 높임으로써, 추가적인 결함 샘플 없이도 모델이 표현이 부족한 사례를 더 잘 학습하도록 돕습니다.
- Ultralytics 구현: CopyPaste
- 참고:
- 아래 동영상에서 볼 수 있듯이,
copy_paste증강을 사용하면 한 이미지에서 다른 이미지로 객체를 복사할 수 있습니다. - 복사할 객체가 선택되면
copy_paste_mode에 관계없이 대상 이미지에 이미 존재하는 모든 객체에 대해 IoA가 계산됩니다. 모든 IoA 값이0.3(30%) 미만인 경우에만 객체가 붙여넣어지며, IoA 값이0.3이상인 경우 붙여넣지 않습니다. - IoA 임계값은 현재 구현으로 변경할 수 없으며 기본적으로
0.3(으)로 설정됩니다.
- 아래 동영상에서 볼 수 있듯이,
copy_paste 꺼짐 | copy_paste copy_paste_mode=flip 켜기 | copy_paste 프로세스 시각화 |
|---|---|---|
![]() | ![]() |
복사-붙여넣기 모드 (copy_paste_mode)#
- 옵션:
'flip','mixup' - 기본값:
'flip' - 사용법: copy-paste 증강에 사용되는 방법을 결정합니다.
'flip'(으)로 설정하면 객체가 동일한 이미지에서 오고,'mixup'는 다른 이미지에서 객체를 복사할 수 있도록 합니다. - 목적: 복사된 객체가 타겟 이미지에 통합되는 방식에 유연성을 제공합니다.
- Ultralytics 구현: CopyPaste
- 참고:
- IoA 원칙은 두
copy_paste_mode옵션 모두 동일하지만 객체가 복사되는 방식은 다릅니다. - 이미지 크기에 따라 객체가 프레임 외부로 부분적으로 또는 완전히 복사될 수 있습니다.
- 다각형 주석(polygon annotation)의 품질에 따라 복사된 객체는 원본과 비교했을 때 미세한 모양 변화가 있을 수 있습니다.
- IoA 원칙은 두
| 참조 이미지 | copy_paste을(를) 위해 선택한 이미지 | copy_paste copy_paste_mode=mixup 켜기 |
|---|---|---|
![]() | ![]() | ![]() |
분류(Classification) 전용 증강#
오토 어그먼트 (auto_augment)#
- 옵션:
'randaugment','autoaugment','augmix',None - 기본값:
'randaugment' - 사용법: 분류를 위한 자동화된 증강 정책을 적용합니다.
'randaugment'옵션은 RandAugment를 사용하고,'autoaugment'은 AutoAugment를 사용하며,'augmix'는 AugMix를 사용합니다.None(으)로 설정하면 자동화된 증강이 비활성화됩니다. - 목적: 분류 작업에 대한 증강 전략을 자동으로 최적화합니다. 차이점은 다음과 같습니다:
- AutoAugment: 이 모드는 ImageNet, CIFAR10, SVHN과 같은 데이터셋에서 학습된 사전 정의된 증강 정책을 적용합니다. 사용자는 이러한 기존 정책을 선택할 수 있지만 Torchvision 내에서 새 정책을 학습할 수는 없습니다. 특정 데이터셋에 대한 최적의 증강 전략을 찾으려면 외부 라이브러리나 커스텀 구현이 필요합니다. AutoAugment 논문을 참고하세요.
- RandAugment: 균일한 크기의 변환을 무작위로 선택하여 적용합니다. 이 접근 방식은 광범위한 검색 단계의 필요성을 줄여 모델 견고성을 향상시키면서도 계산 효율성을 높입니다. RandAugment 논문을 참고하세요.
- AugMix: AugMix는 간단한 변환의 무작위 조합을 통해 다양한 이미지 변형을 생성하여 모델의 견고성을 향상시키는 데이터 증강 방법입니다. AugMix 논문을 참고하세요.
- Ultralytics 구현: classify_augmentations()
- 참고:
- 본질적으로, 세 가지 방법의 주요 차이점은 증강 정책이 정의되고 적용되는 방식에 있습니다.
- 세 가지 방법을 자세히 비교하는 이 문서를 참고할 수 있습니다.
무작위 지우기 (erasing)#
- 범위:
0.0-1.0 - 기본값:
0.4 - 사용법: 분류 학습 중 이미지의 일부를 무작위로 지웁니다.
erasing하이퍼파라미터는 변환 적용 확률을 정의하며,erasing=1.0은 모든 이미지에서 영역을 지우고erasing=0.0는 변환을 비활성화합니다. 예를 들어erasing=0.5인 경우, 각 이미지는 일정 부분 지워질 확률이 50%입니다. - 목적: 모델이 견고한 특징을 학습하도록 돕고 특정 이미지 영역에 과도하게 의존하는 것을 방지합니다. 예를 들어 안면 인식 시스템에서 무작위 지우기는 선글라스, 마스크 또는 기타 얼굴 특징을 부분적으로 가릴 수 있는 물체와 같은 부분적 가림(occlusion)에 대해 모델이 더 견고해지도록 돕습니다. 이는 모델이 단순히 가려질 수 있는 특징적인 부분에만 의존하지 않고 여러 얼굴 특징을 사용하여 개인을 식별하도록 강제함으로써 실제 환경에서의 성능을 향상시킵니다.
- Ultralytics 구현: classify_augmentations()
- 참고:
erasing 꺼짐 | erasing 켜짐 (예시 1) | erasing 켜짐 (예시 2) | erasing 켜짐 (예시 3) |
|---|---|---|---|
![]() | ![]() | ![]() | ![]() |
고급 증강 기능#
커스텀 Albumentations 변환 (augmentations)#
- 유형: Albumentations 변환의
list - 기본값:
None - 사용법: Python API를 사용하여 데이터 증강을 위한 커스텀 Albumentations 변환을 제공할 수 있습니다. 이 파라미터는 기본 Albumentations 변환 대신 학습 중에 적용될 Albumentations 변환 객체 리스트를 허용합니다.
- 목적: 방대한 Albumentations 변환 라이브러리를 활용하여 데이터 증강 전략을 세밀하게 제어할 수 있습니다. 이는 의료 영상용 탄성 변형 및 그리드 왜곡, 항공 및 위성 원근법에 최적화된 변환, 저조도 환경을 모의하는 노이즈 및 밝기 변화, 또는 산업 검사를 위한 결함 유사 텍스처 변환과 같이 기본 제공되는 YOLO 옵션을 넘어선 특수 증강이 필요할 때 특히 유용합니다.
- Ultralytics 구현: Albumentations
- 참고:
- 변환 객체를 구축하려면 Python API가 필요합니다. Ultralytics는 체크포인트를 저장할 때
A.to_dict()을 사용하여 이를 직렬화하므로, 이미 직렬화된 목록은 YAML 설정 파일이나 CLI를 통해 왕복(round-trip)할 수 있으며, 이것이resume이 이를 복원할 수 있게 하는 방식입니다. - 사용자 정의 변환은 기본 Albumentations 세트를 완전히 대체합니다. 이 페이지의 다른 곳에 설정된 모든 증강(
mosaic,hsv_h,degrees및 기타 항목)은 활성 상태를 유지하며 독립적으로 적용됩니다. - 이미지 기하 구조를 변경하는 공간 변환 시 주의하십시오. Ultralytics는 바운딩 박스를 자동으로 조정하지만, 일부 복잡한 변환은 추가 설정이 필요할 수 있습니다.
- Albumentations는 70개 이상의 변환을 제공하며, Albumentations 문서에 모두 나열되어 있습니다. 많은 변환을 추가하거나 연산 비용이 많이 드는 변환을 사용하면 학습 속도가 느려지므로, 소규모 세트부터 시작하여 에폭 소요 시간을 모니터링하십시오.
detect,segment,semantic,depth,pose,obb작업에 적용됩니다. 분류는 별도의 증강 파이프라인을 사용하므로 제외됩니다.
- 변환 객체를 구축하려면 Python API가 필요합니다. Ultralytics는 체크포인트를 저장할 때
아래 예시들은 Albumentations 1.4.22 버전 이상이 필요하며, 따라서 Python 3.9 버전 이상이 필요합니다.
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(std_range=(0.0124, 0.0277), 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,
)FAQ#
올바른 증강을 선택하는 것은 특정 사용 사례와 데이터셋에 따라 다릅니다. 결정을 돕기 위한 몇 가지 일반적인 지침은 다음과 같습니다:
- 대부분의 경우 색상과 밝기의 미세한 변화는 유익합니다.
hsv_h,hsv_s,hsv_v의 기본값은 훌륭한 시작점입니다. - 카메라의 시점이 일관되고 모델이 배포된 후에도 변경되지 않는 경우
rotation,translation,scale,shear,perspective와 같은 기하학적 변환을 건너뛸 수 있습니다. 그러나 카메라 각도가 다양할 수 있고 모델을 더 견고하게 만들어야 하는 경우 이러한 증강을 유지하는 것이 좋습니다. - 부분적으로 가려진 객체나 이미지당 여러 객체가 있는 것이 허용되고 라벨 값을 변경하지 않는 경우에만
mosaic증강을 사용하십시오. 또는mosaic을 활성화 상태로 유지하면서close_mosaic값을 늘려 학습 프로세스 초기에 비활성화할 수 있습니다.
요약하자면, 간단하게 유지하십시오. 적은 수의 증강으로 시작하여 필요에 따라 점진적으로 추가하십시오. 목표는 학습 과정을 복잡하게 만드는 것이 아니라 모델의 일반화와 견고성을 향상시키는 것입니다. 또한 적용하는 증강이 모델이 운영 환경에서 직면할 동일한 데이터 분포를 반영하는지 확인하십시오.
- 대부분의 경우 색상과 밝기의 미세한 변화는 유익합니다.
albumentations패키지가 설치된 경우, Ultralytics는 이를 사용하여 일련의 추가 이미지 증강을 자동으로 적용합니다. 이러한 증강은 내부적으로 처리되며 추가 설정이 필요하지 않습니다.적용된 전체 변환 목록은 기술 문서와 Albumentations 통합 가이드에서 확인할 수 있습니다. 확률
p가0보다 큰 증강만 활성화됩니다. 이들은 흐림이나 그레이스케일 효과와 같은 실제 시각적 아티팩트를 모방하기 위해 의도적으로 낮은 빈도로 적용됩니다.Python API를 사용하여 자신만의 커스텀 Albumentations 변환을 제공할 수도 있습니다. 자세한 내용은 고급 증강 기능 섹션을 참조하십시오.
albumentations패키지가 설치되어 있는지 확인하십시오. 설치되어 있지 않다면 설치하세요:pip install albumentations일단 설치되면 해당 패키지가 자동으로 감지되어 Ultralytics에서 사용되어야 합니다.
사용자 정의 데이터셋 클래스와 트레이너를 생성하여 augmentation을 커스터마이징할 수 있습니다. 예를 들어, 기본 Ultralytics 분류 augmentation을 PyTorch의 torchvision.transforms.Resize 또는 기타 transform으로 교체할 수 있습니다. 구현 세부 사항은 분류 문서의 custom training example을 참조하십시오.













































