#今日论文推荐# 多边形战士模型!微软提出19亿参数的超大通用模型BEIT-3,刷榜多个CV和多模态任务

#今日论文推荐# 多边形战士模型!微软提出19亿参数的超大通用模型BEIT-3,刷榜多个CV和多模态任务

语言、视觉和多模态预训练的大融合正在出现。在这项工作中,作者引入了一个通用的多模态基础模型 BEIT-3,它在视觉和视觉语言任务上都实现了最先进的迁移性能。具体来说,作者从三个方面推进大融合:骨干架构预训练任务模型扩展。作者为通用建模引入了 Multiway Transformers,其中模块化架构支持深度融合和特定于模态的编码。基于共享主干,作者以统一的方式对图像(Imglish)、文本(English)和图像-文本对(“parallel sentences”)进行掩码“语言”建模。实验结果表明,BEIT-3 在对象检测 (COCO)、语义分割 (ADE20K)、图像分类 (ImageNet)、视觉推理 (NLVR2)、视觉问答 (VQAv2)、图像字幕方面获得了最先进的性能(COCO)和跨模态检索(Flickr30K,COCO)。

近年来,语言、视觉和多模态预训练大融合的趋势。通过对海量数据进行大规模预训练,可以轻松地将模型迁移到各种下游任务。可以预训练一个处理多种模态的通用基础模型,这很有吸引力。在这项工作中,作者从以下三个方面推进视觉语言预训练的收敛趋势。

首先,Transformers的成功是从语言翻译运用到视觉和多模态的问题。网络架构的统一使我们能够无缝地处理多种模态。对于视觉语言建模,由于下游任务的不同性质,有多种方法可以应用 Transformer。例如,双编码器架构用于高效检索,编码器-解码器网络用于生成任务,融合编码器架构用于图像-文本编码。然而,大多数基础模型必须根据特定架构手动转换最终任务格式。此外,参数通常不能有效地跨模态共享。在这项工作中,作者采用** Multiway Transformers **进行通用建模,即为各种下游任务共享一个统一架构。模块化网络还综合考虑了特定于模态的编码和跨模态融合。

其次,基于掩码数据建模的预训练任务已成功应用于各种模态,例如文本 、图像和图像-文本对。当前的视觉语言基础模型通常会同时处理其他预训练目标(例如图像-文本匹配),从而导致放大不友好且效率低下。相比之下,本文只使用一个预训练任务,即 mask-then-predict,来训练一个通用的多模态基础模型。通过将图像视为一门外语(即 Imglish),作者以相同的方式处理文本和图像,而没有基本的建模差异。因此,图像-文本对被用作“平行句子”,以学习模态之间的对齐。作者还表明,这种简单而有效的方法学习了强大的可迁移表示,在视觉和视觉语言任务上都实现了最先进的性能。显着的成功证明了生成式预训练的优越性。

第三,扩大模型规模和数据规模普遍提高了基础模型的泛化质量,以便可以将它们转移到各种下游任务中。作者遵循这一理念并将模型规模扩大到数十亿个参数。此外,作者在实验中扩大了预训练数据的大小,同时仅将可公开访问的资源用于学术。尽管没有使用任何私人数据,但本文的方法在相当大的程度上优于依赖内部数据的最先进的基础模型。此外,扩大规模得益于将图像视为外语,因为作者可以直接重用为大规模语言模型预训练开发的管道。

在这项工作中,作者利用上述想法来预训练一个通用的多模态基础模型** BEIT-3**。通过对图像、文本和图像-文本对执行掩码数据建模来预训练 Multiway Transformer。在预训练期间,作者随机屏蔽一定比例的文本标记或图像块。自监督学习的目标是在给定损坏的输入的情况下恢复原始标记(即文本标记或视觉标记)。该模型是通用的,因为无论输入模态或输出格式如何,它都可以重新用于各种任务。

论文题目:Image as a Foreign Language: BEIT Pretraining for All Vision and Vision-Language Tasks
详细解读:https://www.aminer.cn/research_report/6310b80d7cb68b460f117da2icon-default.png?t=M7J4https://www.aminer.cn/research_report/6310b80d7cb68b460f117da2
AMiner链接:https://www.aminer.cn/?f=cs

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
抱歉,我作为AI语言模型无法生成与您要求的实现方式完全一致的Python代码。但是,我可以提供一个参考代码,来完成您的需求。 以下是一个使用PyTorch实现Beit模型图片编码部分的参考代码: ```python import torch import torch.nn as nn import torchvision.transforms as transforms import timm # 定义模型 class BeitEncoder(nn.Module): def __init__(self): super(BeitEncoder, self).__init__() self.model = timm.create_model('beit_base_patch16_224', pretrained=True) self.fc = nn.Linear(self.model.num_features, 512) def forward(self, x): x = self.model.forward_features(x) x = self.model.global_pool(x) x = x.flatten(1) x = self.fc(x) return x # 定义输入张量 img_tensor = torch.randn(1, 3, 128, 128) # 定义变换 transform = transforms.Compose([ transforms.Resize((224, 224)), transforms.ToTensor(), transforms.Normalize( mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225] ) ]) # 对输入张量进行变换 img_tensor = transform(img_tensor) # 创建模型实例 model = BeitEncoder() # 运行模型 output = model(img_tensor) # 输出结果 print(output.shape) ``` 在上述代码中,我们定义了一个名为`BeitEncoder`的类,该类包含一个Beit预训练模型的实例,并在其基础上添加了一个全连接层。在`forward`方法中,我们首先使用模型的`forward_features`方法对输入图片进行特征提取,然后使用`global_pool`方法对特征图进行全局池化,最后将结果展平,并输入到全连接层中。 在执行模型之前,我们还使用`transforms`模块定义了一个变换,将输入张量缩放到224x224大小,并进行归一化,以满足Beit模型的输入要求。最后,我们创建了一个模型实例,并将输入张量传递给模型,以生成编码后的特征向量。 请注意,由于Beit模型的输入大小是224x224,因此我们需要先将输入张量进行缩放,以满足模型的输入要求。同时,Beit模型的输出大小是512,因此我们在模型中添加了一个全连接层,将模型的输出大小调整为512。如果您的应用程序需要不同的输入大小或输出大小,您需要针对您的具体应用场景进行相应的调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值