CMU-MOSI、CMU-MOSEI、CH-SIMS、Ch-SIMS v2 多模态数据集 数据集包括原始数据和处理后的数据,

发布时间:2026/7/18 16:05:36
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 多模态项目、毕设课题、深度学习课程实验。

相关新闻