AIGC实战——多模态模型Flamingo

news2024/11/15 10:04:38

AIGC实战——多模态模型Flamingo

    • 0. 前言
    • 1. Flamingo 架构
    • 2. 视觉编码器
    • 3. Perceiver 重采样器
    • 4. 语言模型
    • 5. FIamingo 应用
    • 小结
    • 系列链接

0. 前言

我们已经学习了文本生成图像模型 DALL.E 2,在本节中,我们将探索另一种多模态模型 Flamingo,它可以根据给定文本和视觉数据流生成文本。FlamingoDeepMind2022 年提出的一类视觉语言模型 (Visual Language Model, VLM),它是预训练的纯视觉模型和纯语言模型之间的桥梁。在本节中,我们将介绍 Flamingo 模型的架构,并将其与所学习的文本生成图像模型进行比较。

1. Flamingo 架构

Flamingo 的整体架构如下图所示。接下来,我们将对该模型的核心组件,视觉编码器、Perceiver 重采样器和语言模式进行介绍,以了解 Flamingo 的核心思想。

Flamingo架构

2. 视觉编码器

Flamingo 模型与纯文本生成图像模型(如 DALL.E 2 )的第一个区别是,Flamingo 可以接受交错的文本和视觉数据的组合,视觉数据包括视频和图像。
视觉编码器的任务是将输入中的视觉数据转换为嵌入向量(类似于 CLIP 中的图像编码器)。Flamingo 中的视觉编码器是一个预训练的无归一化 ResNet (Normalizer-Free ResNet, NFNet),这是 CLIP 图像编码器和 Flamingo 视觉编码器之间的一个关键区别:前者使用 ViT 架构,而后者使用 ResNet 架构。
视觉编码器通过使用与 CLIP 相同的图像-文本对进行训练。训练完成后,权重被冻结,以使 Flamingo 模型的进一步训练不会影响视觉编码器的权重。
视觉编码器的输出是一个二维特征网格,然后压平成一个一维向量,传递给 Perceiver 重采样器。视频通过以每秒 1 帧的速率进行采样,将每一帧单独通过视觉编码器处理以产生多个特征网格;在展平特征并将结果串联成一个单一向量之前,添加学习到的时间编码。

3. Perceiver 重采样器

传统的编码器 Transformer (例如 BERT )随着输入序列长度的增加内存而呈二次函数增长,这就是为什么输入序列通常被限制在一定数量的符号上(例如 BERT 中使用 512 个)。然而,视觉编码器的输出是一个长度可变的向量(由于可变的输入图像分辨率和可变的视频帧数),因此输入可能非常长。
Perceiver 架构专门设计用于高效地处理较长的输入序列。它不会对整个输入序列进行自注意力操作,而是使用固定长度的潜向量,并仅对输入序列进行交叉注意力操作。具体而言,在 FlamingoPerceiver 重采样器中,键和值是输入序列和潜向量的连接,而查询仅是潜向量本身。下图显示了视频数据的视觉编码器和 Perceiver 重采样器的示意图。

在这里插入图片描述

Perceiver 重采样器的输出是一个固定长度的潜在向量。

4. 语言模型

语言模型由多个堆叠的块组成,采用解码器 Transformer,输出预测的文本延续。实际上,大部分语言模型来自于预训练 DeepMind 模型 ChinchillaChinchilla 相比同类模型要小得多(例如,Chinchilla 的参数为 70B,而 GPT-3 的参数为 170B),但在训练时使用了更多的符号进行训练。该模型在各种任务上表现优于较大的模型,需要在训练中优化大型模型和使用更多符号之间进行权衡。
Flamingo 的一个关键贡献是展示了如何使 Chinchilla 适用于与语言数据 (Y) 交替的额外视觉数据 (X)。我们首先了解一下语言和视觉输入如何结合起来产生语言模型的输入,如下图所示。
首先,文本经过处理,将视觉数据(例如图像)替换为 <image> 标签,并使用 <EOC> (块的结束)标签将文本分割成块。每个块最多包含一个图像,图像始终位于块的开头,即随后的文本只与该图像相关。序列的开头还用 <BOS> (句子开头)标签标记。
接下来,将序列进行分词,并为每个符号分配一个索引 (phi),该索引对应于先前图像的索引(或者如果在块中没有先前图像则为 0)。通过掩码,可以强制文本符号 (Y) 只与对应于其特定块的图像符号 (X) 进行交互。例如,在下图中,第一个块不包含图像,因此 Perceiver 重采样器的所有图像符号都被屏蔽。第二个块包含图像 1,因此这些符号允许与图像1的图像符号进行交互。同样,最后一个块包含图像 2,因此这些符号可以与图像 2 的图像符号进行交互。

语言模型

下图展示了这个掩码的交叉注意力组件如何适应语言模型的整体架构。
蓝色 LM 层组件是冻结的 Chinchilla,这些层在训练过程中不进行更新。紫色 GATED XATTN-DENSE 层作为 Flamingo 的一部分进行训练,并包括混合语言和视觉信息的掩码交叉注意力组件,以及随后的前馈(全连接)层。
该层是门控的,因为它将交叉注意力和前馈组件的输出通过两个不同的 tanh 门,这两个门都初始化为零,并且这两个门的初始值都为零。因此,在网络初始化时,GATED XATTN-DENSE 层没有任何贡献,语言信息仅仅是直接进行传递。alpha 门控参数由网络学习,随着训练的进行,逐渐融入视觉数据的信息。

GATED XATTN-DENSE

5. FIamingo 应用

Flamingo 具有广泛的应用场景,包括图像和视频理解、对话提示和视觉对话。在下图中,可以看到 Flamingo 的一些应用场景。
在每个应用中,Flamingo 都能够以真正的多模态方式混合文本和图像信息。第一个应用使用图像代替单词,并能够提供适当的书籍来完善提示。第二个应用使用来自视频的帧,Flamingo 能够正确地识别动作及其引发的后果。第三个应用演示了 Flamingo 如何以交互方式使用,通过对话或进一步提问提供额外信息。

Flamingo 应用

机器能够以如此广泛的模式和输入任务回答复杂问题,是人工智能的重要进展。通过量化 Flamingo 在一系列基准任务上的能力,可以证明 Flamingo 在许多基准上能够超越专门针对某个任务设计的模型的性能。这表明,多模态大模型能够快速适应各种任务,为开发通用人工智能体奠定了基础。

小结

Flamingo 是一种视觉语言模型,即它接受交替的文本和视觉数据流(图像和视频)作为输入,并能够以解码器 Transformer 的方式用额外的文本完善提示。其通过视觉编码器和 Perceiver 重采样器将视觉信息输入到 Transformer 中,该编码器能够将输入特征编码为少量的视觉符号。语言模型本身是 DeepMind Chinchilla 模型的扩展,经过调整以融入视觉信息。

系列链接

AIGC实战——生成模型简介
AIGC实战——深度学习 (Deep Learning, DL)
AIGC实战——卷积神经网络(Convolutional Neural Network, CNN)
AIGC实战——自编码器(Autoencoder)
AIGC实战——变分自编码器(Variational Autoencoder, VAE)
AIGC实战——使用变分自编码器生成面部图像
AIGC实战——生成对抗网络(Generative Adversarial Network, GAN)
AIGC实战——WGAN(Wasserstein GAN)
AIGC实战——条件生成对抗网络(Conditional Generative Adversarial Net, CGAN)
AIGC实战——自回归模型(Autoregressive Model)
AIGC实战——改进循环神经网络
AIGC实战——像素卷积神经网络(PixelCNN)
AIGC实战——归一化流模型(Normalizing Flow Model)
AIGC实战——能量模型(Energy-Based Model)
AIGC实战——扩散模型(Diffusion Model)
AIGC实战——GPT(Generative Pre-trained Transformer)
AIGC实战——Transformer模型
AIGC实战——ProGAN(Progressive Growing Generative Adversarial Network)
AIGC实战——StyleGAN(Style-Based Generative Adversarial Network)
AIGC实战——VQ-GAN(Vector Quantized Generative Adversarial Network)
AIGC实战——基于Transformer实现音乐生成
AIGC实战——MuseGAN详解与实现
AIGC实战——多模态模型DALL.E 2

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2139712.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

学习使用在windows系统上安装nodejs以及环境配置图文教程整理

学习使用在windows系统上安装nodejs以及环境配置图文教程整理 Node.js 介绍Node.js 安装1、Node.js下载2、Node.js安装3、Node.js测试4、Node.js安装目录5、Node.js环境变量配置6、配置镜像站&#xff0c;提升速度7、检查镜像站配置8、测试环境变量是否生效9、安装cnpm Node.js…

jwt报错,位置:找不到符号 parseClaimsJws(java.lang.String)

报错显示如图 报错信息为&#xff1a; E:\idea\project\tlias\src\main\java\org\itheima\tlias\utils\JwtUtils.java:36:17 java: 找不到符号 符号: 方法 parseClaimsJws(java.lang.String) 位置: 接口 io.jsonwebtoken.JwtParserBuilder 解决办法 项目使用的是最新…

p12docker 进入容器的命令和拷贝的命令

进入当前正在运行的容器 第一种方式是执行docker exec -it 8d57ffda7a29 /bin/bash这个时候可以根据docker容器的id进入到指定id的容器当中***(这个是比较常用的)*** 老师的笔记 第二种方式是docker attach 8d57ffda7a29 这里还是直接引用老师的笔记吧 从容器内部拷贝文…

HAL库学习梳理——GPIO

笔者跟着B站铁头山羊视频学习 STM32-HAL库 开发教程。有一说一&#xff0c;这个教程自诩为“最佳教程&#xff0c;没有之一~”&#xff0c;确实有点东西。像我这种看视频想睡觉的入门小白来说&#xff0c;感觉捡到宝了。下面对这些课程的应用做一个梳理。 省流&#xff1a; HA…

2-3.Android 存储之存储空间(私有空间、公共空间)

一、内部存储与外部存储 内部存储指位于设备的内部存储空间 外部存储指位于设备的外部存储介质&#xff0c;例如&#xff0c;SD 卡 简单理解&#xff0c;内部存储就是存储在手机自身&#xff0c;外部存储就是存储在手机可以外接的东西&#xff0c;好比电脑的硬盘和 U 盘 二、…

7-1 两个有序链表序列的交集

已知两个非降序链表序列S1与S2&#xff0c;设计函数构造出S1与S2的交集新链表S3。 输入格式: 输入分两行&#xff0c;分别在每行给出由若干个正整数构成的非降序序列&#xff0c;用−1表示序列的结尾&#xff08;−1不属于这个序列&#xff09;。数字用空格间隔。 输出格式:…

『功能项目』切换职业技能面板【49】

我们打开上一篇48切换职业面板的项目&#xff0c; 本章要做的事情是制作第二职业法师技能面板、第三职业面板并且完成切换 双击打开Canvas进入预制体空间 复制三个技能栏面板 重命名 设置第一技能栏 设置第二职业技能栏 设置第三职业技能栏 修改脚本&#xff1a;ChangeProfess…

TS.38-2

2.4.4 空闲模式 如果设备在接收DISPLAY TEXT STK主动命令时处于空闲模式&#xff0c;设备必须从这种待机模式切换到显示相关弹出窗口。一旦STK命令处理完成&#xff08;例如用户选择了“确定”按钮&#xff09;&#xff0c;设备必须返回到其初始状态。 2.4.5 锁屏 - 手动解锁…

Spark实操学习

Spark学习 一、Spark-Shell编程1. 配置python3(三台服务器都要配置)2. 开始Spark编程3. spark-shell工具 二、Java项目测试1. 新建项目2. Spark-java代码测试 三、Scala项目测试1. 安装scala2. 安装包管理器sbt3. 在编译工具中安装scala工具4. 新建项目5. spark-scala代码测试 …

1.MySQL在Centos 7环境安装

目录 MYSQL在Centos7环境安装MySQL环境配置清理环境检查安装包获取官方yum源安装mysql服务配置my.cnf设置开机启动 MYSQL在Centos7环境安装 MySQL环境配置 安装的时候&#xff0c;用户切换成root。初期练习&#xff0c;mysql不进行用户管理&#xff0c;全部使用root进行&#…

【数据结构】排序算法系列——堆排序(附源码+图解)

堆排序 堆排序基于一种常见的**[[二叉树]]结构**&#xff1a;堆 我们前面讲到选择排序&#xff0c;它在待排序的n个记录中选择一个最小的记录需要比较n一1次。本来这也可以理解&#xff0c;查找第一个数据需要比较这么多次是正常的&#xff0c;否则无法知道它是最小的记录。 …

THREE.js:网页上的3D世界构建者

THREE.js&#xff1a;网页上的3D世界构建者 前言 THREE.js 是一个强大的基于 JavaScript 的库&#xff0c;它使得在网页上创建和展示三维图形变得异常简单。 通过封装复杂的 WebGL 技术&#xff0c;THREE.js 提供了一套丰富的 API&#xff0c;让开发者能够轻松地构建出令人印…

Pytorch详解-Pytorch核心模块

Pytorch核心模块 一、Pytorch模块结构_pycache__Cincludelibautogradnnoptimutils 二、Lib\site-packages\torchvisiondatasetsmodelsopstransforms 三、核心数据结构——Tensor&#xff08;张量&#xff09;在深度学习中&#xff0c;时间序列数据为什么是三维张量&#xff1f;…

利用 FastAPI 和 Jinja2 模板引擎快速构建 Web 应用

FastAPI 是一个现代、快速&#xff08;高性能&#xff09;的 Web 框架&#xff0c;用于构建 API&#xff0c;它基于标准 Python 类型提示。FastAPI 支持异步编程&#xff0c;使得开发高性能的 Web 应用变得简单快捷。在本文中&#xff0c;我们将探讨如何使用 FastAPI 结合 Jinj…

单线程与2个线程的简易理解

前言 有个需要10个步骤完成的任务&#xff0c;假设每个步骤需要1秒 单线程耗费10秒完成任务 2根线程可能耗费6秒&#xff0c;也可能更少 单线程程序 单线程下&#xff0c;步骤按照次序顺序执行&#xff0c;共计耗费10秒 2个线程的程序 有步骤可以在同一时刻同时运行&…

Python酷库之旅-第三方库Pandas(117)

目录 一、用法精讲 516、pandas.DataFrame.add_suffix方法 516-1、语法 516-2、参数 516-3、功能 516-4、返回值 516-5、说明 516-6、用法 516-6-1、数据准备 516-6-2、代码示例 516-6-3、结果输出 517、pandas.DataFrame.align方法 517-1、语法 517-2、参数 51…

Linux操作系统如何添加新字体

在一个Linux操作系统及办公软件刚安装后&#xff0c;会发现缺少常用的“楷体_GB2312”和“仿宋_GB2312”字体。此时&#xff0c;只需要从其它电脑复制到或者从互联网上下载到这两个字体文件&#xff0c;然后导入到自己的电脑即可&#xff0c;再次打开办公软件就会看到这个字体已…

Playwright 与 Selenium对比

通过这篇关于 Playwright 与 Selenium 的文章&#xff0c;我们将更容易理解 Playwright 和 Selenium 之间的关键区别&#xff0c;并找出哪个工具可能更适合您的需求。 在自动化测试工具方面&#xff0c;Playwright 和 Selenium 都是软件测试人员使用的强大的 Web 自动化工具。它…

PointNet++改进策略 :模块改进 | EdgeConv | DGCNN, 动态图卷积在3d任务上应用

目录 介绍核心思想及其实现核心思想实现步骤 如何改进PointNet**局部几何结构的处理****动态图的引入****特征聚合的灵活性****全局和局部特征的结合** 论文题目&#xff1a;Dynamic Graph CNN for Learning on Point Clouds发布期刊&#xff1a;TOG作者单位&#xff1a;麻省理…

基于JDK1.8和Maven的GeoTools 28.X源码自主构建实践

目录 前言 一、GeoTools与Jdk的版本关系 1、GeoTools与Jdk版本 2、编译环境简介 二、使用Maven编译GeoTools28.X 1、GeoTools28.x 2、Maven的完整编译 3、构建时的问题 三、总结 前言 想要学习和掌握一个开源软件或者项目&#xff0c;源码是我们主要学习的内容。学习开…