好文推荐 A transformer-based representation-learning model with unified processing of multimodal input

这篇具有很好参考价值的文章主要介绍了好文推荐 A transformer-based representation-learning model with unified processing of multimodal input。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


论文地址:https://www.nature.com/articles/s41551-023-01045-x

代码地址:https://github.com/RL4M/IRENE


基于Transformer的表示学习模型,作为临床诊断辅助工具,以统一的方式处理多模态输入。将图像与文字转化为visual tokens和text tokens,通过一个双向的跨模态注意力机制块共同学习不同信息间的整体特征和其关联性来做出决策。

第一个以统一方式使用人工智能处理多模态信息,在临床上辅助医生进行决策诊断。为后续医学领域人工智能处理多模态信息提供一种新的思路。

Data

胸腔医学中,除了胸部X射线,医生还需要考虑患者的人口统计学信息(如年龄和性别)、主诉(如现病史和既往病史)以及实验室检查报告,以便做出准确的诊断决策。实际上,医生会首先将异常的放射学图像模式与主诉中提到的症状或实验室检查报告中的异常结果相关联。然后,医生依靠他们丰富的领域知识和多年的培训,通过共同解释这些多模态数据来做出最佳诊断。

在医学临床领域,常见的数据类型有三种:
图像(Radiograph)
主诉(Chief complaint):非结构化信息,现病史和既往病史
人口统计信息和实验室检查结果(Demographicsand lab test results):结构化信息,性别年龄等

    当前的临床辅助决策系统,常采用非同一的方式。首先将非结构化的主诉转化成结构化的数据,然后将不同模态的数据输入到不同的机器学习模块中,产生特定模态的特征。最后使用融合模块对这些特征进行融合。
但是这样做的一个问题是,特定模态模型的训练与融合过程相分离,导致不能获取不同模态之间的联系与关联。

    本文提出的 IRENE 共同学习图像、非结构化主诉和结构化临床信息的整体表示来进行决策。

好文推荐 A transformer-based representation-learning model with unified processing of multimodal input,深度学习,自然语言处理,transformer

图1.非同一方式与统一方式

Network structure

IRENE由嵌入层、两个多模态注意力块、10个自注意力块和一个输出层组成。

  • free-form embedding 将非结构化与结构化的文字转化成text tokens, image embedding将图像转化成image tokens
  • bidirectional multimodal blocks 不仅计算同一模态内部的注意力,还计算不同模态之间的注意力
    bidirectional 指的是text tokens要与image token做注意力,同时image token也要与text token做注意力
  • Self-attention blocks 经过两个双向的多模态注意力块后,连接text tokens与image tokens,然后进行自注意力计算

好文推荐 A transformer-based representation-learning model with unified processing of multimodal input,深度学习,自然语言处理,transformer

图2.network structure

  1. 图像:图片经过一个卷积层
    好文推荐 A transformer-based representation-learning model with unified processing of multimodal input,深度学习,自然语言处理,transformer
  2. 文字
      主诉(ChiComp):经过bert获得token_id, max_len设为40
      实验室检查结果(LabTest):经过bert获得token_id max_len设为92
      人口统计信息(Sex、Age):经过一个Liner获得 长度为1
    最终得到一个长度为40+92+1+1的一维向量,再送入到嵌入层

好文推荐 A transformer-based representation-learning model with unified processing of multimodal input,深度学习,自然语言处理,transformer
3. 双向多模态注意力块
自注意力:输入序列经过一个线性映射,得到K,Q,V  (n, d)
     ①Q与K相乘,计算相似度,得到权重分布  (n, d) * (d, n) = (n,n)
     ②权重分布经过softmax进行归一化
     ③权重分布与V相乘,加权求和  (n, n) * (n,d) = (n, d)
经过自注意力机制,可以捕捉到输入序列中不同位置之间的关系和依赖

现在有两个K,Q,V:
 text tokens的 KT, QT, VT
 image tokens的KI, QI, VI
所以:
QI与KI, VI计算注意力捕捉图像之间的依赖关系, QI与KT, VT计算注意力捕捉图像与文本之间的依赖关系
QT与KT, VT计算注意力捕捉文本之间的依赖关系, QT与KI, VI计算注意力捕捉文本与图像之间的依赖关系

好文推荐 A transformer-based representation-learning model with unified processing of multimodal input,深度学习,自然语言处理,transformer

在本文中,取λ为1。在第一层双向多模态注意力层中Xi 和Xt分别取平均送入第二层双向多模态注意力块,
在第二层双向多模态注意力层中Xi 和Xt分别取平均后,进行拼接,送入自注意力块中

好文推荐 A transformer-based representation-learning model with unified processing of multimodal input,深度学习,自然语言处理,transformer

实验

对比实验:

  • 只使用图像
  • 非统一方式早期融合
  • 非统一方式晚期融合
  • 多模态模型GIT: 在大量的图像-文本对中训练   问题:临床医学数据难获取
  • 多模态模型Perceiver: 将不同模态的数据进行拼接作为输入。 问题:某个模态数据较少时,关注度低
    好文推荐 A transformer-based representation-learning model with unified processing of multimodal input,深度学习,自然语言处理,transformer
    消融实验:
  • 不加入双向多模态注意力
  • 加入单向多模态注意力
  • 加入6层双向多模态注意力
  • 不加入主诉
  • 不加入实验室检查结果
  • 不加入图像数据好文推荐 A transformer-based representation-learning model with unified processing of multimodal input,深度学习,自然语言处理,transformer

代码解读

整体架构

class IRENE(nn.Module):
    def __init__(self, config, img_size=224, num_classes=21843, zero_head=False, vis=False):
        super(IRENE, self).__init__()
        self.num_classes = num_classes
        self.zero_head = zero_head
        self.classifier = config.classifier
        self.transformer = Transformer(config, img_size, vis)
        self.head = Linear(config.hidden_size, num_classes)
	# 经过一个自定义的Transformer,再经过一个Linear
    def forward(self, x, cc=None, lab=None, sex=None, age=None, labels=None):
        x, attn_weights = self.transformer(x, cc, lab, sex, age)
        logits = self.head(torch.mean(x, dim=1))

        if labels is not None:
            loss_fct = BCEWithLogitsLoss()
            loss = loss_fct(logits.view(-1, self.num_classes), labels.float())
            return loss
        else:
            return logits, attn_weights, torch.mean(x, dim=1)

自定义的Transformes:Embeddings和Encoder组成

class Transformer(nn.Module):
    def __init__(self, config, img_size, vis):
        super(Transformer, self).__init__()
        self.embeddings = Embeddings(config, img_size=img_size)
        self.encoder = Encoder(config, vis)

    def forward(self, input_ids, cc=None, lab=None, sex=None, age=None):
        embedding_output, cc, lab, sex, age = self.embeddings(input_ids, cc, lab, sex, age)
        text = torch.cat((cc, lab, sex, age), 1)
        encoded, attn_weights = self.encoder(embedding_output, text)
        return encoded, attn_weights

Encoder

class Encoder(nn.Module):
    def __init__(self, config, vis):
        super(Encoder, self).__init__()
        self.vis = vis
        self.layer = nn.ModuleList()
        self.encoder_norm = LayerNorm(config.hidden_size, eps=1e-6)
        for i in range(config.transformer["num_layers"]):
            if i < 2: # 两个双向多模态注意力
                layer = Block(config, vis, mm=True)
            else: # 自注意力
                layer = Block(config, vis)
            self.layer.append(copy.deepcopy(layer))

    def forward(self, hidden_states, text=None):
        attn_weights = []
        for (i, layer_block) in enumerate(self.layer):
            if i == 2: #在第二个双向多模态注意力块后,拼接img与text,送入自注意力块
                hidden_states = torch.cat((hidden_states, text), 1)  
                hidden_states, weights = layer_block(hidden_states)
            elif i < 2: # hidden_states:img
                hidden_states, text, weights = layer_block(hidden_states, text)
            else:
                hidden_states, weights = layer_block(hidden_states)
            if self.vis:
                attn_weights.append(weights)
        encoded = self.encoder_norm(hidden_states)
        return encoded, attn_weights

双向多模态注意力文章来源地址https://www.toymoban.com/news/detail-732580.html

# img-img
'''
	需要计算四个注意力:
	text-text   text-img   img-img   img-text
'''
attention_scores_img = torch.matmul(query_layer, key_layer.transpose(-1, -2))
attention_scores_img = attention_scores_img / math.sqrt(self.attention_head_size)
attention_probs_img = self.softmax(attention_scores_img)
weights = attention_probs_img if self.vis else None
attention_probs_img = self.attn_dropout(attention_probs_img)
context_layer_img = torch.matmul(attention_probs_img, value_layer_img)
context_layer_img = context_layer_img.permute(0, 2, 1, 3).contiguous()
new_context_layer_shape = context_layer_img.size()[:-2] + (self.all_head_size,)
context_layer_img = context_layer_img.view(*new_context_layer_shape)

# text-text
attention_scores_text = torch.matmul(query_layer_text, key_layer_text.transpose(-1, -2))
attention_scores_text = attention_scores_text / math.sqrt(self.attention_head_size)
attention_probs_text = self.softmax(attention_scores_text)
attention_probs_text = self.attn_dropout_text(attention_probs_text)
context_layer_text = torch.matmul(attention_probs_text, value_layer_text)
context_layer_text = context_layer_text.permute(0, 2, 1, 3).contiguous()
new_context_layer_shape = context_layer_text.size()[:-2] + (self.all_head_size,)
context_layer_text = context_layer_text.view(*new_context_layer_shape)

# img-text
attention_scores_it = torch.matmul(query_layer_img, key_layer_text.transpose(-1, -2))
attention_scores_it = attention_scores_it / math.sqrt(self.attention_head_size)
attention_probs_it = self.softmax(attention_scores_it)
attention_probs_it = self.attn_dropout_it(attention_probs_it)
context_layer_it = torch.matmul(attention_probs_it, value_layer_text)
context_layer_it = context_layer_it.permute(0, 2, 1, 3).contiguous()
new_context_layer_shape = context_layer_it.size()[:-2] + (self.all_head_size,)
context_layer_it = context_layer_it.view(*new_context_layer_shape)

# text-img
attention_scores_ti = torch.matmul(query_layer_text, key_layer_img.transpose(-1, -2))
attention_scores_ti = attention_scores_ti / math.sqrt(self.attention_head_size)
attention_probs_ti = self.softmax(attention_scores_ti)
attention_probs_ti = self.attn_dropout_ti(attention_probs_ti)
context_layer_ti = torch.matmul(attention_probs_ti, value_layer_img)
context_layer_ti = context_layer_ti.permute(0, 2, 1, 3).contiguous()
new_context_layer_shape = context_layer_ti.size()[:-2] + (self.all_head_size,)
context_layer_ti = context_layer_ti.view(*new_context_layer_shape)

# img-img 与 img-text取平均
attention_output_img = self.out((context_layer_img + context_layer_it)/2)
# text-text 与 text-img取平均
attention_output_text = self.out((context_layer_text + context_layer_ti)/2)

attention_output_img = self.proj_dropout(attention_output_img)
attention_output_text = self.proj_dropout_text(attention_output_text)
return attention_output_img, attention_output_text, weights

到了这里,关于好文推荐 A transformer-based representation-learning model with unified processing of multimodal input的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • AI大模型之Swin Transformer 最强CV图解(深度好文)

    目录 SwinTransformer之CV模型详解 第一代CV大模型:Vision Transformer 第二代CV大模型:Swin Transformer 两代模型PK(VIT和Swin Transformer) Swin Transformer是什么CV模型? Swin Transformer应用场景是什么? Swin Transformer到底解决了什么问题? Swin Transformer网络架构 Patch Embbeding介绍 window_partition介绍

    2024年04月28日
    浏览(31)
  • 基于内容的推荐算法(Content-Based)

    简介 基于内容的推荐方法是非常直接的,它以物品的内容描述信息为依据来做出的推荐,本质上是基于对物品和用户自身的特征或属性的直接分析和计算。 内容推荐算法是指在网站或应用中向用户推荐内容的一种机器学习算法。这些算法通过分析用户的历史浏览记录、搜索

    2024年02月04日
    浏览(39)
  • Huggingface Transformers Deberta-v3-base安装踩坑记录

    下载transformers的预训练模型时,使用bert-base-cased等模型在AutoTokenizer和AutoModel时并不会有太多问题。但在下载deberta-v3-base时可能会发生很多报错。 首先, 此时会发生报错,提示  解决方法是  继续导入tokenizer,又会有如下报错

    2024年02月09日
    浏览(38)
  • 论文阅读:CenterFormer: Center-based Transformer for 3D Object Detection

    目录 概要 Motivation 整体架构流程 技术细节 Multi-scale Center Proposal Network Multi-scale Center Transformer Decoder Multi-frame CenterFormer 小结 论文地址: [2209.05588] CenterFormer: Center-based Transformer for 3D Object Detection (arxiv.org) 代码地址: GitHub - TuSimple/centerformer: Implementation for CenterFormer: Center-base

    2024年02月07日
    浏览(44)
  • VL系列 Exchanging-based Multimodal Fusion with Transformer 论文阅读笔记

    写在前面   又是一个周末 教师节,祝老师们节日快乐呀。依惯例,论文读起来~   这是一篇多模态融合的文章,也算是这些年新出的一种方式了,具体还不知道啥情况,代码已开源,一试便知。 论文地址:Exchanging-based Multimodal Fusion with Transformer 代码地址:https://github.

    2024年02月05日
    浏览(61)
  • 【论文阅读】TransCAM: Transformer Attention-based CAM Refinement for WSSS

    分享一篇阅读的用于弱监督分割的论文 TransCAM: Transformer Attention-based CAM Refinement for Weakly Supervised Semantic Segmentation https://github.com/liruiwen/TransCAM 大多数现有的WSSS方法都是基于类激活映射(CAM)来生成像素级的伪标签,用于监督训练。但是基于CNN的WSSS方法只是凸出最具有区别性

    2024年02月16日
    浏览(51)
  • LGFormer:LOCAL TO GLOBAL TRANSFORMER FOR VIDEO BASED 3D HUMAN POSE ESTIMATION

    基于视频的三维人体姿态估计的局部到全局Transformer 作者:马海峰 *,陆克 * †,薛健 *,牛泽海 *,高鹏程† *            中国科学院大学工程学院,北京100049             鹏程实验室,深圳518055 来源:2022 IEEE International Conference on Multimedia and Expo (IEEE ICME) 基于Transformer的

    2024年02月09日
    浏览(46)
  • 论文阅读Point Transformer V2: Grouped Vector Attention and Partition-based Pooling

    Point transformer v2。 香港大学2022 在PCT的基础上进一步改进的点云处理方法,通过分组向量注意力(Grouped Vector Attention)和基于划分的池化机制,提高了对点云特征的提取和聚合能力,并在轻量级上有了新的突破。 总体来看: 1.点云网格化:将点云划分成大小相等的小块,对每个小

    2024年01月22日
    浏览(41)
  • 论文阅读 (79):TransMIL: Transformer based Correlated Multiple Instance Learning for Whole Slide Image

    2021:用于WSI分类的Transformer相关多示例 ( TransMIL: Transformer based correlated multiple instance learning for whole slide image classification ) WSI–MIL方法通常基于独立同分布假设,这忽略了不同实例之间的相关性。为了处理这个问题,提出了一个称为 相关多示例 的新框架。基于该框架,部署了

    2024年02月09日
    浏览(48)
  • 论文阅读——《Retinexformer: One-stage Retinex-based Transformer for Low-light Image Enhancement》

    本文试图从原理和代码简单介绍低照度增强领域中比较新的一篇论文——Retinexformer,其效果不错,刷新了十三大暗光增强效果榜单。 ❗ 论文名称 :Retinexformer: One-stage Retinex-based Transformer for Low-light Image Enhancement 👀 论文信息 :由清华大学联合维尔兹堡大学和苏黎世联邦理工

    2024年01月18日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包