画像分類#
Image classificationはサポートされているタスクの中で最もシンプルであり、画像全体があらかじめ定義された複数のクラスのいずれに属するかを分類します。
画像分類器の出力は、単一のクラスラベルと信頼度スコアです。画像分類は、画像がどのクラスに属しているかを知る必要があり、そのクラスのオブジェクトがどこに配置されているか、あるいは正確な形状がどのようなものかを知る必要がない場合に役立ちます。
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データセットで事前トレーニングされています。
Modelsは、初回使用時に最新のUltralytics releaseから自動的にダウンロードされます。
| モデル | サイズ (ピクセル) | 精度 top1 | 精度 top5 | 速度 CPU ONNX (ms) | 速度 T4 TensorRT10 (ms) | パラメータ (M) | FLOPs (B) at 224 |
|---|---|---|---|---|---|---|---|
| YOLO26n-cls | 224 | 71.4 | 90.1 | 5.0 ± 0.3 | 1.1 ± 0.0 | 2.8 | 0.5 |
| YOLO26s-cls | 224 | 76.0 | 92.9 | 7.9 ± 0.2 | 1.3 ± 0.0 | 6.7 | 1.6 |
| YOLO26m-cls | 224 | 78.1 | 94.2 | 17.2 ± 0.4 | 2.0 ± 0.0 | 11.6 | 4.9 |
| YOLO26l-cls | 224 | 79.0 | 94.6 | 23.2 ± 0.3 | 2.8 ± 0.0 | 14.1 | 6.2 |
| YOLO26x-cls | 224 | 79.9 | 95.0 | 41.4 ± 0.9 | 3.8 ± 0.0 | 29.6 | 13.6 |
- 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で再現できます - ParamsおよびFLOPsの値は、ConvレイヤーとBatchNormレイヤーを統合する
model.fuse()実行後のフューズ済みモデルに関するものです。事前学習済みチェックポイントは全トレーニングアーキテクチャを保持しており、より高い数値を表示する場合があります。
トレーニング#
MNIST160データセットで画像サイズ64を用いて、YOLO26n-clsを100 epochsでトレーニングします。利用可能な引数の完全なリストについては、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 の使用を検討してください。
カスタムの ClassificationDataset と ClassificationTrainer を介してデータ拡張パイプラインをカスタマイズすることで、これを実装できます。
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を使用して管理およびラベル付けすることもできます。
検証#
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 を実装することで、一貫した検証結果を得るためにも同様のアプローチを適用する必要があります。実装の詳細については、トレーニングセクションの完全なコード例を参照してください。
予測#
学習済み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 namepredict モードの詳細については、Predict ページを参照してください。
結果の出力#
画像分類は、画像ごとに1つの Results オブジェクトを返します。主な予測フィールドは result.probs であり、クラス確率ベクトルおよびトップ予測用のヘルパーが含まれています。
| 属性 | タイプ | 形状 | 説明 |
|---|---|---|---|
result.probs | Probs | (C,) | クラス確率。 |
result.probs.data | torch.float32 | (C,) | クラスごとの確率。 |
result.probs.top1 | int | () | トップクラスID。 |
result.probs.top1conf | torch.float32 | () | トップの信頼度。 |
result.probs.top5 | list[int] | (<=5) | トップ5のクラスID。 |
すべてのタスクに共通するタスク固有の Results フィールドについては、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 引数 | モデル | メタデータ | 引数 |
|---|---|---|---|---|
| PyTorch | - | yolo26n-cls.pt | ✅ | - |
| TorchScript | torchscript | yolo26n-cls.torchscript | ✅ | imgsz, quantize, dynamic, nms, batch, device |
| ONNX | onnx | yolo26n-cls.onnx | ✅ | imgsz、quantize、dynamic、simplify、opset、nms、batch、data、fraction、device |
| OpenVINO | openvino | yolo26n-cls_openvino_model/ | ✅ | imgsz、quantize、dynamic、nms、batch、data、fraction、device |
| TensorRT | engine | yolo26n-cls.engine | ✅ | imgsz、quantize、dynamic、simplify、opset、workspace、nms、batch、data、fraction、device |
| CoreML | coreml | yolo26n-cls.mlpackage | ✅ | imgsz, dynamic, quantize, nms, batch, device |
| TF SavedModel | saved_model | yolo26n-cls_saved_model/ | ✅ | imgsz、keras、quantize、opset、nms、batch、data、fraction、device |
| TF GraphDef | pb | yolo26n-cls.pb | ❌ | imgsz, opset, batch, device |
| TF Edge TPU | edgetpu | yolo26n-cls_edgetpu.tflite | ✅ | imgsz, quantize, opset, data, fraction, device |
| PaddlePaddle | paddle | yolo26n-cls_paddle_model/ | ✅ | imgsz、batch、device |
| MNN | mnn | yolo26n-cls.mnn | ✅ | imgsz、batch、dynamic、quantize、simplify、opset、nms、device |
| NCNN | ncnn | yolo26n-cls_ncnn_model/ | ✅ | imgsz, quantize, batch, device |
| IMX500 | imx | yolo26n-cls_imx_model/ | ✅ | imgsz, quantize, data, fraction, nms, device |
| RKNN | rknn | yolo26n-cls_rknn_model/ | ✅ | imgsz、batch、name、quantize、simplify、opset、data、fraction、device |
| ExecuTorch | executorch | yolo26n-cls_executorch_model/ | ✅ | imgsz、batch、device |
| Axelera | axelera | yolo26n-cls_axelera_model/ | ✅ | imgsz, batch, quantize, data, fraction, device |
| DEEPX | deepx | yolo26n-cls_deepx_model/ | ✅ | imgsz, quantize, simplify, opset, data, optimize, device |
| Qualcomm QNN | qnn | yolo26n-cls_qnn.onnx | ✅ | imgsz、batch、name、quantize、simplify、opset、data、fraction、device |
| LiteRT | litert | yolo26n-cls.tflite | ✅ | imgsz, quantize, batch, data, fraction, device |
| Hailo | hailo | yolo26n-cls_hailo_model/ | ✅ | imgsz、name、quantize、data、fraction、simplify、conf、iou |
| Huawei Ascend | ascend | yolo26n-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モデルを異なる形式にエクスポートするにはどうすればよいですか?#
学習済みYOLO26モデルは、PythonまたはCLIコマンドを使用して様々な形式にエクスポートできます。例えば、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セクションをご覧ください。