Ultralytics YOLO27: 대기자 명단에 등록하세요.
Get Started
강의초급

증강을 신중하게 사용하기

모든 증강을 배포 카메라를 기준으로 검증하고, 근거를 갖춘 프로필을 구성해 학습에 사용한 다음 학습 배치에서 결과를 확인합니다.

빨간색 캡슐과 주황색 캡슐을 분류하는 분류 라인을 떠올려 보세요. 이 모델은 기본 색조 지터를 사용해 학습합니다. 매 에포크마다 모델은 주황색으로 물든 빨간색 캡슐을 보게 되고, 결국 가장 중요하게 학습해야 할 색상이 중요하지 않다고 학습합니다. 각 변환이 배포 카메라에서 실제로 만들어질 수 있을 때만 증강으로 모델의 견고성을 높일 수 있습니다. 이 강의에서는 어떤 변환을 유지할지 결정하는 검증 방법을 안내합니다.

학습 성과

변경한 각 인수에 대해 배포 환경을 근거로 한 줄 설명을 덧붙여 증강 프로필을 선택하고, 이를 사용해 학습한 다음 train_batch0.jpg에서 확인합니다.

속성 과정
이미 사용법을 알고 계신다면, 간단히 요약해 드리겠습니다.
  1. 먼저 기본 증강으로 학습하고 기준 성능을 기록합니다.

  2. 색상이 클래스를 구분하는 경우의 색조 변화처럼 카메라에서 만들어질 수 없는 변환은 비활성화합니다.

  3. 하향식 뷰에 사용하는 flipud과 같이 카메라에서 만들어질 수 있는 변환은 활성화합니다.

  4. train_batch0.jpg을 열고 박스가 객체에 잘 맞으며 클래스 구분 특성이 유지되는지 확인합니다.

실습형

증강의 기능#

마코앵무새 사진 한 장에 적용된 증강: 수평 뒤집기, 자르기, 미디언 블러, 대비 조정, 색조·채도·명도 변화, 감마 조정

데이터 증강은 학습 이미지를 실시간으로 변환하므로 모델은 에포크마다 이미지의 약간씩 다른 버전을 봅니다. 적절한 증강은 조명, 크기, 방향 변화에 대한 견고성을 높이고 과적합을 줄입니다. 이미지가 계속 달라지므로 모델이 이미지를 외울 수 없기 때문입니다. 잘못된 증강은 물리적으로 불가능한 장면을 학습시키고, 해결해야 할 데이터셋의 공백을 가릴 수 있습니다.

위의 색조 패널을 보세요. 빨간색 마코앵무새가 노란색으로 바뀝니다. "마코앵무새와 마코앵무새가 아닌 것"을 구분하는 데는 문제가 없지만, 색상이 두 클래스를 구분하는 기준이라면 성능에 악영향을 줍니다.

중요한 기본값#

다음은 Ultralytics 8.4의 기본값입니다. 모든 인수는 증강 설정 참조 문서에 나와 있습니다.

인수기본값기능변경하는 경우
hsv_h0.015색조 지터색상이 클래스를 정의하는 경우 0으로 설정합니다
hsv_s / hsv_v0.7 / 0.4채도 및 밝기 지터조명이 고정되고 통제된 경우 값을 낮춥니다
degrees0.0무작위 회전(±도)객체가 어느 각도로나 나타날 수 있을 때 값을 높입니다
translate / scale0.1 / 0.5이동 및 확대/축소자르기로 클래스 정의 부분이 잘릴 수 있는 경우 값을 낮춥니다
fliplr0.5수평 뒤집기 확률텍스트처럼 좌우 방향이 중요한 경우 0으로 설정합니다
flipud0.0수직 뒤집기 확률하향식, 항공 또는 현미경 뷰에서는 값을 높입니다
mosaic1.0이미지 네 장을 하나로 합칩니다드물게 사용합니다. close_mosaic을 참조하세요
close_mosaic10마지막 N개 에포크 동안 모자이크를 비활성화합니다실행 횟수가 매우 적을 때 값을 낮춥니다
mixup / cutmix0.0 / 0.0이미지 두 장을 혼합하거나 한 이미지의 패치를 다른 이미지에 붙여 넣습니다기준 성능을 측정한 뒤 소규모 데이터셋에서 시험합니다
copy_paste0.0이미지 간에 객체 인스턴스를 붙여 넣습니다희귀 클래스가 있는 분할, 시맨틱, OBB 데이터셋

깊이 데이터셋은 예외입니다. mosaic, mixup, cutmix, copy_paste은 짝을 이루는 깊이 맵을 무효화하므로 깊이 데이터 로더가 해당 값을 자동으로 0으로 설정합니다.

배포 환경 검증#

활성화한 각 변환에 대해 두 가지 질문을 차례로 확인해야 합니다.

변환현실적인가요?판정
야외 카메라에서 밝기 ±30%예: 시간대에 따라 달라집니다유지
보안 카메라에서 수평 뒤집기예: 사람들이 양방향으로 걸어갑니다유지
벽에 장착된 카메라에서 수직 뒤집기아니요: 바닥은 계속 화면 아래쪽에 있습니다비활성화
하향식 컨베이어 카메라에서 수직 뒤집기예: 프레임에는 '위쪽'이 없습니다활성화
고정형 도로 카메라에서 90° 회전아니요: 카메라가 회전하지 않습니다비활성화
빨간색 부품과 초록색 부품이 서로 다른 클래스일 때 색조 이동아니요: 신호를 훼손합니다비활성화

180도 회전 증강: 고정된 직립 카메라에서는 절대 촬영할 수 없는 거꾸로 된 마코앵무새

거꾸로 된 마코앵무새 이미지는 바로 아래를 보는 드론에는 훌륭한 학습 이미지지만, 벽에 고정된 카메라에는 쓸모가 없습니다. 이 테스트를 통과하지 못하는 변환은 부정적인 학습 신호를 생성합니다. 모델은 실제로 보게 될 이미지를 학습할 능력을 희생하면서 절대 보지 않을 이미지를 인식하도록 학습합니다.

프로필 적용 예시#

컨베이어 위의 하향식 카메라가 색상만 다른 클래스로 구분되는 부품을 분류합니다. 색조 지터는 제외해야 하지만 수직 뒤집기와 작은 회전은 현실적인 변환이 됩니다. 아래와 같이 COCO8 데모 세트에서 실행하며, 실제 데이터 YAML과 에포크 수를 지정해 사용합니다:

from ultralytics import YOLO

model = YOLO("yolo26n.pt")
model.train(
    data="coco8.yaml",
    epochs=1,
    imgsz=320,
    hsv_h=0.0,  # 색상은 클래스 신호입니다. 색조를 실제와 같게 유지하세요
    flipud=0.5,  # 하향식 시점: 프레임에 "위쪽"이 없습니다
    degrees=10.0,  # 부품은 어느 작은 각도로든 놓입니다
)

실행 폴더에서 train_batch0.jpg을 열고 세 가지를 확인합니다. 변환 후에도 박스가 객체에 딱 맞는지, 클래스를 구분하는 단서(색상, 모양, 텍스트)가 유지되는지, 물리적으로 불가능한 결과가 없는지 확인합니다. 하나라도 문제가 생기는 변환은 강도를 낮춥니다. 첫 모델 학습하기에서 학습 실행 자체를 다룹니다.

Mosaic 및 close_mosaic#

네 장의 앵무새 사진을 하나의 학습 이미지로 이어 붙이는 Mosaic 증강

Mosaic은 네 장의 이미지를 하나로 이어 붙이며 기본적으로 활성화되어 있습니다. 객체 탐지에서 가장 효과가 큰 증강입니다. 각 학습 이미지에 여러 장면, 크기, 객체 맥락이 담깁니다. 단점은 Mosaic 이미지가 배포 시의 프레임과 다르게 보인다는 점입니다. 따라서 close_mosaic=10은 마지막 10개 에포크에서 Mosaic을 끄고, 모델은 현실적인 입력으로 학습을 마칩니다. Mosaic을 종료하면 mixup, cutmix, copy_paste도 비활성화되지만, 뒤집기, HSV 및 기하학적 변환은 계속 적용됩니다.

짧은 실행에서는 모자이크를 사용하지 않습니다

위의 에포크 1개 프로파일을 포함해 close_mosaic 에포크 이하로 실행하면 첫 에포크부터 모자이크가 꺼집니다. 스모크 테스트가 아니라 전체 길이 실행의 train_batch0.jpg을 기준으로 모자이크 효과를 판단하세요.

증강으로 해결할 수 없는 문제#

증강은 기존 데이터의 효과를 배가합니다. 데이터셋에 야간 이미지가 없다면 어떤 설정으로도 야간 장면을 만들 수 없습니다. 낮 장면을 더 밝거나 어둡게 만들 뿐입니다. 강한 증강을 적용해야만 특정 클래스가 제대로 작동한다면 해당 클래스의 데이터가 충분하지 않은 것입니다. 고품질의 대표성 있는 데이터 수집하기로 돌아가세요.

모든 조정값을 끝까지 높이면 실제 문제가 가려집니다

작은 데이터셋에서 모든 증강을 최대로 설정하면 배포 환경과 점점 더 다른 이미지로 학습하게 되고, 검증 mAP도 자주 하락합니다. 이유를 명확히 한 뒤 한 번에 인자 하나만 변경하고, 같은 분할에서 기본 베이스라인과 비교하세요.

크롭으로 클래스가 사라지는 경우

클래스가 트럼프 카드 모서리의 기호처럼 객체의 작은 부분으로 정의되는 경우, mosaic, translate, scale가 그 부분을 잘라내 학습 이미지를 다른 클래스와 완전히 똑같이 보이게 만들 수 있습니다. 해당 데이터셋에서는 이 값을 낮추고 train_batch0.jpg에서 수정 결과를 확인하세요.

사용해 보기

기본값 표의 각 인자를 배포 환경에 따라 유지, 변경 또는 비활성화로 표시하고, 변경할 때마다 근거를 한 줄씩 적습니다. 동일한 데이터 분할에서 기본값과 프로필을 각각 적용해 한 번씩 학습하고, 두 경우의 val mAP50-95를 기록합니다. 제출물: 주석을 추가한 표, 두 점수, 사용자 지정 실행에서 생성한 train_batch0.jpg.

완료 조건
다음 조건을 모두 충족하면 레슨을 완료한 것입니다.
  • 변경한 각 인자에 배포 관련 근거가 한 줄씩 기재되어 있습니다.

  • 기본 프로필과 사용자 지정 프로필을 동일한 val 분할에서 비교합니다.

  • 사용자 지정 실행에서 생성한 train_batch0.jpg에 박스가 객체에 딱 맞고 클래스 단서가 온전히 보존되어 있습니다.

정답 보기

드론이 항구를 바로 위에서 촬영하며 방향성 박스로 선박을 탐지합니다. 이런 시점에는 '위쪽'이라는 개념이 없고, 선박은 모든 방향을 향하며, 색상은 클래스를 정의하지 않습니다:

인수선택근거
flipud0.5하향식 시점은 수직으로 뒤집어도 동일하게 보입니다
degrees180선박은 모든 방향으로 나타납니다
hsv_h기본값선체 색상은 다양하며 클래스 판별 신호가 아닙니다
mosaic기본값이미지당 작은 객체가 많으므로 Mosaic이 도움이 됩니다

DOTA8 항공 데모 세트에서는 다음과 같습니다:

yolo obb train data=dota8.yaml model=yolo26n-obb.pt epochs=1 imgsz=320 flipud=0.5 degrees=180

고정형 도로 카메라에서는 동일한 두 가지 변경 사항이 배포 테스트를 통과하지 못합니다. 벽에 장착된 카메라 영상에서 자동차가 거꾸로 나타나는 일은 없습니다.

다음 단계

데이터셋, 분할 및 증강을 준비했습니다. 다음 강의에서는 데이터셋이 학습할 준비가 되었는지 객관적으로 판단합니다.