Ultralytics YOLO 图像分类实战:ImageWoof 细粒度数据集解析与训练全流程
2026/9/6 16:57:16 网站建设 项目流程

Ultralytics YOLO 图像分类实战:ImageWoof 细粒度数据集解析与训练全流程

【免费下载链接】ultralyticsUltralytics YOLO26, YOLO11, YOLOv8 — object detection, instance segmentation, semantic segmentation, image classification, pose estimation, object tracking项目地址: https://gitcode.com/GitHub_Trending/ul/ultralytics

本文以 Ultralytics 官方文档中的 ImageWoof 数据集页面为主线,完整讲解这一 10 个犬种、12,954 张图片的细粒度分类基准的构成、目录结构与三种尺寸变体,并结合仓库源码说明data="imagewoof"这类内置数据集名的自动下载、目录解析机制,以及yolo26n-cls.pt分类模型的 Python/CLI 训练实操,帮助你掌握从数据集获取到模型训练验证的完整闭环。

一、ImageWoof 是什么:一个“看起来都差不多”的 ImageNet 子集

ImageWoof 是由 fast.ai 团队创建的 ImageNet 子集,专门挑选了 10 个外观高度相似的犬种(如 Beagle、Shih-Tzu、Golden retriever),作为比常规分类更难挑战的细粒度图像分类基准。它共包含 12,954 张彩色图像,其中 9,025 张用于训练、3,929 张用于验证,全部为彩色图像。

与 ImageNette 等“类别间差异明显”的 ImageNet 子集不同,ImageWoof 的 10 个类别彼此之间差异非常细微——比如 Border terrier 与 Australian terrier、Samoyed 与 Old English sheepdog 这类在轮廓、毛色上都接近的犬种。因此它考察的不是“这是不是一只狗”,而是“这是哪一种狗”,迫使模型学习更精细的视觉特征而非依赖粗粒度的物体轮廓。其许可证为 Research-Only(仅研究用途,继承自 ImageNet 的授权条款,详见文档 front-matter 的 license 声明)。

10 个犬种与预定义数据划分

数据集自带预定义的 train/val 划分,每个犬种独立存放在自己的子文件夹中:

划分图片数类别数
Train9,02510
Validation3,92910

10 个犬种为:Australian terrier(澳大利亚梗)、Border terrier(边境梗)、Samoyed(萨摩耶)、Beagle(比格犬)、Shih-Tzu(西施犬)、English foxhound(英国猎狐犬)、Rhodesian ridgeback(罗得西亚脊背犬)、Dingo(澳洲野犬)、Golden retriever(金毛寻回犬)、Old English sheepdog(英国古代牧羊犬)。由于全部类别都是犬种,这一划分天然就是细粒度分类测试——区分视觉上极为相似的类别,而不是全量 ImageNet 那种宽泛的物体识别。

二、目录结构:Ultralytics 分类训练所期望的标准布局

ImageWoof 的文件夹组织完全遵循 Ultralytics 图像分类任务要求的“划分目录 + 每类一子目录”结构。该结构在 分类数据集总览中有明确规范:

imagewoof/ |-- train/ | |-- Australian_terrier/ | | |-- *.jpg | |-- Border_terrier/ | |-- Samoyed/ | |-- Beagle/ | |-- Shih_Tzu/ | |-- English_foxhound/ | |-- Rhodesian_ridgeback/ | |-- Dingo/ | |-- Golden_retriever/ | |-- Old_English_sheepdog/ |-- val/ | |-- Australian_terrier/ | |-- ...(同样 10 个子目录)

要点:

  • train/val/为必备划分,test/可选;
  • 每个划分目录下,每个类别对应一个以其命名的子目录,目录内直接存放该类别的所有图片;
  • 图片文件名需唯一,常见格式(JPEG、PNG 等)均可。

从源码结构看,这套布局不是“约定俗成”,而是被 check_cls_dataset() 严格依赖的:函数会依次检查data_dir / "train"data_dir / "val"(兼容validationvalid命名)与data_dir / "test",并通过names = dict(enumerate(sorted(x.name for x in (data_dir / "train").iterdir() if x.is_dir())))训练集子目录名的排序结果生成类别名到索引的映射——也就是说,ImageWoof 的 10 个类别索引顺序由犬种目录名的字典序决定,训练与验证阶段会自动保持一致。若目录中缺少train/划分但存在散落的图片,该函数还会调用 split_classify_dataset() 按 8:2 比例自动切分,这也解释了为什么你手动准备的自定义数据集只要“一个类别一个文件夹”也能直接投入训练。

三、三种尺寸变体:按算力预算选择数据集

ImageWoof 提供三种尺寸,以适配不同的研究需求与算力预算:

变体数据集参数图片规格适用场景
全尺寸imagewoof原始分辨率最终训练与性能基准测试
中等尺寸imagewoof320最长边 320 像素更快训练且不显著牺牲精度
小尺寸imagewoof160最长边 160 像素快速原型验证与实验迭代

使用方法只需在data参数中替换数据集名,例如:

from ultralytics import YOLO model = YOLO("yolo26n-cls.pt") # 加载预训练模型(训练推荐) # 中等尺寸数据集 model.train(data="imagewoof320", epochs=100, imgsz=224) # 小尺寸数据集 model.train(data="imagewoof160", epochs=100, imgsz=224)
# 使用预训练模型在中等尺寸数据集上训练 yolo classify train model=yolo26n-cls.pt data=imagewoof320 epochs=100 imgsz=224

需要说明的是:图片分辨率越小,分类精度大概率会下降(犬种间的细微毛发、体态特征在 160px 下更难分辨),但它在模型开发早期是快速迭代、调通流水线的极佳选择。推荐的开发节奏是:先用imagewoof160验证代码与超参流程,再用imagewoof320做中间验证,最后用全尺寸imagewoof产出最终模型。

四、训练实操:Python 与 CLI 两种方式

在 ImageWoof 上训练 100 个 epoch、图像尺寸 224x224 的完整示例如下。完整训练参数列表见 Training 文档。

Python

from ultralytics import YOLO # 加载模型 model = YOLO("yolo26n-cls.pt") # 加载预训练模型(训练推荐) # 训练模型 results = model.train(data="imagewoof", epochs=100, imgsz=224)

CLI

# 从预训练 *.pt 模型开始训练 yolo classify train data=imagewoof model=yolo26n-cls.pt epochs=100 imgsz=224

从源码结构看,这条命令的底层链路是:model.train()最终进入 ClassificationTrainer。其中有几个值得注意的实现细节:

  1. 默认图像尺寸为 224ClassificationTrainer.__init__中显式写了if overrides.get("imgsz") is None: overrides["imgsz"] = 224(见 train.py),这与文档示例中imgsz=224的写法一致,也符合 ResNet 系分类骨干网络的标准输入;
  2. 类别数自动对齐get_model()使用self.data["nc"]构建ClassificationModel,并在set_model_attributes()中把数据集解析出的names写回self.model.names——因此 ImageWoof 的 10 个犬种名无需手动指定,由check_cls_dataset()从目录结构自动得出;
  3. 训练/验证数据管线build_dataset()按 mode 构造ClassificationDatasetaugment=mode == "train",即仅训练集启用数据增强),get_dataloader()还会过滤掉类别索引超出nc的样本以防 CUDA 断言错误,这为“自定义数据集与预训练模型类别数不一致”的场景提供了保护。

此外,分类任务还支持直接使用 torchvision 模型名作为model参数:setup_model()会检查模型名是否存在于torchvision.models中,若是则以IMAGENET1K_V1权重初始化(train.py),并用reshape_outputs()将输出头重塑为 ImageWoof 的 10 类——这意味着你不仅可以用yolo26n-cls.pt,还可以用 ImageNet 预训练的 torchvision 模型在 ImageWoof 上做迁移学习实验。

内置数据集名的自动下载机制

文档示例直接写data="imagewoof"而不给路径,这背后的机制在 check_cls_dataset() 中可以确认:

  • datahttp(s)://开头的 URL,直接下载解压到数据集目录;
  • 若传入的是纯名称(如imagewoofimagewoof320imagewoof160),先在本地数据集目录(默认由 settings 决定)中查找,找不到则发出警告并执行download(f"{ASSETS_URL}/{dataset}.zip", ...)自动下载缓存;
  • 唯一的特例是imagenet(全量 144GB 数据集),它会改为执行 get_imagenet.sh 脚本下载。

因此首次运行data="imagewoof"时会看到“Dataset not found ... attempting download”日志,下载成功后图片被缓存,后续运行不再联网。

五、Noisy Labels 版本:模拟真实世界的标签噪声

官方文档指出,ImageWoof 还提供带噪声标签(noisy labels)的版本,模拟标签并不总是可靠的现实场景。这一版本的价值在于:

  • 鲁棒性训练:模型在含错标数据上学习,能够发展出对歧义或错标样本更强的抗干扰能力;
  • 更贴近真实应用:实际部署中人工标注错误、标注边界模糊(例如一只混种犬的“标准答案”本身就有争议)是常态,噪声标签训练让模型的泛化表现更可信;
  • 评估上限探测:在标签本身有噪声的验证集上,指标天花板会降低,这提醒你不要盲目追求 100% 精度,而应关注模型是否学到了合理的类别区分。

六、典型应用场景

ImageWoof 被广泛用于训练与评估“类别间差异小”场景下的深度学习模型,其挑战性正源于犬种间的细微差别,对模型性能与泛化能力提出了更高要求。它尤其适合:

  • 细粒度类别上的分类性能基准测试;
  • 测试模型对“长得像”的类别的区分鲁棒性;
  • 开发能捕捉细微视觉差异的算法(例如结合注意力、多尺度特征的结构);
  • 评估从通用领域(ImageNet 预训练)到特定领域(犬种识别)的迁移学习效果。

从源码结构看,ImageWoof 与仓库测试体系也是配套的:ClassificationTrainer 与 ClassificationValidator 的官方示例均使用更小的imagenet10数据集做快速回归验证(见 ImageNet10 文档),而 ImageWoof 则承担“真实规模下的完整训练验证”角色——两者组合起来,先跑通 24 张图片的 CI 级检查,再上 12,954 张图片做正式实验,是官方推荐的两段式工作流。

七、样本图像与细粒度难点

ImageWoof 包含各种犬种的彩色图片,为图像分类任务提供了高难度样本。数据集中的图像充分展示了不同犬种之间的细微差异与高度相似性:金毛寻回犬与罗得西亚脊背犬毛色相近、萨摩耶与英国古代牧羊犬的毛发质感类似,正是这种“差之毫厘”的类别边界,构成了细粒度识别的核心难度,也是该数据集持续被用作深度分类模型能力基准的原因。

八、引用与致谢

如果你的研究或开发工作使用了 ImageWoof 数据集,请通过链接 fast.ai 的官方 ImageWoof 数据集仓库(github.com/fastai/imagenette,见原文档 front-matter 中的 creator 字段)予以致谢。Ultralytics 感谢 fast.ai 团队创建并维护 ImageWoof 这一宝贵的机器学习与计算机视觉研究资源,也感谢 ImageNet 团队提供底层图像来源。数据集图像继承 ImageNet 的 Research-Only 授权,商用前请自行确认授权范围。

九、常见问题(FAQ)

ImageWoof 在 Ultralytics 中是什么?

它是 ImageNet 的一个挑战性子集,聚焦 10 个犬种,含 12,954 张图片(9,025 训练 / 3,929 验证),由 fast.ai 创建以挑战图像分类模型的极限。提供全尺寸、320px、160px 三种分辨率版本,还包含噪声标签版本,非常适合开发先进的深度学习分类模型。

ImageWoof 有多少图片和犬种?

共 12,954 张图片——9,025 张训练、3,929 张验证——覆盖 10 个犬种:Australian terrier、Border terrier、Samoyed、Beagle、Shih-Tzu、English foxhound、Rhodesian ridgeback、Dingo、Golden retriever、Old English sheepdog。每个犬种独立存放于自己的文件夹,符合 Ultralytics 期望的标准分类目录布局。

如何用 YOLO 在 ImageWoof 上训练模型?

对 100 个 epoch、224x224 图像尺寸,使用本文第四节的 Python(model.train(data="imagewoof", epochs=100, imgsz=224))或 CLI(yolo classify train data=imagewoof model=yolo26n-cls.pt epochs=100 imgsz=224)示例即可,更多训练参数见 Training 文档。

ImageWoof 有哪些版本?

三个尺寸:全尺寸imagewoof(最终训练与基准测试)、中等imagewoof320(最长边 320px,更快训练)、小尺寸imagewoof160(最长边 160px,快速原型)。替换data参数即可切换;更小的图片精度可能更低,但适合快速迭代。

噪声标签版本对训练有什么帮助?

它模拟标签并非总准确的真实场景。用带噪数据训练可提升分类模型的鲁棒性与泛化能力,使其能有效处理实际应用中常见的歧义或错标数据。

使用 ImageWoof 的主要挑战是什么?

核心挑战在于 10 个犬种之间的细微差别:类别高度相关,区分它们需要更先进、更精细的图像分类模型。这使得 ImageWoof 成为检验深度学习模型能力与改进效果的理想基准。

【免费下载链接】ultralyticsUltralytics YOLO26, YOLO11, YOLOv8 — object detection, instance segmentation, semantic segmentation, image classification, pose estimation, object tracking项目地址: https://gitcode.com/GitHub_Trending/ul/ultralytics

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询