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 リリースから自動的にダウンロードされます。

モデルサイズ
(ピクセル)
精度
top1
精度
top5
速度
CPU ONNX
(ms)
速度
T4 TensorRT10
(ms)
パラメーター数
(M)
FLOPs
(224でのB)
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で再現できます。
  • Speedは、Amazon EC2 P4dインスタンスを使用し、ImageNetの検証画像で平均した値です。
    yolo val classify data=path/to/ImageNet batch=1 device=0|cpuで再現できます。
  • ParamsFLOPsの値は、ConvレイヤーとBatchNormレイヤーを統合するmodel.fuse()後の融合モデルの値です。事前学習済みチェックポイントは完全な学習アーキテクチャを保持しているため、より大きい値になる場合があります。

暫定的な分類速度とモデルサイズについては、未発表のYOLO27プレビューを参照してください。

トレーニング#

画像サイズ64で、MNIST160データセットを使用してYOLO26n-clsを100エポック学習します。利用可能な引数の一覧については、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="imagenet", trainer=CustomizedTrainer, epochs=10, imgsz=224, batch=64)
model.val(data="imagenet", validator=CustomizedValidator, imgsz=224, batch=64)

データセット形式#

YOLO分類データセット形式の詳細については、Dataset Guideを参照してください。分類データセットは、Ultralytics Platformのアノテーションツールで管理およびラベル付けすることもできます。

検証#

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を実装して、同じ方法を適用する必要があります。実装の詳細については、学習セクションの完全なコード例を参照してください。

推論#

学習済み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 モードの詳細をすべて確認できます。

結果の出力#

画像分類は、画像ごとに1つの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

# 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.torchscriptimgszquantizedynamicnmsbatchdevice
ONNXonnxyolo26n-cls.onnximgszquantizedynamicsimplifyopsetnmsbatchdatafractiondevice
OpenVINOopenvinoyolo26n-cls_openvino_model/imgszquantizedynamicnmsbatchdatafractiondevice
TensorRTengineyolo26n-cls.engineimgszquantizedynamicsimplifyopsetworkspacenmsbatchdatafractiondevice
CoreMLcoremlyolo26n-cls.mlpackageimgszdynamicquantizenmsbatchdevice
TF SavedModelsaved_modelyolo26n-cls_saved_model/imgszkerasquantizeopsetnmsbatchdatafractiondevice
TF GraphDefpbyolo26n-cls.pbimgszopsetbatchdevice
TF Edge TPUedgetpuyolo26n-cls_edgetpu.tfliteimgszquantizeopsetdatafractiondevice
PaddlePaddlepaddleyolo26n-cls_paddle_model/imgszbatchdevice
MNNmnnyolo26n-cls.mnnimgszbatchdynamicquantizesimplifyopsetnmsdevice
NCNNncnnyolo26n-cls_ncnn_model/imgszquantizebatchdevice
IMX500imxyolo26n-cls_imx_model/imgszquantizedatafractionnmsdevice
RKNNrknnyolo26n-cls_rknn_model/imgszbatchnamequantizesimplifyopsetdatafractiondevice
ExecuTorchexecutorchyolo26n-cls_executorch_model/imgszbatchdevice
Axeleraaxelerayolo26n-cls_axelera_model/imgszbatchquantizedatafractiondevice
DEEPXdeepxyolo26n-cls_deepx_model/imgszquantizesimplifyopsetdataoptimizedevice
Qualcomm QNNqnnyolo26n-cls_qnn.onnximgszbatchnamequantizesimplifyopsetdatafractiondevice
LiteRTlitertyolo26n-cls.tfliteimgszquantizebatchdatafractiondevice
Hailohailoyolo26n-cls_hailo_model/imgsznamequantizedatafractionsimplifyconfiou
Huawei Ascendascendyolo26n-cls_ascend_model/imgszbatchnamequantizeopsetsimplifynms
Apple Core AIcoreaiyolo26n-cls.aimodelimgszbatchquantize

nms=None は、外部 NMS の場合は生出力をデフォルトとします。nms=False を設定して利用可能な NMS なしのヘッドを選択します。サポートされていないフォーマットは、ネイティブ出力パスにフォールバックします。上記の nms エントリは、nms=True を使用して NMS を埋め込むことができるフォーマットを特定します。

Exportページで、export の詳細をすべて確認できます。

FAQ#

  • yolo26n-cls.ptなどのYOLO26モデルは、効率的な画像分類のために設計されています。画像全体に単一のクラスラベルと信頼度スコアを割り当てます。画像内のオブジェクトの位置や形状を特定するよりも、画像の具体的なクラスが分かれば十分なアプリケーションで特に役立ちます。

  • YOLO26モデルを学習するには、PythonまたはCLIコマンドを使用できます。たとえば、画像サイズ64、100エポックでMNIST160データセット上の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画像分類モデルは、モデルセクションで確認できます。yolo26n-cls.ptyolo26s-cls.ptyolo26m-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セクションを参照してください。

コメント