Ultralytics YOLO27:

Ultralytics YOLO를 사용한 데이터 증강#

YOLO data augmentation examples showing original and augmented images for training

소개#

데이터 증강은 기존 이미지에 다양한 변환을 적용하여 학습 데이터셋을 인위적으로 확장하는 컴퓨터 비전의 핵심 기법입니다. Ultralytics YOLO와 같은 딥러닝 모델을 학습할 때 데이터 증강은 모델의 견고성을 높이고 과적합을 줄이며 실제 환경에 대한 일반화 성능을 향상합니다.



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="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)
증강 인수를 0으로 설정해도 Albumentations가 비활성화되지는 않습니다

이 페이지에 나열된 변환은 학습 인수를 통해 제어하는 항목입니다. albumentations 패키지가 설치되어 있으면 Ultralytics는 p=0.01의 각 확률로 blur, median blur, grayscale, CLAHE로 구성된 소규모 Albumentations 세트도 적용하며, default.yaml의 어떤 인수도 이를 끄지 않습니다. 제거하려면 패키지를 삭제하거나, 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_hhsv_h 사이에서 무작위로 선택됩니다. 예를 들어 hsv_h=0.3인 경우 이동값은 -0.3에서 0.3 사이에서 무작위로 선택됩니다. 0.5보다 큰 값에서는 색조 이동이 색상환을 순환하므로 0.5-0.5 사이에서 증강 결과가 동일하게 보입니다.
  • 목적: 조명 조건이 객체의 외관에 큰 영향을 줄 수 있는 야외 환경에 특히 유용합니다. 예를 들어 바나나는 밝은 햇빛 아래에서는 더 노랗게 보이지만 실내에서는 더 녹색을 띨 수 있습니다.
  • Ultralytics 구현: RandomHSV
-0.5-0.250.00.250.5
Hue shift -0.5 augmentationHue shift -0.25 augmentationOriginal image without augmentationHue shift 0.25 augmentationHue shift -0.5 augmentation

채도 조정 (hsv_s)#

  • 범위: 0.0 - 1.0
  • 기본값: 0.7
  • 사용법: 이미지 색상의 강도를 수정합니다. hsv_s 하이퍼파라미터는 이동 크기를 정의하며, 최종 조정값은 -hsv_shsv_s 사이에서 무작위로 선택됩니다. 예를 들어 hsv_s=0.7인 경우 강도는 -0.7에서 0.7 사이에서 무작위로 선택됩니다.
  • 목적: 다양한 날씨 조건과 카메라 설정에 모델이 대응하도록 돕습니다. 예를 들어 빨간색 교통 표지판은 맑은 날에는 매우 선명하게 보일 수 있지만 안개가 낀 환경에서는 흐릿하고 색이 바랜 것처럼 보일 수 있습니다.
  • Ultralytics 구현: RandomHSV
-1.0-0.50.00.51.0
Saturation -1.0 grayscale augmentationSaturation -0.5 augmentationOriginal image without augmentationSaturation 0.5 augmentationSaturation 1.0 vivid augmentation

밝기 조정 (hsv_v)#

  • 범위: 0.0 - 1.0
  • 기본값: 0.4
  • 사용법: 이미지의 밝기를 변경합니다. hsv_v 하이퍼파라미터는 이동 크기를 정의하며, 최종 조정값은 -hsv_vhsv_v 사이에서 무작위로 선택됩니다. 예를 들어 hsv_v=0.4인 경우 강도는 -0.4에서 0.4 사이에서 무작위로 선택됩니다.
  • 목적: 다양한 조명 조건에서 작동해야 하는 모델을 학습하는 데 필수적입니다. 예를 들어 빨간 사과는 햇빛 아래에서는 밝게 보이지만 그늘에서는 훨씬 어둡게 보일 수 있습니다.
  • Ultralytics 구현: RandomHSV
-1.0-0.50.00.51.0
Brightness -1.0 dark augmentationBrightness -0.5 augmentationOriginal image without augmentationBrightness 0.5 augmentationBrightness 1.0 bright augmentation

기하학적 변환#

회전 (degrees)#

  • 범위: 0.0에서 180까지
  • 기본값: 0
  • 사용법: 지정된 범위 내에서 이미지를 무작위로 회전합니다. degrees 하이퍼파라미터는 회전 각도를 정의하며, 최종 조정값은 -degreesdegrees 사이에서 무작위로 선택됩니다. 예를 들어 degrees=10.0인 경우 회전값은 -10.0에서 10.0 사이에서 무작위로 선택됩니다.
  • 목적: 객체가 다양한 방향으로 나타날 수 있는 애플리케이션에 중요합니다. 예를 들어 항공 드론 이미지에서는 차량이 어느 방향으로든 배치될 수 있으므로, 모델은 회전과 관계없이 객체를 인식해야 합니다.
  • Ultralytics 구현: RandomPerspective
-180-900.090180
Rotation -180 degrees augmentationRotation -90 degrees augmentationOriginal image without augmentationRotation 90 degrees augmentationRotation 180 degrees augmentation

이동 (translate)#

  • 범위: 0.0 - 1.0
  • 기본값: 0.1
  • 사용법: 이미지 크기에 대한 무작위 비율만큼 이미지를 가로와 세로로 이동합니다. translate 하이퍼파라미터는 이동 크기를 정의하며, 최종 조정값은 -translatetranslate 범위에서 두 번(각 축에 한 번씩) 무작위로 선택됩니다. 예를 들어 translate=0.5인 경우 x축에서는 -0.5에서 0.5 사이의 이동값이 무작위로 선택되고, y축에서도 같은 범위 내에서 서로 독립적인 무작위 값이 선택됩니다.
  • 목적: 모델이 부분적으로 보이는 객체를 감지하도록 학습하고 객체 위치에 대한 견고성을 향상합니다. 예를 들어 차량 손상 평가 애플리케이션에서는 촬영자의 위치와 거리에 따라 차량 부품이 프레임에 완전히 또는 부분적으로 나타날 수 있으며, 이동 증강은 객체의 완전성이나 위치와 관계없이 이러한 특징을 인식하도록 모델을 학습시킵니다.
  • Ultralytics 구현: RandomPerspective
  • 참고: 단순화를 위해 아래에 적용된 이동은 xy 두 축에서 매번 동일합니다. -1.01.0 값은 이미지를 프레임 밖으로 완전히 이동시키므로 표시하지 않습니다.
-0.5-0.250.00.250.5
Translation -0.5 shift augmentationTranslation -0.25 shift augmentationOriginal image without augmentationTranslation 0.25 shift augmentationTranslation 0.5 shift augmentation

스케일 (scale)#

  • 범위: 부동 소수점 값으로 0.0 - 1.0, 또는 명시적인 (min, max) 튜플
  • 기본값: 0.5
  • 사용법: 지정된 범위 내의 무작위 계수로 이미지 크기를 조정합니다. 부동 소수점 형식에서는 scale 하이퍼파라미터가 스케일링 배율을 정의하며, 최종 계수는 1-scale1+scale 사이에서 무작위로 선택됩니다. 예를 들어 scale=0.5인 경우 스케일링값은 0.5에서 1.5 사이에서 무작위로 선택됩니다. 튜플 형식에서는 scale이 해당 범위를 직접 설정하므로, scale=(0.5, 2.0)0.52.0 사이에서 계수를 샘플링합니다.
  • 목적: 모델이 서로 다른 거리와 크기의 객체를 처리할 수 있도록 합니다. 예를 들어 자율 주행 애플리케이션에서는 차량이 카메라에서 다양한 거리에 나타날 수 있으므로, 모델은 크기와 관계없이 차량을 인식해야 합니다.
  • Ultralytics 구현: RandomPerspective
  • 참고:
    • -1.0 값은 이미지를 사라지게 하므로 표시하지 않으며, 1.0은 단순히 2배 확대를 수행합니다.
    • 아래 표에 표시된 값은 scale 하이퍼파라미터에 전달하는 값이 아니라 실제로 적용된 스케일 변화량입니다.
    • 부동 소수점 형식은 0.0 - 1.0 범위로 검증되며, 범위를 벗어난 값은 ValueError를 발생시킵니다. 2배 확대를 초과하는 계수를 샘플링하려면 대신 (min, max) 튜플 형식을 전달합니다.
    • 튜플 형식은 기하학적 작업에만 적용됩니다. Classification 학습은 부동 소수점 값(1.0 - scale에서 1.0까지)에서 자체 crop 범위를 계산하므로, 여기에 튜플을 전달하면 TypeError가 발생합니다.
-0.5-0.250.00.250.5
Scale 0.5x zoom out augmentationScale 0.75x zoom out augmentationOriginal image without augmentationScale 1.25x zoom in augmentationScale 1.5x zoom in augmentation

전단 (shear)#

  • 범위: -180에서 +180까지
  • 기본값: 0
  • 사용법: x축과 y축을 따라 이미지에 기하학적 변환을 적용하여 이미지를 기울입니다. 이 변환은 평행선을 유지하면서 이미지의 일부를 한 방향으로 이동시킵니다. shear 하이퍼파라미터는 전단 각도를 정의하며, 최종 조정값은 -shearshear 사이에서 무작위로 선택됩니다. 예를 들어 shear=10.0인 경우 x축에서는 -10에서 10 사이의 전단값이 무작위로 선택되고, y축에서도 같은 범위 내에서 서로 독립적인 무작위 값이 선택됩니다.
  • 목적: 약간 기울어지거나 비스듬한 시점으로 인해 발생하는 관찰 각도의 변화에 모델이 일반화하도록 돕습니다. 예를 들어 교통 모니터링에서는 카메라가 수직으로 배치되지 않아 자동차나 도로 표지판 같은 객체가 기울어져 보일 수 있습니다. 전단 증강을 적용하면 모델은 이러한 왜곡에도 불구하고 객체를 인식하는 방법을 학습합니다.
  • Ultralytics 구현: RandomPerspective
  • 참고:
    • shear 값은 이미지를 빠르게 왜곡할 수 있으므로 작은 값부터 시작하여 점진적으로 늘리는 것이 좋습니다.
    • 원근 변환과 달리 전단은 깊이나 소실점을 도입하지 않고, 서로 마주 보는 변을 평행하게 유지하면서 각도를 변경하여 객체의 형태를 왜곡합니다.
-10-50.0510
Shear -10 degrees augmentationShear -5 degrees augmentationOriginal image without augmentationShear 5 degrees augmentationShear 10 degrees augmentation

원근 (perspective)#

  • 범위: 0.0 - 0.001
  • 기본값: 0
  • 사용법: x축과 y축 모두에 완전한 원근 변환을 적용하여 서로 다른 깊이나 각도에서 볼 때 객체가 보이는 방식을 시뮬레이션합니다. perspective 하이퍼파라미터는 원근 크기를 정의하며, 최종 조정값은 -perspectiveperspective 사이에서 무작위로 선택됩니다. 예를 들어 perspective=0.001인 경우 x축에서는 -0.001에서 0.001 사이의 원근값이 무작위로 선택되고, y축에서도 같은 범위 내에서 서로 독립적인 무작위 값이 선택됩니다.
  • 목적: 원근 변화로 인해 객체가 단축되거나 왜곡되어 보이는 환경을 비롯해 극단적인 시점 변화에 대응하는 데 원근 증강은 매우 중요합니다. 예를 들어 드론 기반 객체 감지에서는 드론의 기울기와 고도에 따라 건물, 도로, 차량이 늘어나거나 압축되어 보일 수 있습니다. 원근 변환을 적용하면 모델은 이러한 원근으로 인한 왜곡에도 불구하고 객체를 인식하는 방법을 학습하여 실제 배포 환경에서의 견고성을 높입니다.
  • Ultralytics 구현: RandomPerspective
-0.001-0.00050.00.00050.001
Perspective -0.001 transformationPerspective -0.0005 transformationOriginal image without augmentationPerspective 0.0005 transformationPerspective 0.001 transformation

상하 뒤집기 (flipud)#

  • 범위: 0.0 - 1.0
  • 기본값: 0
  • 사용법: y축을 기준으로 이미지를 반전하여 수직으로 뒤집습니다. 이 변환은 전체 이미지를 거꾸로 미러링하지만 객체 간의 모든 공간적 관계는 유지합니다. flipud 하이퍼파라미터는 변환 적용 확률을 정의하며, flipud=1.0 값은 모든 이미지를 뒤집고 flipud=0.0 값은 변환을 완전히 비활성화합니다. 예를 들어 flipud=0.5인 경우 각 이미지가 거꾸로 뒤집힐 확률은 50%입니다.
  • 목적: 객체가 거꾸로 나타날 수 있는 환경에 유용합니다. 예를 들어 로봇 비전 시스템에서는 컨베이어 벨트나 로봇 팔 위의 객체를 집어 다양한 방향으로 배치할 수 있습니다. 수직 뒤집기는 모델이 객체의 상하 방향과 관계없이 이를 인식하도록 돕습니다.
  • Ultralytics 구현: RandomFlip
flipud 비활성화flipud 활성화
Original image without augmentationVertical flip augmentation enabled

좌우 뒤집기 (fliplr)#

  • 범위: 0.0 - 1.0
  • 기본값: 0.5
  • 사용법: x축을 기준으로 이미지를 미러링하여 수평으로 뒤집습니다. 이 변환은 공간적 일관성을 유지하면서 왼쪽과 오른쪽을 바꾸므로, 모델이 거울상 방향으로 나타나는 객체에 일반화하도록 돕습니다. fliplr 하이퍼파라미터는 변환 적용 확률을 정의하며, fliplr=1.0 값은 모든 이미지를 뒤집고 fliplr=0.0 값은 변환을 완전히 비활성화합니다. 예를 들어 fliplr=0.5인 경우 각 이미지가 좌우로 뒤집힐 확률은 50%입니다.
  • 목적: 수평 뒤집기는 객체 감지, 포즈 추정, 얼굴 인식에서 좌우 변화에 대한 견고성을 높이기 위해 널리 사용됩니다. 예를 들어 자율 주행에서는 차량과 보행자가 도로의 어느 쪽에든 나타날 수 있으며, 수평 뒤집기는 모델이 두 방향 모두에서 이를 동일하게 잘 인식하도록 돕습니다.
  • Ultralytics 구현: RandomFlip
fliplr 비활성화fliplr 활성화
Original image without augmentationHorizontal flip augmentation enabled

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 활성화
Original image without augmentationBGR channel swap augmentation

Mosaic (mosaic)#

  • 범위: 0.0 - 1.0
  • 기본값: 1
  • 사용법: 4개의 학습 이미지를 하나로 결합합니다. mosaic 하이퍼파라미터는 변환 적용 확률을 정의하며, mosaic=1.0은 모든 이미지를 결합하고 mosaic=0.0는 변환을 비활성화합니다. 예를 들어 mosaic=0.5인 경우 각 이미지가 다른 3개의 이미지와 결합될 확률은 50%입니다.
  • 목적: 작은 객체 감지와 맥락 이해를 향상하는 데 매우 효과적입니다. 예를 들어 동물이 다양한 거리와 크기로 나타날 수 있는 야생동물 보호 프로젝트에서 Mosaic 증강은 제한된 데이터로 다양한 학습 샘플을 인위적으로 생성하여 모델이 서로 다른 크기, 부분적 가림, 환경적 맥락에서 같은 종을 인식하도록 학습시킵니다.
  • Ultralytics 구현: Mosaic
  • 참고:
    • mosaic 증강은 모델을 더욱 견고하게 만들 수 있지만 학습 프로세스를 더 어렵게 만들 수도 있습니다.
    • mosaic 증강은 학습 종료 전 비활성화할 epoch 수를 close_mosaic에 설정하여 학습 후반부에 비활성화할 수 있습니다. 예를 들어 epochs200으로 설정하고 close_mosaic20로 설정하면 mosaic 증강은 180 epoch 후에 비활성화됩니다. close_mosaic0로 설정하면 mosaic 증강이 전체 학습 과정에서 활성화됩니다.
    • Mosaic을 종료하면 동일한 epoch에 copy_paste, mixup, cutmix도 비활성화됩니다. 네 가지가 함께 꺼지므로 마지막 epoch에서는 이들 없이 학습하지만, 다른 모든 증강(기하학적 변환, HSV, 뒤집기, Albumentations)은 계속 실행됩니다. 기본 flip 모드의 copy_paste은 여러 이미지를 결합하지 않고 단일 이미지 내에서 작동한다는 점에 유의하십시오.
    • 생성된 Mosaic의 중심은 무작위 값으로 결정되며 이미지 내부 또는 이미지 외부에 위치할 수 있습니다.
    • 현재 mosaic 증강 구현은 현재 이미지를 최근 로드된 이미지 버퍼에서 가져온 3개의 다른 이미지 또는 cache='ram'인 경우 데이터셋의 어느 위치에서든 가져온 3개의 이미지와 결합합니다. 어느 경우든 복원 추출 방식으로 샘플링하므로 하나의 Mosaic에 같은 이미지가 두 번 이상 나타날 수 있습니다.
mosaic 비활성화mosaic 활성화
Original image without augmentationMosaic 4-image augmentation enabled

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 비활성화두 번째 이미지, mixup 비활성화mixup 활성화
First image for MixUp blendingSecond image for MixUp blendingMixUp blending augmentation enabled

CutMix (cutmix)#

  • 범위: 0.0 - 1.0
  • 기본값: 0
  • 사용법: 지정된 확률로 한 이미지에서 직사각형 영역을 잘라 다른 이미지에 붙여 넣습니다. cutmix 하이퍼파라미터는 변환 적용 확률을 정의하며, cutmix=1.0은 모든 이미지에 이 변환을 적용하고 cutmix=0.0는 이를 완전히 비활성화합니다. 예를 들어 cutmix=0.5인 경우 각 이미지의 한 영역이 다른 이미지의 패치로 대체될 확률은 50%입니다.
  • 목적: 로컬 특징의 무결성을 유지하면서 현실적인 가림 상황을 생성하여 모델 성능을 향상합니다. 예를 들어 자율 주행 시스템에서 CutMix는 차량이나 보행자가 다른 객체에 의해 부분적으로 가려진 경우에도 이를 인식하도록 모델을 학습시켜, 객체가 겹치는 복잡한 실제 환경에서 감지 정확도를 높입니다.
  • Ultralytics 구현: CutMix
  • 참고:
    • 잘라낼 영역의 크기와 위치는 적용할 때마다 무작위로 결정됩니다.
    • 픽셀 값을 전역적으로 혼합하는 Mixup과 달리 cutmix은 잘라낸 영역 내의 원래 픽셀 강도를 유지하여 로컬 특징을 보존합니다.
    • 기존 BBox와 겹치지 않는 경우에만 대상 이미지에 영역을 붙여 넣습니다. 또한 붙여 넣은 영역 내에서 원래 면적을 충분히 유지하는 BBox만 보존합니다.
    • 이 최소 BBox 면적 임계값은 현재 구현에서 변경할 수 없습니다. detection 레이블에는 0.1 (10%)이고, 레이블에 segment가 포함되면 0.01 (1%)입니다.
첫 번째 이미지, cutmix 비활성화두 번째 이미지, cutmix 비활성화cutmix 활성화
First image for CutMixSecond image for CutMixCutMix augmentation enabled

Copy-Paste 증강#

Copy-Paste (copy_paste)#

  • 범위: 0.0 - 1.0
  • 기본값: 0
  • 사용법: polygon 레이블이 필요하므로 segment 및 OBB 작업에 적용됩니다. 이 증강은 copy_paste_mode으로 제어되며 이미지 내부 또는 이미지 간에 객체를 복사합니다. flip 모드에서는 copy_paste이 복사되는 대상 객체의 비율입니다. 대상 객체가 6개인 이미지에는 copy_paste=0.5에서 3개의 복사본이 추가됩니다. mixup 모드에서는 같은 값이 Copy-Paste가 실행될 확률도 제어합니다. copy_paste=0.0은 변환을 비활성화합니다.
  • 목적: instance segmentation 작업과 희귀 객체 클래스에 특히 유용합니다. 예를 들어 특정 유형의 결함이 드물게 나타나는 산업 결함 감지에서 Copy-Paste 증강은 한 이미지의 희귀 결함을 다른 이미지에 복사하여 해당 결함의 발생 빈도를 인위적으로 높이고, 추가적인 결함 샘플 없이도 모델이 이러한 부족한 사례를 더 잘 학습하도록 돕습니다.
  • Ultralytics 구현: CopyPaste
  • 참고:
    • 아래 동영상에 나오는 것처럼 copy_paste 증강을 사용하여 한 이미지의 객체를 다른 이미지로 복사할 수 있습니다.
    • 복사할 객체가 선택되면 copy_paste_mode과 관계없이 해당 객체의 IoA를 대상 이미지에 이미 있는 모든 객체와 비교하여 계산합니다. 모든 IoA 값이 0.3(30%) 미만인 경우에만 객체를 붙여넣으며, IoA 값 중 하나라도 0.3 이상이면 붙여넣지 않습니다.
    • 현재 구현에서는 IoA 임계값을 변경할 수 없으며 기본값은 0.3으로 설정되어 있습니다.
copy_paste 비활성화copy_pastecopy_paste_mode=flip로 켜기copy_paste 프로세스 시각화
Original image without augmentationCopy-paste augmentation enabled

Copy-Paste 모드(copy_paste_mode)#

  • 옵션: 'flip', 'mixup'
  • 기본값: 'flip'
  • 사용법: copy-paste 증강에 사용할 방법을 지정합니다. 'flip'로 설정하면 객체가 동일한 이미지에서 가져오고, 'mixup'로 설정하면 다른 이미지에서 객체를 복사할 수 있습니다.
  • 목적: 복사한 객체를 대상 이미지에 통합하는 방식을 유연하게 조정할 수 있습니다.
  • Ultralytics 구현: CopyPaste
  • 참고:
    • copy_paste_mode 옵션 모두 IoA 원칙은 동일하지만 객체를 복사하는 방식은 다릅니다.
    • 이미지 크기에 따라 객체가 프레임 밖으로 일부 또는 전부 복사되는 경우가 있습니다.
    • 폴리곤 주석의 품질에 따라 복사한 객체의 형태가 원본과 비교해 약간 달라질 수 있습니다.
참조 이미지copy_paste에 선택된 이미지copy_pastecopy_paste_mode=mixup로 켜기
Second image for MixUp blendingOriginal image without augmentationCopy-paste with MixUp mode

분류 전용 증강#

Auto Augment(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()
  • 참고:
    • 본질적으로 세 방법의 주요 차이점은 증강 정책을 정의하고 적용하는 방식입니다.
    • 세 방법을 자세히 비교한 이 글을 참조할 수 있습니다.

Random Erasing(erasing)#

  • 범위: 0.0 - 1.0
  • 기본값: 0.4
  • 사용법: 분류 학습 중 이미지의 일부를 무작위로 지웁니다. erasing 하이퍼파라미터는 변환을 적용할 확률을 정의하며, erasing=1.0은 모든 이미지에서 영역을 지우고 erasing=0.0는 변환을 비활성화합니다. 예를 들어 erasing=0.5을 사용하면 각 이미지에서 일부가 지워질 확률이 50%입니다.
  • 목적: 모델이 견고한 특징을 학습하도록 돕고 특정 이미지 영역에 과도하게 의존하는 것을 방지합니다. 예를 들어 얼굴 인식 시스템에서 Random Erasing은 선글라스, 마스크 또는 얼굴 특징을 부분적으로 가릴 수 있는 다른 객체와 같은 부분적 가림에 모델이 더 견고해지도록 돕습니다. 이는 모델이 가려질 수 있는 독특한 특징에만 의존하지 않고 여러 얼굴 특징을 사용하여 개인을 식별하도록 함으로써 실제 환경에서의 성능을 향상합니다.
  • Ultralytics 구현: classify_augmentations()
  • 참고:
    • erasing 증강에는 scale, ratio, value 하이퍼파라미터가 포함되어 있으며, 현재 구현에서는 이를 변경할 수 없습니다. PyTorch 문서에 명시된 기본값은 각각 (0.02, 0.33), (0.3, 3.3), 0입니다.
erasing 비활성화erasing 켜기(예시 1)erasing 켜기(예시 2)erasing 켜기(예시 3)
Original image without augmentationRandom erasing example 1Random erasing example 2Random erasing example 3

고급 증강 기능#

사용자 지정 Albumentations 변환(augmentations)#

  • 유형: Albumentations 변환의 list
  • 기본값: None
  • 사용법: Python API를 사용한 데이터 증강에 사용자 지정 Albumentations 변환을 제공할 수 있습니다. 이 매개변수는 기본 Albumentations 변환 대신 학습 중 적용할 Albumentations 변환 객체 목록을 허용합니다.
  • 목적: 광범위한 Albumentations 변환 라이브러리를 활용하여 데이터 증강 전략을 세밀하게 제어할 수 있습니다. 이는 기본 제공 YOLO 옵션을 넘어서는 특수한 증강이 필요할 때 특히 유용합니다. 예를 들어 의료 영상의 탄성 변형 및 격자 왜곡, 상공 항공 및 위성 관점에 맞춘 변환, 저조도 조건을 모사하는 노이즈 및 밝기 변화, 산업 검사에서 결함과 유사한 텍스처 변화 등을 적용할 수 있습니다.
  • Ultralytics 구현: Albumentations
  • 참고:
    • 변환 객체를 생성하려면 Python API가 필요합니다. Ultralytics는 체크포인트를 저장할 때 이를 A.to_dict()으로 직렬화하므로, 이미 직렬화된 목록은 YAML 구성 파일이나 CLI를 통해 왕복 처리되며, 이를 통해 resume이 객체를 복원할 수 있습니다.
    • 사용자 지정 변환은 기본 Albumentations 세트를 완전히 대체합니다. 이 페이지의 다른 위치에서 구성한 모든 증강 — mosaic, hsv_h, degrees 및 나머지 — 은 계속 활성 상태로 유지되며 독립적으로 적용됩니다.
    • 이미지 기하학적 구조를 변경하는 공간 변환은 A.OneOf 또는 A.Compose에 중첩된 변환을 포함하여 바운딩 박스, 폴리곤, 키포인트, 깊이 또는 시맨틱 마스크를 이미지와 함께 이동시킵니다. A.RandomGridShuffle는 폴리곤 또는 키포인트 토폴로지를 보존할 수 없으며 세그멘테이션, 포즈, OBB 샘플에서 오류를 발생시킵니다.
    • Albumentations는 70개 이상의 변환을 제공하며, Albumentations 문서에 전체 목록이 나와 있습니다. 많은 변환이나 계산 비용이 높은 변환을 추가하면 학습 속도가 느려지므로, 작은 세트로 시작하고 epoch 시간을 확인하십시오.
    • detect, segment, semantic, depth, pose, obb 작업에 적용됩니다. 분류는 별도의 증강 파이프라인을 사용하므로 제외됩니다.

아래 예제를 사용하려면 Albumentations 1.4.22 이상과 Python 3.9 이상이 필요합니다.

사용자 지정 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(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 큰 증강만 활성 상태라는 점에 유의하십시오. 이러한 증강은 블러나 grayscale 효과와 같은 실제 환경의 시각적 아티팩트를 모방하기 위해 의도적으로 낮은 빈도로 적용됩니다.

    Python API를 사용하여 사용자 지정 Albumentations 변환을 제공할 수도 있습니다. 자세한 내용은 고급 증강 기능 섹션을 참조하십시오.

  • albumentations 패키지가 설치되어 있는지 확인하십시오. 설치되어 있지 않다면 다음과 같이 설치하십시오.

    pip install albumentations

    설치가 완료되면 Ultralytics가 패키지를 자동으로 감지하여 사용합니다.

  • 사용자 지정 데이터셋 클래스와 트레이너를 생성하여 증강을 사용자 지정할 수 있습니다. 예를 들어 기본 Ultralytics 분류 증강을 PyTorch의 torchvision.transforms.Resize 또는 다른 변환으로 대체할 수 있습니다. 구현 세부 정보는 분류 문서의 사용자 지정 학습 예제를 참조하십시오.

댓글