컴퓨터 비전 모델을 테스트하는 방법#
소개#
모델 테스트는 선별된 벤치마크가 아니라 움직이거나 조명이 어둡거나 일부 가려진 객체 등 이전에 본 적 없는 실제 데이터를 대상으로 trained model이 어떻게 작동하는지 확인합니다. model evaluation이 레이블이 지정된 데이터셋에서 지표를 측정하는 반면, 테스트는 배포 전에 모델이 학습한 동작이 goals of your application과 일치하는지 검증합니다. 이 가이드에서는 테스트 데이터 준비, Ultralytics YOLO26 모델 테스트, overfitting, 과소적합 및 데이터 유출 포착에 대해 다룹니다.
Watch: How to Test Machine Learning Models | Avoid Data Leakage in Computer Vision 🚀
모델 테스트와 모델 평가의 비교#
모델 테스트와 모델 평가는 steps in a computer vision project의 두 가지 서로 다른 단계입니다. 평가는 레이블이 지정된 데이터셋의 지표로 성능을 측정하고, 테스트는 모델이 학습한 동작이 배포 환경과사 유사한 조건에서 유지되는지 확인합니다.
고양이와 강아지를 인식하도록 computer vision 모델을 학습시켰고 펫샵에서 동물들을 모니터링하기 위해 이 모델을 배포하려고 한다고 가정해 보겠습니다. 모델 평가 단계에서는 레이블이 지정된 데이터셋을 사용하여 accuracy, precision, recall 같은 지표를 계산합니다. 예를 들어, 주어진 데이터셋에서 고양이와 강아지를 구별하는 모델의 정확도가 98%일 수 있습니다.
평가 후에는 펫샵의 이미지를 사용하여 모델을 테스트함으로써 더 다양하고 현실적인 조건에서 고양이와 강아지를 얼마나 잘 식별하는지 확인합니다. 모델이 동물들이 움직이거나, 조명이 다를 때, 또는 장난감이나 가구 등에 부분적으로 가려져 있을 때 정확하게 라벨을 지정할 수 있는지 체크합니다. 모델 테스트는 제어된 평가 환경 밖에서도 모델이 예상대로 작동하는지 확인하는 과정입니다.
모델 테스트 준비#
컴퓨터 비전 datasets은 실제 환경을 시뮬레이션하기 위해 일반적으로 학습 세트와 테스트 세트로 나뉩니다. training data는 모델을 학습시키고, 테스트 데이터는 한 번도 본 적 없는 예제에 대한 동작을 검증합니다. Ultralytics Platform은 데이터셋 구성과 주석을 한곳에 유지하므로 레이블이 지정된 테스트 세트를 구축할 때 유용합니다.
- 현실적인 표현: 이전에 본 적 없는 테스트 데이터는 모델이 배포 시 처리할 데이터와 유사해야 합니다. 이는 모델의 역량에 대한 현실적인 지표를 제공합니다.
- 충분한 크기: 테스트 데이터셋은 모델이 얼마나 잘 수행되는지에 대한 신뢰할 수 있는 통찰을 제공할 만큼 충분히 커야 합니다.
YOLO26 모델 테스트 방법#
학습된 YOLO26 모델을 테스트하는 과정은 라벨이 지정된 테스트 분할(test split)에서 검증하여 정량적 지표를 얻는 것과, 새로운 이미지에서 예측을 수행하여 동작을 정성적으로 검사하는 두 가지 상호 보완적인 워크플로우를 포함합니다.
라벨이 지정된 테스트 분할에서 검증#
Validation mode는 모델의 예측값을 정답(Ground-truth) 레이블과 비교하고 감지 모델에 대한 precision, recall, mAP50, mAP50-95를 보고합니다. 또한 혼동 행렬(Confusion Matrix) 및 정밀도-재현율 곡선과 같은 시각적 보조 자료를 저장하여 모델이 제대로 수행하지 못할 수 있는 특정 영역을 파악하는 데 도움을 줍니다.
from ultralytics import YOLO
# Load a pretrained model or your own trained checkpoint, e.g. "path/to/best.pt"
model = YOLO("yolo26n.pt")
# Validate; add split="test" if your dataset YAML defines a test split
metrics = model.val(data="coco8.yaml")
print(metrics.box.map) # mAP50-95기본적으로 검증은 데이터셋의 val 분할에서 실행됩니다. 별도로 분리된 테스트 세트에서 성능을 측정하려면 데이터셋 YAML에서 test: 분할을 정의하고 split="test"를 전달하세요.
새로운 이미지에서 예측 수행#
Prediction mode는 레이블을 요구하지 않고 새롭고 보지 못한 데이터에 대해 모델을 실행합니다. 성능 지표를 생성하지는 않지만, 주석이 추가된 결과 저장을 통해 한 번에 테스트 이미지의 전체 폴더 등 실제 이미지에서 모델이 어떻게 동작하는지 검토할 수 있습니다.
from ultralytics import YOLO
# Load a pretrained model or your own trained checkpoint, e.g. "path/to/best.pt"
model = YOLO("yolo26n.pt")
# Run predictions on a folder of test images and save annotated results
results = model.predict(source="path/to/test_images", save=True)사용자 정의 학습에 투자하기 전에 YOLO26이 애플리케이션에 적합한지 확인하려면 자신의 이미지로 사전 학습된 체크포인트를 사용하여 예측 모드를 실행하세요. 모델들은 COCO와 같은 데이터셋에 대해 미리 학습되어 있으므로, 그 결과는 특정 컨텍스트에서 모델이 얼마나 잘 수행될지 빠르게 파악할 수 있도록 해줍니다.
검증 모드와 예측 모드 비교#
| 모드 | 목적 | 라벨 필요 여부 | 출력 |
|---|---|---|---|
| Validation | 정답과 비교하여 성능 정량화 | 예 | 정밀도, 재현율, mAP50, mAP50-95, 혼동 행렬, PR 곡선 |
| Prediction | 새로운 라벨이 없는 데이터에서 모델 동작 검사 | 아니요 | 어노테이션이 포함된 이미지 및 예측 결과, 지표 없음 |
테스트 결과 분석 방법#
예측과 지표를 확보한 후에는 모델이 어디서, 왜 실패하는지 자세히 조사해야 합니다:
- 잘못 분류된 이미지: 모델이 잘못 분류한 이미지를 식별하고 검토하여 어떤 부분에서 문제가 발생하는지 이해하십시오.
- 오류 분석: 철저한 오류 분석을 수행하여 오류 유형(예: 거짓 양성(false positive) vs 거짓 음성(false negative))과 그 잠재적 원인을 파악하십시오.
- 편향 및 공정성: 모델 예측의 편향을 확인하십시오. 특히 인종, 성별, 연령과 같은 민감한 속성이 포함된 경우 데이터의 다양한 하위 집합 전반에서 모델이 균등하게 잘 작동하는지 확인하십시오.
머신러닝에서의 과적합과 과소적합#
machine learning 모델, 특히 컴퓨터 비전 모델을 테스트할 때는 오버fitting 및 underfitting에 주의하는 것이 중요합니다. 이러한 문제는 새 데이터에서 모델이 작동하는 방식에 큰 영향을 미칠 수 있습니다.
| 문제 | 일반적인 징후 | 대처 방법 |
|---|---|---|
| 과적합(Overfitting) | 학습 정확도는 높으나 검증 정확도는 낮음; 이미지의 사소한 변화나 관련 없는 세부 사항에 지나치게 민감하게 반응함 | 드롭아웃 같은 regularization 적용, 학습 데이터셋 크기 증가, 모델 아키텍처 단순화 |
| 과소적합(Underfitting) | 학습 세트에서도 낮은 정확도; 분명한 특징이나 객체를 지속적으로 인식하지 못함 | 더 복잡한 모델 사용, 더 관련성 높은 피처 제공, 학습 epochs 증가 |
핵심은 모델이 학습 및 검증 데이터셋 모두에서 잘 작동하도록 균형을 잡는 것입니다. 테스트 중에 지표를 정기적으로 모니터링하고 예측을 시각적으로 검사하면 양극단으로 치우치는 현상을 포착할 수 있습니다.
컴퓨터 비전의 데이터 누출 및 방지 방법#
데이터 누출(data leakage)은 학습 데이터셋 외부의 정보가 실수로 모델 학습에 사용될 때 발생합니다. 데이터 누출이 발생하면 학습 중에는 모델이 매우 정확해 보일 수 있지만, 새로운 데이터에서는 제대로 작동하지 않습니다.
누출은 발견하기 까다로울 수 있으며 종종 학습 데이터에 숨겨진 편향으로 인해 발생합니다:
| 편향 유형 | 징후 |
|---|---|
| 카메라 편향 | 다른 각도, 조명, 그림자, 카메라 움직임이 원치 않는 패턴을 유입시킴 |
| 오버레이 편향 | 이미지의 로고, 타임스탬프 또는 기타 오버레이가 모델을 오도함 |
| 폰트 및 객체 편향 | 특정 클래스에 자주 나타나는 특정 폰트나 객체가 모델 학습을 왜곡함 |
| 공간적 편향 | 전경-배경 불균형, bounding box 분포, 객체 위치는 학습에 영향을 줍니다. |
| 라벨 및 도메인 편향 | 부정확한 라벨이나 데이터 유형의 변화가 누출을 유도함 |
데이터 누출 탐지 및 방지 방법#
데이터 누출을 찾으려면 모델 결과가 놀라울 정도로 좋은지 확인하고, 특정 특징이 다른 특징보다 훨씬 중요한지 검토하며, 모델의 결정이 직관적으로 타당한지 재확인하고, 처리가 수행되기 전에 데이터가 올바르게 분할되었는지 검증하십시오.
이를 방지하려면 서로 다른 카메라와 환경에서 수집된 이미지나 비디오가 포함된 다양한 데이터셋을 사용하고, 데이터에 숨겨진 편향(예: 모든 긍정 샘플이 특정 시간대에 촬영된 경우)이 있는지 신중하게 검토하십시오. 데이터 누출을 방지하면 컴퓨터 비전 모델이 실제 상황에서 더욱 신뢰할 수 있게 됩니다.
모델 테스트 다음 단계#
모델을 테스트한 후의 다음 단계는 결과에 따라 다릅니다. 모델이 잘 작동하면 실제 환경에 배포할 수 있습니다. 결과가 만족스럽지 않다면 개선해야 합니다. 이는 오류 분석, gathering more data, 데이터 품질 개선, adjusting hyperparameters, 그리고 모델 재학습을 포함할 수 있습니다.
결론#
별도로 분리된 테스트 분할에서 검증하고, 실제 이미지로 예측하며, 오버fitting 및 데이터 유출을 확인하는 엄격한 모델 테스트는 잘 평가된 모델을 신뢰할 수 있는 모델로 만들어 줍니다. 배포 전에 테스트에서 드러난 문제를 해결하면 프로덕션에서 모델이 의도대로 작동할 확률이 훨씬 높아집니다. 진행 중에 궁금한 점이 생기면 Ultralytics GitHub repository 또는 Ultralytics Discord server의 커뮤니티에 문의하세요.
FAQ#
모델 평가는 레이블이 지정된 데이터셋의 지표로 성능을 측정하는 반면, 모델 테스트는 배포 조건과사 유사한 새롭고 보지 못한 데이터에서 모델이 어떻게 동작하는지 확인합니다. 평가는 통제된 데이터셋에서 정밀도 및 mAP 같은 숫자를 생성하고, 테스트는 조명, 모션 또는 가림이 다양할 때 학습된 동작이 유지되는지 여부를 보여줍니다. 적용 예제는 Model Testing vs. Model Evaluation을 참조하세요.
prediction mode를 사용하고 폴더 경로를
source로 전달하세요. YOLO26은 폴더의 모든 이미지에서 실행되며 검토를 위해 주석이 달린 결과를 저장할 수 있습니다. 예측 모드는 지표를 계산하지 않습니다. 레이블이 지정된 세트의 성능을 수치화하려면 대신 validation mode를 사용하세요. 두 가지 워크플로는 How to Test a YOLO26 Model에 나와 있습니다.감지 모델의 경우, 검증은 precision, recall, mAP50, mAP50-95를 보고하고 혼동 행렬 및 정밀도-재현율 곡선을 포함한 플롯을 저장합니다. 기본
val분할 대신 전용 테스트 분할에서 검증하려면 데이터셋 YAML에서test:을 정의하고split="test"를 전달하세요. 각 지표를 해석하는 방법은 performance metrics guide를 참조하세요.오버fitting의 경우 드롭아웃 같은 정규화 기법을 적용하거나, 학습 데이터셋 크기를 늘리거나, 모델 아키텍처를 단순화하세요. 과소적합의 경우 더 복잡한 모델을 사용하거나, 더 관련성 높은 피처를 제공하거나, 더 많은 에포크 동안 학습시키세요. 각 문제의 징후와 해당 수정 사항은 Overfitting and Underfitting in Machine Learning에 요약되어 있습니다.
테스트 성능이 놀라울 정도로 좋아 보이거나, 단일 피처가 예측을 지배하거나, 모델의 결정이 직관적으로 이해되지 않을 때는 데이터 유출을 의심하세요. 다양한 카메라와 환경의 다양한 데이터셋 사용, 숨겨진 편향에 대한 데이터 검토, 그리고 모든 처리 전에 train/test 분할이 발생했는지 확인을 통해 이를 방지하세요. 일반적인 편향 유형은 Data Leakage in Computer Vision을 참조하세요.
결과가 프로젝트 목표를 충족하면 모델을 배포하고, 그렇지 않으면 배포 전에 개선하세요. 이는 오류 분석, collecting more diverse data, 데이터 품질 개선, tuning hyperparameters 및 재학습을 의미할 수 있습니다. 수정 사항이 제대로 작동했는지 확인하기 위해 각 변경 라운드 후에 테스트를 반복하세요.