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/9/18 13:22:41 阅读更多 →
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/9/14 8:37:56 阅读更多 →
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/9/20 22:23:31 阅读更多 →

最新新闻

3个坑让系统卡死,心中那自由的世界新手避坑指南

3个坑让系统卡死,心中那自由的世界新手避坑指南

3个坑让系统卡死,心中那自由的世界新手避坑指南 面试被问原理答不上来,这种丢人的事我见得太多了。很多新手觉得代码能跑就行,结果一上生产环境,接口响应慢得像蜗牛,用户投诉不断。这时候你再去看文档,发现连最基础的异步概念都没搞透。这就是典型的【…

2026/9/22 6:30:12 阅读更多 →
搞定正弦交流电高频面试题,老手教你避开版本升级坑

搞定正弦交流电高频面试题,老手教你避开版本升级坑

搞定正弦交流电高频面试题,老手教你避开版本升级坑 刚换完新版仿真软件,打开项目发现熟悉的 API 全变了,参数名改了,调用逻辑也不对劲,这种崩溃感太真实了。很多开发者在准备 高频面试题…

2026/9/22 6:30:12 阅读更多 →
ColorOS升级原理一文搞懂 面试不再卡壳

ColorOS升级原理一文搞懂 面试不再卡壳

ColorOS升级原理一文搞懂 面试不再卡壳 面试被问 ColorOS 升级底层机制,90% 的候选人直接卡壳。 很多大厂面试喜欢考系统级细节,ColorOS 基于 Android 深度定制,其升级逻辑复杂且隐蔽。…

2026/9/22 6:30:12 阅读更多 →
忽梦少年事手写实现:3步搞定报错与原理

忽梦少年事手写实现:3步搞定报错与原理

忽梦少年事手写实现:3步搞定报错与原理 凌晨两点,屏幕荧光刺眼,IDE 右上角的红色报错图标像个恶魔在狞笑。你盯着那满屏的 Stack Trace ,一行行堆栈信息像天书一样滚过, NullPointerException 、…

2026/9/22 6:30:12 阅读更多 →
电脑上微信开发避坑:从配置环境到入门精通的实战指南

电脑上微信开发避坑:从配置环境到入门精通的实战指南

电脑上微信开发避坑:从配置环境到入门精通的实战指南 别被“配置环境就卡半天”劝退。很多初学者在搭微信开发环境时,往往因为依赖冲突或版本不匹配而耗费大量时间,导致对技术产生畏难情绪。想要实现从入门到精通,必须打通底层逻辑,而不是盲目复制教程。…

2026/9/22 6:30:11 阅读更多 →
微信怎么圈所有人背后的性能优化陷阱与避坑实战

微信怎么圈所有人背后的性能优化陷阱与避坑实战

微信怎么圈所有人背后的性能优化陷阱与避坑实战 刚学会几个语法糖,就急着上手搭项目?别急,很多老手当年也栽过跟头。你写的代码跑得通,但一上量就卡死,这往往不是逻辑错,而是没懂底层性能优化逻辑。今天咱们不聊虚的,就盯着“微信怎么圈所有人”这个看…

2026/9/22 6:29:11 阅读更多 →

日新闻

3台商务办公笔记本实测:手写实现环境配置,告别卡半天

3台商务办公笔记本实测:手写实现环境配置,告别卡半天

3台商务办公笔记本实测:手写实现环境配置,告别卡半天 配置环境就卡半天?别怪机器慢,多半是你没选对工具链。在Java、Go或Python的项目现场, 手写实现…

2026/9/22 0:00:41 阅读更多 →
剑帝加点速查手册:3分钟搞懂核心逻辑

剑帝加点速查手册:3分钟搞懂核心逻辑

剑帝加点速查手册:3分钟搞懂核心逻辑 面试被问原理答不上来,是不是常态?别慌。很多开发者对着 GitHub 开源仓库里的代码发呆,看似简单实则暗藏玄机。今天这份【剑帝加点】速查手册,直接带你拆解核心实现,把面试必考的原理讲透。…

2026/9/22 0:00:41 阅读更多 →
手写实现图片压缩网站核心:搞定WebP转换与质量调优

手写实现图片压缩网站核心:搞定WebP转换与质量调优

手写实现图片压缩网站核心:搞定WebP转换与质量调优 复制来的代码跑不通不知道怎么调?别慌,这种“复制粘贴地狱”在开发圈太常见了。尤其是做 图片压缩网站…

2026/9/22 0:00:41 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/22 4:32:41 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/22 4:38:57 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/21 4:51:05 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/21 15:36:51 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/21 15:36:51 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/22 2:43:42 阅读更多 →