AIM3-RUC / MMIN

Missing Modality Imagination Network for Emotion Recognition with Uncertain Missing Modalities
MIT License
57 stars 13 forks source link

预训练模型使用的数据集 #16

Closed Winter-Jon closed 1 year ago

Winter-Jon commented 1 year ago

您好! 我发现train_baseline.py中使用了完整数据集来进行预训练,但这个和实验设置是不相符的。请问这个有合理的解释或实验证明吗,如果使用其他数据来进行预训练是否会对实验结果产生影响?

Winter-Jon commented 1 year ago

哦,我明白了,这篇文章的setting是训练时可以采用完整数据,仅在测试时模态是不完整的

aixuanjiayi commented 1 year ago

我想问一下,用bash scripts/CAP_utt_fusion.sh AVL [num_of_expr] [GPU_index]这个命令训练好的模型和train_baseline.py运行出来的有什么区别吗,我的train_baseline.py运行一直不成功,但是最后test.py是可以出结果的,想问问train_baseline.py出来的是什么,不知道你有没有了解,谢谢!

Winter-Jon commented 1 year ago

CAP_utt_fusion.sh命令应该就是运行带命令行参数的train_baseline.py,直接运行train_baseline.py是缺参数的,最后出来的是论文里的Pretrained Modality Encoder Network

aixuanjiayi commented 1 year ago

第一个命令bash scripts/CAP_utt_fusion.sh AVL出来的不是全部数据训练出来的模型嘛,论文里的Pretrained Modality Encoder Network也是缺失模态训练出来的模型吧;第二个命令bash scripts/CAP_mmin.sh出来的是正常前向想象应用的缺失模态出来的模型吧。我理解的可能有误,如有错误请帮忙指正。

Winter-Jon commented 1 year ago

论文中训练采用的都是完全模态。 第一阶段,用CAP_utt_fusion.sh进行预训练的时候用了完整的数据集,这一点可以在--dataset_mode=multimodal中看出,而训练出来的模型参数在后一阶段被读取。 第二阶段,CAP_mmin.sh训练时也用的完全模态,可以在data/multimodal_miss_dataset.py的126-142行中看出,前向想象出的缺失模态的监督信号就来自完全模态数据,就比如将一对(a,v,l)拆分成(a)和(v,l),用(v,l)去想象a',监督信息就是原来的a。

aixuanjiayi commented 1 year ago

MMIN is trained with all six possible missing modality conditions (Table 1).但是论文中写到,MMIN是训练阶段中用了缺失模态数据的。

Winter-Jon commented 1 year ago

他对缺失模态的定义是用完全模态数据拆分成的六对缺失模态对,而这六对缺失模态对全拿去训练了

aixuanjiayi commented 1 year ago

那你的意思是说,这种用完全模态数据分成的六对缺失模态对去训练的数据也叫完全模态吗?

Winter-Jon commented 1 year ago

从setting上说,三种模态都是available的,所以训练时是完全模态,但在测试的时候确实用的缺失模态。 假如真有模态缺失,只有两种模态的话,是无法生成模态对的。

aixuanjiayi commented 1 year ago

嗯嗯,是这个理。set_name in ['trn', 'val', 'tst']请问这三个都是什么意思啊,没有看到呢,谢谢!

Winter-Jon commented 1 year ago

这些就是训练集,验证集和测试集

aixuanjiayi commented 1 year ago

我还是没有懂,他这篇的最主要的点,就是用两个模态的数据想象出缺失的模态数据,这里具体是怎么实现的呢,万分感谢!

Winter-Jon commented 1 year ago

这个可以去参考一下cycleGAN。以一对缺失模态对(v,l)和(a)为例,(v,l)生成a',a'需要接近a,再用a‘往回生成(v',l'),(v',l')需要接近原来的(v,l)。这个说法有个不严谨的地方就是这是发生在特征层面的,不过意思大概就是这样。

aixuanjiayi commented 1 year ago

好的,谢谢!

aixuanjiayi commented 1 year ago

关于这篇文章对数据集数据的处理,他是三种数据分别用LSTMEncoder和TextCNN处理成相同向量的吗,./preprocess里的代码也是处理数据的嘛,没有用过这三种数据不太了解,谢谢!

Winter-Jon commented 1 year ago

./preprocess是数据预处理,后面的LSTMEncoder和TextCNN相当于Feature Encoder

aixuanjiayi commented 1 year ago

哦哦哦,好的,谢谢!

aixuanjiayi commented 1 year ago

您好,请问您看懂这个数据集特征提取了吗,这个{}_int2name.npy和{}_label.npy这个是作者自己手动设置好的吗,还有训练集、验证集和测试集的划分,这里的标签是10张图一张图一个标签的意思吗?谢谢!

aixuanjiayi commented 1 year ago

您好,说起这个训练用的都是完整模态的情况,在创建缺失多模态数据集的时候是写着训练集时是完整模态,但是MMIN模型训练的时候还是用的缺失模态呀,加载数据的时候就写着训练时用了缺失索引,所以他还是训练时是三种模态缺失一种或两种的缺失模态是吗,那这样不还是不能学习到三种模态的的全部特征吗,从CAP_utt_fusion.sh加载的不也只是权重吗,还是不太懂

Winter-Jon commented 11 months ago

您好,抱歉现在回复,他训练时用的缺失索引包括了所有的组合,包括(a,v), (a,l), (v,l)等等,而不是仅用其中一对

htqh06 commented 8 months ago

您好,请问您知道怎么跑preprocess文件夹里的代码对数据集预处理吗,看read.me里没说的很清楚