Flamingo: a Visual Language Model for Few-Shot Learning
发表时间:NeurIPS 2022
论文链接:https://proceedings.neurips.cc/paper_files/paper/2022/file/960a172bc7fbf0177ccccbb411a7d800-Paper-Conference.pdf
作者单位:DeepMind
Motivation:仅使用少量注释示例可以快速适应新任务的构建模型是多模态机器学习研究的一个开放挑战。CLIP 的出现使得多模态模型有了 zero-shot 的能力,可以说是多模态领域里程碑式的工作。然而,CLIP 终归是一个表征模型,其能支持的任务也只能是分类、检索这一类任务。
解决方法:本文提出 Flamingo,Flamingo 的结构创新的优势有三:一是可以桥接预训练好的视觉模型和语言模型;二是可以处理任意交错的图文对数据;三是可以同时以图像和视频数据作为输入。有了这些优势,Flamingo 就能在规模巨大的互联网图文交错数据上进行训练。从而,Flamingo 结合 prompt 实现了多模态领域的 few-shot learning (in-context learning) 能力。
实现方式:Flamingo 是一类视觉语言模型 (VLM),它将与文本交错的输入视觉数据作为输入,并生成自由形式的文本作为输出。同时,我们特别保留了大量基准,这些基准尚未用于验证该方法的任何设计决策或超参数。我们使用这些来估计无偏的few-shot性能。
总体结构:Flamingo的框架图,主要由视觉编码器(vision encoder)、感知重采样器(perceiver resampler)、LLM和交织在LLM中的门控交叉注意力层(gated xattn-dense)组成。
GATED XATTN-DENSE layers:为了将 LM 可以接受视觉的输入,我们在现有的预训练和冻结的 LM 层之间插入新的交叉注意力层。这些层中的键和值是从视觉特征中获得的,而查询来自语言输入。紧随其后的是密集的前馈层。这些层是门控的,以便 LM 在初始化时保持完整,以提高稳定性和性能。 控注意力单元的设计,门控单元由交叉注意力机制和门控结构、FFW交替组成,其中交叉注意力的k和v都是感知重采样器的输出,而q则是文本输入。为了保证在训练初始阶段模型和原先的LLM不至于偏差太远,作者采用了门控机制,具体来说就是将新层的输出乘上一个可学习的tanh(a),将LLM的原先输入与其加和,只需要在初始化时候将a=0即可确保初始化时候和原先LLM无太大偏差。作者对在训练过程中每一LM层的a变化进行了可视化,可发现两个规律,第一随着层数加深,门控值则更大,第二随着训练过程,门控值也逐渐变大,这个倒是符合我们的认识,浅层提取基础特征而深层则更加富有语义信息,因此在深层中的门控更大有利于引入更多的视觉语义信息。
Vision Encoder:从像素到特征。视觉编码器采用NFNet(NormalizerFree ResNet),作者先在图文对数据上采用CLIP的方式对NFNet进行预训练,随后进行参数固定。如果视觉端输入是视频,则按照1 fps进行采样后将N帧进行视觉特征提取(若是图片输入,则N=1),注意到此时position embedding按照帧粒度组织,即是同一帧的不同patch共用一个position embedding以建模帧间序列信息。尔后对多帧的特征进行展开、拼接,作为transformer的k和v,而采用一个可学习的query向量作为transformer的q输入。感知重采样机制的一个好处就是,可以将变长的视频输入转变为定长的输入,此处定长的输入长度为64。
Perceiver Resampler: 从不同大小的大特征图到很少的视觉标记。我们学习了一组预定义的潜在输入查询,这些查询被馈送到 Transformer 并交叉关注视觉特征(learned latent queries的数量等于Perceiver Resampler输出的token的数量)。
Interleaving new GATED XATTN-DENSE layers within a frozen pretrained LM:我们冻结预训练的 LM 块,并插入门控交叉注意力密集块,插入的GATED XATTN-DENSE layers有复杂度和效果上的权衡,加太多会增大模型复杂度,因此,add a GATED XATTN-DENSE every fourth layer。
实验:
数据集:在本工作中,作者不仅仅构建了图文对数据(LTIP),而且还构建了视频对数据(VTP)和图文交织数据。图文交织数据(M3W: Interleaved image and text dataset)指的是图片和文本进行多次交织组成的数据,图片会穿插在文本上下文中,而不是简单的图文一对一的关系数据。作者通过解析大概4.3千万个网页的DOM,构建了图文交织数据,如Fig 4.所示,图片穿插在了文章上下文中,而上文和下文可能和该图片都由语义关联。
-
M3W: Interleaved image and text dataset:Flamingo 模型的few-shot 能力依赖于对交错文本和图像数据进行训练。为此,我们收集了多模态MassiveWeb(M3W)数据集。
Interleaved visual data and text support.
Flamingo 的训练还有一个关键点,就是如何处理图文交错数据。首先每张图片的特征用 vision encoder + resampler 处理得到固定长度的 token 序列(前面提到的learned latent queries的数量等于Perceiver Resampler输出的token的数量),在文本序列中用 <image>
这个 tag 来标记出图像的位置。值得一提的是,每个文本 token 只会 attend 到之前最近的一张图片,而不是所有之前的图片,之前的其他图片会被 mask 掉。
-
Pairs of image/video and text. 对于我们的图像和文本对,我们首先利用ALIGN[50]数据集,该数据集由180亿个图像和Alt-text配对组成。
消融实验:
-
是否采用全量数据? 特别是对M3W图文交织数据的有无进行了消融,我们发现图文交织数据能提供大约17%的提升。
-
是否采用门控机制?实验证明采用门控机制能带来约8%的提升。
-
采用交叉注意力层的频率?实验证明每一层都引入门控交叉注意力层效果是最好的,但是增大复杂度。
-
是否采用感知重采样单元引入视觉信息?实验证明该设计能带来约4%的提升。
-
视觉编码器的选择同样对结果影响巨大:Our NFNet-F6 has a +5.8% advantage over the CLIP ViT-L/14 and +8.0% over a smaller NFNet-F0 encoder。
-
是否固定LLM的参数?实验证明固定LLM反而能带来最好的效果,而让LLM随着训练一起进行(会采用massive text数据集一起训练)反而效果会差8%左右,笔者估计是训练过程需要平衡多个目标导致的,如何让LLM也能训练起来可能也是一个值得关注的点。
结论:
-
模型越大,few-shot性能越好。
-
虽然不是我们工作的主要焦点,但我们验证了当给定更多数据时,Flamingo 模型可以通过微调它们的权重来适应任务。
-
Freezing LLM components prevents catastrophic forgetting. 通过实验证明冻结LM会缓解灾难性遗忘。
-
我们的结果表明,将预训练的大型语言模型与强大的视觉模型连接起来是通用视觉理解的重要一步。
相关文章:

Flamingo: a Visual Language Model for Few-Shot Learning
发表时间:NeurIPS 2022 论文链接:https://proceedings.neurips.cc/paper_files/paper/2022/file/960a172bc7fbf0177ccccbb411a7d800-Paper-Conference.pdf 作者单位:DeepMind Motivation:仅使用少量注释示例可以快速适应新任务…...
flume性能调优
作者:南墨 1.Source性能调优 1.1 Spooldir Source 使用Spooldir Source采集日志数据时,若每行日志数据<100bp,可以通过将多行合并传输来提升传输性能 建议合并时根据数据长度来确定多少行合并为一个单位进行传输,合并后的长…...
mysql 字符串转数组
在 MySQL 中,可以使用内置的字符串函数 SUBSTRING_INDEX() 和 REPLACE() 来实现将字符串转换为数组。 首先,使用 REPLACE() 函数将字符串中的分隔符替换为空格,然后使用 SUBSTRING_INDEX() 函数将字符串按空格分割成多个子字符串。最后&…...

UE基础 —— 术语
目录 Project Blueprint Class Object Actor Casting Component Pawn Character Player Controller AI Controller Player State Game Mode Game State Brush Volume Level World Project 项目(Project)包含游戏的所有内容,…...

kubernets学习笔记——使用kubeadm构建kubernets集群及排错
使用kubeadm构建kubernets集群 一、准备工作1、repo源配置:阿里巴巴开源镜像源2、更新软件包并安装必要的系统工具3、同步时间4、禁用selinux5、禁用交换分区swap6、关闭防火墙 二、安装docker-ce、docker、cri-docker1、安装docker-ce2、开启内核转发,转…...

简述MYSQL聚簇索引、二级索引、索引下推
一丶聚簇索引 InnoDB的索引分为两种: 聚簇索引:一般创建表时的主键就会被mysql作为聚簇索引,如果没有主键则选择非空唯一索引作为聚簇索引,都没有则隐式创建一个索引作为聚簇索引;辅助索引:也就是非聚簇索…...

电脑开机后出现bootmgr is missing原因及解决方法
最近有网友问我为什么我电脑开机后出现bootmgr is missing,这个提示意思是:意思是启动管理器丢失,说明bootmgr损坏或者丢失,系统无法读取到这个必要的启动信息导致无法启动。原因有很多,比如我们采用的是uefi引导,而第…...

2024 年 7 月公链行业研报:市场波动中 Solana 表现抢眼,Layer 2 竞争白热化
作者:Stella L (stellafootprint.network) 数据来源:Footprint Analytics 公链 Research 页面 7 月份,加密货币市场表现活跃,波动幅度较大,这一现象映射了全球金融市场的整体趋势。现货以太坊 ETP 在美国的上市&…...
Python查缺補漏
一、 json.load(s)与json.dump(s)区别 json.loads()将str类型的数据转换为dict类型 json.dumps()将dict类型的数据转成str json.load()从json文件中读取数据 json.dump()将数据以json的数据类型写入文件中 二、json内部要使用双引号 data """{ "fruit&qu…...

c++的类和对象(中):默认成员函数与运算符重载(重难点!!)
前言 Hello, 小伙伴们,我们今天继续c的学习,我们上期有介绍到c的部分特性,以及一些区别于c语言的地方,今天我们将继续深入了解c的类和对象,探索c的奥秘。 好,废话不多说,开始我们今天的学习。…...
Android .kl按键布局文件
1.介绍 一个硬件按键的处理流程大致为:当用户按下或释放一个键时,键盘硬件会生成一个扫描码scan code,然后操作系统读取这个scan code,并将scan code扫描码映射到虚拟键码key code,最后操作系统根据映射的keycode生成…...

Java每日一练_模拟面试题6(JVM的GC过程)
一、JVM虚拟机组成 JVM五大内存区域:程序计数器,Java虚拟机栈,本地方法栈,java堆,方法区。 堆被划分为两个区域:年轻代(Young)、老年代(Tenured)。年轻代又被划分为三个区域:Eden、From Surviv…...

数据防泄密软件推荐|(6大数据防泄密软件推荐!)
很多朋友在后台私信,什么是数据防泄密软件,有哪些数据防泄密软件推荐。 今天小编将从定义出发,深入浅出地介绍这一技术的工作原理、应用场景以及实现方式。 一、什么是文档透明加密? 文档透明加密是一种在用户无感知的情况下对文…...
Codeforces 874 div3 A-G
A. Musical Puzzle 分析 每两个相邻的字母都要录制一段,开个set记录一下,然后输出set的大小 C代码: #include<iostream> #include<set> using namespace std; void solve(){int n;string s;cin>>n>>s;set<strin…...

暑期数据结构 空间复杂度
3.空间复杂度 空间复杂度也是一个数学表达式,是对一个算法在运行过程中临时占用存储空间大小的量度。 空间复杂度不是程序占用了多少bytes的空间,因为这个也没太大意义,所以空间复杂度算的是变量的个数。空间复杂度计算规则基本跟…...

【Android Studio】图标一键生成 Image Asset Studio(一键各机型适配图标生成工具-告别一个一个替换)
文章目录 方法一:原始替换方法二:Image Asset Studio 方法一:原始替换 https://blog.csdn.net/xzzteach/article/details/140821856 方法二:Image Asset Studio 自动替换所有机型图标...

C++ | Leetcode C++题解之第332题重新安排行程
题目: 题解: class Solution { public:unordered_map<string, priority_queue<string, vector<string>, std::greater<string>>> vec;vector<string> stk;void dfs(const string& curr) {while (vec.count(curr) &am…...
使用Python实现简单的网页爬虫:抓取网站标题
使用Python实现简单的网页爬虫:抓取网站标题 在当今数据驱动的时代,网络爬虫(Web Crawler)成为了获取和分析网络数据的重要工具。无论是数据科学、市场分析还是学术研究,爬虫都能帮助我们从互联网上提取有价值的信息。本文将介绍如何使用Python实现一个简单的爬虫,抓取某…...

视觉SLAM ch3—三维空间的刚体运动
如果对于某些线性代数的知识不太牢固,可以看一下我的另一篇博客,写了一些基础知识并推荐了一些视频。 旋转矩阵 单元所需的线代基础知识https://blog.csdn.net/Johaden/article/details/141023668 一、旋转矩阵 1.点、向量、坐标系 在数学中&…...

计算机毕业设计选题推荐-二手图书交易系统-Java/Python项目实战
✨作者主页:IT毕设梦工厂✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…...
[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?
🧠 智能合约中的数据是如何在区块链中保持一致的? 为什么所有区块链节点都能得出相同结果?合约调用这么复杂,状态真能保持一致吗?本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?
编辑:陈萍萍的公主一点人工一点智能 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战,在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...
三维GIS开发cesium智慧地铁教程(5)Cesium相机控制
一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点: 路径验证:确保相对路径.…...

shell脚本--常见案例
1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件: 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...

关于nvm与node.js
1 安装nvm 安装过程中手动修改 nvm的安装路径, 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解,但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后,通常在该文件中会出现以下配置&…...

基于当前项目通过npm包形式暴露公共组件
1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹,并新增内容 3.创建package文件夹...
unix/linux,sudo,其发展历程详细时间线、由来、历史背景
sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...
Spring AI 入门:Java 开发者的生成式 AI 实践之路
一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...
Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换
目录 关键点 技术实现1 技术实现2 摘要: 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式(自动驾驶、人工驾驶、远程驾驶、主动安全),并通过实时消息推送更新车…...
LangFlow技术架构分析
🔧 LangFlow 的可视化技术栈 前端节点编辑器 底层框架:基于 (一个现代化的 React 节点绘图库) 功能: 拖拽式构建 LangGraph 状态机 实时连线定义节点依赖关系 可视化调试循环和分支逻辑 与 LangGraph 的深…...