# Proact-VL 验证代码 (anthro_test) 基于 [microsoft/AnthropomorphicIntelligence/Proact-VL](https://github.com/microsoft/AnthropomorphicIntelligence/tree/main/Proact-VL) (MIT) 的验证/评估实现, 以及一个 Colab 可直接运行的 notebook。 ## 目录结构 ``` anthro_test/ ├── ProactVL_validation_colab.ipynb # Colab 版 (上传即跑) ├── proactvl_stream_infer.py # 开源 VLM 流式生成 (Proact-VL 行为近似, 输出官方 pred jsonl) └── proactvl_eval/ # 本地验证代码包 (官方评估脚本的独立移植) ├── f1_only.py # F1 (说话秒重合度), 无需 API ├── f1_timediff.py # F1 + Time-Diff (时序偏差), 无需 API ├── llm_score.py # LLM Score (LiveU/FinalQ), 需 judge API ├── llm_judge.py # CC win-rate (对 baseline A/B), 需 judge API ├── pauc.py # PAUC 渐进式 AUC, 需 judge API ├── label_streaming2standard.py # 长视频逐秒结果 -> 30s 段 ├── summary_llm_score.py # llm_score 输出按 tag 汇总 ├── gpt_client_utils.py # GPT 客户端 (OPENAI_AUTH_MODE=api_key) ├── multiprocessor.py # local_mt (官方 proactvl.utils 移植) └── run_validation.py # 一站式验证入口 + 汇总表 ``` ## 本地使用 ```bash pip install openai tqdm # F1/TimeDiff 零依赖 (纯标准库) # 本地: 逐秒流式分析自己的视频 (衣物投放计数) python proactvl_stream_infer.py --video my.mp4 --task count --scene "衣物投放" \ --begin 0 --end 60 --gt_count 3 --out count.jsonl # 一站式验证: 自动跑 F1 + TimeDiff; 有 API key 时追加 LLM 指标 OPENAI_AUTH_MODE=api_key OPENAI_API_KEY=sk-... OPENAI_API_BASE=... \ python -m proactvl_eval.run_validation \ --pred pred.jsonl \ --reference anns/all_in_one_val_proactive.jsonl \ --asr_jsonl anns/all_in_one.jsonl \ --baseline_id gemini2.5-pro --baseline_jsonl baseline/captions/gemini-2.5-pro.jsonl \ --judge_model gpt-4o --judge_limit 50 --out_dir eval_out ``` 环境变量: `OPENAI_AUTH_MODE=api_key`, `OPENAI_API_KEY`, `OPENAI_BASE_URL`, `OPENAI_JUDGE_MODEL`。 数据: `hf download oaaoaa/proactvl_results --repo-type dataset` (标注 anns + 官方 baseline 预测), 视频集 `oaaoaa/LiveGamingBenchmark`。 ## Colab 使用 上传 `ProactVL_validation_colab.ipynb` 到 Colab, 顺序运行: - **Mode A (`MODE='baseline'`)**: 官方 baseline 预测 + 全部指标。F1/TimeDiff 无 key 也可跑; 填 OpenAI 兼容 key 后追加 LLM Score / CC / PAUC。 - **Mode B (`MODE='generate'`)**: 挂 GPU, 用 `proactvl_stream_infer.py` (内嵌在 notebook 中) 以 Qwen2.5-VL-3B 对 LiveGamingBenchmark 逐秒生成 Proact-VL 风格主动解说, 再跑同一套指标。 - **Mode C (`MODE='custom'`)**: 上传自己的视频逐秒流式分析 (notebook 内置 `files.upload()` 弹框上传, 或把视频放进 Colab 左侧 Files / Drive)。`MY_TASK='count'` 统计投放事件数 (如"用户投了几件衣服"), 可填 `MY_GT_COUNT` 自动核对。 前置: HuggingFace 自动授权数据集需先在网页接受条款, 配置任意有效 HF token。 ## 数据格式 (官方 pred jsonl, 每行一段视频) ```json {"video_id": "major2024_game_11.mp4", "dataset_name": "CSGO", "begin": 0, "end": 30, "idx": 0, "tag": "Solo commentators", "model_id": "...", "pred": {"3": "解说文本", "7": "..."}} ``` - `pred`: 仅含"说话秒", 缺失秒 = 沉默 (f1_only 按 dict 键统计; 与官方 quickstart 语义一致)。 - reference (`*_val_proactive.jsonl`): 同键 + `label` (逐秒 dict)。 - ASR 标注 (`all_in_one.jsonl`): `video_path/video_begin/video_end/dataset_name/idx/active_speaker/annotations/history`, llm_score/llm_judge 按 `basename(video_path)_begin_end_dataset_idx` 与预测对齐。 ## 已知限制 - 官方 Proact-VL 权重 (`oaaoaa/proactvl_base_*`) 处于合规审查期, 公开渠道不可下载; 本地/Colab 的"生成"路径均为开源 VLM 近似, 指标结果只能作横向对比, 非官方成绩。 - `--task count` 是逐秒事件检测 + 客户端去重合并, 对小物体/遮挡场景可能漏计; 可调 `--merge_gap 0` (不合并)、`--fps 4` (更密采样) 或换 7B 模型 (`--load_in_4bit`)。 - LLM 指标与 judge 模型强相关 (官方流水线用 gpt-5.1 系列, 可用 `OPENAI_JUDGE_MODEL` 覆盖)。