Skip to main content

画像分類

YOLO image classification of objects and scenes

画像分類は3つのタスクの中で最もシンプルであり、画像全体をあらかじめ定義されたクラスのいずれかに分類するタスクです。

画像分類器の出力は、単一のクラスラベルと信頼度スコアです。画像分類は、画像がどのクラスに属しているかを知る必要があり、そのクラスのオブジェクトがどこに配置されているか、あるいはその正確な形状を知る必要がない場合に役立ちます。



Watch: Explore Ultralytics YOLO Tasks: Image Classification using Ultralytics Platform
ヒント

YOLO26 Classifyモデルは -cls サフィックスを使用します(例: yolo26n-cls.pt)、そしてこれらは ImageNet.

モデル

YOLO26の事前学習済みClassifyモデルを以下に示します。Detect、Segment、およびPoseモデルは COCO データセットで事前学習されていますが、Classifyモデルは ImageNet データセットで事前学習されています。

モデル は、初回使用時に最新の Ultralytics release から自動的にダウンロードされます。

モデルサイズ
(ピクセル)
acc
top1
acc
top5
Speed
CPU ONNX
(ms)
Speed
T4 TensorRT10
(ms)
params
(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
  • Speed を使用し、Amazon EC2 P4d インスタンスを使用してImageNet val画像で平均化します。
    再現するには yolo val classify data=path/to/ImageNet batch=1 device=0|cpu
  • ParamsFLOPs の値は、ConvレイヤーとBatchNormレイヤーをマージする model.fuse() 後のフューズドモデルに対するものです。事前学習済みチェックポイントは完全な学習アーキテクチャを保持しており、より高い数値を表示する場合があります。

Train (学習)

YOLO26n-clsをMNIST160データセットで100 エポック 、画像サイズ64で学習します。利用可能な引数の完全なリストについては、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, mode: str = "train"):
        """Build a customized dataset for classification standalone validation."""
        return CustomizedDataset(root=img_path, args=self.args, augment=mode == "train", 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)

Dataset format

YOLO分類データセット形式の詳細については、Dataset Guide を参照してください。分類データセットは、Ultralytics Platform.

Val (検証)

学習済みYOLO26n-clsモデルを 精度 MNIST160データセットで検証します。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
ヒント

training section で言及したように、カスタムの ClassificationTrainer を使用することで、学習中に極端なアスペクト比を処理できます。一貫した検証結果を得るために、カスタムの ClassificationValidator に設定し、部分的にトレーニングされたモデルウェイトを含む val() メソッドを実装して、同じアプローチを適用する必要があります。実装の詳細については、training section の完全なコード例を参照してください。

予測

学習済みの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

詳細については、predict モードの詳細については、予測 ページを参照してください。

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, half, dynamic, optimize, nms, batch, device
ONNXonnxyolo26n-cls.onnximgsz, half, dynamic, simplify, opset, nms, batch, device
OpenVINOopenvinoyolo26n-cls_openvino_model/imgsz, half, dynamic, int8, nms, batch, data, fraction, device
TensorRTengineyolo26n-cls.engineimgsz, half, dynamic, simplify, workspace, int8, nms, batch, data, fraction, device
CoreMLcoremlyolo26n-cls.mlpackageimgsz, dynamic, half, int8, nms, batch, device
TF SavedModelsaved_modelyolo26n-cls_saved_model/imgsz, keras, int8, nms, batch, data, fraction, device
TF GraphDefpbyolo26n-cls.pbimgsz, batch, device
TFLitetfliteyolo26n-cls.tfliteimgsz, half, int8, nms, batch, data, fraction, device
TF Edge TPUedgetpuyolo26n-cls_edgetpu.tfliteimgsz, int8, data, fraction, device
TF.jstfjsyolo26n-cls_web_model/imgsz, half, int8, nms, batch, data, fraction, device
PaddlePaddlepaddleyolo26n-cls_paddle_model/imgsz, batch, device
MNNmnnyolo26n-cls.mnnimgsz, batch, int8, half, device
NCNNncnnyolo26n-cls_ncnn_model/imgsz, half, batch, device
IMX500imxyolo26n-cls_imx_model/imgsz, int8, data, fraction, nms, device
RKNNrknnyolo26n-cls_rknn_model/imgsz, batch, name, device
ExecuTorchexecutorchyolo26n-cls_executorch_model/imgsz, batch, device
Axeleraaxelerayolo26n-cls_axelera_model/imgsz, batch, int8, data, fraction, device

詳細については、exportExport (エクスポート) ページを参照してください。

FAQ

画像分類におけるYOLO26の目的は何ですか?

YOLO26モデル(例: yolo26n-cls.pt)は、効率的な画像分類のために設計されています。これらは、画像全体に単一のクラスラベルと信頼度スコアを割り当てます。これは、画像内のオブジェクトの場所や形状を特定するよりも、その画像がどのクラスに属するかを知ることが重要であるアプリケーションにおいて特に役立ちます。

画像分類のためにYOLO26モデルをどのように学習させますか?

YOLO26モデルを学習させるには、PythonまたはCLIコマンドを使用できます。例えば、yolo26n-cls モデルをMNIST160データセットで100エポック、画像サイズ64で学習させるには:

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分類モデルは、モデル セクションにあります。以下のようなモデルは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

詳細については、検証 セクションを参照してください。

コメント