FiftyOne 数据集动物园之 Caltech-101:图像分类数据集的加载、底层实现与实战指南
2026/9/15 13:11:01 网站建设 项目流程

FiftyOne 数据集动物园之 Caltech-101:图像分类数据集的加载、底层实现与实战指南

【免费下载链接】fiftyoneRefine high-quality datasets and visual AI models项目地址: https://gitcode.com/GitHub_Trending/fi/fiftyone

本篇文章聚焦 FiftyOne Dataset Zoo(数据集动物园)内置的Caltech-101图像分类数据集,系统讲解它的数据构成、许可证与元数据、Python/CLI 两种加载方式,并结合仓库源码剖析其自动下载、解压与元数据解析的完整流程,帮助你快速把该数据集接入 FiftyOne 进行可视化和模型实验。

Caltech-101 数据集概览

Caltech-101 是计算机视觉领域经典的图像分类基准数据集,由加州理工(Caltech)发布。FiftyOne 将其作为 Dataset Zoo 的内置数据集,提供一行命令即可下载并加载到 FiftyOne 的能力。

该数据集的核心特征如下:

  • 类别构成:包含属于101 个对象类别的图片,外加 1 个背景杂波类BACKGROUND_Google,每个类别内图片只标注单个对象(图像级标签,无框、无分割标注)。
  • 样本规模:每个类别约有 40 到 800 张图片,总计约 9,000 张(源码 docstring 中给出的精确值为9,144 张)。
  • 图像规格:图片尺寸可变,典型边长约200–300 像素
  • 标注类型:本版本仅包含图像级标签(image-level labels),即整张图片对应一个类别标签。

官方元数据

根据 数据集卡片 及源码中的Caltech101Dataset类定义(见 fiftyone/zoo/datasets/base.py),官方元数据如下:

属性
数据集名称caltech101
数据来源Caltech 官方数据仓库(记录 ID:mzrjq-6wc02
许可证CC-BY-4.0
数据集大小138.60 MB
标签image, classification
支持的 splitsN/A(无预定义划分)
ZooDataset 类fiftyone.zoo.datasets.base.Caltech101Dataset

从源码可以看到这些属性均有对应实现:name返回"caltech101"license返回"CC-BY-4.0"tags返回("image", "classification"),而supported_splits直接返回None——这与卡片中N/A的说明完全一致,即该数据集没有官方预定义的 train/val/test 划分,你需要按需自行切分。

快速上手:加载 Caltech-101 到 FiftyOne

Dataset Zoo 的加载接口同时暴露在 Python 库与 CLI 中,下面分别给出完整用法。

Python 方式

import fiftyone as fo import fiftyone.zoo as foz # 加载 caltech101 数据集(首次会自动下载并准备) dataset = foz.load_zoo_dataset("caltech101") # 在 FiftyOne App 中可视化 session = fo.launch_app(dataset)

CLI 方式

# 下载并加载 caltech101 fiftyone zoo datasets load caltech101 # 在 App 中打开 fiftyone app launch caltech101

两条命令完全等价:fiftyone zoo datasets load caltech101会把数据集下载、解压并整理为 FiftyOne 数据集;fiftyone app launch caltech101则启动 Web App 进行交互式可视化。加载完成后,你可以浏览全部 102 个类别、按标签过滤样本、查看每张图片的预测/真实标签,甚至直接进入模型评估与数据清洗流程。

加载命令的进阶参数

load_zoo_dataset与 CLI 的fiftyone zoo datasets load都支持若干常用参数,便于你按需定制(参数说明见 CLI 文档):

参数说明
splits/--splits指定要加载的数据集划分;Caltech-101 无官方 split,故此处不适用
dataset_name/--dataset-name为生成的 FiftyOne 数据集自定义名称
kwargs/--kwargs透传给load_zoo_dataset的额外关键字参数,如max_samplesshuffleseed

例如,随机抽取 50 张图片做快速实验:

fiftyone zoo datasets load caltech101 \ --dataset-name caltech101-sample \ --kwargs max_samples=50 shuffle=True

等价于 Python:

dataset = foz.load_zoo_dataset( "caltech101", dataset_name="caltech101-sample", max_samples=50, shuffle=True, )

此外,还可以先用fiftyone zoo datasets list(Python 中为foz.list_zoo_datasets())确认caltech101在可用列表中,再执行加载。加载后若需长期保留,可设置dataset.persistent = True,这样下次启动 App 时数据集仍然存在。

底层实现:下载、解压与元数据解析全流程

Caltech-101 之所以能"一行命令加载",其背后是 Dataset Zoo 的Caltech101Dataset类调用了 fiftyone/utils/caltech.py 中的download_caltech101_dataset()函数完成的。从源码结构看,整个准备流程可分为以下步骤:

  1. 下载归档:从 Caltech 官方数据仓库的固定地址下载caltech-101.zip到 scratch 临时目录;若该文件已存在则直接复用,不重复下载。
  2. 两次解压:官方分发的是一个"压缩包套压缩包"结构,需要先解压caltech-101.zip,再解压其中的101_ObjectCategories.tar.gz,得到按类别组织的目录树。
  3. 目录搬移:将解压得到的101_ObjectCategories目录内容移动到数据集目标目录,目录名即类别名。
  4. 清理冗余文件:原始下载中存在一个多余文件BACKGROUND_Google/tmp,源码会尝试删除它(try/except容错);同时必须删除scratch临时目录,否则它会被误识别为一个类别文件夹。
  5. 元数据解析:使用 FiftyOne 的ImageClassificationDirectoryTree数据集类型与对应的 importer,遍历目录树统计类别列表与样本总数,返回(num_samples, classes, did_download)供上层使用。

这一调用链在 fiftyone/zoo/datasets/base.py 的_download_and_prepare中完成:它把download_caltech101_dataset的结果与ImageClassificationDirectoryTree()组合,最终返回数据集类型、样本数和类别列表,FiftyOne 据此创建Classification标签并构建索引。因此,你最终得到的 FiftyOne 数据集在磁盘上是一个"图像分类目录树"(ImageClassificationDirectoryTree)结构,每个子目录对应一个类别,这也是 FiftyOne 支持的标准图像分类导入格式。

从注册表看(fiftyone/zoo/datasets/base.py),"caltech101"被注册映射到Caltech101Dataset类,load_zoo_dataset("caltech101")正是通过该注册表找到对应实现并触发上述流程的。此外,同一文件还实现了Caltech256Dataset(256 类、约 30,607 张、1.16 GB),说明 Caltech 系列在 Zoo 中是成对提供的,方便你在两个规模的数据集间切换实验。

使用注意事项

  • 首次加载耗时:138.60 MB 的归档需要联网下载并解压,首次执行load_zoo_dataset("caltech101")会明显慢于后续加载;FiftyOne 会缓存下载好的归档,重复加载不会重复下载(源码中通过"文件已存在则复用"判断did_download)。
  • 无官方划分:该数据集supported_splitsNone,训练/验证/测试集需要自行划分,可借助 FiftyOne 的dataset.shuffle()dataset.split()或视图(views)实现。
  • 图像级标签:所有标注都是整图单标签分类,适合做分类模型的训练与评估,不适合直接作为目标检测或分割任务的标注数据。
  • 许可证:使用该数据集请遵守CC-BY-4.0许可条款,注意署名要求。
  • 数据预处理:图片边长典型值仅 200–300 像素,加载后建议结合 FiftyOne 的 transforms 或嵌入(embeddings)流程做尺寸归一化,再送入视觉模型。

借助 FiftyOne Dataset Zoo 的标准化接口,你可以在几分钟内完成 Caltech-101 的下载、加载、可视化与实验,并利用 FiftyOne 的筛选、评估、Embedding 等能力对该经典分类基准做深度挖掘。

【免费下载链接】fiftyoneRefine high-quality datasets and visual AI models项目地址: https://gitcode.com/GitHub_Trending/fi/fiftyone

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

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

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

立即咨询