Ultralytics YOLO27:
Get Started

Ultralytics YOLO를 사용한 이미지 분류#

Ultralytics YOLO image classification of objects and scenes

이미지 분류는 지원되는 작업 중 가장 단순하며, 전체 이미지를 사전 정의된 클래스 중 하나로 분류합니다.

이미지 분류기의 출력은 단일 클래스 레이블과 신뢰도 점수입니다. 이미지가 어떤 클래스에 속하는지만 알면 되고 해당 클래스 객체의 위치나 정확한 모양은 알 필요가 없는 경우 이미지 분류가 유용합니다.



시청: Ultralytics 작업 살펴보기: Ultralytics Platform을 사용한 이미지 분류
팁

YOLO26 Classify 모델은 -cls 접미사를 사용합니다(예: yolo26n-cls.pt). 모델은 ImageNet으로 사전 학습됩니다.

모델#

ImageNet 데이터셋으로 사전 학습된 YOLO26 Classify 모델은 아래와 같습니다.

모델은 처음 사용할 때 최신 Ultralytics 릴리스에서 자동으로 다운로드됩니다.

모델크기
(픽셀)
acc
top1
acc
top5
속도
CPU ONNX
(ms)
속도
T4 TensorRT10
(ms)
파라미터
(M)
FLOPs
(B), 224 기준
YOLO26n-cls22471.490.15.0 ± 0.31.1 ± 0.02.80.4
YOLO26s-cls22476.092.97.9 ± 0.21.3 ± 0.06.71.5
YOLO26m-cls22478.194.217.2 ± 0.42.0 ± 0.011.64.8
YOLO26l-cls22479.094.623.2 ± 0.32.8 ± 0.014.16.0
YOLO26x-cls22479.995.041.4 ± 0.93.8 ± 0.029.613.5
  • acc 값은 ImageNet 데이터셋 검증 세트에서 측정한 모델 정확도입니다.
    yolo classify val data=path/to/ImageNet device=0로 재현할 수 있습니다.
  • 속도는 CPU에서 ONNX를 사용하고 NVIDIA T4 GPU에서 TensorRT10을 사용하여 ImageNet 검증 이미지 전체의 평균을 측정한 값입니다.
    yolo classify val data=path/to/ImageNet batch=1 device=0|cpu로 재현할 수 있습니다.
  • Params 및 FLOPs 값은 Conv 및 BatchNorm 레이어를 병합하는 model.fuse() 이후의 융합 모델 기준입니다. 사전 학습된 체크포인트에는 전체 학습 아키텍처가 유지되므로 더 높은 값이 표시될 수 있습니다.

예비 분류 속도 및 모델 크기는 미공개 YOLO27 프리뷰를 참조하세요.

학습#

MNIST160 데이터셋에서 이미지 크기 64, 에포크 100회로 YOLO26n-cls를 학습합니다. 사용 가능한 인수의 전체 목록은 구성 페이지를 참조하세요.

예제
from ultralytics import YOLO

# 모델 로드
model = YOLO("yolo26n-cls.yaml")  # YAML에서 새 모델을 생성합니다.
model = YOLO("yolo26n-cls.pt")  # 사전 학습된 모델을 불러옵니다(학습에 권장).
model = YOLO("yolo26n-cls.yaml").load("yolo26n-cls.pt")  # YAML에서 모델을 생성하고 가중치를 전이합니다.

# 모델 학습
results = model.train(data="mnist160", epochs=100, imgsz=64)

Train 페이지에서 전체 train 모드 세부 정보를 확인하세요. 분류 모델은 Ultralytics Platform 클라우드 학습으로도 학습할 수 있습니다.

데이터셋 형식#

YOLO 분류 데이터셋 형식에 대한 자세한 내용은 데이터셋 가이드를 참조하세요. 분류 데이터셋은 Ultralytics Platform 주석 도구로 관리하고 라벨링할 수도 있습니다.

사용자 지정 변환#

Ultralytics YOLO 분류는 학습에 torchvision.transforms.RandomResizedCrop을, 검증 및 추론에 torchvision.transforms.CenterCrop을 사용합니다. 이러한 크롭 기반 변환은 정사각형 입력을 가정하므로 가로 세로 비율이 매우 다른 이미지의 중요한 영역을 잘라낼 수 있습니다. 이미지 전체를 보존하려면 크롭 대신 torchvision.transforms.Resize를 사용하세요. 이 변환은 크롭하지 않고 imgsz × imgsz 크기로 조정하며, 사용자 지정 ClassificationDataset, ClassificationTrainer, ClassificationValidator을 통해 적용할 수 있습니다.

import torch
import torchvision.transforms as T

from ultralytics import YOLO
from ultralytics.data.dataset import ClassificationDataset
from ultralytics.models.yolo.classify import ClassificationTrainer, ClassificationValidator

class CustomizedDataset(ClassificationDataset):
    """A customized dataset class for image classification with enhanced data augmentation transforms."""

    def __init__(self, root: str, args, augment: bool = False, prefix: str = "", names=None):
        """Initialize a customized classification dataset with enhanced data augmentation transforms."""
        super().__init__(root, args, augment, prefix, names)

        # 여기에 사용자 지정 학습 변환을 추가합니다
        train_transforms = T.Compose(
            [
                T.Resize((args.imgsz, args.imgsz)),
                T.RandomHorizontalFlip(p=args.fliplr),
                T.RandomVerticalFlip(p=args.flipud),
                T.RandAugment(interpolation=T.InterpolationMode.BILINEAR),
                T.ColorJitter(brightness=args.hsv_v, contrast=args.hsv_v, saturation=args.hsv_s, hue=args.hsv_h),
                T.ToTensor(),
                T.Normalize(mean=torch.tensor(0), std=torch.tensor(1)),
                T.RandomErasing(p=args.erasing, inplace=True),
            ]
        )

        # 여기에 사용자 지정 검증 변환을 추가합니다
        val_transforms = T.Compose(
            [
                T.Resize((args.imgsz, args.imgsz)),
                T.ToTensor(),
                T.Normalize(mean=torch.tensor(0), std=torch.tensor(1)),
            ]
        )
        self.torch_transforms = train_transforms if augment else val_transforms

class CustomizedTrainer(ClassificationTrainer):
    """A customized trainer class for YOLO classification models with enhanced dataset handling."""

    def build_dataset(self, img_path: str, mode: str = "train", batch=None):
        """Build a customized dataset for classification training and the validation during training."""
        return CustomizedDataset(
            root=img_path,
            args=self.args,
            augment=mode == "train",
            prefix="train" if mode == "train" else self.args.split,
            names=self.data["names"],
        )

class CustomizedValidator(ClassificationValidator):
    """A customized validator class for YOLO classification models with enhanced dataset handling."""

    def build_dataset(self, img_path: str):
        """Build a customized dataset for classification standalone validation (no augmentation)."""
        return CustomizedDataset(root=img_path, args=self.args, augment=False, prefix=self.args.split, names=self.names)

model = YOLO("yolo26n-cls.pt")
model.train(data="imagenet", trainer=CustomizedTrainer, epochs=10, imgsz=224, batch=64)
model.val(data="imagenet", validator=CustomizedValidator, imgsz=224, batch=64)

검증#

학습된 YOLO26n-cls 모델의 정확도를 검증합니다. model에 학습 data와 인수가 모델 속성으로 유지되므로 별도의 인수가 필요하지 않습니다. Train 예제의 path/to/best.pt은 MNIST160에서 검증을 수행합니다. 공식 가중치에는 사용자의 컴퓨터에 존재하지 않는 학습 데이터셋 경로가 기록되어 있으므로, 경고와 함께 작업 기본값인 imagenet10로 대체됩니다. 다른 데이터셋으로 검증하려면 data을 전달하세요.

예제
from ultralytics import YOLO

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

# 모델을 검증합니다
metrics = model.val()  # 데이터셋과 설정이 기억되므로 인수가 필요하지 않습니다
metrics.top1  # top1 accuracy
metrics.top5  # top5 accuracy
팁

사용자 지정 변환으로 학습된 모델은 해당하는 ClassificationValidator을 val()에 전달해야 합니다. 그렇지 않으면 학습 시 크기를 조정한 영역이 아니라 검증 중에 크롭됩니다.

예측#

학습된 YOLO26n-cls 모델을 사용해 이미지에 대한 예측을 수행합니다.

예제
from ultralytics import YOLO

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

# 모델로 예측을 수행합니다
results = model("https://ultralytics.com/images/bus.jpg")  # 이미지에 대해 예측을 수행합니다

# 결과에 액세스합니다
for result in results:
    top1 = result.probs.top1  # 가장 높은 예측 클래스 ID
    top1_conf = result.probs.top1conf  # 가장 높은 예측 신뢰도
    top1_name = result.names[top1]  # 가장 높은 예측 클래스 이름

Predict 페이지에서 predict 모드의 전체 세부 정보를 확인하세요.

결과 출력#

이미지 분류는 이미지당 Results 객체 하나를 반환합니다. 기본 예측 필드는 result.probs이며, 클래스 확률 벡터와 상위 예측을 위한 헬퍼를 포함합니다.

속성유형형태설명
result.probsProbs(C,)클래스 확률입니다.
result.probs.datatorch.float32(C,)클래스별 확률입니다.
result.probs.top1int()최상위 클래스 ID입니다.
result.probs.top1conftorch.float32()최상위 신뢰도입니다.
result.probs.top5list[int](<=5)상위 5개 클래스 ID입니다.

모든 작업에서 작업별 Results 필드를 확인하려면 작업별 예측 결과 섹션을 참조하세요.

내보내기#

YOLO26n-cls 모델을 ONNX, CoreML 등 다른 형식으로 내보냅니다.

예제
from ultralytics import YOLO

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

# 모델을 내보냅니다
model.export(format="onnx")

사용할 수 있는 YOLO26-cls 내보내기 형식은 아래 표에 나와 있습니다. format 인수를 사용해 원하는 형식으로 내보낼 수 있습니다(예: format='onnx' 또는 format='engine'). 내보낸 모델에서 직접 예측 또는 검증을 수행할 수 있습니다(예: yolo predict model=yolo26n-cls.onnx). 내보내기가 완료되면 해당 모델의 사용 예제가 표시됩니다.

형식format 인수모델메타데이터인수
PyTorch-yolo26n-cls.pt✅-
TorchScripttorchscriptyolo26n-cls.torchscript✅imgsz, quantize, dynamic, nms, batch, device
ONNXonnxyolo26n-cls.onnx✅imgsz, quantize, dynamic, simplify, opset, nms, batch, data, fraction, device
OpenVINOopenvinoyolo26n-cls_openvino_model/✅imgsz, quantize, dynamic, nms, batch, data, fraction, device
TensorRTengineyolo26n-cls.engine✅imgsz, quantize, dynamic, simplify, opset, workspace, nms, batch, data, fraction, device
CoreMLcoremlyolo26n-cls.mlpackage✅imgsz, dynamic, quantize, nms, batch, device
Apple Core AIcoreaiyolo26n-cls.aimodel✅imgsz, batch, quantize
TF SavedModelsaved_modelyolo26n-cls_saved_model/✅imgsz, quantize, opset, nms, batch, data, fraction, device
TF GraphDefpbyolo26n-cls.pb❌imgsz, opset, batch, device
TF Edge TPUedgetpuyolo26n-cls_edgetpu.tflite✅imgsz, quantize, opset, data, fraction, device
LiteRTlitertyolo26n-cls.tflite✅imgsz, quantize, batch, data, fraction, device
PaddlePaddlepaddleyolo26n-cls_paddle_model/✅imgsz, batch, device
MNNmnnyolo26n-cls.mnn✅imgsz, batch, dynamic, quantize, simplify, opset, nms, device
NCNNncnnyolo26n-cls_ncnn_model/✅imgsz, quantize, batch, device
IMX500imxyolo26n-cls_imx_model/✅imgsz, quantize, data, fraction, nms, device
RKNNrknnyolo26n-cls_rknn_model/✅imgsz, batch, name, quantize, simplify, opset, data, fraction, device
ExecuTorchexecutorchyolo26n-cls_executorch_model/✅imgsz, batch, device
Axeleraaxelerayolo26n-cls_axelera_model/✅imgsz, batch, quantize, data, fraction, device
DEEPXdeepxyolo26n-cls_deepx_model/✅imgsz, quantize, simplify, opset, data, optimize, device
Qualcomm QNNqnnyolo26n-cls_qnn.onnx✅imgsz, batch, name, quantize, simplify, opset, data, fraction, device
Hailohailoyolo26n-cls_hailo_model/✅imgsz, name, quantize, data, fraction, simplify, conf, iou, device
Huawei Ascendascendyolo26n-cls_ascend_model/✅imgsz, batch, name, quantize, opset, simplify, nms, device
AMD Xilinxxilinxyolo26n-cls_xilinx_model/✅imgsz, name, quantize, data, fraction, opset, simplify, device

nms=None은 외부 NMS를 위한 원시 출력을 기본값으로 사용합니다. 사용 가능한 NMS-free head를 선택하려면 nms=False을 설정합니다. 지원되지 않는 형식은 해당 형식의 기본 출력 경로로 대체됩니다. 위의 nms 항목은 nms=True을 사용해 NMS를 포함할 수 있는 형식을 나타냅니다.

자세한 export 내용은 내보내기 페이지를 참조하세요.

자주 묻는 질문#

  • yolo26n-cls.pt과 같은 YOLO26 모델은 효율적인 이미지 분류를 위해 설계되었습니다. 전체 이미지에 단일 클래스 레이블과 신뢰도 점수를 부여합니다. 이는 이미지 내 객체의 위치나 모양을 식별하는 대신 이미지의 구체적인 클래스만 알면 충분한 애플리케이션에 특히 유용합니다.

  • Python 또는 CLI 명령을 사용해 YOLO26 모델을 학습할 수 있습니다. 예를 들어 MNIST160 데이터셋에서 이미지 크기 64, 에포크 100회로 yolo26n-cls 모델을 학습하려면 다음과 같이 실행합니다.

    예제
    from ultralytics import YOLO
    
    # 모델 로드
    model = YOLO("yolo26n-cls.pt")  # 사전 학습된 모델을 불러옵니다(학습에 권장).
    
    # 모델 학습
    results = model.train(data="mnist160", epochs=100, imgsz=64)

    구성 옵션을 더 알아보려면 구성 페이지를 방문하세요.

  • 사전 학습된 YOLO26 분류 모델은 모델 섹션에서 확인할 수 있습니다. yolo26n-cls.pt, yolo26s-cls.pt, yolo26m-cls.pt 등의 모델은 ImageNet 데이터셋으로 사전 학습되며, 다양한 이미지 분류 작업에 쉽게 다운로드하여 사용할 수 있습니다.

  • MNIST160과 같은 데이터셋에서 학습된 모델의 정확도를 검증하려면 다음 Python 또는 CLI 명령을 사용할 수 있습니다.

    예제
    from ultralytics import YOLO
    
    # 모델 로드
    model = YOLO("path/to/best.pt")  # 학습된 모델 로드
    
    # 모델을 검증합니다
    metrics = model.val()  # 인수는 필요하지 않으며, 학습에 사용한 데이터셋과 설정을 사용합니다.
    metrics.top1  # top1 accuracy
    metrics.top5  # top5 accuracy

    자세한 내용은 검증 섹션을 참조하세요.

  • Python 또는 CLI 명령을 사용하여 학습된 YOLO26 모델을 다양한 형식으로 내보낼 수 있습니다. 예를 들어 모델을 ONNX 형식으로 내보내려면 다음과 같이 실행합니다.

    예제
    from ultralytics import YOLO
    
    # 모델 로드
    model = YOLO("yolo26n-cls.pt")  # 학습된 모델 로드
    
    # 모델을 ONNX로 내보내기
    model.export(format="onnx")

    자세한 내보내기 옵션은 내보내기 페이지를 참조하세요.

댓글