AIGC实战——多模态模型Flamingo

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.rhkb.cn/news/424859.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Docker上安装mysql

获取 MySQL 镜像 获取镜像。使用以下命令来拉取镜像&#xff1a; 1docker pull mysql:latest 这里拉取的是最新版本的 MySQL 镜像。你也可以指定特定版本&#xff0c;例如&#xff1a; 1docker pull mysql:8.0 运行 MySQL 容器 运行 MySQL 容器时&#xff0c;你需要指定一些…

redis基本数据结构-hash

这里写自定义目录标题 1. redis的数据结构hash1.1 Hash 数据结构的特点1.2 常见命令1.3 适用示例 2. 常见业务场景2.1 用户信息存储2.1.1 场景2.1.2 优势2.1.3 解决方案2.1.4 代码实现 2.2 购物车管理2.2.1 背景2.2.2 优势2.2.3 解决方案2.2.4 代码实现 3. 注意事项&#xff1a…

USB的电气特性

文章目录 一、USB的三种速率及状态切换图1. **附加&#xff08;Attached&#xff09;**2. **供电&#xff08;Powered&#xff09;**3. **复位&#xff08;Reset&#xff09;**4. **地址设置&#xff08;Addressed&#xff09;**5. **配置&#xff08;Configured&#xff09;**…

llama网络结构及源码

目录 模型初始化 config lm_head transformer wte h rms_1/rms_2 attn c_attn c_proj 线性层mlp ln_f rope_cache mask_cache kv_caches tokenizer tokenizer初始化 tokennizer.encoder 位置编码和mask 确定最大文本长度 建立rope_cache 建立mask_cache …

C#/.NET/.NET Core技术前沿周刊 | 第 5 期(2024年9.9-9.15)

前言 C#/.NET/.NET Core技术前沿周刊&#xff0c;你的每周技术指南针&#xff01;记录、追踪C#/.NET/.NET Core领域、生态的每周最新、最实用、最有价值的技术文章、社区动态、优质项目和学习资源等。让你时刻站在技术前沿&#xff0c;助力技术成长与视野拓宽。 欢迎投稿&…

ICM20948 DMP代码详解(23)

接前一篇文章&#xff1a;ICM20948 DMP代码详解&#xff08;22&#xff09; 上一回解析完了inv_icm20948_wakeup_mems函数&#xff0c;本回回到inv_icm20948_initialize_lower_driver函数中&#xff0c;继续往下解析。为了便于理解和回顾&#xff0c;再次贴出inv_icm20948_init…

闯关leetcode——26. Remove Duplicates from Sorted Array

大纲 题目地址内容 解题代码地址 题目 地址 https://leetcode.com/problems/remove-duplicates-from-sorted-array/description/ 内容 Given an integer array nums sorted in non-decreasing order, remove the duplicates in-place such that each unique element appear…

Framebuffer应用编程

目录 前言 LCD操作原理 涉及的 API 函数 open函数 ioctl 函数 mmap 函数 Framebuffer程序分析 源码 1.打开设备 2.获取LCD参数 3.映射Framebuffer 4.描点函数 5.随便画几个点 上机实验 前言 本文介绍LCD的操作原理和涉及到的API函数&#xff0c;分析Framebuffer…

Python青少年简明教程:tkinter库入门

Python青少年简明教程&#xff1a;tkinter库入门 tkinter是Python的标准GUI&#xff08;图形用户界面&#xff09;库。它提供了一种快速而简单的方法来创建GUI应用程序。tkinter是Python自带的&#xff0c;无需额外安装&#xff0c;随 Python 安装包一起提供。 在Python 3.x中…

rtems 5.3 qemu realview_pbx_a9 环境搭建:生成 rtems arm 工具链

前言 rtems 是一款比较优秀的 RTOS&#xff0c;官方网址 https://www.rtems.org/ 当前 rtems 最新发布的版本&#xff1a;rtems-5.3 版本&#xff0c; 下载地址 https://ftp.rtems.org/pub/rtems/releases/5/5.3/ rtems 支持的 平台也是比较多的&#xff0c;当前支持 STM32F4…

调制是什么,为什么

一、什么是调制、解调&#xff1f; 调制&#xff1a;将信息承载到满足信道要求的高频信号上的过程就是调制。 解调&#xff1a;解调是调制的逆过程&#xff0c;将有用的信息从高频信号中恢复出来的过程就是解调。 二、为什么需要调制&#xff1f; 通信是为了实现“信息”的传…

【自然语言处理】实验三:新冠病毒的FAQ问答系统

目录 前言 1.新建data_process.py 1.1导入包并定义功能模块1用来读取问题和答案FAQ的文件 1.2功能模块2&#xff1a;进行问题/问题列表处理&#xff08;正则化&#xff0c;分词&#xff09; 1.3功能模块3&#xff1a;处理输入的问题 1.4功能模块4&#xff1a;计算输入问题与问题…

基于双向RRT算法的三维空间最优路线规划matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 4.1 单向RRT算法 4.2 双向RRT算法 5.完整程序 1.程序功能描述 基于双向RRT&#xff08;Randomly Exploring Random Trees, 随机探索随机树&#xff09;算法的三维空间最优路径规划是一种解…

Java | Leetcode Java题解之第406题根据身高重建队列

题目&#xff1a; 题解&#xff1a; class Solution {public int[][] reconstructQueue(int[][] people) {Arrays.sort(people, new Comparator<int[]>() {public int compare(int[] person1, int[] person2) {if (person1[0] ! person2[0]) {return person2[0] - perso…

【目标检测数据集】锯子数据集1107张VOC+YOLO格式

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;1107 标注数量(xml文件个数)&#xff1a;1107 标注数量(txt文件个数)&#xff1a;1107 标注…

什么是java的spi?

Java SPI&#xff08;Service Provider Interface&#xff09;是一种提供服务发现机制的设计模式&#xff0c;允许在运行时动态地发现、加载和替换服务的实现。SPI机制的核心思想是&#xff1a;通过接口定义服务&#xff0c;并且使用外部的实现类来提供该服务的具体功能。 目录…

Github 2024-09-16 开源项目周报 Top14

根据Github Trendings的统计,本周(2024-09-16统计)共有14个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目4TypeScript项目2Go项目2JavaScript项目2Shell项目2Rust项目2C++项目2Jupyter Notebook项目1C#项目1React: 用于构建用户界面的JavaS…

[数据集][目标检测]智慧交通铁轨裂缝检测数据集VOC+YOLO格式4类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;2709 标注数量(xml文件个数)&#xff1a;2709 标注数量(txt文件个数)&#xff1a;2709 标注…

Java开发与实现教学管理系统动态网站

博主介绍&#xff1a;专注于Java .net php phython 小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设&#xff0c;从业十五余年开发设计教学工作 ☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不然下次找不到哟 我的博客空间发布了1000毕设题目 方便大家学习使用 感兴趣的可以…

量化交易backtrader实践(一)_数据获取篇(3)_爬取数据

这一节实践其实是在上一节之前进行的&#xff0c;背景原因是因为tushare.pro的积分不够高&#xff0c;当时还没有接触到使用akshare等其他接口&#xff0c;因此对于全股票列表用的是去网页上爬的方式获得的&#xff0c;也就借此机会&#xff0c;再复习了一遍爬虫的相关知识。 …