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…...
告别沉浸式白屏!UniApp中iOS/Android底部安全区与顶部状态栏颜色自定义全攻略
告别沉浸式白屏!UniApp中iOS/Android底部安全区与顶部状态栏颜色自定义全攻略当开发者尝试在UniApp中实现沉浸式设计时,往往会遇到一个令人头疼的问题——默认的白色安全区和状态栏导致界面元素(如电池图标、信号强度)几乎不可见。…...
深圳实体门店有必要做GEO AI代运营吗
深圳实体门店有必要做GEO AI代运营吗一、开篇引言2026年深圳本地实体商业竞争进入白热化阶段,全城数百万家线下实体门店涵盖本地生活、家装工装、汽车服务、餐饮娱乐、教育培训等全品类,传统线下地推、门店自然客流、传统团购平台引流效果持续下滑&#…...
告别道路预测老套路:用ParkPredict+模型思路,解决停车场里的‘鬼探头’难题
破解泊车场景预测困局:ParkPredict模型的技术革新与实践停车场里的每一次转向、倒车和避让,都是对自动驾驶系统预测能力的极限挑战。与开放道路的规则明确不同,这里没有清晰的车道线指引,没有统一的行驶方向,只有随时可…...
别再死记硬背Payload了!我用XSS-Game靶场,带你拆解18种过滤规则背后的绕过逻辑
从XSS-Game靶场实战中掌握18种过滤规则的逆向思维在网络安全领域,跨站脚本攻击(XSS)始终是Web应用面临的主要威胁之一。许多开发者虽然了解XSS的基本概念,但当面对各种复杂的过滤规则时,往往不知如何系统分析并构造有效…...
第3篇:系统透视——信息部门如何构建“税务友好型”IT架构
本篇导读:如果你是信息总监或IT负责人,请通读全文,尤其是“系统合规设计的三必须”和“现场检查SOP”;如果你是财税人员,请重点阅读“研产供销全链条的系统对接要求”和“与IT部门的协作要点”;如果你是老板…...
解决Claude Code访问不稳定与Token不足的痛点
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 解决Claude Code访问不稳定与Token不足的痛点 许多开发者将Claude Code作为日常编程的得力助手,用于代码生成、问题调试…...
Hindsight API参考:REST接口完整文档
Hindsight API参考:REST接口完整文档 【免费下载链接】hindsight Hindsight: Agent Memory That Learns 项目地址: https://gitcode.com/GitHub_Trending/hindsight2/hindsight Hindsight是一个强大的Agent Memory系统,提供了全面的REST API接口&…...
别再只用递归了!用C语言栈实现非递归快速排序,内存效率提升实战
从递归到迭代:C语言栈实现非递归快速排序的工程实践 在嵌入式开发和大规模数据处理场景中,递归实现的快速排序常常面临栈溢出风险。当排序10万个元素的数组时,递归深度可能达到log₂100000≈17层,在仅有2KB栈空间的STM32F103上极易…...
构建智能音乐档案:SoundCloud Downloader 的技术架构与实现哲学
构建智能音乐档案:SoundCloud Downloader 的技术架构与实现哲学 【免费下载链接】scdl Soundcloud Music Downloader 项目地址: https://gitcode.com/gh_mirrors/sc/scdl 在流媒体音乐主导的时代,音乐爱好者面临着一种矛盾:我们享受着…...
XZ6128A工作电压5-100V 输出电流5A 升压型大功率LED灯恒流驱动控制芯片
概述 XZ6128A是一款高效率、高精度的升压型大功率LED灯恒流驱动控制芯片。 XZ6128A内置高精度误差放大器,固定关断时间控制电路,恒流驱动电路等,特别适合大功率、多个高亮度LED灯串的恒流驱动。 XZ6128A采用固定关断时间的控制方式࿰…...
