Ultralytics YOLO27:
Get Started

Phân loại Ảnh với Ultralytics YOLO#

Ultralytics YOLO image classification of objects and scenes

Phân loại ảnh là tác vụ đơn giản nhất trong số các tác vụ được hỗ trợ, bao gồm việc phân loại toàn bộ ảnh vào một trong các lớp đã được xác định trước.

Đầu ra của bộ phân loại ảnh là một nhãn lớp duy nhất cùng điểm confidence. Phân loại ảnh hữu ích khi bạn chỉ cần biết ảnh thuộc lớp nào, không cần biết các object thuộc lớp đó nằm ở đâu hoặc có hình dạng chính xác ra sao.



Xem: Khám phá các tác vụ Ultralytics YOLO: Phân loại ảnh bằng Ultralytics Platform
Mẹo

Các model YOLO26 Classify dùng hậu tố -cls, chẳng hạn yolo26n-cls.pt, và được pretrained trên ImageNet.

Model#

Các model YOLO26 Classify pretrained trên dataset ImageNet được trình bày bên dưới.

Model sẽ tự động tải xuống từ bản phát hành Ultralytics mới nhất trong lần sử dụng đầu tiên.

Modelkích thước
(pixel)
acc
top1
acc
top5
Tốc độ
CPU ONNX
(ms)
Tốc độ
T4 TensorRT10
(ms)
params
(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
  • Giá trị acc là độ chính xác của model trên tập validation của dataset ImageNet.
    Tái tạo bằng yolo classify val data=path/to/ImageNet device=0
  • Tốc độ được tính trung bình trên các ảnh val của ImageNet, dùng ONNX trên CPU và TensorRT10 trên GPU NVIDIA T4.
    Tái tạo bằng yolo classify val data=path/to/ImageNet batch=1 device=0|cpu
  • Giá trị Params và FLOPs áp dụng cho model đã hợp nhất sau model.fuse(), thao tác gộp các lớp Conv và BatchNorm. Các checkpoint pretrained giữ nguyên kiến trúc huấn luyện đầy đủ và có thể hiển thị số liệu cao hơn.

Xem bản xem trước YOLO27 chưa phát hành để biết tốc độ phân loại và kích thước model sơ bộ.

Huấn luyện#

Huấn luyện YOLO26n-cls trên dataset MNIST160 trong 100 epoch với kích thước ảnh 64. Xem danh sách đầy đủ các tham số hiện có trên trang Cấu hình.

Ví dụ
from ultralytics import YOLO

# Tải model
model = YOLO("yolo26n-cls.yaml")  # tạo model mới từ YAML
model = YOLO("yolo26n-cls.pt")  # tải model đã huấn luyện trước (được khuyến nghị khi huấn luyện)
model = YOLO("yolo26n-cls.yaml").load("yolo26n-cls.pt")  # tạo từ YAML và chuyển trọng số

# Huấn luyện model
results = model.train(data="mnist160", epochs=100, imgsz=64)

Xem chi tiết đầy đủ về chế độ train trên trang Train. Các model phân loại cũng có thể được huấn luyện bằng dịch vụ huấn luyện đám mây Ultralytics Platform.

Định dạng dataset#

Bạn có thể xem chi tiết định dạng dataset phân loại YOLO trong Hướng dẫn về Dataset. Dataset phân loại cũng có thể được quản lý và gán nhãn bằng công cụ annotation của Ultralytics Platform.

Các phép biến đổi tùy chỉnh#

Ultralytics YOLO classification sử dụng torchvision.transforms.RandomResizedCrop khi huấn luyện và torchvision.transforms.CenterCrop khi validation và inference. Các phép biến đổi dựa trên crop này giả định đầu vào hình vuông và có thể cắt mất những vùng quan trọng của ảnh có tỷ lệ khung hình cực đoan. Để giữ nguyên toàn bộ ảnh, hãy thay các phép crop bằng torchvision.transforms.Resize, phép biến đổi này scale ảnh thành imgsz × imgsz thay vì crop, thông qua ClassificationDataset, ClassificationTrainer và ClassificationValidator tùy chỉnh:

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)

        # Thêm các phép biến đổi huấn luyện tùy chỉnh của bạn tại đây
        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),
            ]
        )

        # Thêm các phép biến đổi validation tùy chỉnh của bạn tại đây
        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)

Đánh giá#

Validate độ chính xác của model YOLO26n-cls đã huấn luyện. Không cần tham số nào vì model giữ lại data dùng khi huấn luyện và các tham số dưới dạng thuộc tính của model: path/to/best.pt trong ví dụ Train sẽ validate trên MNIST160. Weights chính thức lưu đường dẫn dataset huấn luyện không tồn tại trên máy của bạn, vì vậy chúng chuyển sang imagenet10 mặc định của tác vụ kèm cảnh báo. Truyền data để validate trên dataset khác.

Ví dụ
from ultralytics import YOLO

# Tải model
model = YOLO("yolo26n-cls.pt")  # tải model chính thức
model = YOLO("path/to/best.pt")  # tải model tùy chỉnh

# Xác thực model
metrics = model.val()  # không cần đối số, dataset và cài đặt đã được ghi nhớ
metrics.top1  # top1 accuracy
metrics.top5  # top5 accuracy
Mẹo

Model được huấn luyện bằng các phép biến đổi tùy chỉnh cần truyền ClassificationValidator tương ứng vào val(); nếu không, validation sẽ crop ảnh trong khi lúc huấn luyện ảnh được resize.

Dự đoán#

Sử dụng model YOLO26n-cls đã huấn luyện để chạy dự đoán trên ảnh.

Ví dụ
from ultralytics import YOLO

# Tải model
model = YOLO("yolo26n-cls.pt")  # tải model chính thức
model = YOLO("path/to/best.pt")  # tải model tùy chỉnh

# Dự đoán bằng model
results = model("https://ultralytics.com/images/bus.jpg")  # dự đoán trên một ảnh

# Truy cập kết quả
for result in results:
    top1 = result.probs.top1  # ID lớp được dự đoán đứng đầu
    top1_conf = result.probs.top1conf  # confidence của dự đoán đứng đầu
    top1_name = result.names[top1]  # tên lớp được dự đoán đứng đầu

Xem chi tiết đầy đủ về chế độ predict trên trang Dự đoán.

Đầu ra kết quả#

Phân loại ảnh trả về một object Results cho mỗi ảnh. Trường dự đoán chính là result.probs, chứa vector xác suất lớp và các helper cho dự đoán đứng đầu.

Thuộc tínhKiểuHình dạngMô tả
result.probsProbs(C,)Xác suất các lớp.
result.probs.datatorch.float32(C,)Xác suất của từng lớp.
result.probs.top1int()ID lớp có xác suất cao nhất.
result.probs.top1conftorch.float32()Độ tin cậy cao nhất.
result.probs.top5list[int](<=5)ID của 5 lớp có xác suất cao nhất.

Để xem các trường Results dành riêng cho từng tác vụ trên tất cả tác vụ, hãy tham khảo mục Kết quả dự đoán theo tác vụ.

Export#

Export model YOLO26n-cls sang định dạng khác như ONNX, CoreML, v.v.

Ví dụ
from ultralytics import YOLO

# Tải model
model = YOLO("yolo26n-cls.pt")  # tải model chính thức
model = YOLO("path/to/best.pt")  # tải model tùy chỉnh

# # Xuất model
model.export(format="onnx")

Các định dạng export hiện có cho YOLO26-cls được liệt kê trong bảng bên dưới. Bạn có thể export sang bất kỳ định dạng nào bằng tham số format, chẳng hạn format='onnx' hoặc format='engine'. Bạn có thể predict hoặc validate trực tiếp trên các model đã export, chẳng hạn yolo predict model=yolo26n-cls.onnx. Ví dụ sử dụng cho model của bạn sẽ hiển thị sau khi quá trình export hoàn tất.

Định dạngĐối số formatModelMetadataĐối số
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 mặc định xuất đầu ra thô cho NMS bên ngoài. Đặt nms=False để chọn một head không dùng NMS hiện có; các định dạng không được hỗ trợ sẽ chuyển về luồng đầu ra gốc. Các mục nms ở trên xác định những định dạng có thể tích hợp NMS với nms=True.

Xem chi tiết đầy đủ về export trên trang Export.

Câu hỏi thường gặp#

  • Các model YOLO26, chẳng hạn yolo26n-cls.pt, được thiết kế để phân loại ảnh hiệu quả. Model gán một nhãn lớp duy nhất cho toàn bộ ảnh cùng với điểm confidence. Điều này đặc biệt hữu ích với các ứng dụng chỉ cần biết ảnh thuộc lớp cụ thể nào, thay vì xác định vị trí hoặc hình dạng của các object trong ảnh.

  • Bạn có thể dùng Python hoặc các lệnh CLI để huấn luyện model YOLO26. Ví dụ, để huấn luyện model yolo26n-cls trên dataset MNIST160 trong 100 epoch với kích thước ảnh 64:

    Ví dụ
    from ultralytics import YOLO
    
    # Tải model
    model = YOLO("yolo26n-cls.pt")  # tải model đã huấn luyện trước (được khuyến nghị khi huấn luyện)
    
    # Huấn luyện model
    results = model.train(data="mnist160", epochs=100, imgsz=64)

    Để biết thêm tùy chọn cấu hình, hãy truy cập trang Cấu hình.

  • Có thể tìm thấy các model phân loại YOLO26 được pretrained trong mục Models. Các model như yolo26n-cls.pt, yolo26s-cls.pt, yolo26m-cls.pt, v.v. được pretrained trên dataset ImageNet và có thể dễ dàng tải xuống để sử dụng cho nhiều tác vụ phân loại ảnh.

  • Để validate độ chính xác của một model đã train trên dataset như MNIST160, bạn có thể sử dụng các lệnh Python hoặc CLI sau:

    Ví dụ
    from ultralytics import YOLO
    
    # Tải model
    model = YOLO("path/to/best.pt")  # tải model đã train
    
    # Xác thực model
    metrics = model.val()  # không cần đối số, sử dụng dataset và các thiết lập từ quá trình training
    metrics.top1  # top1 accuracy
    metrics.top5  # top5 accuracy

    Để biết thêm thông tin, hãy truy cập mục Validate.

  • Bạn có thể export model YOLO26 đã train sang nhiều định dạng bằng các lệnh Python hoặc CLI. Ví dụ: để export model sang định dạng ONNX:

    Ví dụ
    from ultralytics import YOLO
    
    # Tải model
    model = YOLO("yolo26n-cls.pt")  # tải model đã train
    
    # Export model sang ONNX
    model.export(format="onnx")

    Để biết chi tiết về các tùy chọn export, hãy tham khảo trang Export.

Bình luận