图像分类
图像分类是三项任务中最简单的一项,涉及将整幅图像归入一组预定义类别中的某一类。
图像分类器的输出是单一类别标签和置信度分数。当你只需要知道图像属于哪一类,而不需要知道该类对象的位置或确切形状时,图像分类就非常有用。
观看: 探索Ultralytics YOLO 任务:使用Ultralytics HUB 进行图像分类
提示
YOLO11 分类模型使用 -cls
后缀,即 yolo11n-cls.pt
并对 图像网.
机型
YOLO11 这里显示的是经过预训练的分类模型。Detect、Segment 和 Pose 模型是在COCO数据集上预先训练的,而 Classify 模型则是在ImageNet数据集上预先训练的。
首次使用时,模型会自动从最新的Ultralytics 版本下载。
模型 | 尺寸 (像素) |
acc top1 |
acc top5 |
速度 CPU ONNX (毫秒) |
速度 T4TensorRT10 (ms) |
params (M) |
FLOPs (B) at 224 |
---|---|---|---|---|---|---|---|
YOLO11n-cls | 224 | 70.0 | 89.4 | 5.0 ± 0.3 | 1.1 ± 0.0 | 1.6 | 0.5 |
YOLO11s-cls | 224 | 75.4 | 92.7 | 7.9 ± 0.2 | 1.3 ± 0.0 | 5.5 | 1.6 |
YOLO11m-cls | 224 | 77.3 | 93.9 | 17.2 ± 0.4 | 2.0 ± 0.0 | 10.4 | 5.0 |
YOLO11l-cls | 224 | 78.3 | 94.3 | 23.2 ± 0.3 | 2.8 ± 0.0 | 12.9 | 6.2 |
YOLO11x-cls | 224 | 79.5 | 94.9 | 41.4 ± 0.9 | 3.8 ± 0.0 | 28.4 | 13.7 |
- 口音 的模型精度。 图像网 数据集验证集。
复制方式yolo val classify data=path/to/ImageNet device=0
- 速度 对 ImageNet val 图像进行平均。 亚马逊 EC2 P4d 实例
复制方式yolo val classify data=path/to/ImageNet batch=1 device=0|cpu
火车
在图像大小为 64 的 MNIST160 数据集上对 YOLO11n-cls 进行 100次训练。有关可用参数的完整列表,请参阅配置页面。
示例
from ultralytics import YOLO
# Load a model
model = YOLO("yolo11n-cls.yaml") # build a new model from YAML
model = YOLO("yolo11n-cls.pt") # load a pretrained model (recommended for training)
model = YOLO("yolo11n-cls.yaml").load("yolo11n-cls.pt") # build from YAML and transfer weights
# Train the model
results = model.train(data="mnist160", epochs=100, imgsz=64)
# Build a new model from YAML and start training from scratch
yolo classify train data=mnist160 model=yolo11n-cls.yaml epochs=100 imgsz=64
# Start training from a pretrained *.pt model
yolo classify train data=mnist160 model=yolo11n-cls.pt epochs=100 imgsz=64
# Build a new model from YAML, transfer pretrained weights to it and start training
yolo classify train data=mnist160 model=yolo11n-cls.yaml pretrained=yolo11n-cls.pt 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
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("yolo11n-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 分类数据集格式详见数据集指南。
瓦尔
验证训练有素的 YOLO11n-cls 模型 精确度 对 MNIST160 数据集的分析。无需参数,因为 model
保留其培训 data
和参数作为模型属性。
示例
from ultralytics import YOLO
# Load a model
model = YOLO("yolo11n-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
yolo classify val model=yolo11n-cls.pt # val official model
yolo classify val model=path/to/best.pt # val custom model
提示
正如 培训科您可以在训练过程中使用自定义的 ClassificationTrainer
.您需要采用同样的方法,通过执行自定义的 ClassificationValidator
在调用 val()
方法。请参考 培训科 了解实施细节。
预测
使用训练有素的 YOLO11n-cls 模型对图像进行预测。
示例
from ultralytics import YOLO
# Load a model
model = YOLO("yolo11n-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
yolo classify predict model=yolo11n-cls.pt source='https://ultralytics.com/images/bus.jpg' # predict with official model
yolo classify predict model=path/to/best.pt source='https://ultralytics.com/images/bus.jpg' # predict with custom model
查看全文 predict
模式的详细信息,请参见 预测 page.
出口
将 YOLO11n-cls 模型导出为不同格式,如ONNX,CoreML 等。
示例
from ultralytics import YOLO
# Load a model
model = YOLO("yolo11n-cls.pt") # load an official model
model = YOLO("path/to/best.pt") # load a custom trained model
# Export the model
model.export(format="onnx")
yolo export model=yolo11n-cls.pt format=onnx # export official model
yolo export model=path/to/best.pt format=onnx # export custom trained model
YOLO11-cls 可用的导出格式如下表所示。您可以使用 format
参数,即 format='onnx'
或 format='engine'
.您可以直接对导出的模型进行预测或验证,即 yolo predict model=yolo11n-cls.onnx
.导出完成后会显示模型的使用示例。
格式 | format 论据 |
模型 | 元数据 | 论据 |
---|---|---|---|---|
PyTorch | - | yolo11n-cls.pt |
✅ | - |
TorchScript | torchscript |
yolo11n-cls.torchscript |
✅ | imgsz , half , optimize , nms , batch , device |
ONNX | onnx |
yolo11n-cls.onnx |
✅ | imgsz , half , dynamic , simplify , opset , nms , batch , device |
OpenVINO | openvino |
yolo11n-cls_openvino_model/ |
✅ | imgsz , half , dynamic , int8 , nms , batch , data , fraction , device |
TensorRT | engine |
yolo11n-cls.engine |
✅ | imgsz , half , dynamic , simplify , workspace , int8 , nms , batch , data , fraction , device |
CoreML | coreml |
yolo11n-cls.mlpackage |
✅ | imgsz , half , int8 , nms , batch , device |
TF SavedModel | saved_model |
yolo11n-cls_saved_model/ |
✅ | imgsz , keras , int8 , nms , batch , device |
TF GraphDef | pb |
yolo11n-cls.pb |
❌ | imgsz , batch , device |
TF 轻型 | tflite |
yolo11n-cls.tflite |
✅ | imgsz , half , int8 , nms , batch , data , fraction , device |
TF 边缘TPU | edgetpu |
yolo11n-cls_edgetpu.tflite |
✅ | imgsz , device |
TF.js | tfjs |
yolo11n-cls_web_model/ |
✅ | imgsz , half , int8 , nms , batch , device |
PaddlePaddle | paddle |
yolo11n-cls_paddle_model/ |
✅ | imgsz , batch , device |
MNN | mnn |
yolo11n-cls.mnn |
✅ | imgsz , batch , int8 , half , device |
NCNN | ncnn |
yolo11n-cls_ncnn_model/ |
✅ | imgsz , half , batch , device |
IMX500 | imx |
yolo11n-cls_imx_model/ |
✅ | imgsz , int8 , data , fraction , device |
RKNN | rknn |
yolo11n-cls_rknn_model/ |
✅ | imgsz , batch , name , device |
查看全文 export
中的详细信息 出口 page.
常见问题
YOLO11 在图像分类中的作用是什么?
YOLO11 模型,如 yolo11n-cls.pt
是为高效图像分类而设计的。它们为整幅图像分配一个类别标签和置信度分数。这对于那些只需知道图像的具体类别,而无需识别图像中物体的位置或形状的应用特别有用。
如何训练用于图像分类的YOLO11 模型?
要训练YOLO11 模型,可以使用Python 或CLI 命令。例如,要训练一个 yolo11n-cls
模型在 MNIST160 数据集上进行了 100 次历时分析,图像大小为 64:
示例
from ultralytics import YOLO
# Load a model
model = YOLO("yolo11n-cls.pt") # load a pretrained model (recommended for training)
# Train the model
results = model.train(data="mnist160", epochs=100, imgsz=64)
yolo classify train data=mnist160 model=yolo11n-cls.pt epochs=100 imgsz=64
有关更多配置选项,请访问配置页面。
在哪里可以找到经过预训练的YOLO11 分类模型?
预训练的YOLO11 分类模型可在 机型 节。机型,如 yolo11n-cls.pt
, yolo11s-cls.pt
, yolo11m-cls.pt
等进行预训练。 图像网 数据集,可轻松下载并用于各种图像分类任务。
如何将训练好的YOLO11 模型导出为不同格式?
您可以使用Python 或CLI 命令将训练好的YOLO11 模型导出为各种格式。例如,将模型导出为ONNX 格式:
示例
from ultralytics import YOLO
# Load a model
model = YOLO("yolo11n-cls.pt") # load the trained model
# Export the model to ONNX
model.export(format="onnx")
yolo export model=yolo11n-cls.pt format=onnx # export the trained model to ONNX format
有关详细的导出选项,请参阅导出页面。
如何验证训练有素的YOLO11 分类模型?
要在 MNIST160 这样的数据集上验证训练有素的模型的准确性,可以使用以下Python 或CLI 命令:
示例
from ultralytics import YOLO
# Load a model
model = YOLO("yolo11n-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
yolo classify val model=yolo11n-cls.pt # validate the trained model
更多信息,请访问验证部分。