Ultralytics YOLO를 사용한 모델 검증#
소개#
검증은 machine learning 파이프라인에서 매우 중요한 단계로, 학습된 모델의 품질을 평가할 수 있게 해줍니다. Ultralytics YOLO26의 Val 모드는 object detection 모델의 성능을 평가하기 위한 강력한 도구 모음과 지표를 제공합니다. 이 가이드는 모델의 정확성과 신뢰성을 보장하기 위해 Val 모드를 효과적으로 사용하는 방법을 이해하는 데 필요한 종합적인 리소스 역할을 합니다.
Watch: Ultralytics Modes Tutorial: Validation
Ultralytics YOLO로 검증해야 하는 이유는 무엇입니까?#
YOLO26의 Val 모드를 사용하면 다음과 같은 이점이 있습니다:
- 정밀도: mAP50, mAP75, mAP50-95와 같은 정확한 메트릭을 확보하여 모델을 종합적으로 평가할 수 있습니다.
- 편의성: 학습 설정을 기억하는 내장 기능을 활용하여 검증 프로세스를 간소화합니다.
- 유연성: 동일하거나 다른 데이터셋 및 이미지 크기로 모델을 검증할 수 있습니다.
- Hyperparameter Tuning: 검증 지표를 사용하여 더 나은 성능을 위해 모델을 세부 조정합니다.
Val 모드의 주요 특징#
다음은 YOLO26의 Val 모드가 제공하는 주목할 만한 기능입니다:
- 자동 설정: 모델이 학습 구성을 기억하므로 간편하게 검증할 수 있습니다.
- 다중 메트릭 지원: 다양한 정확도 메트릭을 기반으로 모델을 평가합니다.
- CLI 및 Python API: 검증 선호도에 따라 커맨드 라인 인터페이스 또는 Python API를 선택할 수 있습니다.
- 데이터 호환성: 학습 단계에서 사용된 데이터셋뿐만 아니라 사용자 정의 데이터셋과도 원활하게 작동합니다.
- YOLO26 모델은 학습 설정을 자동으로 기억하므로,
yolo val model=yolo26n.pt또는YOLO("yolo26n.pt").val()을 사용하여 동일한 이미지 크기와 원본 데이터셋에서 모델을 쉽게 검증할 수 있습니다.
사용 예제#
COCO8 데이터셋에서 학습된 YOLO26n 모델 accuracy를 검증합니다. model은 학습된 data 및 인수를 모델 속성으로 유지하므로 별도의 인수가 필요하지 않습니다. 전체 검증 인수 목록은 아래의 인수 섹션을 참조하십시오.
Windows에서 스크립트로 검증을 실행할 때 RuntimeError 오류가 발생할 수 있습니다. 이를 해결하려면 검증 코드 앞에 if __name__ == "__main__": 블록을 추가하세요.
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n.pt") # load an official model
model = YOLO("path/to/best.pt") # load a custom model
# Validate the model
metrics = model.val() # no arguments needed, dataset and settings remembered
metrics.box.map # map50-95
metrics.box.map50 # map50
metrics.box.map75 # map75
metrics.box.maps # a list containing mAP50-95 for each category
metrics.box.image_metrics # per-image metrics dictionary with precision, recall, F1, TP, FP, and FNYOLO 모델 검증을 위한 인수#
YOLO 모델을 검증할 때 여러 인수를 미세 조정하여 평가 프로세스를 최적화할 수 있습니다. 이 인수들은 입력 이미지 크기, 배치 처리, 성능 임계값과 같은 측면을 제어합니다. 아래는 검증 설정을 효과적으로 사용자 지정하는 데 도움이 되는 각 인수에 대한 자세한 설명입니다.
| 인수 | 유형 | 기본값 | 설명 |
|---|---|---|---|
data | str | None | validation data 경로를 포함해야 하는 데이터셋 YAML(coco8.yaml 등)의 경로를 지정합니다. 분류(Classification)의 경우 데이터셋 디렉토리 또는 내장 데이터셋 이름(imagenet10 등)을 대신 사용합니다. |
imgsz | int | 640 | 입력 이미지의 크기를 정의합니다. 모든 이미지는 처리 전에 이 치수로 크기가 조정됩니다. 더 큰 크기는 작은 객체에 대한 정확도를 향상시킬 수 있지만 계산 시간을 증가시킵니다. |
batch | int | 16 | 배치당 이미지 수를 설정합니다. 높은 값은 GPU 메모리를 더 효율적으로 사용하지만 더 많은 VRAM이 필요합니다. 사용 가능한 하드웨어 자원에 따라 조정하십시오. |
save_json | bool | False | True인 경우, 추가 분석, 다른 도구와의 통합, 또는 COCO와 같은 평가 서버 제출을 위해 결과를 JSON 파일로 저장합니다. |
conf | float | 0.001 | 탐지에 대한 최소 신뢰도 임계값을 설정합니다. 낮은 값은 재현율을 높이지만 더 많은 오탐(false positive)을 유발할 수 있습니다. 정밀도-재현율 곡선은 기본적으로 0.001을 사용하며, 탐지 혼동 행렬은 명시적인 conf 값을 사용하거나 생략된 경우 0.25를 사용합니다. 요약 정밀도와 재현율은 최대 F1 신뢰도를 사용하므로 confusion_matrix.png에서 파생된 값과 다를 수 있습니다. 메모리 사용량을 줄이기 위해 OBB 검증에서는 기본적으로 0.01로 설정됩니다. |
iou | float | 0.7 | Non-Maximum Suppression을 위한 Intersection Over Union 임계값을 설정합니다. 중복 탐지 제거를 제어합니다. |
max_det | int | 300 | 이미지당 최대 탐지 수를 제한합니다. 밀집된 장면에서 과도한 탐지를 방지하고 계산 자원을 관리하는 데 유용합니다. |
quantize | int 또는 str | None | 검증 정밀도: 16/"fp16"은 지원되는 GPU에서 FP16 검증을 활성화하고, 32/"fp32"/미설정은 FP32입니다. INT8/PTQ 양자화는 export 중에 구성된 후 내보낸 모델을 검증하여 사용됩니다. 지원 중단된 half 플래그를 대체합니다. |
device | str | None | 검증을 위한 장치를 지정합니다 (cpu, cuda:0, npu, npu:0 등). None인 경우, 사용 가능한 최적의 장치를 자동으로 선택합니다. 쉼표로 구분하여 여러 CUDA 장치를 지정할 수 있습니다. |
dnn | bool | False | True인 경우, ONNX 모델 추론을 위해 OpenCV DNN 모듈을 사용하여 PyTorch 추론 방법에 대한 대안을 제공합니다. |
plots | bool | True | True으로 설정된 경우, 모델 성능을 시각적으로 평가하기 위해 예측 대 정답 플롯, 혼동 행렬, PR 곡선을 생성하고 저장합니다. |
classes | list[int] | None | 평가할 클래스 ID 목록을 지정합니다. 평가 과정에서 특정 클래스만 필터링하여 집중적으로 확인하려는 경우 유용합니다. |
rect | bool | True | True을(를) 사용하는 경우, 배치 처리에 직사각형 추론을 사용하여 패딩을 줄이고 이미지를 원래 종횡비로 처리함으로써 속도와 효율성을 잠재적으로 높일 수 있습니다. 패딩을 사용하는 대신 모든 이미지를 고정된 imgsz 정사각형으로 늘리는 depth 검증에서는 무시됩니다. |
split | str | 'val' | 검증에 사용할 데이터셋 분할을 결정합니다 (val, test, 또는 train). 성능 평가를 위한 데이터 세그먼트 선택에 유연성을 제공합니다. |
project | str | None | 검증 출력 결과가 저장되는 프로젝트 디렉터리의 이름입니다. 서로 다른 실험이나 모델의 결과를 정리하는 데 도움이 됩니다. |
name | str | None | 검증 실행의 이름입니다. 프로젝트 폴더 내에 하위 디렉터리를 생성하는 데 사용되며, 검증 로그와 결과물이 이 곳에 저장됩니다. |
verbose | bool | True | True인 경우, 클래스별 지표, 배치 진행 상황, 추가 디버깅 정보를 포함하여 검증 과정 중 상세한 정보를 표시합니다. |
save_txt | bool | False | True인 경우, 이미지당 하나의 파일로 텍스트 파일에 감지 결과를 저장하며, 이는 추가 분석, 사용자 정의 후처리 또는 다른 시스템과의 통합에 유용합니다. |
save_conf | bool | False | True인 경우, save_txt이 활성화되었을 때 저장된 텍스트 파일에 신뢰도 값을 포함하여 분석 및 필터링을 위한 더 상세한 출력을 제공합니다. |
workers | int | 8 | 데이터 로딩을 위한 워커 스레드 수입니다. 값을 높이면 데이터 전처리 속도가 빨라질 수 있지만 CPU 사용량이 증가할 수 있습니다. 0으로 설정하면 메인 스레드를 사용하며, 일부 환경에서는 더 안정적일 수 있습니다. |
augment | bool | False | 검증 중 테스트 시간 증강(TTA)을 활성화하여 입력의 변환된 버전에 대해 추론을 실행함으로써 추론 속도가 느려지는 대신 잠재적으로 검출 정확도를 향상시킵니다. Ultralytics PyTorch 모델에서만 사용할 수 있습니다. |
agnostic_nms | bool | False | 예측된 클래스와 관계없이 점수가 더 낮은 겹치는 박스를 억제하는 클래스 구분 없는 Non-Maximum Suppression을 활성화합니다. 인스턴스 중심 애플리케이션에 유용합니다. 엔드투엔드 모델(YOLO26, YOLOv10)의 경우, 이 설정은 동일한 감지 결과가 여러 클래스 레이블로 중복되어 나타나는 것을 방지할 뿐(IoU=1.0 중복), 서로 다른 박스 간의 IoU 임계값 기반 억제는 수행하지 않습니다. |
single_cls | bool | False | 검증 중에 모든 클래스를 단일 클래스로 처리합니다. 이진 감지 작업의 모델 성능을 평가하거나 클래스 구분이 중요하지 않은 경우 유용합니다. |
visualize | bool | False | 각 이미지에 대한 Ground Truth, True Positive, False Positive 및 False Negative를 시각화합니다. 디버깅 및 모델 해석에 유용합니다. |
show_labels | bool | True | visualize=True일 때 검증 시각화에 클래스 레이블을 표시합니다. 일치 항목과 오류를 더 깔끔하게 보려면 False로 설정하십시오. |
show_conf | bool | True | visualize=True일 때 검증 시각화에 신뢰도 점수를 표시합니다. 일치 항목과 오류를 더 깔끔하게 보려면 False로 설정하십시오. |
compile | bool 또는 str | False | PyTorch 2.x torch.compile 그래프 컴파일을 backend='inductor'(으)로 활성화합니다. True → "default", False → 비활성화, 또는 "default", "reduce-overhead", "max-autotune-no-cudagraphs"과 같은 문자열 모드를 허용합니다. 지원되지 않는 경우 경고와 함께 eager로 대체됩니다. |
channels_last | bool | False | 검증 중 합성곱에 channels_last (NHWC) 메모리 포맷을 사용하여 결과 변경 없이 CUDA Tensor Core GPU의 속도를 높입니다. 기본 PyTorch 모델에만 적용되며, CPU, MPS 및 TensorRT, ONNX와 같은 내보내기 포맷에서는 무시됩니다. |
end2end | bool | None | NMS 프리 추론을 지원하는 YOLO 모델(YOLO26, YOLOv10)의 엔드투엔드 모드를 재정의합니다. 이를 False으로 설정하면 전통적인 NMS 파이프라인을 사용하여 검증을 실행할 수 있으며, 추가로 iou 인수를 활용할 수 있습니다. |
이러한 각 설정은 검증 프로세스에서 중요한 역할을 하며, YOLO 모델에 대한 사용자 지정이 가능하고 효율적인 평가를 가능하게 합니다. 특정 요구 사항과 리소스에 따라 이러한 매개변수를 조정하면 정확도와 성능 사이의 최상의 균형을 달성하는 데 도움이 됩니다.
인수를 사용한 검증 예제#
Watch: How to Export Model Validation Results in CSV, JSON, SQL, Polars DataFrame & More
아래 예제는 Python 및 CLI에서 사용자 지정 인수를 사용한 YOLO 모델 검증을 보여줍니다.
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n.pt")
# Customize validation settings
metrics = model.val(data="coco8.yaml", imgsz=640, batch=16, conf=0.25, iou=0.7, device="0")제공된 코드를 사용하여 ConfusionMatrix 결과를 다양한 형식으로 저장할 수도 있습니다.
from ultralytics import YOLO
model = YOLO("yolo26n.pt")
results = model.val(data="coco8.yaml", plots=True)
print(results.confusion_matrix.to_df())검증은 분류를 제외한 모든 작업에 대해 이미지별 정밀도, 재현율, F1, TP, FP, FN 지표(IoU 임계값 0.5에서)를 저장합니다. 검증 완료 후 탐지 및 OBB는 results.box.image_metrics, 세그멘테이션은 results.seg.image_metrics, 포즈는 results.pose.image_metrics를 통해 액세스하세요.
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n.pt")
# Validate and access per-image metrics
results = model.val(data="coco8.yaml")
# image_metrics is a dictionary with image filenames as keys
print(results.box.image_metrics)
# Output: {'image1.jpg': {'precision': 0.85, 'recall': 0.92, 'f1': 0.88, 'tp': 17, 'fp': 3, 'fn': 1}, ...}
# Access metrics for a specific image
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 | 이미지에 대한 참 양성(True Positive) 수. |
fp | 이미지에 대한 거짓 양성(False Positive) 수. |
fn | 이미지에 대한 거짓 음성(False Negative) 수. |
이 기능은 탐지, 세그멘테이션, 포즈 및 OBB 작업에 사용할 수 있습니다.
| 메서드 | 반환 타입 | 설명 |
|---|---|---|
summary() | List[Dict[str, Any]] | 검증 결과를 요약된 사전으로 변환합니다. |
to_df() | DataFrame | 검증 결과를 구조화된 Polars DataFrame으로 반환합니다. |
to_csv() | str | 검증 결과를 CSV 형식으로 내보내고 CSV 문자열을 반환합니다. |
to_json() | str | 검증 결과를 JSON 형식으로 내보내고 JSON 문자열을 반환합니다. |
자세한 내용은 DataExportMixin 클래스 문서를 참조하세요.
다음 단계#
지표가 마음에 드시나요? 모델을 배포 형식으로 내보내세요. 정확도가 떨어지는 경우, 다른 하이퍼파라미터나 더 많은 학습 데이터를 사용하여 돌아가서 다시 학습하세요.
FAQ#
Ultralytics를 사용하여 YOLO26 모델을 검증하려면 어떻게 해야 합니까?#
YOLO26 모델을 검증하려면 Ultralytics에서 제공하는 Val 모드를 사용할 수 있습니다. 예를 들어, Python API를 사용하면 모델을 로드하고 다음 명령으로 검증을 실행할 수 있습니다:
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n.pt")
# Validate the model
metrics = model.val()
print(metrics.box.map) # map50-95또는 커맨드 라인 인터페이스(CLI)를 사용할 수 있습니다:
yolo val model=yolo26n.pt추가적인 맞춤설정을 위해 Python 및 CLI 모드 모두에서 imgsz, batch, conf와 같은 다양한 인수를 조정할 수 있습니다. 전체 매개변수 목록은 Arguments for YOLO Model Validation 섹션을 확인하세요.
YOLO26 모델 검증에서 어떤 메트릭을 얻을 수 있습니까?#
YOLO26 모델 검증은 모델 성능을 평가하기 위한 몇 가지 주요 메트릭을 제공합니다. 여기에는 다음이 포함됩니다:
- mAP50 (IoU 임계값 0.5에서의 평균 정밀도)
- mAP75 (IoU 임계값 0.75에서의 평균 정밀도)
- mAP50-95 (0.5에서 0.95까지 여러 IoU 임계값에 걸친 평균 정밀도)
Python API를 사용하여 다음과 같이 이러한 메트릭에 접근할 수 있습니다:
metrics = model.val() # assumes `model` has been loaded
print(metrics.box.map) # mAP50-95
print(metrics.box.map50) # mAP50
print(metrics.box.map75) # mAP75
print(metrics.box.maps) # list of mAP50-95 for each category
print(metrics.box.image_metrics) # per-image metrics dictionary with precision, recall, F1, TP, FP, and FN완벽한 성능 평가를 위해서는 이러한 모든 지표를 검토하는 것이 중요합니다. 자세한 내용은 Key Features of Val Mode를 참조하세요.
Ultralytics YOLO를 검증에 사용할 때의 장점은 무엇입니까?#
검증에 Ultralytics YOLO를 사용하면 여러 장점이 있습니다:
- Precision: YOLO26은 mAP50, mAP75, mAP50-95를 포함한 정확한 성능 지표를 제공합니다.
- 편의성: 모델이 학습 설정을 기억하므로 검증이 간단해집니다.
- 유연성: 동일하거나 다른 데이터셋 및 이미지 크기에 대해 검증할 수 있습니다.
- 하이퍼파라미터 튜닝: 검증 메트릭은 더 나은 성능을 위해 모델을 미세 조정하는 데 도움이 됩니다.
이러한 이점 덕분에 모델이 철저하게 평가되고 우수한 결과를 위해 최적화될 수 있습니다. 이러한 장점에 대한 자세한 내용은 Why Validate with Ultralytics YOLO 섹션에서 확인하세요.
사용자 정의 데이터셋을 사용하여 YOLO26 모델을 검증할 수 있습니까?#
네, 커스텀 데이터셋을 사용하여 YOLO26 모델을 검증할 수 있습니다. 검증 데이터의 경로가 포함되어야 하는 데이터셋 YAML의 경로와 함께 data 인자를 지정하세요. 분류의 경우 데이터셋 디렉토리 또는 내장 데이터셋 이름(예: imagenet10)을 대신 사용합니다.
검증은 model.names을 사용하여 확인할 수 있는 모델 자체의 클래스 이름을 사용하여 수행되며, 이는 데이터셋 자체가 정의하는 클래스 이름과 다를 수 있습니다.
Python 예제:
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n.pt")
# Validate with a custom dataset
metrics = model.val(data="path/to/your/custom_dataset.yaml")
print(metrics.box.map) # map50-95CLI 사용 예제:
yolo val model=yolo26n.pt data=path/to/your/custom_dataset.yaml검증 중 더 많은 맞춤설정 옵션은 Example Validation with Arguments 섹션을 참조하세요.
YOLO26에서 검증 결과를 JSON 파일로 저장하려면 어떻게 해야 합니까?#
검증 결과를 JSON 파일로 저장하려면 검증 실행 시 save_json 인수를 True로 설정하면 됩니다. 이는 Python API와 CLI 모두에서 수행할 수 있습니다.
Python 예제:
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n.pt")
# Save validation results to JSON
metrics = model.val(save_json=True)CLI 사용 예제:
yolo val model=yolo26n.pt save_json=True이 기능은 추가 분석이나 다른 도구와의 통합에 특히 유용합니다. 자세한 내용은 Arguments for YOLO Model Validation을 확인하세요.