CMU-MOSI、CMU-MOSEI、CH-SIMS、Ch-SIMS v2 多模态数据集 数据集包括原始数据和处理后的数据,
CMU-MOSI、CMU-MOSEI、CH-SIMS、Ch-SIMS v2 多模态数据集数据集包括原始数据和处理后的数据一、多模态情感数据集综合信息表包含CMU-MOSI、CMU-MOSEI、CH-SIMS、CH-SIMS v2四款主流音视频文本三模态情感数据集区分基础信息、模态、标注、适用场景同时说明原始数据/预处理数据差异。数据集名称发布方/年份语言数据来源样本总量数据模态标注体系原始数据预处理数据核心适用场景CMU-MOSICMU / 2016英文YouTube 个人观点独白视频2199 片段文本音频视觉TAV情感连续分-3极负面~ 3极正面支持情感回归、二分类原始视频、音频、逐句文本、原始帧图像对齐后帧序列、提取音频特征、分词文本、归一化标签、划分训练/验证/测试集入门基线模型、小样本多模态情感分类、算法对比CMU-MOSEICMU / 2018英文YouTube 评测、访谈、辩论视频23453 片段文本音频视觉精细时序对齐1. 情感分-3 ~ 32. 6大类离散情绪喜、悲、怒、惧、厌、惊原始音视频、字幕、人脸帧、原始音频波形统一尺寸帧、梅尔频谱音频特征、BERT/词向量文本、标准数据集划分、模态对齐文件大模型训练、复杂多模态融合、工业级基准测试CH-SIMS国内团队 / 2020中文影视剧、综艺片段2281 片段文本音频视觉情感连续分-1负~ 1正支持跨模态不一致分析影视原视频、字幕、音频、画面帧中文分词、音频MFCC特征、帧采样、标签归一化、数据集划分脚本中文多模态情感、跨模态矛盾研究、中文算法落地CH-SIMS v2迭代升级版中文影视剧、短视频、日常对话扩充至 6000 片段文本音频视觉补充人脸关键点保留 -1~1 情感分新增细粒度情绪标签扩充原始音视频、高清帧、原始字幕、人脸原图统一特征格式、预提取多类特征、增强标注、标准化划分、兼容主流框架中文细粒度情绪识别、端侧模型、短视频舆情分析二、数据集结构说明1. 通用目录结构原始数据dataset_root/ ├─ CMU-MOSI/ │ ├─ raw_video/ # 原始视频文件 │ ├─ raw_audio/ # 原始音频wav │ ├─ raw_text/ # 逐句字幕/文本 │ ├─ raw_frames/ # 视频原始帧图像 │ └─ label.txt # 原始标注文件片段id情感分 ├─ CMU-MOSEI/ │ ├─ raw_video/ │ ├─ raw_audio/ │ ├─ transcript/ # 时序对齐字幕 │ ├─ frames/ │ └─ annotations/ # 情感双标签标注 ├─ CH-SIMS/ │ ├─ video/ │ ├─ audio/ │ ├─ text/ │ └─ label.csv └─ CH-SIMS_v2/ ├─ raw_data/ ├─ face_keypoints/ # 新增人脸关键点 └─ labels/2. 预处理后数据目录统一格式可直接训练processed_data/ ├─ train/val/test/ # 训练/验证/测试集划分 │ ├─ text_feat/ # 文本预训练特征BERT/Word2Vec │ ├─ audio_feat/ # 音频特征MFCC/梅尔频谱 │ ├─ visual_feat/ # 视觉帧特征 │ └─ label.npy # 标签数组 └─ meta.json # 样本映射、模态维度、类别信息三、环境依赖# requirements.txt torch1.9.0 torchvision transformers librosa # 音频特征提取 opencv-python # 视频帧提取 pandas numpy scikit-learn tqdm安装命令pipinstall-rrequirements.txt四、数据预处理代码通用版适配4个数据集实现视频抽帧、音频特征提取、文本编码、数据集划分、标签归一化importosimportcv2importlibrosaimportnumpyasnpimportpandasaspdfromtqdmimporttqdmfromsklearn.model_selectionimporttrain_test_splitfromtransformersimportBertTokenizer# 配置参数 DATASET_NAMECH-SIMS# 切换CMU-MOSI / CMU-MOSEI / CH-SIMS / CH-SIMS_v2RAW_ROOTf./dataset_root/{DATASET_NAME}PROC_ROOTf./processed_data/{DATASET_NAME}FRAME_SAMPLE_RATE5# 每5帧取1帧AUDIO_SR16000# 音频采样率MAX_TEXT_LEN64IMG_SIZE224os.makedirs(PROC_ROOT,exist_okTrue)os.makedirs(f{PROC_ROOT}/text_feat,exist_okTrue)os.makedirs(f{PROC_ROOT}/audio_feat,exist_okTrue)os.makedirs(f{PROC_ROOT}/visual_feat,exist_okTrue)# 文本编码器tokenizerBertTokenizer.from_pretrained(bert-base-uncasedifCMUinDATASET_NAMEelsebert-base-chinese)# 1. 读取原始标签 defload_label():label_pathos.path.join(RAW_ROOT,label.txtifCMUinDATASET_NAMEelselabel.csv)iflabel_path.endswith(csv):dfpd.read_csv(label_path)returndict(zip(df[id],df[score]))else:label_dict{}withopen(label_path,r,encodingutf-8)asf:forlineinf:idx,scoreline.strip().split()label_dict[idx]float(score)returnlabel_dict# 2. 视频帧提取 视觉预处理 defextract_frames(video_path,save_path):capcv2.VideoCapture(video_path)frame_list[]cnt0whilecap.isOpened():ret,framecap.read()ifnotret:breakifcnt%FRAME_SAMPLE_RATE0:framecv2.resize(frame,(IMG_SIZE,IMG_SIZE))frame_list.append(frame)cnt1cap.release()frame_arraynp.array(frame_list)np.save(save_path,frame_array)returnframe_array# 3. 音频特征提取MFCC defextract_audio(audio_path,save_path):y,_librosa.load(audio_path,srAUDIO_SR)mfcclibrosa.feature.mfcc(yy,srAUDIO_SR,n_mfcc20)np.save(save_path,mfcc)returnmfcc# 4. 文本编码 defencode_text(text,save_path):tokenstokenizer(text,max_lengthMAX_TEXT_LEN,truncationTrue,paddingmax_length,return_tensorsnp)input_idstokens[input_ids][0]np.save(save_path,input_ids)returninput_ids# 主预处理流程 defpreprocess_all():label_dictload_label()sample_idslist(label_dict.keys())train_ids,test_idstrain_test_split(sample_ids,test_size0.2,random_state42)train_ids,val_idstrain_test_split(train_ids,test_size0.2,random_state42)all_labels[]forsidintqdm(sample_ids,desc数据预处理):# 路径定义video_pos.path.join(RAW_ROOT,raw_video,f{sid}.mp4)audio_pos.path.join(RAW_ROOT,raw_audio,f{sid}.wav)text_pos.path.join(RAW_ROOT,raw_text,f{sid}.txt)# 读取文本withopen(text_p,r,encodingutf-8)asf:text_contentf.read().strip()# 执行三模态提取extract_frames(video_p,f{PROC_ROOT}/visual_feat/{sid}.npy)extract_audio(audio_p,f{PROC_ROOT}/audio_feat/{sid}.npy)encode_text(text_content,f{PROC_ROOT}/text_feat/{sid}.npy)all_labels.append(label_dict[sid])# 保存标签 划分文件np.save(f{PROC_ROOT}/all_labels.npy,np.array(all_labels))np.save(f{PROC_ROOT}/train_ids.npy,np.array(train_ids))np.save(f{PROC_ROOT}/val_ids.npy,np.array(val_ids))np.save(f{PROC_ROOT}/test_ids.npy,np.array(test_ids))print(数据预处理完成)if__name____main__:preprocess_all()五、多模态情感分析训练代码PyTorch 通用版三模态融合模型支持情感回归任务适配四个数据集连续标签可直接加载预处理数据训练。importtorchimporttorch.nnasnnfromtorch.utils.dataimportDataset,DataLoaderimportnumpyasnpimportos# 全局配置 DEVICEtorch.device(cudaiftorch.cuda.is_available()elsecpu)BATCH_SIZE16EPOCHS30LEARN_RATE1e-3PROC_DATA_PATH./processed_data/CH-SIMS# 切换对应数据集路径# 1. 自定义数据集类 classMultiModalDataset(Dataset):def__init__(self,data_path,splittrain):self.data_pathdata_path self.splitsplit# 加载样本ID和标签self.idsnp.load(os.path.join(data_path,f{split}_ids.npy))self.all_labelsnp.load(os.path.join(data_path,all_labels.npy))def__len__(self):returnlen(self.ids)def__getitem__(self,idx):sidself.ids[idx]# 加载三模态特征text_featnp.load(f{self.data_path}/text_feat/{sid}.npy)audio_featnp.load(f{self.data_path}/audio_feat/{sid}.npy)visual_featnp.load(f{self.data_path}/visual_feat/{sid}.npy)labelself.all_labels[idx]# 转Tensortexttorch.from_numpy(text_feat).long()audiotorch.from_numpy(audio_feat).float()visualtorch.from_numpy(visual_feat).float()labeltorch.tensor(label,dtypetorch.float32)returntext,audio,visual,label# 2. 三模态融合模型 classMultiModalEmotionNet(nn.Module):def__init__(self):super().__init__()# 文本分支self.text_fcnn.Sequential(nn.Linear(64,128),nn.ReLU(),nn.Dropout(0.2))# 音频分支self.audio_fcnn.Sequential(nn.AdaptiveAvgPool1d(1),nn.Flatten(),nn.Linear(20,128),nn.ReLU(),nn.Dropout(0.2))# 视觉分支self.visual_fcnn.Sequential(nn.AdaptiveAvgPool2d(1),nn.Flatten(),nn.Linear(3,128),nn.ReLU(),nn.Dropout(0.2))# 融合 回归输出self.fusionnn.Sequential(nn.Linear(128*3,256),nn.ReLU(),nn.Linear(256,1))defforward(self,text,audio,visual):t_featself.text_fc(text)a_featself.audio_fc(audio)v_featself.visual_fc(visual)# 拼接三模态特征concat_feattorch.cat([t_feat,a_feat,v_feat],dim-1)outself.fusion(concat_feat)returnout.squeeze(-1)# 3. 训练 验证函数 deftrain_epoch(model,loader,optimizer,criterion):model.train()total_loss0.0fortext,audio,visual,labelinloader:text,audio,visual,labeltext.to(DEVICE),audio.to(DEVICE),visual.to(DEVICE),label.to(DEVICE)optimizer.zero_grad()predmodel(text,audio,visual)losscriterion(pred,label)loss.backward()optimizer.step()total_lossloss.item()returntotal_loss/len(loader)defval_epoch(model,loader,criterion):model.eval()total_loss0.0withtorch.no_grad():fortext,audio,visual,labelinloader:text,audio,visual,labeltext.to(DEVICE),audio.to(DEVICE),visual.to(DEVICE),label.to(DEVICE)predmodel(text,audio,visual)losscriterion(pred,label)total_lossloss.item()returntotal_loss/len(loader)# 4. 主训练入口 if__name____main__:# 加载数据集train_setMultiModalDataset(PROC_DATA_PATH,splittrain)val_setMultiModalDataset(PROC_DATA_PATH,splitval)test_setMultiModalDataset(PROC_DATA_PATH,splittest)train_loaderDataLoader(train_set,batch_sizeBATCH_SIZE,shuffleTrue,num_workers2)val_loaderDataLoader(val_set,batch_sizeBATCH_SIZE,shuffleFalse,num_workers2)test_loaderDataLoader(test_set,batch_sizeBATCH_SIZE,shuffleFalse,num_workers2)# 模型、损失、优化器modelMultiModalEmotionNet().to(DEVICE)criterionnn.MSELoss()# 情感回归任务使用MSEoptimizertorch.optim.Adam(model.parameters(),lrLEARN_RATE)best_val_lossfloat(inf)forepochinrange(EPOCHS):train_losstrain_epoch(model,train_loader,optimizer,criterion)val_lossval_epoch(model,val_loader,criterion)print(fEpoch [{epoch1}/{EPOCHS}] | Train Loss:{train_loss:.4f}| Val Loss:{val_loss:.4f})# 保存最优模型ifval_lossbest_val_loss:best_val_lossval_loss torch.save(model.state_dict(),best_emotion_model.pth)print(保存最优模型)# 测试集评估test_lossval_epoch(model,test_loader,criterion)print(fTest Loss:{test_loss:.4f})六、使用说明 适配调整1. 数据集切换修改两处即可切换数据集预处理代码DATASET_NAME xxx训练代码PROC_DATA_PATH ./processed_data/xxx2. 任务切换回归/分类原数据集为连续情感分-3~3 / -1~1使用代码中MSELoss做回归若转为二分类/多分类将标签离散化负/正、喜/怒/哀等损失函数替换为CrossEntropyLoss模型最后一层输出改为对应类别数3. CH-SIMS v2 额外适配该版本新增人脸关键点只需在数据集类中额外加载关键点特征在模型中增加一路分支融合即可。4. 原始数据 预处理数据使用建议原始数据适合自定义特征提取、算法研究、论文实验预处理数据特征已固定开箱即用适合快速训练、课程作业、毕设。七、应用场景总结学术研究多模态情感融合、跨模态不一致、情绪识别算法对比工程落地短视频舆情分析、直播情绪监控、客服对话情绪研判教学实训AI 多模态项目、毕设课题、深度学习课程实验。

相关新闻

STM32 使用LCD1602简单显示字符

STM32 使用LCD1602简单显示字符

一、概述 1. 功能说明 本驱动适配 LCD1602 8 位并行模式,完全对标原 51 单片机逻辑迁移至 STM32,实现 LCD 初始化、清屏、指定坐标字符串打印;硬件引脚固定 PB 组,底层采用标准库 GPIO 操作,不依赖 HAL 库。 2. 硬件引…

2026/10/5 0:40:55 阅读更多 →
coding-ethos 实战:把 AI 编码规则变成可回读的 policy 与 remediation

coding-ethos 实战:把 AI 编码规则变成可回读的 policy 与 remediation

AI 编码治理最容易漏掉的不是规则,而是规则执行后的证据。coding-ethos 把项目约束拆成 policy、agent、hooks 和 code-intel 四个可追踪部分:coding_ethos.yml 管机制,CODING_ETHOS.md 与 ETHOS.md 管规范,AGENTS.md 与 CLAUDE.m…

2026/10/10 13:56:31 阅读更多 →
Kimi正式发布首个开源2.8万亿大模型 K3, 与GPT-5.6和Fable 5处于同一梯队

Kimi正式发布首个开源2.8万亿大模型 K3, 与GPT-5.6和Fable 5处于同一梯队

7月16日晚上,月之暗面发布了Kimi K3,首个最大开源模型。2.8万亿参数,MoE架构,896个专家中每次激活16个,100万Token上下文,原生视觉理解。完整权重7月27日前开放。同一时间,WAIC 2026在上海布展完…

2026/10/9 1:10:46 阅读更多 →

最新新闻

AnyPS5模拟器架构深度解析:从系统库翻译到着色器缓存

AnyPS5模拟器架构深度解析:从系统库翻译到着色器缓存

AnyPS5 这个项目,最早是在模拟器开发讨论区里看到有人贴出的一组截图:一台普通 PC 上,跑通了一个 PS5 自制测试程序,屏幕上打印出系统版本号字符串。当时很多人第一反应是不相信,直到作者把构建日志和配置文件贴出来&a…

2026/10/14 9:48:27 阅读更多 →
Eval工程化:从测试集禁忌到AI可信评估新范式

Eval工程化:从测试集禁忌到AI可信评估新范式

1. 为什么“碰测试集”从学术红线变成了行业日常? “测试集绝对不能碰”——这句话我第一次听到是在某高校实验室的组会上,导师用红笔在白板上重重写下这行字,旁边还画了个叉。当时在场的几个研究生下意识缩了缩脖子,像被点名的小…

2026/10/14 9:48:27 阅读更多 →
PHP扩展与FFI性能对比及优化实践

PHP扩展与FFI性能对比及优化实践

1. 性能对比背景与测试目标 在PHP生态中,当需要调用C语言编写的功能时,开发者通常面临两种选择:传统的PHP扩展开发方式,或是PHP 7.4引入的FFI(Foreign Function Interface)特性。这个测试旨在通过量化指标&…

2026/10/14 9:48:27 阅读更多 →
NumPy 矩阵分解实战 — Cholesky 分解

NumPy 矩阵分解实战 — Cholesky 分解

一、前言 在数值线性代数中,矩阵分解是解决大规模计算问题的核心工具。前面我们已经学习了 QR 分解——它将任意矩阵拆分为正规正交矩阵 QQQ 和上三角矩阵 RRR 的乘积。 今天,我们来学习矩阵分解家族中另一个重要成员:Cholesky 分解。 与 QR …

2026/10/14 9:48:27 阅读更多 →
OC5262 5.5V~60V宽输入降压恒流驱动:覆盖12V汽车至48V工业照明全场景

OC5262 5.5V~60V宽输入降压恒流驱动:覆盖12V汽车至48V工业照明全场景

OC5262是一款连续电感电流导通模式的降压型LED恒流驱动器,工作电压从5.5V到60V,最大输出电流2.5A。芯片采用高端电流检测电路,调光脚ADJ兼容PWM和模拟调光,内置5.5V LDO(最大5mA输出),效率高达9…

2026/10/14 9:48:27 阅读更多 →
Claude 看板与动画工具实战:对话式办公套件搭建指南

Claude 看板与动画工具实战:对话式办公套件搭建指南

1. 从单点对话到办公套件:这次更新到底改了什么Claude 最早给人的印象就是一个“会聊天的模型”,你问它答,顶多帮你改改文案、写写代码。但最近这一波更新,方向明显变了——它开始往“办公套件”的路子上走。所谓看板工具和动画工…

2026/10/14 9:47:26 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →