co3d
co3d 是一套专为"3D 常见物体数据集(CO3Dv2)”设计的开源工具库,旨在帮助开发者高效处理、加载和评估大规模真实世界物体的 3D 重建数据。它解决了以往 3D 数据集在视频解码伪影、前景物体分割不稳定以及下载管理困难等方面的痛点,提供了更高质量的视频帧、更精准的稳定跟踪掩码,以及支持断点续传的分块下载机制。
这套工具特别适合从事计算机视觉、3D 重建和新视角合成研究的科研人员与算法工程师。通过内置的 Python 脚本,用户可以轻松自动化下载高达 5.5TB 的全量数据,或仅获取 8.9GB 的精简子集用于快速验证。co3d 还引入了全新的用户友好型数据格式,确保序列内图像尺寸统一,并原生支持基于 PyTorch3D 的深度学习流程。其独特亮点包括配套的"3D 常见物体挑战赛”,允许用户在隐藏测试集上进行透明公正的模型评估,推动了社区在单序列多视角任务上的技术演进。无论是进行基础数据探索还是训练前沿重建模型,co3d 都能提供稳定可靠的基础设施支持。
使用场景
某计算机视觉团队正在研发一款基于单张商品图片生成高质量 3D 模型的电商应用,需要利用大规模真实世界数据来训练和评估其重建算法。
没有 co3d 时
- 数据获取极其困难:面对高达 5.5TB 的原始数据集,缺乏分块下载和自动批处理脚本,下载过程极易中断且难以管理。
- 预处理耗时巨大:原始视频存在解码伪影,分割掩码不稳定(容易跳变到背景),工程师需花费数周编写代码清洗数据和对齐图像尺寸。
- 评估标准不统一:缺乏官方的隐藏测试服务器和标准化挑战框架,团队只能在本地构建有偏差的测试集,导致模型泛化能力无法被客观验证。
- 存储资源浪费:无法灵活选择数据子集,即使只需验证“多视图单序列”任务,也不得不下载全量数据,占用大量昂贵的存储空间。
使用 co3d 后
- 下载高效稳定:利用 co3d 提供的自动批下载脚本及 20GB 分块文件机制,团队轻松完成了数据拉取,并可通过参数直接获取仅 8.9GB 的单序列子集。
- 数据开箱即用:co3d v2 版本已预先修复了视频解码块状伪影,提供了稳定的前景物体分割掩码,且序列内图片尺寸统一,省去了繁琐的清洗步骤。
- 评估权威透明:通过集成 co3d 主办的官方挑战赛接口,团队将模型提交至隐藏测试服务器,获得了与全球顶尖方案公平对比的客观评分。
- 开发流程加速:得益于更友好的数据格式和 PyTorch3D 的深度集成,研究人员将原本用于数据工程的时间全部投入到核心算法迭代中。
co3d 通过提供清洗后的高质量数据、灵活的下载策略及标准化的评估体系,将 3D 重建项目的数据准备周期从数周缩短至数天,显著提升了研发效率。
运行环境要求
- 未说明
需要 NVIDIA GPU(因依赖 PyTorch3D 且需从源码编译以启用 Implicitron 模块),具体显存和 CUDA 版本未说明
未说明(完整数据集需 5.5TB 磁盘空间,子集需 8.9GB)

快速开始
CO3Dv2:三维中的常见物体(版本2)
本仓库包含一套用于处理三维中的常见物体数据集第2版(CO3Dv2)的工具。
原始数据集已在我们的ICCV'21论文中介绍:三维中的常见物体:大规模的真实世界3D类别重建学习与评估。如需访问原始数据,请切换到本仓库的v1分支。
CO3Dv2的新特性
- 三维中的常见物体挑战赛,可在隐藏的测试服务器上进行透明评估——更多详情请参阅挑战赛README
- 序列数量增加至原来的2倍,帧数增加至原来的4倍
- 图像质量提升——由于更好的视频解码,块状伪影更少
- 分割掩码改进——主前景物体跟踪更加稳定,不会误跳到背景物体上
- 支持下载一个较小的单序列子集,约100个序列,仅包含用于多视角单序列任务评估的序列
- 数据集文件以20 GB为单位分块存储,便于更稳定的下载
- 采用全新、更友好的数据集格式
- 同一序列内的所有图像均裁剪为相同的高度×宽度
下载数据集
本仓库的dataset/links.json文件中包含了所有数据集文件的下载链接。
自动批量下载
我们还提供了一个Python脚本,可一次性下载所有数据集文件。执行以下命令即可开始下载:
python ./co3d/download_dataset.py --download_folder DOWNLOAD_FOLDER
其中DOWNLOAD_FOLDER是用于存放下载数据集文件的本地目标文件夹。请务必在开始下载前创建该文件夹。
大小:数据集的所有压缩文件共占用5.5 TB磁盘空间。
单序列数据集子集
我们还提供一个仅包含多视角单序列任务所选序列的数据集子集,该任务通常在单个图像序列上同时进行训练和评估。要下载此子集,请在download_dataset.py中添加--single_sequence_subset选项:
python ./co3d/download_dataset.py --download_folder DOWNLOAD_FOLDER --single_sequence_subset
大小:单序列子集远小于完整数据集,仅占用8.9 GB磁盘空间。
三维中的常见物体挑战赛
安装
本项目基于Python 3和PyTorch。
- 安装PyTorch。
- 安装PyTorch3D。
- 请注意,必须从源代码构建PyTorch3D才能启用Implicitron模块
- 安装
requirements.txt中的其余依赖项:
pip install visdom tqdm requests h5py
- 安装CO3D包本身:
pip install -e .
依赖项
需要注意的是,co3d/dataset/data_types.py中的核心数据模型独立于PyTorch/PyTorch3D,可以被其他机器学习框架导入并使用。
开始使用
- 安装依赖项——请参阅上方的[安装说明]。
- 在指定根目录
CO3DV2_DATASET_ROOT中下载数据集[此处]。 - 设置环境变量
CO3DV2_DATASET_ROOT指向数据集根目录:export CO3DV2_DATASET_ROOT="your_dataset_root_folder" - 运行
example_co3d_challenge_submission.py:
请注意,cd examples python example_co3d_challenge_submission.pyexample_co3d_challenge_submission.py会针对CO3D挑战赛的所有任务和数据集运行一个简单的基于深度的图像渲染(DBIR)模型的评估。您可以自由扩展该脚本,以提交您自己的CO3D挑战赛参赛作品。
运行测试
单元测试可以通过以下命令执行:
python -m unittest
复现结果
Implicitron是我们开源的框架,用于训练CO3D论文中提出的所有隐式形状学习方法。 更多详情请访问以下链接: https://github.com/facebookresearch/pytorch3d/tree/main/projects/implicitron_trainer
数据集格式
数据集在文件系统中的组织结构如下:
CO3DV2_DATASET_ROOT
├── <category_0>
│ ├── <sequence_name_0>
│ │ ├── depth_masks
│ │ ├── depths
│ │ ├── images
│ │ ├── masks
│ │ └── pointcloud.ply
│ ├── <sequence_name_1>
│ │ ├── depth_masks
│ │ ├── depths
│ │ ├── images
│ │ ├── masks
│ │ └── pointcloud.ply
│ ├── ...
│ ├── <sequence_name_N>
│ ├── set_lists
│ ├── set_lists_<subset_name_0>.json
│ ├── set_lists_<subset_name_1>.json
│ ├── ...
│ ├── set_lists_<subset_name_M>.json
│ ├── eval_batches
│ │ ├── eval_batches_<subset_name_0>.json
│ │ ├── eval_batches_<subset_name_1>.json
│ │ ├── ...
│ │ ├── eval_batches_<subset_name_M>.json
│ ├── frame_annotations.jgz
│ ├── sequence_annotations.jgz
├── <category_1>
├── ...
├── <category_K>
该数据集包含来自 K 个类别的序列,每个类别下有若干序列文件夹 <category_k>/<sequence_name_i>,其中分别存放了序列的图像、深度图、前景掩码和有效深度掩码,即 images、depths、masks 和 depth_masks。此外,<category_k>/<sequence_name_i>/set_lists/ 目录下存储了 M 个 JSON 文件 set_lists_<subset_name_l>.json,每个文件描述了一个特定的序列子集。
用户可以通过将 self.subset_name 设置为可用的子集名称 <subset_name_l> 来指定加载的数据集子集。
frame_annotations.jgz 和 sequence_annotations.jgz 是压缩的 JSON 文件,分别包含了给定类别中所有帧和序列的列表,以 FrameAnnotation 和 SequenceAnnotation 对象的形式存储。
子集列表
每个 set_lists_<subset_name_l>.json 文件包含以下字典:
{
"train": [
(sequence_name: str, frame_number: int, image_path: str),
...
],
"val": [
(sequence_name: str, frame_number: int, image_path: str),
...
],
"test": [
(sequence_name: str, frame_number: int, image_path: str),
...
],
}
定义了数据集中“train”、“val”和“test”子集中各帧的列表(通过 sequence_name 和 frame_number 标识)。
请注意,frame_number 只能从 frame_annotations.jgz 中获取,并不一定与对应图像文件名中的数字后缀一致(例如,文件 <category_0>/<sequence_name_0>/images/frame00005.jpg 的帧编号可能是 20,而不是 5)。
CO3Dv2 中可用的子集名称
在 CO3DV2 中,默认情况下,每个类别都包含以下子集列表:
"set_lists_fewview_test.json" # 在“test”序列集上进行少视角任务。
"set_lists_fewview_dev.json" # 在“dev”序列集上进行少视角任务。
"set_lists_manyview_test.json" # 在某个类别的“test”序列上进行多视角任务。
"set_lists_manyview_dev_0.json" # 在某个类别的第 1 个“dev”序列上进行多视角任务。
"set_lists_manyview_dev_1.json" # 在某个类别的第 2 个“dev”序列上进行多视角任务。
评估批次
每个 eval_batches_<subset_name_l>.json 文件包含以下形式的评估示例列表:
[
[ # 批次 1
(sequence_name: str, frame_number: int, image_path: str),
...
],
[ # 批次 2
(sequence_name: str, frame_number: int, image_path: str),
...
],
]
请注意,评估示例始终来自对应的子集列表 set_lists_<subset_name_l>.json 中的“test”部分。
评估任务是根据已知的其他图像生成每个批次中的第一张图像。因此,每个批次中的第一张图像代表未见的目标帧,仅已知其相机参数;而批次中的其余图像则是已知的源帧,其相机和颜色均已给出。
对于多视角任务,当用户被提供某一序列的多个已知视图并需要生成该序列中未提供的视图时,eval_batches_manyview_<sequence_set>_<sequence_id>.json 文件中的每个评估批次只包含一张目标帧。用户可以从子集列表 set_lists_manyview_<sequence_set>_<sequence_id>.json 中对应的“train”帧列表中获取这些已知视图。
不依赖 PyTorch 的使用方式
co3d/dataset/data_types.py 中的核心数据模型独立于 PyTorch/PyTorch3D,可以导入并在其他机器学习框架中使用。
例如,要加载每个类别的帧和序列标注,可以执行以下代码:
from typing import List
from co3d.dataset.data_types import (
load_dataclass_jgzip, FrameAnnotation, SequenceAnnotation
)
category_frame_annotations = load_dataclass_jgzip(
f"{CO3DV2_DATASET_ROOT}/{category_name}/frame_annotations.jgz", List[FrameAnnotation]
)
category_sequence_annotations = load_dataclass_jgzip(
f"{CO3DV2_DATASET_ROOT}/{category_name}/sequence_annotations.jgz", List[SequenceAnnotation]
)
此外,co3d/challenge 下的所有挑战相关代码也不依赖于 PyTorch。
参考文献
如果您使用我们的数据集,请引用以下文献:
@inproceedings{reizenstein21co3d,
Author = {Reizenstein, Jeremy and Shapovalov, Roman and Henzler, Philipp and Sbordone, Luca and Labatut, Patrick and Novotny, David},
Booktitle = {International Conference on Computer Vision},
Title = {Common Objects in 3D: Large-Scale Learning and Evaluation of Real-life 3D Category Reconstruction},
Year = {2021},
}
许可证
CO3D 代码库采用 CC BY-NC 4.0 许可证发布。
概览视频
常见问题
相似工具推荐
ML-For-Beginners
ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。
ragflow
RAGFlow 是一款领先的开源检索增强生成(RAG)引擎,旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体(Agent)能力相结合,不仅支持从各类文档中高效提取知识,还能让模型基于这些知识进行逻辑推理和任务执行。 在大模型应用中,幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构(如表格、图表及混合排版),显著提升了信息检索的准确度,从而有效减少模型“胡编乱造”的现象,确保回答既有据可依又具备时效性。其内置的智能体机制更进一步,使系统不仅能回答问题,还能自主规划步骤解决复杂问题。 这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统,还是致力于探索大模型在垂直领域落地的创新者,都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口,既降低了非算法背景用户的上手门槛,也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目,它正成为连接通用大模型与行业专有知识之间的重要桥梁。
PaddleOCR
PaddleOCR 是一款基于百度飞桨框架开发的高性能开源光学字符识别工具包。它的核心能力是将图片、PDF 等文档中的文字提取出来,转换成计算机可读取的结构化数据,让机器真正“看懂”图文内容。 面对海量纸质或电子文档,PaddleOCR 解决了人工录入效率低、数字化成本高的问题。尤其在人工智能领域,它扮演着连接图像与大型语言模型(LLM)的桥梁角色,能将视觉信息直接转化为文本输入,助力智能问答、文档分析等应用场景落地。 PaddleOCR 适合开发者、算法研究人员以及有文档自动化需求的普通用户。其技术优势十分明显:不仅支持全球 100 多种语言的识别,还能在 Windows、Linux、macOS 等多个系统上运行,并灵活适配 CPU、GPU、NPU 等各类硬件。作为一个轻量级且社区活跃的开源项目,PaddleOCR 既能满足快速集成的需求,也能支撑前沿的视觉语言研究,是处理文字识别任务的理想选择。
awesome-machine-learning
awesome-machine-learning 是一份精心整理的机器学习资源清单,汇集了全球优秀的机器学习框架、库和软件工具。面对机器学习领域技术迭代快、资源分散且难以甄选的痛点,这份清单按编程语言(如 Python、C++、Go 等)和应用场景(如计算机视觉、自然语言处理、深度学习等)进行了系统化分类,帮助使用者快速定位高质量项目。 它特别适合开发者、数据科学家及研究人员使用。无论是初学者寻找入门库,还是资深工程师对比不同语言的技术选型,都能从中获得极具价值的参考。此外,清单还延伸提供了免费书籍、在线课程、行业会议、技术博客及线下聚会等丰富资源,构建了从学习到实践的全链路支持体系。 其独特亮点在于严格的维护标准:明确标记已停止维护或长期未更新的项目,确保推荐内容的时效性与可靠性。作为机器学习领域的“导航图”,awesome-machine-learning 以开源协作的方式持续更新,旨在降低技术探索门槛,让每一位从业者都能高效地站在巨人的肩膀上创新。
scikit-learn
scikit-learn 是一个基于 Python 构建的开源机器学习库,依托于 SciPy、NumPy 等科学计算生态,旨在让机器学习变得简单高效。它提供了一套统一且简洁的接口,涵盖了从数据预处理、特征工程到模型训练、评估及选择的全流程工具,内置了包括线性回归、支持向量机、随机森林、聚类等在内的丰富经典算法。 对于希望快速验证想法或构建原型的数据科学家、研究人员以及 Python 开发者而言,scikit-learn 是不可或缺的基础设施。它有效解决了机器学习入门门槛高、算法实现复杂以及不同模型间调用方式不统一的痛点,让用户无需重复造轮子,只需几行代码即可调用成熟的算法解决分类、回归、聚类等实际问题。 其核心技术亮点在于高度一致的 API 设计风格,所有估算器(Estimator)均遵循相同的调用逻辑,极大地降低了学习成本并提升了代码的可读性与可维护性。此外,它还提供了强大的模型选择与评估工具,如交叉验证和网格搜索,帮助用户系统地优化模型性能。作为一个由全球志愿者共同维护的成熟项目,scikit-learn 以其稳定性、详尽的文档和活跃的社区支持,成为连接理论学习与工业级应用的最
keras
Keras 是一个专为人类设计的深度学习框架,旨在让构建和训练神经网络变得简单直观。它解决了开发者在不同深度学习后端之间切换困难、模型开发效率低以及难以兼顾调试便捷性与运行性能的痛点。 无论是刚入门的学生、专注算法的研究人员,还是需要快速落地产品的工程师,都能通过 Keras 轻松上手。它支持计算机视觉、自然语言处理、音频分析及时间序列预测等多种任务。 Keras 3 的核心亮点在于其独特的“多后端”架构。用户只需编写一套代码,即可灵活选择 TensorFlow、JAX、PyTorch 或 OpenVINO 作为底层运行引擎。这一特性不仅保留了 Keras 一贯的高层易用性,还允许开发者根据需求自由选择:利用 JAX 或 PyTorch 的即时执行模式进行高效调试,或切换至速度最快的后端以获得最高 350% 的性能提升。此外,Keras 具备强大的扩展能力,能无缝从本地笔记本电脑扩展至大规模 GPU 或 TPU 集群,是连接原型开发与生产部署的理想桥梁。
