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 |
| 支持的 splits | N/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_samples、shuffle、seed等 |
例如,随机抽取 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()函数完成的。从源码结构看,整个准备流程可分为以下步骤:
- 下载归档:从 Caltech 官方数据仓库的固定地址下载
caltech-101.zip到 scratch 临时目录;若该文件已存在则直接复用,不重复下载。 - 两次解压:官方分发的是一个"压缩包套压缩包"结构,需要先解压
caltech-101.zip,再解压其中的101_ObjectCategories.tar.gz,得到按类别组织的目录树。 - 目录搬移:将解压得到的
101_ObjectCategories目录内容移动到数据集目标目录,目录名即类别名。 - 清理冗余文件:原始下载中存在一个多余文件
BACKGROUND_Google/tmp,源码会尝试删除它(try/except容错);同时必须删除scratch临时目录,否则它会被误识别为一个类别文件夹。 - 元数据解析:使用 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_splits为None,训练/验证/测试集需要自行划分,可借助 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),仅供参考