
FiftyOne 数据集仓库实战BDD100K 自动驾驶数据集的加载、标签解析与底层实现剖析【免费下载链接】fiftyoneRefine high-quality datasets and visual AI models项目地址: https://gitcode.com/GitHub_Trending/fi/fiftyone本文基于 FiftyOne 开源仓库中 BDD100K 数据集卡片docs/source/dataset_zoo/datasets/bdd100k.rst展开系统讲解如何手动下载并组织 BDD100K 原始数据通过foz.load_zoo_dataset在 Python 或 CLI 中一键装载该数据集并结合 ZooDataset 实现 与 BDD 工具模块 剖析其目录整理、标签格式解析与导入导出的底层原理。读完本文你将能够独立完成 BDD100K 的端到端接入、理解其多任务标签分类/检测/分割折线在 FiftyOne 中的字段映射并在 FiftyOne App 中进行可视化浏览。BDD100K 数据集概览BDD100KBerkeley Deep Drive是当前规模最大、场景最多样的自动驾驶视频数据集之一。根据 fiftyone/zoo/datasets/base.py 中BDD100KDataset类的文档说明100,000 段视频片段采集自超过50,000 次出行覆盖纽约、旧金山湾区及其他地区场景类型丰富包括城市街道、居民区、高速公路等视频在不同天气条件、一天中的不同时段录制具备极高的环境多样性数据划分为训练集70K/ 验证集10K/ 测试集20K每段视频时长40 秒、分辨率为720p、帧率30fps每段视频第 10 秒处的一帧被挑选出来进行标注用于图像分类、目标检测与分割任务。当前仓库中提供的 Zoo 数据集版本仅包含从视频中抽取出的 100K 图像及其对应的图像分类、检测和分割标签而非原始视频本身因此可直接作为图像级多任务学习的数据源。手动下载与目录结构要求BDD100K不支持自动下载必须由用户手动获取原始数据。这由源码中的requires_manual_download属性直接印证property def requires_manual_download(self): return True参见 fiftyone/zoo/datasets/base.py。相应地BDD100KDataset.__init__要求传入source_dir参数指向手动下载的文件fiftyone/zoo/datasets/base.py。原始下载文件必须按以下结构组织source_dir/ labels/ bdd100k_labels_images_train.json bdd100k_labels_images_val.json images/ 100k/ train/ test/ val/需要先到 BDD100K 官方数据站点注册账户才能获取数据下载链接详见原文档 docs/source/dataset_zoo/datasets/bdd100k.rst。数据集详情速查以下信息来自 BDD100K 数据集卡片及 BDD100KDataset 类的元数据属性属性值Dataset namebdd100kDataset sourceBDD100K 官方数据站点需注册下载Dataset licenseBDD100K 官方下载页声明license属性Dataset size7.10 GBTagsimage, multilabel, automotive, manualSupported splitstrain, validation, testZooDataset classfiftyone.zoo.datasets.base.BDD100KDataset其中tags中的multilabel表明该数据集的每张图像同时携带多类标注场景属性 检测框 折线manual表示需要手动下载supported_splits与数据划分一一对应。加载 BDD100K 数据集Python API在 Python 中通过foz.load_zoo_dataset加载核心是传入split与source_dirimport fiftyone as fo import fiftyone.zoo as foz # The path to the source files that you manually downloaded source_dir /path/to/dir-with-bdd100k-files dataset foz.load_zoo_dataset( bdd100k, splitvalidation, source_dirsource_dir, ) session fo.launch_app(dataset)fo.launch_app(dataset)会启动本地 FiftyOne App方便直接在浏览器中可视化浏览验证集图像及其标签。CLI等价地也可以完全在命令行中完成加载与启动# The path to the source files that you manually downloaded SOURCE_DIR/path/to/dir-with-bdd100k-files fiftyone zoo datasets load bdd100k --split validation \ --kwargs source_dir${SOURCE_DIR} fiftyone app launch bdd100k-validation第一条命令将 BDD100K 的 validation 分片整理并导入为名为bdd100k-validation的 FiftyOne 数据集第二条命令直接在 App 中打开该数据集。底层实现BDD100KDataset ZooDataset 类BDD100KDataset定义于 fiftyone/zoo/datasets/base.py并注册在DATASET_ZOO注册表中bdd100k: BDD100KDataset。它继承自FiftyOneDataset核心参数如下参数默认值说明source_dirNone手动下载的 BDD100K 原始文件所在目录copy_filesTrue整理时对源文件是复制True还是移动False其_download_and_prepare方法揭示了加载流程的关键细节fiftyone/zoo/datasets/base.py由于下载内容一次性包含全部三个分片方法会先把dataset_dir中的 split 目录去除os.path.dirname以便一次性整理整个数据集若对应 split 目录尚不存在则调用foub.parse_bdd100k_dataset(self.source_dir, dataset_dir, copy_filesself.copy_files)执行原始文件到 FiftyOne 目录结构的整理最后以fot.BDDDataset作为数据集类型调用BDDDatasetImporter._get_num_samples(split_dir)统计样本数并返回。需要特别说明首次加载某一分片时会触发全量整理因为一次下载包含所有分片之后的加载直接复用已整理好的目录无需重复处理。数据整理流程parse_bdd100k_datasetparse_bdd100k_dataset 将source_dir中的原始文件整理为标准分片目录结构dataset_dir/ train/ data/ labels.json validation/ data/ labels.json test/ data/其执行逻辑为fiftyone/utils/bdd.py先调用_ensure_bdd100k_dir校验source_dir存在且非空否则抛出带指引信息的OSError错误信息会提示运行fiftyone zoo datasets info bdd100k获取更多信息分别处理 train / validation / test 三个分片将images/100k/split中的图像复制或移动取决于copy_files为split/data/将对应的bdd100k_labels_images_train.json/bdd100k_labels_images_val.json复制为split/labels.json每个步骤前通过_ensure_bdd100k_subdir/_ensure_bdd100k_file校验源目录与源文件是否存在缺一即报错已存在的目标目录/文件默认跳过overwriteFalse实现幂等整理。注意 test 分片没有标签文件原始下载中不存在 test 标签因此 test 目录只包含data/图像目录。BDD 标签结构解析原理整理完成后BDDDatasetImporter负责把labels.json逐条解析为 FiftyOne 标签对象fiftyone/utils/bdd.py。标签字段映射BDDDatasetImporter.label_cls声明了三种顶层标签容器property def label_cls(self): return { attributes: fol.Classifications, detections: fol.Detections, polylines: fol.Polylines, }参见 fiftyone/utils/bdd.py。这意味着每条 BDD 标注会被解析成attributes图像级帧属性如天气、时段、场景以Classifications形式存储多值属性如场景类型列表展开为多个Classification单值属性如天气则映射为一个Classification见 _parse_frame_labelsdetectionsbox2d检测框归一化为 FiftyOne 的bounding_box[x, y, w, h]坐标除以图像宽高并携带category作为label、score作为confidence见 _parse_bdd_detectionpolylinespoly2d折线/多边形顶点坐标同样按图像宽高归一化closed折线会被同时标记为filled并保留types属性见 _parse_bdd_polylines。额外属性过滤每条检测框和折线还可能带有额外的标注属性由extra_attrs参数控制加载范围fiftyone/utils/bdd.pyTrue加载所有额外属性默认False不加载任何额外属性字符串或字符串列表仅加载指定名称的属性。BDDDatasetImporter还支持include_all_data是否将无标签图像也导入为样本、shuffle/seed打乱顺序、max_samples限制导入样本数等参数为采样与调试提供便利。BDD 格式的导入导出与测试验证除 Zoo 加载外FiftyOne 还把 BDD 作为一种通用数据集格式通过fiftyone.types.BDDDataset类型fiftyone/types/dataset_types.py关联到BDDDatasetImporter与BDDDatasetExporter用于任意 FiftyOne 数据集与 BDD 格式间的互转。BDDDatasetExporter 支持将 FiftyOne 中的Classification/Classifications、Detection/Detections、Polyline/Polylines标签反向序列化为 BDD 格式的attributeslabelsJSON并支持abs_paths绝对路径标签与rel_dir相对路径标签两种写出方式。仓库测试 tests/unittests/import_export_tests.py#L3079-L3206 中的test_bdd_dataset对上述能力做了系统性验证覆盖以下场景标准格式view.export(..., dataset_typefo.types.BDDDataset)后fo.Dataset.from_dir重新导入校验样本数、weather帧属性计数与predictions.detections检测框计数一致无标签数据导出后以include_all_dataTrue导入保证样本总数不丢失仅标签labels-only单独导出labels.json再以data_pathlabels_path方式导入绝对路径 / 相对路径标签验证abs_pathsTrue与rel_dir两种模式下标签与图像路径的关联正确性。这套导出→导入→字段计数比对的测试模式恰好印证了attributes/detections/polylines三类标签字段的双向无损转换。小结BDD100K 是自动驾驶多任务学习的代表性数据集而 FiftyOne 通过 ZooDataset 注册机制 将其封装为开箱即用的bdd100k数据集。使用时只需手动下载并组织好原始目录再以source_dir传入foz.load_zoo_dataset即可底层由 parse_bdd100k_dataset 完成分片整理由 BDDDatasetImporter 完成标签到attributes/detections/polylines三类字段的映射。同时BDDDataset通用格式还支持将任意 FiftyOne 数据集导入导出为 BDD 格式结合 test_bdd_dataset 测试 可确保转换的字段一致性为自动驾驶场景的模型评估与数据迭代提供了完整闭环。【免费下载链接】fiftyoneRefine high-quality datasets and visual AI models项目地址: https://gitcode.com/GitHub_Trending/fi/fiftyone创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考