尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

AutoGluon 目标检测数据准备完全指南:COCO/VOC 数据集下载、格式转换与 DataFrame 训练

AutoGluon 目标检测数据准备完全指南:COCO/VOC 数据集下载、格式转换与 DataFrame 训练 AutoGluon 目标检测数据准备完全指南COCO/VOC 数据集下载、格式转换与 DataFrame 训练【免费下载链接】autogluonFast and Accurate ML in 3 Lines of Code项目地址: https://gitcode.com/GitHub_Trending/au/autogluon本文整理自 Object Detection Data Preparation 系列教程AutoGluon 的目标检测AutoMM Detection要求输入数据符合 COCO 格式或有限的 VOC 格式、便捷的pd.DataFrame格式。读完本文你将掌握用一条命令下载 COCO2017 / Pascal VOC / Watercolor / Pothole 等数据集理解 COCO 标注 JSON 的字段结构把 VOC 数据集一键转换为 COCO 格式支持自定义 train/val/test 比例以及使用pd.DataFrame直接训练与评估检测模型。一、AutoGluon 目标检测的数据格式总览AutoGluon 多模态预测器MultiModalPredictor的目标检测任务problem_typeobject_detection支持两类主要数据格式COCO 格式与pd.DataFrame格式。其中 COCO 格式是官方强烈推荐的训练与推理标准格式所有与目标检测相关的数据都应尽量符合该格式VOC 格式仅提供有限支持用于快速验证见 object_detection_with_dataframe.ipynb。数据准备总览 ├── COCO 格式推荐── 准备 COCO2017 / Pothole 数据集 │ └── 将 VOC 等其他格式转换为 COCO ├── VOC 格式有限支持── 准备 Pascal VOC / Watercolor 数据集 │ └── 使用 voc2coco 转换 └── pd.DataFrame 格式 ── 三列结构image / rois / label └── from_coco / object_detection_df_to_coco 互转本系列教程位于仓库 docs/tutorials/multimodal/object_detection/data_preparation 目录包含以下 7 篇文档文档主题prepare_coco17.ipynb下载并准备 COCO2017 数据集prepare_voc.ipynb下载并准备 Pascal VOCVOC2007 VOC2012数据集prepare_watercolor.ipynb下载 Watercolor 跨域检测数据集prepare_pothole.ipynb下载 Pothole 道路坑洞检测数据集voc_to_coco.ipynb将 VOC 格式数据集转换为 COCO 格式convert_data_to_coco_format.ipynb从零理解并构建 COCO 格式标注object_detection_with_dataframe.ipynb使用pd.DataFrame格式训练与评估二、了解 COCO 格式字段结构与目录组织2.1 推荐的目录结构在 COCO 格式下数据集整体目录结构应遵循见 convert_data_to_coco_format.ipynbdataset_dir/ images/ imagename0.ext imagename1.ext imagename2.ext ... annotations/ train_labels.json val_labels.json test_labels.json ...即图片统一放在images/目录标注文件放在annotations/目录每个标注文件对应一个数据划分train / val / test。2.2*_labels.json顶层字段标注文件是一个 JSON 结构顶层包含 5 个字段{ info: info, licenses: [license], images: [image], // 数据集中所有图片的列表 annotations: [annotation],// 数据集中所有标注的列表 categories: [category] // 所有类别的列表 }其中各子对象的字段定义如下info{year: int, version: str, description: str, contributor: str, url: str, date_created: datetime}license{id: int, name: str, url: str}image{id: int, width: int, height: int, file_name: str, license: int, date_captured: datetime}license为对应 license 的 idcategory{id: int, name: str, supercategory: str}annotation{id: int, image_id: int, category_id: int, segmentation: RLE 或 [polygon], area: float, bbox: [x, y, width, height], iscrowd: int}image_id指向所属图片的 idcategory_id指向所属类别的 id字段必需性仅为了运行 AutoGluon 时info与licenses为可选字段images、categories、annotations三个字段是训练与评估所必需的而仅做预测prediction时只需images字段因为预测不需要标注。2.3 一个完整的 COCO JSON 示例{ info: {...}, licenses: [ { url: http://creativecommons.org/licenses/by-nc-sa/2.0/, id: 1, name: Attribution-NonCommercial-ShareAlike License }, ... ], categories: [ {supercategory: person, id: 1, name: person}, {supercategory: vehicle, id: 2, name: bicycle}, {supercategory: vehicle, id: 3, name: car}, {supercategory: vehicle, id: 4, name: motorcycle}, ... ], images: [ { license: 4, file_name: imagename0.ext, height: 427, width: 640, date_captured: null, id: 397133 }, ... ], annotations: [ ... ] }在 object_detection_with_dataframe.ipynb 中还给出了单个标注的 Python 字典示例其中bbox使用[x, y, width, height]形式category_id对应类别字段中的id而非nameiscrowd通常为 0一个框对应一个目标ignore置 1 可忽略该标注segmentation在纯检测任务中为空列表annotation { area: 33453, # 边界框面积 iscrowd: 0, # 0 表示单框单目标 bbox: [181, 133, 177, 189], # [x, y, width, height] category_id: 8, # 对应 categories 里的 id 字段 ignore: 0, # 置 1 表示忽略此标注 segmentation: [], # 纯检测任务恒为空 image_id: 1617, # 对应 images 里的 id 字段 id: 1 # 该标注自身的 id }提示除自行编写转换代码外也可以借助第三方工具如 FiftyOne将 CVAT、YOLO、KITTI 等格式转换为 COCO 格式。只要数据符合 COCO 格式就能与 AutoGluon 的检测流水线完美配合。三、一键下载数据集prepare_detection_datasetCLIAutoGluon 提供统一的数据集下载工具覆盖本系列教程中提到的全部数据集。该脚本位于仓库 multimodal/src/autogluon/multimodal/cli/prepare_detection_dataset.py可通过 Python 模块方式调用python3 -m autogluon.multimodal.cli.prepare_detection_dataset其核心参数有两个源码见该文件底部的argparse定义参数别名说明取值示例--dataset_name-d数据集名称大小写不敏感coco17/coco2017/coco、voc0712/voc、voc07、voc12、watercolor、pothole--output_dir-o输出目录默认当前目录./~/data从源码的main()分支可以看到coco、coco17、coco2017均映射到 COCO2017voc、voc0712映射到 VOC2007VOC2012 组合voc07/voc2007、voc12/voc2012可单独下载watercolor与pothole为专用数据集。Python 脚本在各主流平台上均可工作但不显示进度条在 Unix 系统上如需进度条请使用对应的 bash 脚本。3.1 下载 COCO2017COCOCommon Objects in Context是大型目标检测、分割与图像描述数据集。检测任务中最常用的是训练数据量最大的 COCO2017 版本80 个类别、123,287 张图片、886,284 个实例图片中位尺寸 640×480。下载并解压共需约42.7 GB磁盘空间建议使用 SSD准备耗时取决于网络与磁盘性能例如在带 EBS 的 AWS EC2 上通常约 20 分钟。# 方式一Python 脚本解压到当前目录下的 coco17 文件夹 python3 -m autogluon.multimodal.cli.prepare_detection_dataset --dataset_name coco2017 # 指定输出路径 python3 -m autogluon.multimodal.cli.prepare_detection_dataset --dataset_name coco2017 --output_path ~/data # 短参数写法 python3 -m autogluon.multimodal.cli.prepare_detection_dataset -d coco17 -o ~/data也可使用仓库提供的 bash 脚本 examples/automm/object_detection/download_coco17.sh带进度条bash download_coco17.sh # 解压到 ./coco17 bash download_coco17.sh ~/data # 解压到 ~/data/coco17从脚本内容可以看到它会依次下载并解压train2017.zip、val2017.zip、test2017.zip、unlabeled2017.zip四组图片以及annotations_trainval2017.zip、stuff_annotations_trainval2017.zip、image_info_test2017.zip、image_info_unlabeled2017.zip四组标注并在完成后自动清理压缩包。prepare_detection_dataset的 Python 实现则调用safe_unpack_archive解压并移除压缩包见 load_archive.py。下载完成后coco17文件夹内包含annotations test2017 train2017 unlabeled2017 val20173.2 下载 Pascal VOCVOC2007 VOC2012Pascal VOC 是经典的检测数据集集合最常用的组合方式是用 VOC2007 trainval VOC2012 trainval 训练用 VOC2007 test 验证。两者同为 20 个类别合计 16,551 张训练图片。下载并解压共需约8.4 GB磁盘空间AWS EC2 上通常约 10 分钟。# 同时下载 VOC2007 与 VOC2012 python3 -m autogluon.multimodal.cli.prepare_detection_dataset --dataset_name voc0712 python3 -m autogluon.multimodal.cli.prepare_detection_dataset -d voc -o ~/data # 分别下载 python3 -m autogluon.multimodal.cli.prepare_detection_dataset -d voc07 -o ~/data python3 -m autogluon.multimodal.cli.prepare_detection_dataset -d voc12 -o ~/data对应 bash 脚本带进度条位于 examples/automm/object_detection/download_voc0712.sh也支持分别下载 download_voc07.sh 与 download_voc12.shbash download_voc0712.sh bash download_voc0712.sh ~/data下载完成后数据集解压到VOCdevkit文件夹内含VOC2007与VOC2012两个子目录每个子目录又包含Annotations ImageSets JPEGImages SegmentationClass SegmentationObject3.3 下载 Watercolor 数据集Watercolor 是一个小型跨域domain-specific目标检测数据集1,000 张训练图 1,000 张测试图图片为水彩风格常用于展示在自定义数据集上快速微调。下载并解压共需约7.5 GB磁盘空间。仓库提供一键脚本 examples/automm/object_detection/download_watercolor.shpython3 -m autogluon.multimodal.cli.prepare_detection_dataset --dataset_name watercolor python3 -m autogluon.multimodal.cli.prepare_detection_dataset -d watercolor -o ~/data bash download_watercolor.sh bash download_watercolor.sh ~/data注意从当前仓库源码看prepare_detection_dataset.py中的prepare_watercolor()已因原托管地址失效而抛出ValueError提示数据集已无法从原地址获取因此更可靠的方式是使用 bash 脚本或从数据集官方项目页面获取。3.4 下载 Pothole 数据集Pothole 是一个道路坑洞检测的小型数据集665 张图片用于展示 Fast Finetune on COCO Format Dataset 与 High Performance Finetune on COCO Format Dataset 两个微调教程。下载并解压约需1 GB磁盘空间通常约 3 分钟。python3 -m autogluon.multimodal.cli.prepare_detection_dataset --dataset_name pothole python3 -m autogluon.multimodal.cli.prepare_detection_dataset -d pothole -o ~/data从源码可以看到该数据集实际从automl-mm-bench的 S3 存储下载pothole.zip下载工具已自动将其转换为COCO 格式并按3:1:1比例划分 train/validation/test生成三个标注文件pothole/Annotations/usersplit_train_cocoformat.json pothole/Annotations/usersplit_val_cocoformat.json pothole/Annotations/usersplit_test_cocoformat.json若从 Kaggle 原始页面下载则数据是 VOC 格式且未划分需要先转换为 COCO 格式见下一节。四、VOC 格式与 voc2coco 转换工具4.1 VOC 格式说明VOC 格式指 Pascal VOC 数据集所使用的、以.xml文件存储标注的格式。AutoGluon 强烈建议使用 COCO 格式但为快速验证也提供对 VOC 格式的有限支持。使用 VOC 格式时传入的输入是数据集根路径其中至少包含见 prepare_voc.ipynbAnnotations ImageSets JPEGImagesWatercolor 数据集同样采用 VOC 格式解压后的watercolor文件夹内即为上述三个目录可参考同样的转换方式。4.2 使用现有划分转换VOC 根目录下的ImageSets/Main/中通常已有预定义划分文件每行一个图片 idtrain.txt val.txt test.txt ...转换工具voc2coco的源码位于 multimodal/src/autogluon/multimodal/cli/voc2coco.py通过模块方式调用。给定根目录即可将现有划分批量转换为 COCO 格式python3 -m autogluon.multimodal.cli.voc2coco --root_dir ./VOCdevkit/VOC2007命令运行时会打印转换进度Start converting !与 tqdm 进度条完成后在根目录的Annotations文件夹下生成对应的 COCO 标注文件train_cocoformat.json val_cocoformat.json test_cocoformat.json ...4.3 自定义 train/val/test 比例如果不想使用预定义划分可以指定比例让工具自行切分无需任何预存在的划分文件。test_ratio 1 - train_ratio - val_ratio例如按 0.6/0.2/0.2 划分python3 -m autogluon.multimodal.cli.voc2coco --root_dir ./VOCdevkit/VOC2007 --train_ratio 0.6 --val_ratio 0.2此时生成的是用户自定义划分文件文件名带usersplit前缀usersplit_train_cocoformat.json usersplit_val_cocoformat.json usersplit_test_cocoformat.json4.4 voc2coco 的转换逻辑源码视角从 voc2coco.py 的源码可以梳理出转换的关键环节帮助理解它适用于怎样的数据类别 id 从 1 开始通过labels.txtget_label2id或从标注中收集类别名id 从 1 开始编号划分文件解析get_annpaths支持两种输入——若提供划分列表文件每行一个 id 或id 标志位两列格式标志位为 1 表示该样本属于此划分则按比例随机切分为usersplit_*否则扫描ImageSets/Main/*.txt中的既有划分跳过空文件、识别单列/两列格式图片信息提取get_image_info优先读取 XML 中的path否则回退到filename支持.jpg/.png扩展名自动补全并从文件名中抽取数字作为图片 idsize提供宽高标注转换与过滤get_coco_annotation_from_obj从bndbox提取 xmin/ymin/xmax/ymax转换为[x, y, width, height]的bbox非法框xminxmax 或 yminymax与面积 ≤ 4MIN_AREA的框会被过滤iscrowd恒为 0segmentation为空安全性使用defusedxml.ElementTree解析 XML避免恶意 XML 实体注入源码注释中明确列出的改进点之一。该工具的核心转换函数复用了 multimodal/src/autogluon/multimodal/utils/object_detection.py 中的process_voc_annotations、dump_voc_classes、dump_voc_xml_files等函数。五、使用pd.DataFrame格式训练与评估5.1 DataFrame 的三列结构除了 COCO 格式AutoGluon 检测还支持pd.DataFrame格式DataFrame 需包含 3 列列名含义image图片文件的路径rois边界框标注列表每项为[x1, y1, x2, y2, class_label]数组labelrois的副本列一个典型示例rois/label中每行是若干[x1, y1, x2, y2, class_label]数组组成的列表image \ 0 /path/to/.../xxx.jpg 1 /path/to/.../yyy.jpg rois \ 0 [[352.0, 138.0, 374.0, 373.0, 7], [105.0, 1.0,...] 1 [[40.0, 71.0, 331.0, 332.0, 7], [33.0, 42.0, 3...] label 0 [[352.0, 138.0, 374.0, 373.0, 7], [105.0, 1.0,...] 1 [[40.0, 71.0, 331.0, 332.0, 7], [33.0, 42.0, 3...]5.2 COCO 与 DataFrame 互转multimodal/src/autogluon/multimodal/utils/object_detection.py 提供了两个互转工具函数from_coco(anno_file, coco_rootNone, min_object_area0, use_crowdFalse)读取 COCO 标注文件生成 DataFrame。其内部使用pycocotools解析当coco_root为None时默认使用标注文件所在目录的上一级作为图片根目录图片不存在时会被跳过并给出警告当标注中无annotations字段纯预测场景时也能正常工作。object_detection_df_to_coco(data, save_pathNone)将 DataFrame 转为 COCO 格式的字典可通过save_path直接保存为.json文件。from autogluon.multimodal.utils.object_detection import from_coco, object_detection_df_to_coco # COCO - DataFrame train_df from_coco(train_path) # DataFrame - COCO返回字典 train_coco object_detection_df_to_coco(train_df) # 直接保存为 json 文件 train_coco object_detection_df_to_coco(train_df, save_path./df_converted_to_coco.json) # 重新加载保存的 json 时需提供正确的 root使得 root/file_name 是有效图片路径 train_df_from_saved_coco from_coco(./df_converted_to_coco.json, root./)5.3 用 DataFrame 训练与评估以 YOLOv3 主干为例模型配置与 Quick Start on a Tiny COCO Format Dataset 保持一致。训练前需确保已安装mmcv与mmdetmim install mmcv pip install mmdet3.1.0然后构造MultiModalPredictor并训练。关键技巧是把train_df传给sample_data_path以便自动推断类别数num_classes由于采用两阶段检测头detection head 学习率放大 100 倍optim.lr设置为基础学习率import uuid from autogluon.multimodal import MultiModalPredictor checkpoint_name yolov3_mobilenetv2_320_300e_coco num_gpus -1 # 使用全部 GPU model_path f./tmp/{uuid.uuid4().hex}-df_train_temp_save predictor_df MultiModalPredictor( hyperparameters{ model.mmdet_image.checkpoint_name: checkpoint_name, env.num_gpus: num_gpus, }, problem_typeobject_detection, sample_data_pathtrain_df, # 传入 train_df 以获取 num_classes pathmodel_path, ) predictor_df.fit( train_df, hyperparameters{ optim.lr: 2e-4, # 两阶段模型detection head 学习率为其 100 倍 optim.max_epochs: 30, env.per_gpu_batch_size: 32, # 模型较大时需调小 }, )评估同样直接以 DataFrame 为输入test_df from_coco(test_path) predictor_df.evaluate(test_df)六、数据集下载脚本与 CLI 工具一览数据集Python CLI-d取值bash 脚本COCO2017coco17/coco2017/cocodownload_coco17.shVOC2007voc07/voc2007download_voc07.shVOC2012voc12/voc2012download_voc12.shVOC2007VOC2012voc/voc0712download_voc0712.shWatercolorwatercolor源码显示原托管地址已失效download_watercolor.shPotholepothole自动转 COCO 并按 3:1:1 划分—voc2coco转换工具python3 -m autogluon.multimodal.cli.voc2coco --root_dir root_dir [--train_ratio ratio --val_ratio ratio]源码见 voc2coco.py。七、常见问题与最佳实践优先使用 COCO 格式这是 AutoGluon 检测任务的标准格式训练、评估、推理全流程支持最完善VOC 格式仅用于快速验证有限支持。磁盘与存储规划COCO2017 约需 42.7 GB、VOC 约 8.4 GB、Watercolor 约 7.5 GB、Pothole 约 1 GB解压后仍需额外空间建议使用 SSD 以缩短解压与读取耗时。进度条需求bash 脚本wget/curl自带进度条prepare_detection_dataset为跨平台 Python 实现、无进度条长耗时下载时可按需选用。预测时只需images字段构造仅含images无需annotations的 COCO JSON 即可用于预测from_coco也对此做了兼容处理。DataFrame 的label是rois的副本列两者内容必须一致三列缺一不可。保存与重载路径用object_detection_df_to_coco(..., save_path...)保存后再用from_coco读取时务必传入正确的root保证root/file_name能定位到真实图片。八、延伸阅读数据集下载与格式转换的实战示例目录examples/automm/object_detection含全部下载脚本、训练、评估、推理与可视化脚本检测工具函数源码multimodal/src/autogluon/multimodal/utils/object_detection.py微调实战Fast Finetune on COCO Format Dataset、High Performance Finetune on COCO Format Dataset快速上手Quick Start on a Tiny COCO Format Dataset自定义 AutoMM 配置Customize AutoMM引用的数据集原始出处COCOLin 等Microsoft COCO: Common Objects in Context、Pascal VOCEveringham 等The Pascal Visual Object Classes (VOC) ChallengeIJCV 2010、WatercolorInoue 等Cross-Domain Weakly-Supervised Object Detection Through Progressive Domain AdaptationCVPR 2018等各教程末尾附有完整 BibTeX 引用格式。【免费下载链接】autogluonFast and Accurate ML in 3 Lines of Code项目地址: https://gitcode.com/GitHub_Trending/au/autogluon创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表