---
title: MVEB-train
canonical_url: "https://www.modelscope.cn/datasets/Christin/MVEB-train"
md_url: "https://www.modelscope.cn/datasets/Christin/MVEB-train.md"
repository: Christin/MVEB-train
last_updated: 2026-07-31
license: CC-BY-NC-SA-4.0
downloads: 4247
stars: 2
---

# MVEB-train

> MVEB-train - Christin 在 ModelScope 开源的数据集。MVEB 训练集（Train Split）

Christin/MVEB-train 是 ModelScope 魔搭社区上的数据集，采用 CC-BY-NC-SA-4.0 许可。

- **Repository**: Christin/MVEB-train
- **License**: CC-BY-NC-SA-4.0
- **Downloads**: 4247
- **Stars**: 2
- **Last updated**: 2026-07-31

Source: https://www.modelscope.cn/datasets/Christin/MVEB-train

---

# MVEB 训练集（Train Split）

[English](README-en.md) | 简体中文

![MVEB Overview](assets/dataset.png)

本仓库包含 [MVEB](https://chrisclear3.github.io/MVEB/)（Multimodal Visual identity Embedding Benchmark）的 **train** 划分。MVEB 是一个面向视觉 identity-level 检索数据集：给定一个查询（文本 + 图片），模型需要检索出属于同一视觉 ID 的候选（文本 + 图片）。

train 划分覆盖 **20 个子数据集**，横跨四类元任务：

- **ID识别（Identity Recognition）** —— 物体 / 商品 / 物种识别
- **Re-ID（Re-Identification）** —— 行人 / 人脸 / 车辆重识别
- **ID定位（Identity Grounding）** —— 将查询定位到视觉ID
- **ID编辑（Identity Editing）** —— 编辑图像对上的检索

> **test** 划分单独发布，并包含 train 中没有的 **8 个额外 OOD 子集**（如 Product1m、Market1501、FORB、OpenGPT4o）。评测数据请见对应的 test 仓库。

> **部分子集不可再分发。** `CompCars`、`DukeMTMC`、`Inshop`、`IUST`、`MS-Celeb-1M`、`MultiID` **未包含**在本仓库中，请按 [重建受限子集](#重建受限子集) 一节在本地重建。其余 **14 个子集**以 parquet 形式随仓库提供。

## 目录结构

每个子集由三个部分组成：

| 文件 | 说明 |
|------|------|
| `query.parquet` | 查询元数据（`instruction`、`text`、`pos_ids` 等） |
| `candidate.parquet` | 候选池元数据 |
| `media-*.parquet` | 去重后的媒体池（`image` / `video` / `audio`） |

`query` 和 `candidate` 的每一行通过 `media_index` 引用共享的媒体池，因此每张图片只存储一次。

## 加载数据

每个子集对应三个 HuggingFace config：`{Subset}_media`、`{Subset}_query`、`{Subset}_candidate`，split 名为 `train`。

```python
from datasets import load_dataset

repo = "HugC/MVEB-train"  # Hub 仓库 id，或本地目录路径

query = load_dataset(repo, "Cars196_query", split="train")
candidate = load_dataset(repo, "Cars196_candidate", split="train")
media = load_dataset(repo, "Cars196_media", split="train")

print(query[0])
# {'id': '0', 'instance_id': '0', 'instruction': '...', 'text': '...',
#  'pos_ids': ['1', '2', ...], 'media_index': 0}
```

> **注意：** `load_dataset` 的第三个位置参数是 `data_dir` 而不是 `split`，请始终以关键字参数形式传入 `split="train"`。

### 图片解析

`query` 和 `candidate` parquet 中**不内嵌**图片，需要通过 `media_index` 解析：

```python
from datasets import load_dataset

repo = "HugC/MVEB-train"
query = load_dataset(repo, "Cars196_query", split="train")
media = load_dataset(repo, "Cars196_media", split="train")

row = query[0]
image = media[row["media_index"]]["image"]  # PIL.Image
```

### 字段结构（Schema）

**query.parquet**（典型字段）：

| 字段 | 类型 | 说明 |
|------|------|------|
| `id` | string | 查询样本 id |
| `instance_id` | string | 实例 id（部分子集没有该字段） |
| `instruction` | string | 系统指令 |
| `text` | string | 用户文本 |
| `pos_ids` | list[string] | 正例候选 id 列表 |
| `media_index` | int | 媒体池中的行索引 |

**candidate.parquet** —— 与 query 类似，通常没有 `pos_ids`。

**media-*.parquet** —— 包含 `image`、`video`、`audio` 三列。当前仅有图片；`video` 与 `audio` 为未来多模态扩展预留。

## 重建受限子集

部分子集的原始数据受版权协议限制、不允许再分发，因此**未包含**在两个仓库中，需要从原始提供方在本地重建。`scripts/` 目录包含完整的重建流水线（**仅随本仓库分发**），同一套脚本会同时产出对应的 test 子集。

涉及的子集：`CompCars`、`DukeMTMC`、`Inshop`、`IUST`、`MS-Celeb-1M`、`MultiID`（train + test）以及 `Product1m`（仅 test）。

### 目录结构

```
scripts/
├── run.sh                  # 一键处理全部子集
├── pack_media_parquet.py   # 共享的 parquet 打包库
└── <Subset>/
    ├── process.sh           # 下载 -> 解压 -> 打包
    ├── process_<subset>.py   # 按划分构建 parquet
    └── train_test_split.json # 固定的 train/test 划分，保证重建结果可复现
```

### 推荐操作顺序

请在运行脚本**之前**先下载两个仓库，使重建出的子集与已发布的子集落在同一目录下：

```bash
huggingface-cli download HugC/MVEB-train --repo-type dataset --local-dir MVEB-train
huggingface-cli download HugC/MVEB-test  --repo-type dataset --local-dir MVEB-test

bash MVEB-train/scripts/run.sh              # 处理全部子集
bash MVEB-train/scripts/run.sh DukeMTMC     # 只处理指定子集
bash MVEB-train/scripts/run.sh --list       # 查看可用子集列表
```

不建议先跑脚本再下载仓库：下载不会删除本地已有文件，先前重建产生的旧 `media-*.parquet` 分片可能与下载的分片混在一起被同时读取。

### 路径配置

按上述目录布局无需任何配置。如需将输出放到其他位置，可通过以下环境变量覆盖：

| 变量 | 含义 | 默认值 |
|------|------|--------|
| `MVEB_TRAIN_DIR` | train 子集的输出目录 | 本仓库（`scripts/` 的上一级） |
| `MVEB_TEST_DIR` | test 子集的输出目录 | 本仓库旁边的 `MVEB-test` |
| `MVEB_ROOT` | `downloads/`、`source/`、`logs/` 的暂存根目录 | 本仓库的上一级 |

```bash
MVEB_TEST_DIR=/data/MVEB-test MVEB_ROOT=/scratch bash MVEB-train/scripts/run.sh
```

`MVEB_ROOT` 下的原始下载与解压图片仅在重建期间需要，完成后可以删除。

### 环境依赖

- `python3`，并安装 `datasets`、`pyarrow`、`pillow`、`tqdm`、`requests`
- `kaggle`（DukeMTMC、Inshop、IUST），需在 `~/.kaggle/kaggle.json` 配置 API token
- `huggingface-cli`（MS-Celeb-1M、MultiID）、`gdown`（CompCars）、`git`（Product1m）
- `unzip`、`zip`、`tar`

`run.sh` 启动前会检查并提示缺失的命令。

### 失败后重跑

每个阶段都支持断点重跑，直接重新执行同一条命令即可：

- 下载阶段会续传或跳过已获取的文件；`Product1m` 只补下缺失的图片
- 解压阶段以成功后写入的 `.extracted` 标记为准，中断的解压会自动重做
- parquet 打包阶段总是从头重写整个子集目录

单个子集失败不会中断其他子集。每个子集的日志写入 `${MVEB_ROOT}/logs/<Subset>.log`，结束时的汇总会给出只重跑失败子集的命令。

如果 CompCars 报告分卷文件被截断，删除报错中指出的文件后重跑即可 —— `gdown` 仅按文件名跳过已存在的文件、不校验大小，因此不完整的分卷需要手动删除。

## 引用

如果 MVEB 对您的研究有帮助，请引用：

```bibtex
@inproceedings{cao2026illuminating,
  title={Illuminating Visual Identity in Universal Multimodal Embeddings},
  author={Cao, Jiawei and Feng, Junyi and Hua, Jiashen and Huang, Ziheng and Deng, Bing and Wu, Kaijie and Gu, Chaochen and Ye, Jieping},
  booktitle={Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition},
  pages={8737--8748},
  year={2026}
}
```
