问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

一文阐述:多模态特征融合方法总结

创作时间:
作者:
@小白创作中心

一文阐述:多模态特征融合方法总结

引用
CSDN
1.
https://m.blog.csdn.net/python1234567_/article/details/140122357

多模态特征融合是人工智能领域的重要研究方向,特别是在处理文本、语音和图像等多模态数据时。本文将详细介绍四种主要的多模态特征融合方法:特征级融合、决策级融合、混合级融合和模型级融合,并通过Python代码示例帮助读者更好地理解这些方法的实现原理。

特征级融合

特征级融合,也称为早期融合,是多模态识别系统中最常用的策略。它在提取后立即从不同模态提取的特征连接成单个高维特征向量。多模态早期融合方法常常与特征提取方法相结合以剔除冗余信息,如主成分分析(PCA)、最大相关最小冗余算法(mRMR)、自动解码器(Autoencoders)等。

具体来说,首先得到的文本特征_ftext_,音频特征_f__audio_和视觉特征_f__visual_,然后将三个特征连接得到融合后的特征_f__u__nion_,最后输入MLP和softmax层得到分类结果。然而,特征融合的局限性在于生成的高维特征向量,并且由于它以一种直接的方式融合了三种模态特征,不能对复杂的关系进行建模。

class Feature_level(nn.Module):
    def __init__(self):
        super(Feature_level, self).__init__()
        self.fc = nn.Linear(in_features=200, out_features=1)
    def forward(self, feature_a, feature_t, feature_v):
        x = torch.cat((feature_a, feature_t, feature_v), 0)
        out = self.fc(x)[:, 0][0]
        return out

决策级融合

决策级融合,也称为后期融合,是在获得基于每个模态的决策之后,通过应用多个预测类标签的代数组合规则(例如,最大值、最小值、总和、平均值等)对这些决策执行集成步骤。具体来说,将文本特征_ftext_、音频特征_f__audio_和视觉特征_f__visual_分别输入各自的MLP和softmax层进行抑郁症回归训练,预测结果分别为_y__text_ ,y__audio_和_y__visual。之后将_y__text_ ,y__audio_和_y__visual_进行线性加权求和得到融合结果_r__f。最后将_r__f_经过softmax层,得到多模态融合的结果。然而,决策级融合无法捕捉不同模态之间的相互关联,因为这些模态被假定为独立的。因此,决策级融合不符合人类以互补冗余的方式表达的事实。

class decision_level(nn.Module):
    def __init__(self):
        super(decision_level, self).__init__()
        self.fc1 = nn.Linear(in_features=200, out_features=100)
        self.fc2 = nn.Linear(in_features=100, out_features=1)
    def forward(self, feature_a, feature_t, feature_v):
        x_a = self.fc1(feature_a)
        x_t = self.fc1(feature_t)
        x_v = self.fc1(feature_v)
        x = torch.cat((torch.mul(0.3, x_a), torch.mul(0.4, x_t), torch.mul(0.3, x_v)), 0)
        out = self.fc2(x)[:, 0][0]
        return out

混合级融合

混合级融合是早期融合和后期融合两个方法的结合,通过早期融合和单个模态预测的输出相结合。然而,混合级融合虽然改善了特征级融合和决策级的局限性,但是问题没有得到解决,只是这两种方案的折中。思路如下:将文本特征、音频特征和视觉特征分别输入到各自的线性回归层进行抑郁症分数预测,并将其和每个模态的特征向量进行拼接,然后使用这些新的特征向量来输入到FC层进行预测。

class Hybrid_level(nn.Module):
    def __init__(self):
        super(Hybrid_level, self).__init__()
        self.fc1 = nn.Linear(in_features=200, out_features=1)
        self.fc2 = nn.Linear(in_features=201, out_features=1)
    def forward(self, feature_a, feature_t, feature_v):
        a_x = self.fc1(feature_a)
        t_x = self.fc1(feature_t)
        v_x = self.fc1(feature_v)
        a = torch.cat((feature_a, a_x), 2)
        t = torch.cat((feature_a, t_x), 2)
        v = torch.cat((feature_a, v_x), 2)
        x = torch.cat((a, t, v), 0)
        out = self.fc2(x)[:, 0][0]
        return out

模型级融合

模型级融合旨在获得三种模态的联合特征表示,它的实现主要取决于使用的融合模型。模型级融合是更深层次的融合方法,为分类和回归任务产生更优化的联合判别特征表示。以ML-LSTM为例,多层次LSTM(Multi-layersLSTM,ML-LSTM)作为模型级融合方法之一,该方法是将多层网络与传统的LSTM模型相结合,通过充分考虑话语之间的关系,来使得在学习过程中处理话语层面的多模态融合问题,旨在用于抑郁症的识别。融合思路如下:将文本特征输入到第一层LSTM(Layer1)得到的是每个神经元的隐藏层状态,然后将音频特征与Layer1得到的隐藏层状态相拼接输入到第二层LSTM(Layer2)得到第二层每个神经元的隐藏层状态,之后将视觉特征与Layer2得到的隐藏层状态相拼接输入到第二层LSTM(Layer3)得到第三层每个神经元的隐藏层状态,最后将融合后的特征输入到FC层得到最终的预测结果。

class MLLSTM(nn.Module):
    def __init__(self, input_size, hidden_size, output_size, batch_size, num_layers, num_directions):
        super(MLLSTM, self).__init__()
        self.input_size = input_size
![](https://wy-static.wenxiaobai.com/chat-rag-image/4345008587373025892)
        self.hidden_size = hidden_size
        self.output_size = output_size
        self.batch_size = batch_size
        self.num_layers = num_layers
        self.num_directions = num_directions
        self.lstm1 = nn.LSTM(input_size=input_size, hidden_size=hidden_size, num_layers=num_layers,
                             bidirectional=(num_directions == 2)).cuda()
        self.lstm2 = nn.LSTM(input_size=input_size, hidden_size=hidden_size, num_layers=num_layers,
                             bidirectional=(num_directions == 2)).cuda()
        self.lstm3 = nn.LSTM(input_size=input_size, hidden_size=hidden_size, num_layers=num_layers,
                             bidirectional=(num_directions == 2)).cuda()
        # self.attention_weights_layer = nn.Sequential(
        # 	nn.Linear(hidden_size, hidden_size),
        # 	nn.ReLU(inplace=True)
        # )
        self.fc = nn.Linear(hidden_size * 2, output_size).cuda()
        self.pred = nn.Linear(output_size, 1).cuda()
    def forward(self, x, y, z):
        # lstm的输入维度为 [seq_len, batch, input_size]
        # x [batch_size, sentence_length, embedding_size]
        # xx = x.permute(1, 0, 2)  # [sentence_length, batch_size, embedding_size]
        # 由于数据集不一定是预先设置的batch_size的整数倍,所以用size(1)获取当前数据实际的batch
        # batch_size = x.size(1)
        # 设置lstm最初的前项输出
        h_0 = torch.randn(self.num_layers * self.num_directions, self.input_size, self.hidden_size).cuda()
        c_0 = torch.randn(self.num_layers * self.num_directions, self.input_size, self.hidden_size).cuda()
        # out[seq_len, batch, num_directions * hidden_size]。多层lstm,out只保存最后一层每个时间步t的输出h_t
        # h_n, c_n [num_layers * num_directions, batch, hidden_size]
        text_out, (text_h_n, text_c_n) = self.lstm1(x, (h_0, c_0))
        text = self.fc(text_out)
        audio_out, (audio_h_n, audio_c_n) = self.lstm2(y + text, (text_h_n, text_c_n))
        audio = self.fc(audio_out)
        visual_out, (visual_h_n, visual_c_n) = self.lstm3(z + audio, (audio_h_n, audio_c_n))
        visual = self.fc(visual_out)
        out = self.pred(visual)
        return out[:, 0][0]

相关研究论文总结

下面介绍一些关于多模态融合的重要研究论文:

综述文章

  • 深度多模态表征学习:一项调查:该文章通过对深度学习中多模态数据方法进行总结和讨论,分析方法种类和各自优缺点。网址:Deep Multimodal Representation Learning: A Survey | IEEE Journals & Magazine | IEEE Xplore

特征级融合文章汇总

  • Multi-modality Depression Detection via Multi-scale Temporal Dilated CNNs:通过将文本特征和音频特征串联送入FC层对多模态的特征进行融合
  • A Multi-Modal Hierarchical Recurrent Neural Network for Depression Detection:通过分层BiLSTM对三种模态进行集成,第一层对音频和视觉特征进行编码,然后通过隐藏状态和置信度得分加权得到对应的特征,第二层将三种模态特征通过其置信度得分加权的平均值进行融合
  • Multi-level Attention network using text, audio and video for Depression Prediction:通过BiLSTM得到的音频特征和视觉特征,以及使用预训练工具得到文本特征,然后在三种模态上使用一个注意力层,进行加权相加,最后得到融合后的特征。

决策级融合文章汇总

  • Depression recognition based on dynamic facial and vocal expression features using partial least square regression
  • Detect depression from communication: how computer vision, signal processing, and sentiment analysis join forces

混合级融合文章汇总

  • A Linguistically-Informed Fusion Approach for Multimodal Depression Detection:为每种模态训练单独的预测模型,然后从每个单模态中获得预测,最后使用这些新的特征向量来训练新模型以进行最终预测。
  • Cross-cultural detection of depression from nonverbal behaviour:将每个模态的结果连接到早期融合特征向量然后进行模型的预测,最后采用多数票表决法来评估效果。
  • Depression Status Estimation by Deep Learning based Hybrid Multi-Modal Fusion Model:将三种模态特征分别输入Linear中分别得到对应的分数,然后将得到的分数进行拼接得到融合后的特征,最后将融合后的特征输入Linear中进行模型的训练。

模型级融合文章汇总

  • Multi-modal feature fusion based on multi-layers LSTM for video emotion recognition:ML-LSTM,对应上述的模型级融合讲述
  • Deep-HOSeq: Deep Higher Order Sequence Fusion for Multimodal Sentiment Analysis
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号