“羊驼“入侵CV,美团浙大沈春华团队将LLaMA向CV扩展,构建全新基础模型VisionLLaMA

本文主要是介绍“羊驼“入侵CV,美团浙大沈春华团队将LLaMA向CV扩展,构建全新基础模型VisionLLaMA,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文首发:AIWalker

https://arxiv.org/abs/2403.00522
https://github.com/Meituan-AutoML/VisionLLaMA

本文概述

大型语言模型构建在基于Transformer的架构之上来处理文本输入, LLaMA 系列模型在众多开源实现中脱颖而出。类似LLaMa的Transformer可以用来处理2D图像吗?在本文中,我们通过提出一种类似 LLaMA 的朴素和金字塔形式的Transformer来回答这个问题,称为 VisionLLaMA。 VisionLLaMA 是一个统一的通用建模框架,用于解决大多数视觉任务。

我们采用经典的预训练框架在图像感知(尤其是图像生成)任务上对齐有效性进行了充分评估。在大多数情况下,VisionLLaMA表现出了比已有SOTA ViT方案更优的性能。我们相信 VisionLLaMA 可以作为视觉生成和理解的强大新基线模型。

本文贡献

  • 提出一种类似于LLaMA的视觉转换器架构VisionLLaMA,以减少语言和视觉之间的架构差异。
  • 我们研究了两个版式的视觉架构方案(朴素和金字塔),并评估它们在监督和自监督学习场景下的性能。此外,我们还引入了 AS2DRoPE(即自动缩放 2D RoPE),它将旋转位置编码从 1D 扩展到 2D,并利用插值缩放来适应任意分辨率。
  • 在没有花里胡哨的情况下,VisionLLaMA 在图像生成、分类、语义分割和对象检测等许多代表性任务中明显优于广泛使用且经过仔细微调的视觉转换器。大量实验表明,VisionLLaMA 比现有视觉转换器具有更快的收敛速度和更好的性能。

本文方案

朴素版VisionLLaMA延续了ViT的处理流程,核心在于VisionLLaMA模块,见上图。VisionLLaMA与ViT不同之处在于:位置编码自注意力RoPE和SwiGLU激活函数。此外,它仍然使用ViT的LayerNorm,而非RMSNorm。需要注意的是,由于1DRoPE不能很好的扩展到其他分辨率,故作者将其扩展为2维形式,描述如下:

z i j l = M H S A ( A S 2 D R o P E ( L a y e r N o r m ( z i j l − 1 ) ) ) + z i j l − 1 z_{ij}^{l} = MHSA(AS2DRoPE(LayerNorm(z_{ij}^{l-1}))) + z_{ij}^{l-1} zijl=MHSA(AS2DRoPE(LayerNorm(zijl1)))+zijl1
z i j l = S w i G L U ( L a y e r N o r m ( z i j l ) ) + z i j l z_{ij}^{l} = SwiGLU(LayerNorm(z_{ij}^l)) + z_{ij}^{l} zijl=SwiGLU(LayerNorm(zijl))+zijl

金字塔VisionLLaMA

更进一步,类似SwinT,作者还构建了一个金字塔版本的VisionLLaMA。在本文中,我们选择更强的基线 Twins 来探索如何在严格控制的设置下构建强大的金字塔变压器。 Twins 的原始架构利用了条件位置编码和以局部和全局注意力的形式进行交错的局部-全局信息交换。这些组件可以在各种变压器中找到,这意味着按照我们的方法在其他金字塔变压器变体中应用 VisionLLaMA 并不困难。请注意,我们的目标不是发明一种新颖的金字塔视觉转换器,而是展示我们如何在现有设计的基础上调整 VisionLLaMA 的基本设计。因此,我们只是遵循对架构和超参数进行最小的修改。

需要注意:我们删除了金字塔 VisionLLaMA 中的条件位置编码,因为 AS2DRoPE 已经包含位置信息。此外,我们还删除了类标记并在分类头之前使用 GAP(全局平均池)。

Training or Inference Beyond Sequence Length

处理不同的输入分辨率是视觉任务中的常见要求。卷积神经网络使用滑动窗口机制来处理可变长度。相反,大多数视觉转换器应用局部窗口操作或插值。例如,DeiT在不同分辨率上训练时采用双三次插值。 CPVT使用基于卷积的位置编码。

对于RoPE,作者尝试将其从1D扩展至2D形式。给定 x i j ∈ R d x_{ij} \in R^d xijRd,其位置编码为 x i j P E = R i j x i j x_{ij}^{PE} = R_{ij} x_{ij} xijPE=Rijxij,对角矩阵如下:

本文实验

图像生成

图像分类

语义分割

COCO检测

推荐阅读

  1. 入局CV,Mamba再显神威!华科王兴刚团队首次将Mamba引入ViT,更高精度、更快速度、更低显存!
  2. Swin版VMamba来了!精度再度提升,VMamba-S达成83.5%,超越Swin-S,已开源!
  3. CVPR2023 InternImage已开源 | 注入新机制,探索视觉大模型,达成COCO新纪录65.4mAP!
  4. CVPR2022 | RepLKNet: 大核卷积+结构重参数让CNN再次伟大
  5. DCNv4来袭,更快收敛、更高速度、更高性能!

这篇关于“羊驼“入侵CV,美团浙大沈春华团队将LLaMA向CV扩展,构建全新基础模型VisionLLaMA的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/775467

相关文章

Java的IO模型、Netty原理解析

《Java的IO模型、Netty原理解析》Java的I/O是以流的方式进行数据输入输出的,Java的类库涉及很多领域的IO内容:标准的输入输出,文件的操作、网络上的数据传输流、字符串流、对象流等,这篇... 目录1.什么是IO2.同步与异步、阻塞与非阻塞3.三种IO模型BIO(blocking I/O)NI

一文详解如何从零构建Spring Boot Starter并实现整合

《一文详解如何从零构建SpringBootStarter并实现整合》SpringBoot是一个开源的Java基础框架,用于创建独立、生产级的基于Spring框架的应用程序,:本文主要介绍如何从... 目录一、Spring Boot Starter的核心价值二、Starter项目创建全流程2.1 项目初始化(

使用Java实现通用树形结构构建工具类

《使用Java实现通用树形结构构建工具类》这篇文章主要为大家详细介绍了如何使用Java实现通用树形结构构建工具类,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录完整代码一、设计思想与核心功能二、核心实现原理1. 数据结构准备阶段2. 循环依赖检测算法3. 树形结构构建4. 搜索子

C#基础之委托详解(Delegate)

《C#基础之委托详解(Delegate)》:本文主要介绍C#基础之委托(Delegate),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 委托定义2. 委托实例化3. 多播委托(Multicast Delegates)4. 委托的用途事件处理回调函数LINQ

基于Flask框架添加多个AI模型的API并进行交互

《基于Flask框架添加多个AI模型的API并进行交互》:本文主要介绍如何基于Flask框架开发AI模型API管理系统,允许用户添加、删除不同AI模型的API密钥,感兴趣的可以了解下... 目录1. 概述2. 后端代码说明2.1 依赖库导入2.2 应用初始化2.3 API 存储字典2.4 路由函数2.5 应

Java常用注解扩展对比举例详解

《Java常用注解扩展对比举例详解》:本文主要介绍Java常用注解扩展对比的相关资料,提供了丰富的代码示例,并总结了最佳实践建议,帮助开发者更好地理解和应用这些注解,需要的朋友可以参考下... 目录一、@Controller 与 @RestController 对比二、使用 @Data 与 不使用 @Dat

使用Python和python-pptx构建Markdown到PowerPoint转换器

《使用Python和python-pptx构建Markdown到PowerPoint转换器》在这篇博客中,我们将深入分析一个使用Python开发的应用程序,该程序可以将Markdown文件转换为Pow... 目录引言应用概述代码结构与分析1. 类定义与初始化2. 事件处理3. Markdown 处理4. 转

Spring组件初始化扩展点BeanPostProcessor的作用详解

《Spring组件初始化扩展点BeanPostProcessor的作用详解》本文通过实战案例和常见应用场景详细介绍了BeanPostProcessor的使用,并强调了其在Spring扩展中的重要性,感... 目录一、概述二、BeanPostProcessor的作用三、核心方法解析1、postProcessB

Java使用Mail构建邮件功能的完整指南

《Java使用Mail构建邮件功能的完整指南》JavaMailAPI是一个功能强大的工具,它可以帮助开发者轻松实现邮件的发送与接收功能,本文将介绍如何使用JavaMail发送和接收邮件,希望对大家有所... 目录1、简述2、主要特点3、发送样例3.1 发送纯文本邮件3.2 发送 html 邮件3.3 发送带

Python结合Flask框架构建一个简易的远程控制系统

《Python结合Flask框架构建一个简易的远程控制系统》这篇文章主要为大家详细介绍了如何使用Python与Flask框架构建一个简易的远程控制系统,能够远程执行操作命令(如关机、重启、锁屏等),还... 目录1.概述2.功能使用系统命令执行实时屏幕监控3. BUG修复过程1. Authorization