YOLO Vision 2026:

이미지 분류#

YOLO image classification of objects and scenes

Image classification은 지원되는 작업 중 가장 간단하며, 전체 이미지를 미리 정의된 클래스 세트 중 하나로 분류하는 작업을 포함합니다.

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



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

YOLO26 Classify 모델은 -cls 접미사(예: yolo26n-cls.pt)를 사용하며 ImageNet으로 사전 학습되어 있습니다.

Models#

여기에서는 YOLO26 사전 학습된 Classify 모델을 보여줍니다. Detect, Segment 및 Pose 모델은 COCO 데이터셋으로, Semantic 모델은 Cityscapes로, Classify 모델은 ImageNet 데이터셋으로 사전 학습되어 있습니다.

Models은 최초 사용 시 최신 Ultralytics release에서 자동으로 다운로드됩니다.

모델크기
(픽셀)
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.5
YOLO26s-cls22476.092.97.9 ± 0.21.3 ± 0.06.71.6
YOLO26m-cls22478.194.217.2 ± 0.42.0 ± 0.011.64.9
YOLO26l-cls22479.094.623.2 ± 0.32.8 ± 0.014.16.2
YOLO26x-cls22479.995.041.4 ± 0.93.8 ± 0.029.613.6
  • acc 값은 ImageNet 데이터셋 검증 세트에서의 모델 정확도입니다.
    재현하려면 yolo val classify data=path/to/ImageNet device=0을(를) 사용하세요.
  • SpeedAmazon EC2 P4d 인스턴스를 사용하여 ImageNet val 이미지에서 평균을 낸 것입니다.
    재현하려면 yolo val classify data=path/to/ImageNet batch=1 device=0|cpu을(를) 사용하세요.
  • ParamsFLOPs 값은 Conv 및 BatchNorm 레이어를 병합하는 model.fuse() 이후의 융합된 모델 기준입니다. 사전 학습된 체크포인트는 전체 학습 아키텍처를 유지하므로 더 높은 수치를 나타낼 수 있습니다.

학습(Train)#

MNIST160 데이터셋에서 이미지 크기 64로 100개의 epochs 동안 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을(를) 통해 증강 파이프라인을 커스터마이징하여 이를 구현할 수 있습니다.

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="imagenet1000", trainer=CustomizedTrainer, epochs=10, imgsz=224, batch=64)
model.val(data="imagenet1000", validator=CustomizedValidator, imgsz=224, batch=64)

데이터셋 형식#

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

검증(Val)#

MNIST160 데이터셋에서 학습된 YOLO26n-cls 모델 accuracy을(를) 검증합니다. 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을(를) 구현하여 일관된 검증 결과를 얻으려면 동일한 접근 방식을 적용해야 합니다. 구현 세부사항은 학습 섹션의 전체 코드 예제를 참조하세요.

추론(Predict)#

훈련된 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 모드 세부 정보는 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 필드는 Predict Results by Task 섹션을 참조하십시오.

내보내기(Export)#

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 인수모델메타데이터인수
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

전체 export 세부 정보는 Export 페이지에서 확인하세요.

FAQ#

이미지 분류에서 YOLO26의 목적은 무엇입니까?#

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

이미지 분류를 위해 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 분류 모델은 어디서 찾을 수 있습니까?#

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

훈련된 YOLO26 모델을 어떻게 다른 형식으로 내보낼 수 있습니까?#

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 페이지를 참조하세요.

훈련된 YOLO26 분류 모델은 어떻게 검증합니까?#

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 섹션을 방문하세요.

댓글