Ultralytics YOLO27:

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

Ultralytics YOLO image classification of objects and scenes

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

이미지 분류기의 출력은 단일 클래스 레이블과 신뢰도 점수입니다. 이미지 분류는 이미지가 어떤 클래스에 속하는지만 알고 해당 클래스의 객체가 어디에 위치하는지 또는 정확한 형태가 무엇인지는 알 필요가 없을 때 유용합니다.



Watch: Explore Ultralytics YOLO Tasks: Image Classification using Ultralytics Platform

YOLO26 Classify 모델은 -cls 접미사를 사용합니다. 즉, yolo26n-cls.pt과 같은 형식이며 ImageNet으로 사전 학습됩니다.

모델#

여기에는 YOLO26 사전 학습 Classify 모델이 나와 있습니다. Detect, Segment 및 Pose 모델은 COCO 데이터 세트로 사전 학습되고, Semantic 모델은 Cityscapes로 사전 학습되며, Classify 모델은 ImageNet 데이터 세트로 사전 학습됩니다.

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

모델크기
(픽셀)
acc
top1
acc
top5
속도
CPU ONNX
(ms)
속도
T4 TensorRT10
(ms)
파라미터
(M)
FLOPs
(B) at 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 val classify data=path/to/ImageNet device=0로 재현할 수 있습니다.
  • SpeedAmazon EC2 P4d 인스턴스를 사용하여 ImageNet 검증 이미지에 대해 평균한 값입니다.
    yolo val classify data=path/to/ImageNet batch=1 device=0|cpu로 재현할 수 있습니다.
  • ParamsFLOPs 값은 Conv 및 BatchNorm 레이어를 병합하는 model.fuse() 실행 후의 fused 모델에 대한 값입니다. 사전 학습된 checkpoint는 전체 학습 아키텍처를 유지하므로 더 높은 값으로 표시될 수 있습니다.

예비 분류 속도 및 모델 크기에 대해서는 미출시 YOLO27 미리보기를 참조하십시오.

학습#

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

예시
from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n-cls.yaml")  # build a new model from YAML
model = YOLO("yolo26n-cls.pt")  # load a pretrained model (recommended for training)
model = YOLO("yolo26n-cls.yaml").load("yolo26n-cls.pt")  # build from YAML and transfer weights

# Train the model
results = model.train(data="mnist160", epochs=100, imgsz=64)

Ultralytics YOLO 분류는 학습에 torchvision.transforms.RandomResizedCrop을 사용하고 검증 및 추론에 torchvision.transforms.CenterCrop을 사용합니다. 이러한 크롭 기반 변환은 정사각형 입력을 가정하므로 가로 세로 비율이 크게 다른 이미지에서 중요한 영역이 의도치 않게 잘릴 수 있으며, 학습 중 중요한 시각 정보가 손실될 수 있습니다. 비율을 유지하면서 전체 이미지를 보존하려면 크롭 변환 대신 torchvision.transforms.Resize을 사용하는 것이 좋습니다.

사용자 지정 ClassificationDatasetClassificationTrainer을 통해 augmentation 파이프라인을 사용자 지정하면 이를 구현할 수 있습니다.

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 = ""):
        """Initialize a customized classification dataset with enhanced data augmentation transforms."""
        super().__init__(root, args, augment, prefix)

        # Add your custom training transforms here
        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),
            ]
        )

        # Add your custom validation transforms here
        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=mode)

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)

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)

데이터셋 형식#

YOLO 분류 데이터 세트 형식에 대한 자세한 내용은 Dataset Guide에서 확인할 수 있습니다. 분류 데이터 세트는 Ultralytics Platform annotation tools를 사용하여 관리하고 레이블을 지정할 수도 있습니다.

검증#

MNIST160 데이터 세트에서 학습된 YOLO26n-cls 모델의 정확도를 검증합니다. model이 학습 data와 인수를 모델 속성으로 유지하므로 인수가 필요하지 않습니다.

예시
from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n-cls.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.top1  # top1 accuracy
metrics.top5  # top5 accuracy

학습 섹션에서 설명한 것처럼 사용자 지정 ClassificationTrainer을 사용하여 학습 중 큰 가로 세로 비율을 처리할 수 있습니다. 일관된 검증 결과를 얻으려면 val() 메서드를 호출할 때 사용자 지정 ClassificationValidator를 구현하여 동일한 방식을 적용해야 합니다. 구현에 대한 자세한 내용은 학습 섹션의 전체 코드 예제를 참조하세요.

Prediction#

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

예시
from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n-cls.pt")  # load an official model
model = YOLO("path/to/best.pt")  # load a custom model

# Predict with the model
results = model("https://ultralytics.com/images/bus.jpg")  # predict on an image

# Access the results
for result in results:
    top1 = result.probs.top1  # top predicted class ID
    top1_conf = result.probs.top1conf  # top prediction confidence
    top1_name = result.names[top1]  # top predicted class name

전체 predict mode 세부 정보는 Predict 페이지를 참조하십시오.

결과 출력#

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

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

모든 task에서 task-specific Results field를 확인하려면 Predict Results by Task 섹션을 참조하십시오.

내보내기#

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

예시
from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n-cls.pt")  # load an official model
model = YOLO("path/to/best.pt")  # load a custom-trained model

# Export the model
model.export(format="onnx")

사용 가능한 YOLO26-cls 내보내기 형식은 아래 표에 나와 있습니다. format 인수를 사용하여 모든 형식으로 내보낼 수 있으며, 예를 들어 format='onnx' 또는 format='engine'와 같이 사용할 수 있습니다. 내보낸 모델에서 직접 예측하거나 검증할 수도 있으며, 예를 들어 yolo predict model=yolo26n-cls.onnx과 같이 사용할 수 있습니다. 내보내기가 완료되면 모델에 대한 사용 예제가 표시됩니다.

형식format Argument모델MetadataArguments
PyTorch-yolo26n-cls.pt-
TorchScripttorchscriptyolo26n-cls.torchscriptimgsz, quantize, dynamic, nms, batch, device
ONNXonnxyolo26n-cls.onnximgsz, quantize, dynamic, simplify, opset, nms, batch, data, fraction, device
OpenVINOopenvinoyolo26n-cls_openvino_model/imgsz, quantize, dynamic, nms, batch, data, fraction, device
TensorRTengineyolo26n-cls.engineimgsz, quantize, dynamic, simplify, opset, workspace, nms, batch, data, fraction, device
CoreMLcoremlyolo26n-cls.mlpackageimgsz, dynamic, quantize, nms, batch, device
TF SavedModelsaved_modelyolo26n-cls_saved_model/imgsz, keras, quantize, opset, nms, batch, data, fraction, device
TF GraphDefpbyolo26n-cls.pbimgsz, opset, batch, device
TF Edge TPUedgetpuyolo26n-cls_edgetpu.tfliteimgsz, quantize, opset, data, fraction, device
PaddlePaddlepaddleyolo26n-cls_paddle_model/imgsz, batch, device
MNNmnnyolo26n-cls.mnnimgsz, 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.onnximgsz, batch, name, quantize, simplify, opset, data, fraction, device
LiteRTlitertyolo26n-cls.tfliteimgsz, quantize, batch, data, fraction, device
Hailohailoyolo26n-cls_hailo_model/imgsz, name, quantize, data, fraction, simplify, conf, iou
Huawei Ascendascendyolo26n-cls_ascend_model/imgsz, batch, name, quantize, opset, simplify, nms
Apple Core AIcoreaiyolo26n-cls.aimodelimgsz, batch, quantize

nms=None은(는) 외부 NMS에 대해 기본적으로 원시 출력을 사용합니다. 사용 가능한 NMS 프리 헤드를 선택하려면 nms=False을(를) 설정하세요. 지원되지 않는 형식은 기본 출력 경로로 대체됩니다. 위의 nms 항목은 nms=True(으)로 NMS를 임베드할 수 있는 형식을 식별합니다.

전체 export 세부 정보는 Export 페이지를 참조하십시오.

FAQ#

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

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

    예시
    from ultralytics import YOLO
    
    # Load a model
    model = YOLO("yolo26n-cls.pt")  # load a pretrained model (recommended for training)
    
    # Train the model
    results = model.train(data="mnist160", epochs=100, imgsz=64)

    더 많은 구성 옵션은 Configuration 페이지에서 확인하세요.

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

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

    예시
    from ultralytics import YOLO
    
    # Load a model
    model = YOLO("yolo26n-cls.pt")  # load the trained model
    
    # Export the model to ONNX
    model.export(format="onnx")

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

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

    예시
    from ultralytics import YOLO
    
    # Load a model
    model = YOLO("yolo26n-cls.pt")  # load the trained model
    
    # Validate the model
    metrics = model.val()  # no arguments needed, uses the dataset and settings from training
    metrics.top1  # top1 accuracy
    metrics.top5  # top5 accuracy

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

댓글