由于本人的研究是文本、语音和图像三者模态数据的融合,所以针对的是这三种模态的特征融合方法进行总结。本文章会从方法、总结网址和综述文章进行介绍。
方法:
首先,在特征提取之后,多模态特征融合的方法分为四种:特征级融合、决策级融合、混合级融合和模型级融合。其中:
-
特征级融合。也称为早期融合,是多模态识别系统最常用的策略。它表示在提取后立即从不同模态提取的特征连接成单个高维特征向量的方法。多模态早期融合方法常常与特征提取方法相结合以剔除冗余信息,如主成分分析(PCA)、最大相关最小冗余算法(mRMR)、自动解码器(Autoencoders)等。具体来说:首先得到的文本特征_ftext_,音频特征_f__audio_和视觉特征_f__visual_,然后将三个特征连接得到融合后的特征_f__u__nion_,最后输入MLP和softmax层得到分类结果。然而,特征融合的局限性在于生成的高维特征向量,并且由于它以一种直接的方式融合了三种模态特征,不能对复杂的关系进行建模。
python代码:
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层,得到多模态融合的结果。然而,决策级融合无法捕捉不同模态之间的相互关联,因为这些模态被假定为独立的。因此,决策级融合不符合人类以互补冗余的方式表达的事实。
python代码:
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层进行预测。
python代码:
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-layers LSTM,ML-LSTM)作为模型级融合方法之一,该方法是将多层网络与传统的LSTM模型相结合,通过充分考虑话语之间的关系,来使得在学习过程中处理话语层面的多模态融合问题,旨在用于抑郁症的识别。融合思路如下:将文本特征输入到第一层LSTM(Layer1)得到的是每个神经元的隐藏层状态,然后将音频特征与Layer1得到的隐藏层状态相拼接输入到第二层LSTM(Layer2)得到第二层每个神经元的隐藏层状态,之后将视觉特征与Layer2得到的隐藏层状态相拼接输入到第二层LSTM(Layer3)得到第三层每个神经元的隐藏层状态,最后将融合后的特征输入到FC层得到最终的预测结果。
python代码:
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
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]
总结网址:
下面介绍比较实用的专门总结多模态融合文章的网址(里面都是关于多模态的高水平论文):
- 里面会注明是否含有开源代码,文章出处,很齐全: 网址:GitHub - pliang279/awesome-multimodal-ml: Reading list for research topics in multimodal machine learning
文章:
1、综述文章:
深度多模态表征学习:一项调查,该文章通过对深度学习中多模态数据方法进行总结和讨论,分析方法种类和各自优缺点。网址:Deep Multimodal Representation Learning: A Survey | IEEE Journals & Magazine | IEEE Xplore
2、特征级融合文章汇总:
-
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得到的音频特征和视觉特征,以及使用预训练工具得到文本特征,然后在三种模态上使用一个注意力层,进行加权相加,最后得到融合后的特征。
3、决策级融合文章汇总:
-
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
4、混合级融合文章汇总:
-
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中进行模型的训练。
5、模型级融合文章汇总:
-
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
如何学习大模型
现在社会上大模型越来越普及了,已经有很多人都想往这里面扎,但是却找不到适合的方法去学习。
作为一名资深码农,初入大模型时也吃了很多亏,踩了无数坑。现在我想把我的经验和知识分享给你们,帮助你们学习AI大模型,能够解决你们学习中的困难。
我已将重要的AI大模型资料包括市面上AI大模型各大白皮书、AGI大模型系统学习路线、AI大模型视频教程、实战学习,等录播视频免费分享出来,需要的小伙伴可以扫取。

一、AGI大模型系统学习路线
很多人学习大模型的时候没有方向,东学一点西学一点,像只无头苍蝇乱撞,我下面分享的这个学习路线希望能够帮助到你们学习AI大模型。
二、AI大模型视频教程
三、AI大模型各大学习书籍
四、AI大模型各大场景实战案例
五、结束语
学习AI大模型是当前科技发展的趋势,它不仅能够为我们提供更多的机会和挑战,还能够让我们更好地理解和应用人工智能技术。通过学习AI大模型,我们可以深入了解深度学习、神经网络等核心概念,并将其应用于自然语言处理、计算机视觉、语音识别等领域。同时,掌握AI大模型还能够为我们的职业发展增添竞争力,成为未来技术领域的领导者。
再者,学习AI大模型也能为我们自己创造更多的价值,提供更多的岗位以及副业创收,让自己的生活更上一层楼。
因此,学习AI大模型是一项有前景且值得投入的时间和精力的重要选择。