Ultralytics YOLO27:
Get Started

Ultralytics YOLO를 사용한 모델 검증#

Ultralytics YOLO ecosystem and integrations

소개#

검증은 머신러닝 파이프라인의 핵심 단계로, 학습된 모델의 품질을 평가할 수 있게 합니다. Ultralytics YOLO26의 Val 모드는 객체 탐지 모델의 성능을 평가하기 위한 강력한 도구와 메트릭 모음을 제공합니다. 이 가이드에서는 모델의 정확성과 신뢰성을 확인하기 위해 Val 모드를 효과적으로 사용하는 방법을 종합적으로 설명합니다.

예비 검증 결과는 미출시 YOLO27 프리뷰를 참조하세요.



시청: Ultralytics 모드 튜토리얼: 검증

Ultralytics YOLO로 검증해야 하는 이유#

YOLO26의 Val 모드를 사용하면 다음과 같은 이점이 있습니다:

  • 정밀도: mAP50, mAP75, mAP50-95와 같은 정확한 지표를 확인하여 모델을 종합적으로 평가할 수 있습니다.
  • 편의성: 학습 설정을 기억하는 내장 기능을 활용하여 검증 프로세스를 간소화할 수 있습니다.
  • 유연성: 동일하거나 서로 다른 데이터셋과 이미지 크기로 모델을 검증할 수 있습니다.
  • 하이퍼파라미터 튜닝: 검증 지표를 사용하여 모델을 미세 조정하고 성능을 개선할 수 있습니다.

Val 모드의 주요 기능#

YOLO26의 Val 모드에서 제공하는 주요 기능은 다음과 같습니다:

  • 자동 설정: 모델이 학습 구성을 기억하므로 간편하게 검증할 수 있습니다.
  • 다중 지표 지원: 다양한 정확도 지표를 기준으로 모델을 평가할 수 있습니다.
  • CLI 및 Python API: 선호하는 방식에 따라 명령줄 인터페이스 또는 Python API를 사용하여 검증할 수 있습니다.
  • 데이터 호환성: 학습 단계에서 사용한 데이터셋은 물론 사용자 지정 데이터셋에서도 원활하게 작동합니다.
팁
  • YOLO26 모델은 학습 설정을 자동으로 기억하므로 yolo val model=path/to/best.pt 또는 YOLO("path/to/best.pt").val()은 원본 데이터셋에서 학습 이미지 크기로 검증합니다. 공식 가중치는 작업의 기본 데이터셋으로 대체되며, 이를 재정의하려면 data를 전달합니다.

사용 예시#

학습된 YOLO26n 모델의 정확도를 검증합니다. model은 학습 data 및 인수를 모델 속성으로 유지하므로 인수는 필요하지 않습니다. path/to/best.pt은 모델을 학습한 데이터셋에서 검증합니다. 공식 가중치에는 현재 시스템에 존재하지 않는 학습 데이터셋 경로가 기록되어 있으므로 경고와 함께 작업의 기본 coco8.yaml로 대체됩니다. 다른 데이터셋에서 검증하려면 data를 전달합니다. 검증 인수 전체 목록은 아래의 Arguments 섹션을 참조하세요.

Windows 다중 처리 오류

Windows에서 스크립트로 검증을 실행할 때 RuntimeError이 표시될 수 있습니다. 해결하려면 검증 코드 앞에 if __name__ == "__main__": 블록을 추가하세요.

예제
from ultralytics import YOLO

# 모델 로드
model = YOLO("yolo26n.pt")  # 공식 모델을 불러옵니다
model = YOLO("path/to/best.pt")  # 사용자 지정 모델 로드

# 모델을 검증합니다
metrics = model.val()  # 데이터셋과 설정이 기억되므로 인수가 필요하지 않습니다
metrics.box.map  # map50-95
metrics.box.map50  # map50
metrics.box.map75  # map75
metrics.box.maps  # 각 카테고리의 mAP50-95를 포함하는 목록
metrics.box.image_metrics  # 정밀도, 재현율, F1, TP, FP, FN이 포함된 이미지별 지표 사전

YOLO 모델 검증 인수#

YOLO 모델을 검증할 때는 평가 프로세스를 최적화하기 위해 여러 인수를 미세 조정할 수 있습니다. 이 인수는 입력 이미지 크기, 배치 처리, 성능 임계값 등의 요소를 제어합니다. 아래에서는 검증 설정을 효과적으로 사용자 지정할 수 있도록 각 인수를 자세히 설명합니다.

인수유형기본값설명
datastrNone데이터셋 YAML의 경로(예: coco8.yaml)를 지정하며, YAML에는 검증 데이터 경로가 포함되어야 합니다. 분류 작업에서는 데이터셋 디렉터리 또는 기본 제공 데이터셋 이름(예: imagenet10)을 사용합니다.
imgszint640입력 이미지 크기를 정의합니다. 처리 전에 모든 이미지의 크기를 이 크기로 조정합니다. 크기를 늘리면 작은 객체의 정확도가 향상될 수 있지만 계산 시간이 늘어납니다.
batchint16배치당 이미지 수를 설정합니다. 값이 클수록 GPU 메모리를 효율적으로 사용하지만 더 많은 VRAM이 필요합니다. 사용 가능한 하드웨어 리소스에 맞게 조정하세요.
save_jsonboolFalseTrue이면 추가 분석, 다른 도구와의 통합 또는 COCO와 같은 평가 서버 제출을 위해 결과를 JSON 파일로 저장합니다. 감지 데이터셋에서는 예측 결과를 faster-coco-eval로 평가하고, 학습 중 results.csv의 metrics/mAP_small(B), metrics/mAP_medium(B), metrics/mAP_large(B)로 기록되는 소형·중형·대형 객체 mAP도 보고합니다.
conffloat0.001감지 결과의 최소 신뢰도 임계값을 설정합니다. 값을 낮추면 재현율이 높아지지만 오탐이 늘어날 수 있습니다. 정밀도-재현율 곡선, mAP 및 감지 혼동 행렬은 모두 이 값을 사용합니다. 0.25과 같은 더 높은 conf은 예측 출력과 더 가까운 혼동 행렬을 제공하지만 mAP를 낮출 수 있습니다. 요약 정밀도와 재현율은 최대 F1 신뢰도를 사용하므로 confusion_matrix.png에서 산출한 값과 다를 수 있습니다. 메모리 사용량을 줄이기 위해 OBB 검증의 기본값은 0.01입니다.
ioufloat0.7비최대 억제를 위한 교집합 대비 합집합 임계값을 설정합니다. 중복 감지를 제거하는 기준을 제어합니다.
max_detint300이미지당 최대 감지 수를 제한합니다. detect, segment, pose 및 OBB에서는 기본값 300으로 설정된 경우 이미지의 감지 수가 이를 초과하면 경고를 표시하고 검증 분할에서 레이블이 지정된 객체 수의 최댓값까지 한도를 늘립니다. 다른 값은 그대로 유지되며, 이미지의 감지 수가 이를 초과하면 재현율이 제한될 수 있다는 경고가 표시됩니다.
quantizeint 또는 strNone검증 정밀도: 16/"fp16" 및 32/"fp32"/unset은 PyTorch 및 TorchScript 모델의 FP16 또는 FP32 연산을 선택합니다(CPU에서는 FP32). 다른 형식은 아티팩트와 런타임이 선택하는 정밀도를 사용합니다. 16에서는 OpenVINO가 여전히 클라이언트에서 입력을 FP16으로 반올림한 뒤 FP32로 다시 확장하며, 런타임 정밀도는 변경하지 않습니다. INT8/PTQ 양자화는 내보내기 중에 구성한 다음, 내보낸 모델을 검증하여 사용합니다. 더 이상 사용되지 않는 half 플래그를 대체합니다.
devicestrNone검증에 사용할 장치(cpu, cuda:0, npu, npu:0 등)를 지정합니다. None이면 사용 가능한 장치 중 최적의 장치를 자동으로 선택합니다. 여러 CUDA 장치는 쉼표로 구분해 지정할 수 있습니다.
dnnboolFalseTrue이면 ONNX 모델 추론에 OpenCV DNN 모듈을 사용하여 PyTorch 추론 방식의 대안을 제공합니다.
plotsboolTrueTrue으로 설정하면 모델 성능을 시각적으로 평가할 수 있도록 예측 결과와 정답 비교 그래프, 혼동 행렬, PR 곡선을 생성하고 저장합니다.
classeslist[int]None평가할 클래스 ID 목록을 지정합니다. 평가 중 특정 클래스만 포함하도록 필터링하고 집중할 때 유용합니다.
rectboolTrueTrue이 활성화되면 종횡비가 비슷한 이미지를 직사각형 형태의 배치로 묶습니다. 각 차원을 stride 배수로 올림하기 전에 stride의 절반을 더합니다(semantic에는 추가적인 절반 stride가 적용되지 않습니다). stride가 32일 때, imgsz=640 설정에서 640×640 이미지는 16px 오프셋이 있는 672×672 이미지가 되지만 predict에서는 640×640을 사용하므로 메트릭이 달라질 수 있습니다. rect=False은 정사각형 이미지에서 predict와 일치합니다. 이미지를 imgsz 정사각형으로 늘이는 depth에서는 이 설정이 무시됩니다.
splitstr'val'검증에 사용할 데이터셋 분할(val, test 또는 train)을 결정합니다. 성능 평가에 사용할 데이터 부분을 유연하게 선택할 수 있습니다.
fractionfloat, int 또는 list1.0검증 분할의 하위 집합입니다. [train, val, test] 목록을 사용하면 split에 해당하는 항목이 적용됩니다(1 = 전체 분할, 1보다 큰 정수 = 이미지 수, 생략된 항목 = 전체). 스칼라 값은 split=train에만 적용되며, 이 경우 val 및 test은 전체 분할을 사용합니다.
projectstrNone검증 출력을 저장할 프로젝트 디렉터리의 이름입니다. 여러 실험 또는 모델의 결과를 정리하는 데 도움이 됩니다.
namestrNone검증 실행의 이름입니다. 프로젝트 폴더 안에 하위 디렉터리를 만들어 검증 로그와 출력을 저장하는 데 사용됩니다.
verboseboolTrueTrue이면 클래스별 지표, 배치 진행 상황 및 추가 디버깅 정보를 포함해 검증 과정의 자세한 정보를 표시합니다.
save_txtboolFalseTrue이면 이미지당 하나씩 텍스트 파일에 감지 결과를 저장합니다. 추가 분석, 사용자 지정 후처리 또는 다른 시스템과의 통합에 유용합니다.
save_confboolFalseTrue이면 save_txt이 활성화된 경우 저장된 텍스트 파일에 신뢰도 값을 포함하여 분석 및 필터링에 더 상세한 출력을 제공합니다.
workersint8데이터 로딩에 사용할 작업자 스레드 수입니다. 값을 높이면 데이터 전처리 속도가 빨라질 수 있지만 CPU 사용량이 늘어날 수 있습니다. 0으로 설정하면 메인 스레드를 사용하며, 일부 환경에서 안정성이 향상될 수 있습니다.
augmentboolFalse검증 중 테스트 시점 증강(TTA)을 활성화합니다. 입력의 변환된 버전으로 추론을 수행하여 추론 속도가 느려질 수 있는 대신 감지 정확도를 높일 수 있습니다. Ultralytics PyTorch 모델에서만 사용할 수 있습니다.
agnostic_nmsboolFalse클래스 구분 없는 비최대 억제를 활성화하여 예측 클래스와 관계없이 겹치는 상자 중 점수가 낮은 상자를 억제합니다. 인스턴스 중심 애플리케이션에 유용합니다. NMS가 없는 추론(YOLO26 또는 YOLOv10에서 nms=False)에서는 동일한 감지가 여러 클래스 레이블로 나타나는 것(IoU=1.0 중복)만 방지하며, 서로 다른 상자 간 IoU 임계값 기반 억제는 수행하지 않습니다.
single_clsboolFalse검증 중 모든 클래스를 단일 클래스로 취급합니다. 이진 감지 작업에서 모델 성능을 평가하거나 클래스 구분이 중요하지 않을 때 유용합니다.
visualizeboolFalse각 이미지의 정답, 참양성, 거짓양성 및 거짓음성을 시각화합니다. 디버깅과 모델 해석에 유용합니다.
show_labelsboolTruevisualize=True이면 검증 시각화에 클래스 레이블을 표시합니다. 대응 결과와 오류를 더 깔끔하게 보려면 False로 설정하세요.
show_confboolTruevisualize=True이면 검증 시각화에 신뢰도 점수를 표시합니다. 대응 결과와 오류를 더 깔끔하게 보려면 False로 설정하세요.
compilebool 또는 strFalsebackend='inductor'을 사용하여 PyTorch 2.x torch.compile 그래프 컴파일을 활성화합니다. True → "default", False → 비활성화, 또는 "default", "reduce-overhead", "max-autotune-no-cudagraphs"과 같은 문자열 모드를 지정할 수 있습니다. 지원되지 않으면 경고를 표시하고 eager 모드로 대체합니다.
channels_lastboolNone네이티브 PyTorch 검증에 channels_last(NHWC) 메모리 형식을 사용합니다. None은 PyTorch 1.13 이상을 사용하는 oneDNN 지원 Linux 및 Windows x86 CPU에서 자동으로 활성화하고, False은 비활성화하며, True는 지원되는 x86 CPU 또는 CUDA 장치에서 사용하도록 요청합니다. ARM64, MPS, 이전 PyTorch 버전, oneDNN을 지원하지 않는 CPU 및 내보낸 형식은 변경되지 않습니다. 학습 중 검증은 학습 모델의 레이아웃을 유지합니다.
nmsbool, 선택 사항None기본적으로 NMS를 적용하는 일대다 추론을 실행합니다(None 또는 True). 사용 가능한 경우 NMS가 없는 일대일 헤드를 사용하려면 False로 설정합니다. 자세한 내용은 엔드투엔드 감지 가이드를 참조하세요.

이러한 설정은 각각 검증 프로세스에서 중요한 역할을 하며, YOLO 모델을 사용자 지정 가능하고 효율적으로 평가할 수 있도록 합니다. 특정 요구 사항과 리소스에 따라 매개변수를 조정하면 정확도와 성능 사이에서 최적의 균형을 찾는 데 도움이 됩니다.

인수를 사용한 검증 예시#



시청: 모델 검증 결과를 CSV, JSON, SQL, Polars DataFrame 등으로 내보내는 방법

Explore model validation and different export methods in Google Colab

아래 예시에서는 Python과 CLI에서 사용자 지정 인수를 사용하여 YOLO 모델을 검증하는 방법을 보여 줍니다.

예제
from ultralytics import YOLO

# 모델 로드
model = YOLO("yolo26n.pt")

# 검증 설정을 사용자 지정합니다
metrics = model.val(data="coco8.yaml", imgsz=640, batch=16, conf=0.25, iou=0.7, device="0")
ConfusionMatrix 내보내기

제공된 코드를 사용하여 ConfusionMatrix 결과를 다양한 형식으로 저장할 수도 있습니다.

from ultralytics import YOLO

model = YOLO("yolo26n.pt")

results = model.val(data="coco8.yaml", plots=True)
print(results.confusion_matrix.to_df())
이미지별 정밀도, 재현율 및 F1

검증이 완료되면 분류를 제외한 모든 작업에서 검증 결과에 이미지별 정밀도, 재현율, F1, TP, FP, FN 지표(IoU 임계값 0.5)가 저장됩니다. 검증이 완료된 후 탐지 및 OBB의 경우 results.box.image_metrics, 세그멘테이션의 경우 results.seg.image_metrics, 포즈의 경우 results.pose.image_metrics를 통해 이러한 지표에 액세스할 수 있습니다.

from ultralytics import YOLO

# 모델 로드
model = YOLO("yolo26n.pt")

# 검증을 수행하고 이미지별 지표에 액세스합니다
results = model.val(data="coco8.yaml")

# image_metrics는 이미지 파일명을 키로 사용하는 사전입니다
print(results.box.image_metrics)
# 출력: {'image1.jpg': {'precision': 0.85, 'recall': 0.92, 'f1': 0.88, 'tp': 17, 'fp': 3, 'fn': 1}, ...}

# 특정 이미지의 지표에 액세스합니다
results.box.image_metrics["image1.jpg"]  # {'precision': 0.85, 'recall': 0.92, 'f1': 0.88, 'tp': 17, 'fp': 3, 'fn': 1}

image_metrics의 각 항목에는 다음 키가 포함됩니다:

키설명
precision이미지의 정밀도 점수(tp / (tp + fp)).
recall이미지의 재현율 점수(tp / (tp + fn)).
f1정밀도와 재현율의 조화 평균입니다.
tp이미지의 참 양성 수입니다.
fp이미지의 거짓 양성 수입니다.
fn이미지의 거짓 음성 수입니다.

이 기능은 탐지, 세그멘테이션, 포즈 및 OBB 작업에서 사용할 수 있습니다.

반환되는 지표 객체에는 후속 분석을 위한 내보내기 도우미도 포함됩니다:

메서드반환 유형설명
summary()List[Dict[str, Any]]검증 결과를 요약된 사전으로 변환합니다.
to_df()DataFrame검증 결과를 구조화된 Polars DataFrame으로 반환합니다.
to_csv()str검증 결과를 CSV 형식으로 내보내고 CSV 문자열을 반환합니다.
to_json()str검증 결과를 JSON 형식으로 내보내고 JSON 문자열을 반환합니다.

자세한 내용은 DataExportMixin 클래스 문서를 참조하세요.

다음 단계#

지표가 만족스러우신가요? 모델을 배포 형식으로 내보내세요. 정확도가 기대에 못 미치면 다른 하이퍼파라미터를 사용하거나 학습 데이터를 추가하여 돌아가서 다시 학습하세요.

자주 묻는 질문#

  • Ultralytics에서 제공하는 Val 모드를 사용하여 YOLO26 모델을 검증할 수 있습니다. 예를 들어 Python API에서 모델을 불러오고 다음과 같이 검증을 실행할 수 있습니다:

    from ultralytics import YOLO
    
    # 모델 로드
    model = YOLO("yolo26n.pt")
    
    # 모델을 검증합니다
    metrics = model.val()
    print(metrics.box.map)  # map50-95

    또는 명령줄 인터페이스(CLI)를 사용할 수 있습니다:

    yolo detect val model=yolo26n.pt data=coco8.yaml

    검증을 추가로 사용자 지정하려면 Python 및 CLI 모드 모두에서 imgsz, batch, conf와 같은 다양한 인수를 조정할 수 있습니다. 매개변수 전체 목록은 YOLO 모델 검증 인수 섹션을 참조하세요.

  • YOLO26 모델 검증은 모델 성능을 평가하기 위한 몇 가지 주요 지표를 제공합니다. 다음 지표가 포함됩니다:

    • mAP50(IoU 임계값 0.5에서의 평균 정밀도)
    • mAP75(IoU 임계값 0.75에서의 평균 정밀도)
    • mAP50-95(0.5부터 0.95까지 여러 IoU 임계값에서의 평균 정밀도)

    Python API에서는 다음과 같이 이러한 지표에 액세스할 수 있습니다:

    metrics = model.val()  # `model`이 이미 로드되었다고 가정합니다
    print(metrics.box.map)  # mAP50-95
    print(metrics.box.map50)  # mAP50
    print(metrics.box.map75)  # mAP75
    print(metrics.box.maps)  # 각 카테고리의 mAP50-95 목록
    print(metrics.box.image_metrics)  # 정밀도, 재현율, F1, TP, FP, FN이 포함된 이미지별 지표 사전

    성능을 완전하게 평가하려면 이러한 지표를 모두 검토하는 것이 중요합니다. 자세한 내용은 Val 모드의 주요 기능을 참조하세요.

  • 검증에 Ultralytics YOLO를 사용하면 다음과 같은 이점이 있습니다:

    • 정밀도: YOLO26은 mAP50, mAP75, mAP50-95를 비롯한 정확한 성능 지표를 제공합니다.
    • 편의성: 모델이 학습 설정을 기억하므로 검증을 간편하게 수행할 수 있습니다.
    • 유연성: 동일하거나 서로 다른 데이터셋과 이미지 크기로 검증할 수 있습니다.
    • 하이퍼파라미터 튜닝: 검증 지표를 활용하면 모델을 미세 조정하여 성능을 개선할 수 있습니다.

    이러한 이점을 통해 모델을 철저히 평가하고 더 나은 결과를 얻도록 최적화할 수 있습니다. 자세한 내용은 Ultralytics YOLO로 검증해야 하는 이유 섹션을 참조하세요.

  • 예, 사용자 지정 데이터셋을 사용하여 YOLO26 모델을 검증할 수 있습니다. 데이터셋 YAML 경로를 data 인수에 지정해야 하며, YAML에는 검증 데이터 경로가 포함되어야 합니다. 분류의 경우 데이터셋 디렉터리 또는 기본 제공 데이터셋 이름(예: imagenet10)을 사용합니다.

    참고

    검증에는 모델 자체의 클래스 이름이 사용됩니다. model.names을 사용하여 클래스 이름을 확인할 수 있으며, 이 이름은 데이터셋에 정의된 이름과 다를 수 있습니다.

    Python 예시:

    from ultralytics import YOLO
    
    # 모델 로드
    model = YOLO("yolo26n.pt")
    
    # 사용자 지정 데이터셋으로 검증합니다
    metrics = model.val(data="path/to/your/custom_dataset.yaml")
    print(metrics.box.map)  # map50-95

    CLI 사용 예시:

    yolo val model=yolo26n.pt data=path/to/your/custom_dataset.yaml

    검증 중 사용자 지정 옵션을 더 자세히 알아보려면 인수를 사용한 검증 예시 섹션을 참조하세요.

  • 검증 결과를 JSON 파일로 저장하려면 검증을 실행할 때 save_json 인수를 True로 설정하면 됩니다. Python API와 CLI 모두에서 설정할 수 있습니다.

    Python 예시:

    from ultralytics import YOLO
    
    # 모델 로드
    model = YOLO("yolo26n.pt")
    
    # 검증 결과를 JSON으로 저장합니다
    metrics = model.val(save_json=True)

    CLI 사용 예시:

    yolo val model=yolo26n.pt save_json=True

    탐지 데이터셋에서는 save_json=True이 faster-coco-eval을 통해 소형, 중형, 대형 객체의 mAP도 보고합니다. 자세한 내용은 YOLO 모델 검증 인수를 참조하세요.

댓글