xiaomoguhzz commited on
Commit
2c547e7
·
verified ·
1 Parent(s): ea0a54c

Add S2 20% data manifests and standalone frame cache handoff

Browse files

Publish the current 147,718 image and 220,011 video training records, unique media lists, 64-frame cache source indices, standalone CPU frame extraction code, and usage instructions.

data/s2_20pct/README.md ADDED
@@ -0,0 +1,147 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ **S2 20% 训练数据与 64 帧缓存交接包**
2
+
3
+ 本包导出于 2026-11-08,包含 VisionEncoder 当前 Qwen S2 20% 配方实际使用的图像、视频名单与问答,以及生成对应视频帧缓存所需的代码。媒体文件从原始数据集中按名单提取。
4
+
5
+ **下载**
6
+
7
+ [完整交接包](https://huggingface.co/xiaomoguhzz/VisionEncoder/resolve/main/data/s2_20pct/s2_20pct_handoff_20261108.tar.gz?download=true) · [图像名单](https://huggingface.co/xiaomoguhzz/VisionEncoder/resolve/main/data/s2_20pct/image_files.txt?download=true) · [视频名单](https://huggingface.co/xiaomoguhzz/VisionEncoder/resolve/main/data/s2_20pct/video_files.txt?download=true)
8
+
9
+ ```bash
10
+ curl -L --fail \
11
+ 'https://huggingface.co/xiaomoguhzz/VisionEncoder/resolve/main/data/s2_20pct/s2_20pct_handoff_20261108.tar.gz?download=true' \
12
+ -o s2_20pct_handoff_20261108.tar.gz
13
+ tar -xzf s2_20pct_handoff_20261108.tar.gz
14
+ cd s2_20pct_handoff_20261108
15
+ ```
16
+
17
+ 后续命令均在解压后的目录中执行。
18
+
19
+ **数据范围**
20
+
21
+ | 类型 | 训练记录数 | 唯一媒体数 | 原始数据集 |
22
+ |---|---:|---:|---|
23
+ | 图像 | 147,718 | 122,247 张 | LLaVA-NeXT-Data |
24
+ | 视频 | 220,011 | 105,108 个 | LLaVA-Video-178K |
25
+
26
+ “20%”是历史数据档名称,以标注记录为单位。图像随机采样,视频按来源等额目标采样。视频的一个来源数量不足,因此历史过滤前的 220,038 条记录约占合并标注池的 19.37%。当前版本剔除了 12 个解码不完整视频对应的 27 条问答,保留 220,011 条记录。
27
+
28
+ 训练记录数与唯一媒体数不同,同一图像或视频可以对应多条训练记录。本包保留当前训练数据的全部问答、记录重复次数和相对顺序。105,108 个唯一视频均有对应的采帧索引。
29
+
30
+ 原始视频标注池使用 caption 与开放式 QA。现有名单已经确定具体子集,使用时直接按名单提取媒体,并使用包内问答,无需重新随机采样或合并原始标注。
31
+
32
+ **文件说明**
33
+
34
+ | 文件 | 用途 |
35
+ |---|---|
36
+ | `image_files.txt` | 去重图像名单,每行一个相对路径 |
37
+ | `video_files.txt` | 去重视频名单,每行一个相对路径 |
38
+ | `image_train.jsonl` | 147,718 条图像训练记录,含 `messages` 和相对路径 `images` |
39
+ | `video_train.jsonl` | 220,011 条视频训练记录,含 `messages` 和相对路径 `videos` |
40
+ | `video_frames_source.jsonl` | 唯一视频的相对路径、总帧数、帧率和 64 个采样索引 |
41
+ | `prepare_paths.py` | 根据本机数据根目录生成绝对路径问答与采帧索引 |
42
+ | `frames.yaml` | 64 帧、384×384、JPEG quality 95 的缓存配置 |
43
+ | `requirements.txt` | 已通过单视频检查的环境依赖版本 |
44
+ | `declip_qwenvit/`、`configs/` | 抽帧、分片写入和配置读取所需的代码子集 |
45
+ | `counts.json` | 样本数、媒体数与视频来源统计 |
46
+
47
+ 问答为 `role` / `content` 格式。图像占位符为 `<image>`,视频占位符为 `<video>`。这些 JSONL 是问答级数据,未携带特定模型的 tokenizer、packing 或 `lengths` 缓存。
48
+
49
+ **1. 从原始数据集提取媒体**
50
+
51
+ 准备一个同时包含以下两个数据集目录的数据根目录,保留各数据集内部的原始路径:
52
+
53
+ ```text
54
+ /path/to/full_datasets/
55
+ LLaVA-NeXT-Data/
56
+ llava_next_raw_format/
57
+ coco/...
58
+ ...
59
+ LLaVA-Video-178K/
60
+ 0_30_s_youtube_v0_1/...
61
+ 0_30_s_academic_v0_1/...
62
+ ...
63
+ ```
64
+
65
+ 替换以下两个路径。`RAW_DATA_ROOT` 指向完整原始数据的父目录,`S2_DATA_ROOT` 指向要保存提取结果的目录:
66
+
67
+ ```bash
68
+ RAW_DATA_ROOT=/path/to/full_datasets
69
+ S2_DATA_ROOT=/path/to/s2_datasets
70
+
71
+ mkdir -p "$S2_DATA_ROOT"
72
+ rsync -a --files-from=image_files.txt "$RAW_DATA_ROOT/" "$S2_DATA_ROOT/"
73
+ rsync -a --files-from=video_files.txt "$RAW_DATA_ROOT/" "$S2_DATA_ROOT/"
74
+ ```
75
+
76
+ 名单中的部分视频文件没有扩展名,按名单原样保留即可。复制后的目录仍以 `LLaVA-NeXT-Data/` 和 `LLaVA-Video-178K/` 开头。
77
+
78
+ 如果直接使用已解压好的原始媒体,可以把后续的 `S2_DATA_ROOT` 设为原始数据根目录,省略复制。
79
+
80
+ **2. 安装环境并替换本机路径**
81
+
82
+ 使用 Linux、Python 3.11 环境。抽帧在 CPU 上完成,依赖 PyTorch,但不需要 GPU 或模型权重。`requirements.txt` 固定了本次检查所用的版本,其中 PyAV 为 15.1.0。
83
+
84
+ ```bash
85
+ python -m pip install -r requirements.txt
86
+
87
+ python prepare_paths.py \
88
+ --data-root "$S2_DATA_ROOT"
89
+ ```
90
+
91
+ 生成文件位于 `prepared/`:
92
+
93
+ - `image_train.local.jsonl`:图像问答与本机绝对路径。
94
+ - `video_train.local.jsonl`:视频问答与本机绝对路径。
95
+ - `video_frames.local.jsonl`:本机绝对路径、总帧数和采帧索引。
96
+
97
+ 训练时使用两份 `*_train.local.jsonl`,即可保留当前 S2 的问答集合和顺序。训练框架仍按所用模型执行自己的预处理。
98
+
99
+ **3. 先检查一个视频**
100
+
101
+ 以下命令只处理一个视频,写入单独的输出目录:
102
+
103
+ ```bash
104
+ PYTHONDONTWRITEBYTECODE=1 python -m declip_qwenvit.data_prep.tasks frames \
105
+ --config frames.yaml \
106
+ --limit 1 \
107
+ --num-workers 1 \
108
+ --output frame_cache_smoke/384/64
109
+ ```
110
+
111
+ 正常结果应为 `RGB cache: 1 records, 0 skipped`。如有失败,查看日志中的具体视频路径和错误。
112
+
113
+ **4. 构建全部视频帧缓存**
114
+
115
+ 单视频检查通过后执行:
116
+
117
+ ```bash
118
+ PYTHONDONTWRITEBYTECODE=1 python -m declip_qwenvit.data_prep.tasks frames \
119
+ --config frames.yaml \
120
+ --num-workers 8
121
+ ```
122
+
123
+ 默认使用 8 个 CPU worker,每个解码器 1 个线程。按机器 CPU 和存储能力调整 `--num-workers`。
124
+
125
+ 缓存采用当前记录的 64 个均匀采帧索引,通过 PyAV seek 解码,使用双三次插值将每帧缩放到 384×384,再把 64 帧拼为 4×16 的 JPEG 图,quality 为 95。每个 JPEG 对应一个唯一视频,JPEG 保存在 TAR 分片内。默认每片处理 256 个视频。
126
+
127
+ 输出目录为 `frame_cache/384/64/`:
128
+
129
+ - `part-*.tar`:JPEG 帧拼图分片。
130
+ - `part-*.done.json`:各分片完成记录。
131
+ - `index.jsonl`:视频路径、分片、字节偏移、大小、帧索引与帧率。
132
+ - `metadata.json`:帧数、分辨率和拼图布局。
133
+ - `failures.jsonl`:失败视频及错误,成功完成时应为空。
134
+
135
+ 完整成功时,最终日志应报告 `105108 records, 0 skipped`。缓存读取方需支持上述 TAR 索引格式,并将 JPEG 拼图还原为 64 帧。
136
+
137
+ **5. 中断后续跑**
138
+
139
+ 保持输入、配置和输出目录一致,重新运行全量命令即可。现有实现会复用同时存在 TAR 和完成记录的分片,未完成分片重新生成。单视频检查目录与全量目录分开使用。
140
+
141
+ **代码与验证范围**
142
+
143
+ 代码来自 VisionEncoder 现有的帧缓存构建实现。交接包仅调整了本地视频解码的 Swift 文件读取、日志和环境变量依赖,使本流程可独立运行,采帧、缩放与写入逻辑沿用原实现。
144
+
145
+ `configs/utils/loader.py` 保留其 MMEngine 来源与 Apache-2.0 声明,对应许可证副本为 `LICENSE-APACHE-2.0`。
146
+
147
+ 2026-11-08 已从当前训练缓存导出记录并核对媒体数量,全部 105,108 个视频均有采帧索引。独立代码包已在一个真实视频上完成抽帧,结果为 1 个成功、0 个跳过。全量缓存构建需在接收方媒体和环境上执行。
data/s2_20pct/counts.json ADDED
@@ -0,0 +1,28 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "image": {
3
+ "training_records": 147718,
4
+ "unique_media": 122247
5
+ },
6
+ "video": {
7
+ "training_records": 220011,
8
+ "unique_media": 105108,
9
+ "frame_index_records": 105108,
10
+ "paths_without_frame_index": 0,
11
+ "unique_media_by_source": {
12
+ "0_30_s_academic_v0_1": 11639,
13
+ "0_30_s_youtube_v0_1": 24441,
14
+ "1_2_m_academic_v0_1": 4627,
15
+ "1_2_m_youtube_v0_1": 17575,
16
+ "2_3_m_academic_v0_1": 3122,
17
+ "2_3_m_youtube_v0_1": 17620,
18
+ "30_60_s_academic_v0_1": 10200,
19
+ "30_60_s_youtube_v0_1": 15884
20
+ }
21
+ },
22
+ "frame_cache": {
23
+ "frames": 64,
24
+ "resolution": 384,
25
+ "jpeg_quality": 95,
26
+ "sheet_cols": 16
27
+ }
28
+ }
data/s2_20pct/image_files.txt ADDED
The diff for this file is too large to render. See raw diff
 
data/s2_20pct/s2_20pct_handoff_20261108.tar.gz ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:e9d1223f077ccc8965d30d9abc6638506048d992dba8d913920d63fce0880eb6
3
+ size 126493982
data/s2_20pct/video_files.txt ADDED
The diff for this file is too large to render. See raw diff