EgoSocial 实战指南基于 Ego4D 的社交智能干预检测数据集与 EgoSoD 多模态评估方法【免费下载链接】google-researchGoogle Research项目地址: https://gitcode.com/gh_mirrors/go/google-research导读EgoSocial 是 Google Research 开源项目 google-research 中面向 AR/VR 场景 AI 助手社交感知能力的一项研究代码库位于 EgoSocial/。它提供了一套从 Ego4D 视频构建的大规模第一视角egocentric社交交互数据集13,500 个视频-问题对并配套了名为 EgoSoDEgoSocial Detection的社会思维图方法用于评测与提升大模型判断何时该介入社交场景的能力。阅读本文后你将掌握从 Ego4D 原始视频裁剪生成 EgoSocial 数据集的完整流程、Gemini 与 Phi-4 两条模型推理链路的环境搭建与命令用法、8 个社交子信号的配置细节以及如何用宏 F1 等指标复现干预时机检测的评测。注意该代码库目前仍在开发中README 明确标注 under development部分模块可能不完整或需要按实际环境修改后才能按预期运行。背景为什么需要 EgoSocial当前的大语言模型普遍缺乏足够的社交意识难以在增强现实/虚拟现实AR/VR环境中胜任 AI 助手的角色。核心痛点在于模型很难判断在社交场合中什么时候介入才不会打断自然的人际互动——介入太晚会错过帮助时机介入太早则会破坏正在进行的交流。为此EgoSocial 项目做了两件事构建数据集一个大规模的第一视角数据集包含从 Ego4D 派生的13,500 个视频-问题对专门聚焦社交交互作为评估 AI 感知社交动态、判断合适干预时机的基准。提出方法名为EgoSoDEgoSocial Detection的新方法通过社会思维图social thinking graph整合音频、视觉等多模态线索对参与者和他们的交互进行建模从而精确定位 AI 助手应当介入的时机。数据集结构、生成与格式数据来源EgoSocial 数据集基于 Ego4D 数据集的标注文件从对应的 Ego4D 视频片段中抽取视频帧与音频片段构建而成。因此生成数据集的必要前提是先下载对应的 Ego4D 视频片段本仓库不包含原始视频仅包含标注文件。数据生成流程生成脚本位于 scripts/generate_data.sh其内部调用 scripts/data.py 完成实际的帧与音频抽取。完整的操作步骤如下第 1 步安装前置依赖ffmpeg必须安装并加入系统 PATH用于从视频中抽取帧与音频。已下载好的 Ego4D 视频片段。第 2 步配置生成脚本打开 scripts/generate_data.sh将以下变量替换为你的本地路径变量含义脚本中的默认占位值ANNOTATION_FILE标注文件路径../annotations/egosocial_annotations.jsonEGO4D_CLIPS_DIR已下载的 Ego4D 视频片段目录/path/to/ego4d/clips/OUTPUT_DIR生成数据集的输出目录/path/to/output/dir第 3 步执行脚本cd scripts bash generate_data.sh脚本会调用python3 ${SCRIPT_PATH} --annotation_file ... --ego4d_clips_dir ... --output_dir ...完成抽取结束后打印Data extraction finished.。底层抽取逻辑源码级解析scripts/data.py 的核心逻辑非常清晰值得了解以方便排查问题按标注逐条处理脚本读取标注 JSON 后以clip_key遍历每个条目从context字段中取出segment_parent_key即 Ego4D 的clip_uid、image/start_time_seconds与image/end_time_seconds任一字段缺失或对应{clip_uid}.mp4不存在都会跳过该条视频缺失时静默跳过。抽帧extract_frames使用ffmpeg -ss start -to end -vf fps1 -q:v 2以1 FPS抽取该时间段的帧随后按step max(1, num_frames // 10)均匀采样并重命名为0.jpg、1.jpg……最多保留10 帧并清理临时文件。抽音频extract_audio抽取最多 10 秒的音频actual_duration min(duration, 10.0)编码为 WAVpcm_s16le、采样率16 kHz、单声道。健壮性对非正时长duration 0打印警告并跳过ffmpeg 失败时会输出 stderr 便于排查。生成后的目录结构在OUTPUT_DIR下将得到如下结构egosocial_eval ├── annotation.json # 数据集的标注文件 ├── audio # 音频文件夹 │ ├── video1.wav │ ├── video2.wav │ └── ... ├── frames # 视频帧文件夹 │ ├── video1 │ │ ├── 0.jpg │ │ ├── 1.jpg │ │ └── ... │ ├── video2 │ │ ├── 0.jpg │ │ ├── 1.jpg │ │ └── ... │ └── video3 │ ├── 0.jpg │ ├── 1.jpg │ └── ...安装与环境配置按以下步骤搭建运行环境安装 Python 依赖仓库根目录下pip install -r requirements.txtrequirements.txt 固定了关键版本torch2.6.0、transformers4.48.2、flash_attn2.7.4.post1、accelerate1.3.0、soundfile0.13.1、pillow11.1.0、scipy1.15.2、torchvision0.21.0、backoff2.2.1、peft0.13.2。安装 ffmpeg通常可用系统包管理器安装例如 Debian/Ubuntu 上执行sudo apt-get install ffmpeg。Gemini 模型需要 Gemini API key。Phi-4 模型参照官方站点microsoft/Phi-4-multimodal-instruct配置环境Hugging Face 上的多模态指令模型。解压标注文件在仓库根目录执行tar -xvzf annotations/annotations.tar.gzannotations/annotations.tar.gz 即标注压缩包。项目结构总览EgoSocial/ ├── annotations/ # 标注文件 ├── Gemini/ # Gemini 模型相关脚本与代码 │ ├── configs # Gemini 实验配置文件 │ ├── src # Gemini 模型源码 │ └── runs # 运行 Gemini 实验的脚本 ├── Phi4/ # Phi-4 模型相关脚本与代码 │ ├── phi4_video_audio_SI_baseline.py │ ├── phi4_video_audio_SI_baseline_audio2text_conv_all.py │ ├── phi4_video_audio_SI_baseline_audio2text_conv_all_graph.py │ └── run.sh ├── scripts/ # 数据预处理脚本 │ ├── data.py # 从视频抽取帧与音频 │ └── generate_data.sh # 运行 data.py 的 Shell 脚本 ├── config.json # 数据路径基础配置 ├── evaluation_res.py # 模型预测评测脚本 ├── requirements.txt # 依赖包 └── README.md # 项目文档配置参数详解Gemini 实验通过configs/xxx.json配置Gemini/configs/ 下按模型版本gemini1.5pro / gemini2.5pro / gemini2f与信号模式baseline / aud2text_conv_all / aud2text_conv_graph 等提供了多份现成配置。核心参数如下参数说明示例值model模型名称gemini-2.5-pro-preview-03-25question提示词问题prompt见下方详细示例frame_num从视频中使用的帧数10dataset标注文件路径.../annotation_new_full_social_interaction_focus_v3.jsonaudio_folder音频文件夹路径.../egosocial_eval/audio/audio_text_path若已把音频预处理为文本指向该文本文件.../logs/gemini2.5_aud2text_conv_dic.jsonsave_json_path日志预测结果保存路径.../egosocial_eval/logs提示词模板与 8 大社交因子以 gemini2.5pro_SI_baseline_aud2text_conv_all_rea_H.json 为例question字段设计了一套结构化的提示词要求模型分析第一人称视频与音频、结合音频转文本audio_text占位符、参考 8 个社交因子sub_signal占位符由代码注入并输出固定格式Answer: [Yes/No]、Confidence: [High/Medium/Low]、Reasoning:列出所用因子索引。这 8 个核心因子在 Gemini/src/main.py 中硬编码编号因子sub-signal问题1someone talkIs there anyone else talking?2turn talkAre there alternating speech turns? (or are there multiple people talking?)3talk to meIs there anybody talking to the wearer?4i talkIs the wearer talking?5personal spaceIs there any person within person space to the wearer? (Person space means within 1.2 meters.)6look at meIs there someone looking at the wearer?7i look atIs the wearer looking at someone?8i focusIs the wearer focusing?提示词还内嵌了这些因子之间的层级关系问题 1 和 5 是第一层若两者均为 False 则无需继续分析问题 2、6、7 是中间层任一为 True 时继续深入问题 3、4、8 是第三层非常重要。--signal参数与信号模式在 Gemini/src/main.py 中--signal参数控制注入到提示词中的子信号内容s1–s8分别对应上述 8 个单因子问题all_H/all_rea_H将全部 8 个问题拼接后注入all_rea_H还会启用社会思维图分支见下文graph_H/graph_rea_H/graph100_H从已保存的每个 cue 的预测日志中读取答案将其解析为形如someone, is, talking、the wearer, is not, focusing的三元组事实并拼接注入即社会思维图路径。社会思维图graph的构建是 EgoSoD 方法的关键main.py 会按前缀读取 8 个 cue 各自的预测 JSON_someone_else_talk.json、_alternating_speech_turns.json、_talk_to_me.json、_I_am_talk.json、_personal_space.json、_looking_at_me.json、_I_look_at_someone.json、_I_focus.json均位于data_base_path/logs/通过断言校验 8 份日志的key顺序一致后把每个response归一化为 yes/no 并转成三元组描述最终按 clip 聚合为graph[key]。graph100_audio/graph100_video模式则分别只注入前 4 个音频相关说话、轮流、对我说话、我在说话或后 4 个视频相关个人空间、看我、我看、专注因子。运行模型推理1. 运行 Gemini在仓库根目录执行README 中的命令cd Gemini python ../src/main.py --prefix gemini2.5 --signal all_rea_H --api Gemini_API_key --config ../configs/xxx.json注意README 与 Gemini/runs/run.sh 的写法存在出入后者调用的是main_vis_aud_audio2text_graph.py且--config前缺少空格。实际可用源码文件为 Gemini/src/main.py其命令行参数为--config必需、--signal必需取值 s1-s8 / all_H / all_rea_H / graph_H / graph_rea_H / graph100_H / graph100_audio / graph100_video、--api必需API key、--prefix必需如 gemini1.5 / gemini2.5用于拼接日志文件名。请按你的实际需求替换参数若使用非 graph 模式prefix主要用于日志命名。运行过程中的关键行为源码级从config[dataset]加载标注排序后得到全部 clip key并打印Total number从audio_text_path加载音频转文本字典audio_text_all将question中的audio_text与sub_signal占位符替换为实际内容对每个 clip上传对应.wav音频client.files.upload读取data_base_path/frames/{clip_id}/{i}.jpg的 10 帧图像若frame_num 10用np.linspace均匀采样缩帧然后调用client.models.generate_content(model..., contents[images, audio_file, prompt])生成多模态回复断点续跑结果逐条追加写入save_json_path/{model}_{signal}_{frame_num}f.json下次运行会自动跳过已处理条数调用失败时休眠 120 秒后重建 client 重试全部完成后调用evaluation()Gemini/src/evaluation.py计算指标并把结果写入../res/{model}_{signal}_{frame_num}f.json。2. 运行 Phi-4进入Phi4目录后按需选择脚本README 原始命令cd Phi4 # graph think with raw question结合原始问题的图谱思考 CUDA_VISIBLE_DEVICES0 python phi4_video_audio_SI_baseline_audio2text_conv_all.py --signal all_rea_H --frame_num 10 # graph think with predicted cue answers结合预测出的 cue 答案的图谱思考 CUDA_VISIBLE_DEVICES0 python phi4_video_audio_SI_baseline_audio2text_conv_all_graph.py --signal graph_100_H --frame_num 10 # baseline基线 CUDA_VISIBLE_DEVICES0 python phi4_video_audio_SI_baseline.pyPhi4/run.sh 与第三条命令一致--signal graph_100_H --frame_num 10。三个脚本分别对应三种评测设定纯基线无图谱、音频转文本 全部因子问题raw question 图谱思考、音频转文本 已预测 cue 答案注入predicted cue 图谱思考。Phi-4 需要在本地具备多模态推理环境GPU、flash_attn、transformers 等见 requirements.txt。评测指标与评估脚本评测指标定义Gemini/src/evaluation.py 与 evaluation_res.py 实现了统一的评测逻辑。评测以social interaction标注annotation[key][sequence][person/bbox/social_interaction]为真值若序列和不为 0 则为正样本应回答answer: yes否则为负样本应回答answer: no。基于 TP/TN/FP/FN 计算Accuracy正类acc_yes correct_yes / total_yes干预度量负类准确率acc_no correct_no / total_no——对该不该介入这一核心任务正确判断不需要介入no的准确率被定义为干预度量总体准确率acc_allMacro F1正负两类的 F1 取平均即macro_f1 (f1_pos f1_neg) / 2作为社交交互检测的主指标Weighted F1按数据集分布加权权重硬编码为(1269/1500) * f1_pos (231/1500) * f1_neg。用 evaluation_res.py 复现评估如果你已经拿到预测日志文件可以在仓库根目录运行README 原始命令python evaluation_res.py该脚本会读取 config.json 中的data_base_path默认加载logs/gemini2.5_SI_baseline.json作为预测结果、annotation_new_full_social_interaction_focus_v3.json作为标注。针对不同 cue 的评估通过取消注释对应代码块实现——文件里为 8 个 cue 各准备了一段注释代码someone else is talking、alternating speech turns、talking_to_me、I am talking、personal_space、looking at me、I look at someone、focus取消某段的注释即可评估对应因子的检测结果并注意相应调整result_path与annotation_path指向你的日志与标注文件。默认启用的 social interaction 评估会输出四行结果Yes/No 各自的准确率含干预度量、总体准确率以及Overall social interaction的 Macro F1。快速上手路线图把以上内容串成一条可执行的实践路径准备数据下载 Ego4D 视频片段 → 配置 scripts/generate_data.sh 中的三个路径 → 运行脚本生成egosocial_eval含annotation.json、audio/、frames/解压标注tar -xvzf annotations/annotations.tar.gz搭建环境pip install -r requirements.txt安装 ffmpeg准备 Gemini API key 或 Phi-4 环境配置路径把 Gemini/configs/ 下所选配置与根目录 config.json 中的/path/to/your/data/egosocial_eval等占位路径替换为实际路径运行推理按上文命令运行 GeminiGemini/src/main.py或 Phi-4 脚本得到{model}_{signal}_{frame_num}f.json预测日志评估运行 evaluation_res.py或复用 Gemini/src/evaluation.py 的evaluation()得到各 cue 与 social interaction 的准确率与 Macro F1对比 baselineSI_baseline与图谱增强aud2text_conv_graph*两种设定下模型对介入时机判断能力的差异。这套流程覆盖了从原始视频到干预时机评测的完整闭环既可直接复现 EgoSoD 的评估设定也可作为在 AR/VR 社交感知场景下评测多模态大模型的标准基线流程。由于代码库仍在开发中运行前请务必核对源码中的参数名与配置文件路径是否与 README 一致本文已在关键差异处做了标注。【免费下载链接】google-researchGoogle Research项目地址: https://gitcode.com/gh_mirrors/go/google-research创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考