
FiftyOne Dataset Zoo 完整实战指南一行代码下载、加载与管理主流视觉数据集【免费下载链接】fiftyoneRefine high-quality datasets and visual AI models项目地址: https://gitcode.com/GitHub_Trending/fi/fiftyone本文围绕 FiftyOne 的Dataset Zoo数据集动物园展开它是 FiftyOne 内置的公共数据集下载与加载体系通过 Python 库或 CLI即可一键下载 COCO、CIFAR、ImageNet、Kinetics、KITTI、Open Images 等数十个主流基准数据集并加载为 FiftyOne Dataset 进行可视化与分析。读完本文你将掌握 Dataset Zoo 的完整 API列出、查询、下载、加载、删除、COCO-2017 的部分下载参数调优、远程数据源GitHub/URL的使用与自定义数据集创建方法以及底层的ZooDataset/ZooDatasetInfo/RemoteZooDataset实现原理。一、Dataset Zoo 是什么FiftyOne Dataset Zoo 是 FiftyOne 提供的数据集访问入口官方文档位于 docs/source/dataset_zoo/index.rst自 OSS 0.3.0 / Enterprise 1.0 起可用。它提供数十个内置基准数据集的原生访问涵盖图像分类、检测分割、视频动作识别、自动驾驶、多模态MCAP等任务均可用一条命令下载并加载任意远程数据源支持下载/准备方法托管在 GitHub 仓库或公开 URL 上的数据集包括私有仓库需配置GITHUB_TOKEN。zoo 文档首页内嵌了一个按名称、描述或标签搜索数据集的交互式搜索框并通过卡片dataset cards展示每个数据集的头像、描述与标签。卡片内容由 docs/source/dataset_zoo/datasets/dataset_cards.rst 维护完整的 API 文档则分散在 Overview、Remote datasets 与 API reference 三个子页中。二、基本配方一行代码加载数据集并可视化Dataset Zoo 的全部能力都通过 Python 库与 CLI 对等暴露其最核心的方法是load_zoo_dataset()。以下以 COCO-2017 验证集为例展示下载 → 加载 → 可视化的完整配方源自 overview.rst。Python 方式import fiftyone as fo import fiftyone.zoo as foz # 列出所有可用的 zoo 数据集 print(foz.list_zoo_datasets()) # 下载 COCO-2017 验证集并加载为 FiftyOne Dataset dataset foz.load_zoo_dataset(coco-2017, splitvalidation) # 重命名数据集并设置为持久化persistent dataset.name coco-2017-validation-example dataset.persistent True # 在 FiftyOne App 中可视化 session fo.launch_app(dataset)CLI 方式# 列出所有可用的 zoo 数据集 fiftyone zoo datasets list # 下载 COCO-2017 验证集并加载 fiftyone zoo datasets load coco-2017 --split validation \ --dataset-name coco-2017-validation-example # 在 App 中可视化 fiftyone app launch coco-2017-validation-example提示部分数据集在底层依赖 TorchVision Datasets 或 TensorFlow Datasets 包完成下载与整理。若本机未安装合适的 ML 后端详见下文自定义 ML 后端下载时会收到一条引导你安装对应包的报错信息。三、Dataset Zoo API 全景zoo API 由fiftyone.zoo包与fiftyone zoo datasets命令提供六个子命令为list、find、info、download、load、delete见 docs/source/cli/index.rst。完整 API 说明见 api.rst核心函数签名可在源码 fiftyone/zoo/datasets/init.py 中核对。3.1 列出数据集import fiftyone.zoo as foz # 列出所有可用 zoo 数据集含已下载的远程数据集 available_datasets foz.list_zoo_datasets() print(available_datasets) # [bdd100k, caltech101, cifar10, ..., voc-2012]查看已下载的数据集及其磁盘位置import fiftyone as fo import fiftyone.zoo as foz downloaded_datasets foz.list_downloaded_zoo_datasets() fo.pprint(downloaded_datasets) # { # cifar10: ( # ~/fiftyone/cifar10, # fiftyone.zoo.datasets.ZooDatasetInfo object at 0x141a63048, # ), # kitti: ( # ~/fiftyone/kitti, # fiftyone.zoo.datasets.ZooDatasetInfo object at 0x141a62940, # ), # ... # }CLI 等价命令# 列出可用数据集并标注是否已下载 fiftyone zoo datasets list # 只列出名称 / 只列出已下载的数据集 / 按 source、tags、license 过滤 fiftyone zoo datasets list --names-only fiftyone zoo datasets list --downloaded-only fiftyone zoo datasets list --source source fiftyone zoo datasets list --tags tag fiftyone zoo datasets list --license licenseCLI 表格中的列含义downloaded列的打勾标记表示对应 split 已下载dataset_dir列给出磁盘位置base列表示无需 ML 后端即可直接加载的数据集torch与tensorflow列表示该 split 由哪个 ML 后端提供带(*)的为当前默认后端。3.2 获取数据集信息每个 zoo 数据集都对应一个ZooDataset子类可通过get_zoo_dataset()获取其实例含描述、tags、支持的 splits 等元数据import textwrap import fiftyone.zoo as foz zoo_dataset foz.get_zoo_dataset(cifar10) print(***** Dataset description *****) print(textwrap.dedent( zoo_dataset.__doc__)) print(***** Tags *****) print(%s\n % , .join(zoo_dataset.tags)) print(***** Supported splits *****) print(%s\n % , .join(zoo_dataset.supported_splits))输出示例***** Dataset description ***** The CIFAR-10 dataset consists of 60000 32 x 32 color images in 10 classes, with 6000 images per class. There are 50000 training images and 10000 test images. Dataset size: 132.40 MiB Source: https://www.cs.toronto.edu/~kriz/cifar.html ***** Tags ***** image, classification ***** Supported splits ***** test, train数据集下载后其根目录会生成一个ZooDatasetInfo实例记录已下载 splits 等信息可通过find_zoo_dataset()定位磁盘目录、load_zoo_dataset_info()读取信息import fiftyone.zoo as foz dataset_dir foz.find_zoo_dataset(cifar10) info foz.load_zoo_dataset_info(cifar10) print(***** Dataset location *****) print(dataset_dir) print(\n***** Dataset info *****) print(info)输出示例***** Dataset location ***** ~/fiftyone/cifar10 ***** Dataset info ***** { name: cifar10, zoo_dataset: fiftyone.zoo.datasets.torch.CIFAR10Dataset, dataset_type: fiftyone.types.dataset_types.ImageClassificationDataset, num_samples: 10000, downloaded_splits: { test: { split: test, num_samples: 10000 } }, classes: [airplane, automobile, bird, cat, deer, dog, frog, horse, ship, truck] }CLI 等价命令为fiftyone zoo datasets info cifar10与fiftyone zoo datasets find cifar10 [--split split]。3.3 下载数据集只下载、不加载可使用download_zoo_dataset()已下载的 split 默认不会重复下载除非指定overwriteTrueimport fiftyone.zoo as foz # 下载 CIFAR-10 的 train split dataset foz.download_zoo_dataset(cifar10, splittrain)下载日志示意可看到解压、写样本、写 labels.json、写 info.json 的完整流程Downloading split train to ~/fiftyone/cifar10/train Downloading https://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz to ~/fiftyone/cifar10/tmp-download/cifar-10-python.tar.gz 170500096it [00:04, 34734776.49it/s] Extracting ~/fiftyone/cifar10/tmp-download/cifar-10-python.tar.gz to ~/fiftyone/cifar10/tmp-download Writing samples to ~/fiftyone/cifar10/train in fiftyone.types.dataset_types.ImageClassificationDataset format... 100% |█████████████████████████████████████████████| 50000/50000 [24.3s elapsed, 0s remaining, 1.7K samples/s] Writing labels to ~/fiftyone/cifar10/train/labels.json Dataset created Dataset info written to ~/fiftyone/cifar10/info.jsonCLI 等价命令# 下载 CIFAR-10 的 test split fiftyone zoo datasets download cifar10 --splits test # 需要额外关键字参数的数据集如手动下载的源文件目录 fiftyone zoo datasets download name --kwargs source_dir/path/to/source/files3.4 加载数据集load_zoo_dataset()在数据集未下载时会自动从网络下载无需预先手动下载import fiftyone.zoo as foz # 首次访问时自动下载 dataset foz.load_zoo_dataset(cifar10, splittest) # 查看数据集摘要与头部样本 print(dataset) print(dataset.head())自定义导入行为——额外的关键字参数会直接透传给底层执行导入的DatasetImporter# 从 zoo 数据集中随机导入 10 个样本 dataset foz.load_zoo_dataset( cifar10, splittest, dataset_namecifar10-test-sample, shuffleTrue, max_samples10, )CLI 等价命令# 加载已下载的 test split fiftyone zoo datasets load cifar10 --splits test # 随机加载 10 个样本并自定义数据集名称 fiftyone zoo datasets load cifar10 --splits test \ --dataset-name cifar10-test-sample --shuffle --max-samples 10 # 透传任意自定义关键字参数如手动下载的源目录 fiftyone zoo datasets load name --kwargs source_dir/path/to/source_files加载日志示意Split test already downloaded Loading cifar10 split test 100% |██████████████████████████████████████████████| 10000/10000 [3.6s elapsed, 0s remaining, 2.9K samples/s] Dataset cifar10-test created3.5 处理需要手动下载的数据集部分数据集如 BDD100K、Cityscapes要求你在官网注册账号并手动下载源文件。此时ZooDataset类会提供额外的参数如source_dir让你指定本地已下载文件的路径。流程是先调用download_zoo_dataset()配合对应参数把原始文件整理成 FiftyOne 格式再调用load_zoo_dataset()加载import fiftyone.zoo as foz # 第一步整理手动下载到 source_dir 中的文件 foz.download_zoo_dataset( bdd100k, source_dir/path/to/dir-with-bdd100k-files ) # 第二步加载进 FiftyOne dataset foz.load_zoo_dataset(bdd100k, splitvalidation)3.6 控制 zoo 数据集的下载位置默认情况下zoo 数据集下载到fiftyone.config.dataset_zoo_dir对应的子目录中默认~/fiftyone配置定义见 fiftyone/core/config.py。可通过三种方式自定义详见 user_guide/config.rst# 方式一JSON 配置直接编辑 ~/.fiftyone/config.json fiftyone config # 查看当前配置 fiftyone constants FIFTYONE_CONFIG_PATH # 定位配置文件 # 方式二环境变量 export FIFTYONE_DATASET_ZOO_DIR/your/custom/directory# 方式三代码中设置 import fiftyone as fo fo.config.dataset_zoo_dir /your/custom/directory3.7 删除 zoo 数据集import fiftyone.zoo as foz # 删除某个 split foz.delete_zoo_dataset(cifar10, splittest)# CLI删除整个数据集或某个 split fiftyone zoo datasets delete cifar10 fiftyone zoo datasets delete cifar10 --splits test3.8 将自定义数据集加入本地 zoo除了内置数据集你还可以通过JSON manifest 文件把自己的数据集注册到本地 zoo从而用与公共数据集完全相同的语法工作。例如将quickstart数据集以别名quickstart-copy注册{ custom: { quickstart-copy: fiftyone.zoo.datasets.base.QuickstartDataset } }字段含义custom是数据集来源任意字符串仅控制fiftyone zoo datasets list列表中的列quickstart-copy是新数据集名称fiftyone.zoo.datasets.base.QuickstartDataset是ZooDataset类的全限定类名可指向环境中任意可导入的位置它规定了如何下载与加载该数据集。随后通过配置暴露 manifest对应配置项dataset_zoo_manifest_paths见 config.pyexport FIFTYONE_DATASET_ZOO_MANIFEST_PATHS/path/to/custom/manifest.json # 列表中会出现 quickstart-copy fiftyone zoo datasets list # 像公共数据集一样加载 fiftyone zoo datasets load quickstart-copy3.9 自定义 ML 后端部分 zoo 数据集需要依赖 TensorFlow Datasets 或 TorchVision Datasets 完成下载与整理。加载 TF 系数据集需安装tensorflow-datasets加载 PyTorch 系数据集需安装torch与torchvision不同后端可能暴露不同的数据集。当数据集同时支持两个后端时FiftyOne 使用fo.config.default_ml_backend指定的默认后端默认逻辑安装了 PyTorch 则默认torch否则装有 TensorFlow 则默认tensorflow见 config.py# 环境变量方式 export FIFTYONE_DEFAULT_ML_BACKENDtensorflow# 代码方式 import fiftyone as fo fo.config.default_ml_backend torch四、内置数据集一览内置数据集卡片由 dataset_cards.rst 维护以下按任务类型归纳图像分类MNIST、Fashion MNIST、CIFAR-10 / CIFAR-100、Caltech-101 / Caltech-256、ImageNet 20121.2M 图像、1000 类需手动下载、ImageNet Sample1000 张抽样适合快速原型、Places~400 场景类别、LFW人脸识别、FIW亲属关系识别检测与分割COCO-2014 / COCO-201780 类、Sama-COCO更紧致的 COCO 掩码、Open Images V6 / V7~9M 图像、600 类含关键点/关系标注、VOC-2007 / VOC-201220 类、KITTI / KITTI Multiview自动驾驶含 LiDAR 点云与 3D 检测视频动作识别Kinetics 400 / 600 / 700 / 700-2020、HMDB51、UCF101、ActivityNet 100 / 200含时序动作检测自动驾驶与多模态MCAP 原生格式BDD100K10 万视频片段、Cityscapes50 城市街景、Egocentric EMG-Force腕部 EMG 手骨架 指端接触力、RoboLab机械臂策略回放三视角 深度 成功标签、RTK-SLAM Absolute AccuracyLiDAR相机IMUGNSS、TII-RATM Drone Racing无人机第一视角 500Hz IMU 动捕真值Quickstart 演示系列Quickstart200 张 COCO 验证图含真值与预测、Quickstart Video10 个视频片段密集检测、Quickstart Trajectories跨帧轨迹标注、Quickstart GroupsKITTI 分组图像点云、Quickstart 3D网格/点云/朝向包围盒、Quickstart Geo纽约地区 BDD100K 带 GPS。每个数据集的独立页面如 coco_2017.rst、cifar10.rst都给出了数据集名称、来源、许可证、大小、tags、支持 splits、ZooDataset类名与完整示例代码。五、COCO-2017 实战部分下载与参数详解COCO 是大规模目标检测、分割与描述数据集。FiftyOne 官方推荐使用 FiftyOne 下载、可视化与评估 COCO。关键背景COCO 定义了 91 个类但数据只使用 80 个类train 与 validation 中部分图像没有标注test 集没有标注COCO 2014 与 2017 使用相同图像但划分不同。数据集详情名称coco-2017许可证 CC-BY-4.0总大小 25.20 GBtags 为image, detection, segmentation支持 splits 为train, validation, test对应COCO2017Datasetfiftyone.zoo.datasets.base.COCO2017Dataset。完整 split 统计train 118,287 张、test 40,670 张、validation 5,000 张。FiftyOne 为 COCO 提供了一组部分下载参数传给load_zoo_dataset()当指定新的子集时FiftyOne 会优先复用已下载数据再决定是否从网络补充参数默认值说明split/splitsNone指定要加载的 split字符串或字符串列表支持(train, test, validation)均未提供时加载全部 splitslabel_typesNone要加载的标签类型支持(detections, segmentations)默认只加载 detectionsclassesNone必含类别字符串或列表。指定后只加载至少含一个指定类实例的样本image_idsNone指定图像 ID 列表split/image-id或image-id也支持传入 TXT换行分隔、JSON 或 CSV 文件路径include_idFalse是否在标签中包含每个样本的 COCO IDinclude_licenseFalse是否在标签中包含 COCO 许可证False不加载True/name存许可证名id存整数 IDurl存许可证 URLonly_matchingFalseTrue时只加载匹配classes/attrs要求的标签False时加载匹配样本的全部标签num_workersNone下载单张图片时的进程数默认使用multiprocessing.cpu_count()shuffleFalse部分下载时是否随机打乱样本选择顺序seedNone打乱时使用的随机种子max_samplesNone每个 split 最多加载的样本数同时指定label_types/classes时优先选择包含全部指定标签类型/类别的样本其次才是包含至少一个的样本实际加载数可能少于该上限Python 示例部分下载时只下载必要图片import fiftyone as fo import fiftyone.zoo as foz # 随机加载 validation 中 50 个样本默认只加载 detections dataset foz.load_zoo_dataset( coco-2017, splitvalidation, max_samples50, shuffleTrue, ) session fo.launch_app(dataset) # 加载 validation 中包含猫/狗的 25 个样本的分割标注 # 优先选择同时包含所有 classes 的图像其次包含至少一个 classes 的图像 dataset foz.load_zoo_dataset( coco-2017, splitvalidation, label_types[segmentations], classes[cat, dog], max_samples25, ) session.dataset dataset # 下载完整 validation split同时加载 detections 与 segmentations # 此后对该 split 的任何部分加载都无需再下载图片 dataset foz.load_zoo_dataset( coco-2017, splitvalidation, label_types[detections, segmentations], ) session.dataset datasetCLI 等价命令自定义参数通过--kwargs keyvalue透传# 随机加载 validation 中 50 个样本 fiftyone zoo datasets load coco-2017 \ --split validation \ --kwargs max_samples50 fiftyone app launch coco-2017-validation-50 # 加载包含猫/狗的 25 个样本的分割标注 fiftyone zoo datasets load coco-2017 \ --split validation \ --kwargs label_typessegmentations classescat,dog max_samples25 fiftyone app launch coco-2017-validation-25 # 加载完整 validation splitdetections segmentations fiftyone zoo datasets load coco-2017 \ --split validation \ --kwargs label_typesdetections,segmentations fiftyone app launch coco-2017-validation完整的可选关键字参数说明可查阅COCO2017Datasetfiftyone.zoo.datasets.base.COCO2017Dataset实现在 fiftyone/zoo/datasets/base.py与COCODetectionDatasetImporterfiftyone.utils.coco.COCODetectionDatasetImporter。六、远程数据源Remotely-Sourced Zoo Datasets从 OSS 1.0.0 / Enterprise 2.1.0 起见 remote.rstzoo 支持托管在GitHub 仓库或公开 URL上的数据集使用上与内置数据集完全一致支持完整 zoo API。指定远程来源时可以使用以下任意一种形式GitHub 仓库 URLhttps://github.com/user/repoGitHub refhttps://github.com/user/repo/tree/branch或https://github.com/user/repo/commit/commitGitHub ref 字符串user/repo[/ref]公开可访问的归档文件 URL如 zip 或 tar提示若要从你有权限访问的私有 GitHub 仓库下载需通过设置GITHUB_TOKEN环境变量提供 GitHub personal access token。参考示例仓库为voxel51/coco-2017与voxel51/caltech101。6.1 远程数据源的使用import fiftyone as fo import fiftyone.zoo as foz # 直接以 URL 加载首次自动下载 dataset foz.load_zoo_dataset( https://github.com/voxel51/coco-2017, splitvalidation, ) session fo.launch_app(dataset) # 下载完成后数据集会以 fiftyone.yml 中声明的名称出现在列表中 available_datasets foz.list_zoo_datasets() print(available_datasets) # [..., voxel51/coco-2017, ...] # 只下载不加载 foz.download_zoo_dataset( https://github.com/voxel51/coco-2017, splitvalidation, ) # 删除本地副本按名称或按远程来源皆可二者等价 foz.delete_zoo_dataset(voxel51/coco-2017, splitvalidation) foz.delete_zoo_dataset(https://github.com/voxel51/coco-2017, splitvalidation) foz.delete_zoo_dataset(voxel51/coco-2017) foz.delete_zoo_dataset(https://github.com/voxel51/coco-2017)CLI 等价命令fiftyone zoo datasets load \ https://github.com/voxel51/coco-2017 \ --split validation \ --dataset-name voxel51/coco-2017-validation fiftyone app launch voxel51/coco-2017-validation # 下载后出现在列表中 fiftyone zoo datasets list # 只下载 / 删除按名称或 URL 等价 fiftyone zoo datasets download https://github.com/voxel51/coco-2017 --split validation fiftyone zoo datasets delete voxel51/coco-2017 --split validation fiftyone zoo datasets delete https://github.com/voxel51/coco-2017 --split validation6.2 创建远程数据集fiftyone.yml一个远程数据集由包含以下内容的目录定义按约定还可附带可选的README.md提供使用说明fiftyone.yml __init__.py def download_and_prepare(dataset_dir, splitNone, **kwargs): pass def load_dataset(dataset, dataset_dir, splitNone, **kwargs): passfiftyone.yml或fiftyone.yaml定义数据集元数据各字段如下字段必填说明name是数据集名称。下载全部或部分后它会以此名称出现在 zoo API 中type声明该目录定义了一个dataset。为兼容旧版本可省略但推荐显式指定author数据集作者version数据集版本url托管该目录的源如 GitHub 仓库source数据集的原始来源license数据集的发行许可证description数据集简述fiftyone.version加载该数据集所需 FiftyOne 版本的 semver 规格或*supports_partial_downloadstrue/false是否可通过向download_zoo_dataset()/load_zoo_dataset()传kwargs部分下载。省略时默认为falsetags数据集标签列表可与list_zoo_datasets()配合过滤splits数据集支持的 splits 列表无 splits 时应省略size_samples数据集样本总数或按 split 的样本数列表带 splits 的示例COCO-2017name: voxel51/coco-2017 type: dataset author: The COCO Consortium version: 1.0.0 url: https://github.com/voxel51/coco-2017 source: http://cocodataset.org/#home license: https://cocodataset.org/#termsofuse description: The COCO-2017 dataset fiftyone: version: * supports_partial_downloads: true tags: - image - detection - segmentation splits: - train - validation - test size_samples: - train: 118287 - test: 40670 - validation: 5000不带 splits 的示例Caltech 101name: voxel51/caltech101 type: dataset author: Fei-Fei Li, Marco Andreeto, MarcAurelio Ranzato, Pietro Perona version: 1.0.0 url: https://github.com/voxel51/caltech101 source: https://data.caltech.edu/records/mzrjq-6wc02 license: Creative Commons Attribution 4.0 International description: The Caltech 101 dataset fiftyone: version: * supports_partial_downloads: false tags: - image - classification size_samples: 91456.3 download_and_prepare() 与 load_dataset()所有远程数据集的__init__.py必须定义download_and_prepare()它在用户调用download_zoo_dataset()或load_zoo_dataset()时被底层调用负责从网络下载文件并按需整理成可加载格式。其返回值为三元组def download_and_prepare(dataset_dir, splitNone, **kwargs): Downloads the dataset and prepares it for loading into FiftyOne. Args: dataset_dir: the directory in which to construct the dataset split (None): a specific split to download, if the dataset supports splits. The supported split values are defined by the datasets YAML file **kwargs: optional keyword arguments that your dataset can define to configure what/how the download is performed Returns: a tuple of - dataset_type: a fiftyone.types.Dataset type that the dataset is stored in locally, or None if the dataset provides its own load_dataset() method - num_samples: the total number of downloaded samples for the dataset or split - classes: a list of classes in the dataset, or None if not applicable # Download files and organize them in dataset_dir ... # Define how the data is stored dataset_type fo.types.ImageClassificationDirectoryTree dataset_type None # custom load_dataset() method # Indicate how many samples have been downloaded # May be less than the total size if partial downloads have been used num_samples 10000 # Optionally report what classes exist in the dataset classes None classes [cat, dog, ...] return dataset_type, num_samples, classes返回的dataset_type决定数据最终如何加载进 FiftyOne存在两种路径内置导入器多数情况下可直接利用 FiftyOne 的内置 importer只需返回合适的dataset_type# 若数据集有 splitsdataset_dir 将是 split 目录 dataset_importer_cls dataset_type.get_dataset_importer_cls() dataset_importer dataset_importer_cls(dataset_dirdataset_dir, **kwargs) dataset.add_importer(dataset_importer, **kwargs)自定义加载器若返回dataset_typeNone则__init__.py必须额外提供load_dataset()方法FiftyOne 会按如下方式调用load_dataset(dataset, dataset_dir, **kwargs)load_dataset()的职责是把文件路径及相关标签构造成Sample对象再调用dataset.add_samples(samples)或类似方法加入数据集def load_dataset(dataset, dataset_dir, splitNone, **kwargs): Loads the dataset into the given FiftyOne dataset. Args: dataset: a fiftyone.core.dataset.Dataset to which to import dataset_dir: the directory to which the dataset was downloaded split (None): a split to load. The supported values are (train, validation, test) **kwargs: optional keyword arguments that your dataset can define to configure what/how the load is performed # Load data into samples samples [...] # Add samples to the dataset dataset.add_samples(samples)6.4 远程数据集的部分下载机制远程数据集可通过在fiftyone.yml中声明supports_partial_downloads: true支持部分下载其行为通过__init__.py两个方法中的**kwargs定义。调用download_zoo_dataset(url, ..., **kwargs)时download_and_prepare()声明的 kwargs 会被透传调用load_zoo_dataset(name_or_url, ..., **kwargs)时kwargs 会分别透传给download_and_prepare()与load_dataset()。这使数据集作者可以灵活定义只要某类标签只下载 N 个样本等自定义子集策略。七、底层实现ZooDataset 体系从源码结构可以梳理出 zoo 的三层实现均位于 fiftyone/zoo/datasets/init.pyZooDataset基类约 L1075 起所有 zoo 数据集的抽象基类暴露name、tags、supported_splits等元数据属性并定义download_and_prepare()与加载相关接口。内置数据集的FiftyOneDataset子类与远程数据集的RemoteZooDataset都继承自它。RemoteZooDataset约 L1479 起远程数据源的实现类。构造时读取目录中的数据集 YAML 文件通过_load_dataset_metadata解析name、author、version、source、license、fiftyone.version、supports_partial_downloads默认False、tags、splits、size_samples等元数据同时把调用方传入的 URL 通过_normalize_ref规范化以支持分支/提交等 ref 形式。远程数据集通过_download_and_prepare()从 GitHub/URL 拉取源码后动态导入其__init__.py中定义的download_and_prepare()/load_dataset()并执行。ZooDatasetInfo约 L792 起一个可序列化etas.Serializable的信息类在数据集下载时创建于其根目录记录zoo_dataset类名、dataset_type、num_samples、downloaded_splits与classes支撑list_downloaded_zoo_datasets()、load_zoo_dataset_info()等查询能力。内置数据集按领域拆分在三个模块中fiftyone/zoo/datasets/base.pyFiftyOneDataset及其直接子类如COCO2017Dataset、BDD100KDataset、CityscapesDataset、QuickstartDataset导入fiftyone.utils.*各领域工具完成下载/整理、tf.pyTensorFlow 后端数据集如CIFAR10Dataset、torch.pyPyTorch 后端数据集。顶层入口fiftyone.zoo中的list_zoo_datasets()、download_zoo_dataset()、load_zoo_dataset()等函数会按需装配并驱动上述类。相关配置项统一收敛在 fiftyone/core/config.pydataset_zoo_dir下载目录环境变量FIFTYONE_DATASET_ZOO_DIR、dataset_zoo_manifest_paths自定义 manifest环境变量FIFTYONE_DATASET_ZOO_MANIFEST_PATHS、default_ml_backend默认 ML 后端环境变量FIFTYONE_DEFAULT_ML_BACKEND与文档表格 user_guide/config.rst 一一对应。八、延伸阅读数据集 Zoo 总览与入门docs/source/dataset_zoo/overview.rst远程数据源完整指南docs/source/dataset_zoo/remote.rstZoo API 参考Python CLIdocs/source/dataset_zoo/api.rst各数据集独立页面docs/source/dataset_zoo/datasets/CLI 命令参考fiftyone zoo datasetsdocs/source/cli/index.rst配置项说明dataset_zoo_dir、default_ml_backend等docs/source/user_guide/config.rst核心实现fiftyone/zoo/datasets/init.py、fiftyone/zoo/datasets/base.py整体而言Fiftyone Dataset Zoo 的价值在于把找数据源 → 下载 → 解压整理 → 格式转换 → 加载 → 可视化这条传统上需要手工多步完成的链路压缩成一行代码同时通过部分下载、远程数据源与自定义 manifest 保持了极高的灵活性——无论你是刚入门需要 quickstart 演示数据还是做研究需要 COCO/ImageNet 全量数据都可以用同一套 API 无缝衔接。【免费下载链接】fiftyoneRefine high-quality datasets and visual AI models项目地址: https://gitcode.com/GitHub_Trending/fi/fiftyone创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考