多模态学习

news2024/11/25 12:11:04

什么是多模态学习?

模态

  • 模态是指一些表达或感知事物的方式,每一种信息的来源或者形式,都可以称为一种模态
    • 视频
    • 图像
    • 文本
    • 音频

多模态

  • 多模态即是从多个模态表达或感知事物
    在这里插入图片描述

多模态学习

  • 从多种模态的数据中学习并且提升自身的算法
    在这里插入图片描述

多模态学习的典型任务

  • Language-Audio
    • Text-to-Speech Synthesis
      • 给定文本,生成一段对应的声音
    • Audio Captioning
      • 给定一段语音,生成一句话总结并描述主要内容(不是语音识别)
  • Vision-Audio
    • Audio-Visual Speech Recognition
      • 给定某人的视频及语音进行语音识别
    • Video Sound Separation
      • 给定视频和声音信号(包含多个声源),进行声源定位与分离
    • Image Generation from Audio
      • 给定声音,生成与其相关的图像
    • Speech-conditioned Face generation
      • 给定一段话,生成说话人的视频
    • Audio-Driven 3D Facial Animation
      • 给定一段话与3D人脸模版,生成说话的人脸3D动画
  • Vision-Language
    • Image/Video-Text Retrieval
      • 图像/视频<–>文本的相互检索
    • Image/Video Captioning
      • 给定一个图像/视频,生成文本描述其主要内容
    • Visual Question Answering
      • 给定一个图像/视频与一个问题,预测答案
    • Image/Video Generation from Text
      • 给定文本,生成相应的图像或视频
    • Multimodal Machine Translation
      • 给定文本,生成相应的图像或视频
    • Multimodal Dialog
      • 给定图像,历史对话,以及与图像相关的问题,预测该问题的回答
  • 定位相关的任务
    • Visual Grounding
      • 给定一个图像与一段文本,定位到文本所描述的物体
    • Temporal Language Localization
      • 给定一个视频和一段文本,定位到文本所描述的动作(预测起止时间)
    • Video Summarization from text query
      • 给定一段话(query)与一个视频,根据这段话的内容进行视频摘要,预测视频关键帧(或关键片段)组合为一个短的摘要视频
    • Video Segmentation from Natural Language Query
      • 给定一段话(query)与一个视频,分割得到query所指示的物体
    • Video-Language Inference
      • 给定视频(包括视频的一些字幕信息),还有一段文本假设(hypothesis),判断二者是否存在语义蕴含(二分类),即判断视频内容是否包含这段文本的语义
    • Object Tracking from Natural Language Query
      • 给定一段视频和一些文本,追踪视频中文本所描述的对象
    • Language-guided Image/Video Editing
      • 一句话自动修图。给定一段指令(文本),自动进行图像/视频的编辑

Transformers:CV和NLP的大一统模型

  • ViT
    在这里插入图片描述

  • SwinT

多模态学习的模型

  • CLIP

    • 简介

        1. CLIP的英文全称是Contrastive Language-Image Pre-training,即一种基于对比文本-图像对的预训练方法或者模型
        1. CLIP是一种基于对比学习的多模态模型,训练数据是文本-图像对:一张图像和它对应的文本描述,这里希望通过对比学习,模型能够学习到文本-图像对的匹配关系
        1. CLIP包括两个模型:Text Encoder和Image Encoder
        • 1)Text Encoder用来提取文本的特征,可以采用NLP中常用的text transformer模型
        • 2)Image Encoder用来提取图像的特征,可以采用常用CNN模型或者vision transformer
    • Contrastive Learning
      在这里插入图片描述

    • 模型结构
      在这里插入图片描述
      1. N个图片和N个文本的编码
      2. 图片和文本进行对比学习(Contrastive Learning)
      3. 正样本:匹配的图片和文本就是一对正样本(对角线上的),数量为N
      4. 负样本:不匹配的图片和文本(对角线外的),数量为N^2-N
      5. 训练目标:最大化正样本的余弦相似度,并最小化负样本的余弦相似度

    • 训练数据

      • WebImageText,共4个亿的文本-图像对的巨无霸数据集。
        https://arxiv.org/pdf/2110.04222.pdf
    • zero-shot分类
      在这里插入图片描述在这里插入图片描述
      传统分类模型缺点:
      1)训练类别个数固定,如训练1000个类别,预测就是这1000个类别的概率值,无法拓展
      2)新增类别需要重新训练模型
      CLIP分类:利用多模态特性为具体的任务构建了动态的分类器,可通过Text Encoder任意增加分类的标签

    • 总结

      • 优点
          1. 使用text encoder和image encoder进行相似度匹配,使得文本和图像模态得以融合
          1. 通过计算text encoder和image encoder的余弦相似度,可实现zero-shot的图片分类
      • 不足
          1. zero-shot在某些数据集上表现较差,如细粒度分类,抽象任务等
          1. 在自然分布漂移上表现鲁棒,但是依然存在域外泛化问题,即如果测试数据集的分布和训练集相差较大,CLIP会表现较差,如MNIST只有88%的准确率 (其实大部分模型都会存在)
          1. 没有解决深度学习的数据效率低下难题,训练CLIP需要大量的数据(4亿对图像-文本对)
  • DALL-E

    • 简介

      1. DALL-E是OpenAI推出的多模态预训练模型,该模型参数量120亿,在2.5亿对图像-文本对上进行训练
      2. DALL-E是一个两阶段模型
        • Stage1:训练一个变分自编码器(Discrete Variance Auto-Encoder,dVAE),用于生成图像tokens(用embedding更合适?)
        • Stage2:训练一个文本和图像的自回归解码器,用于预测生成图片tokens
    • 模型框架

      • 训练阶段
        在这里插入图片描述
        在这里插入图片描述
      1. Stage1 Loss Functiuon: loss=||x-x’||
      2. Stage1 Image Encoding Tokens代表图片被压缩的表示(Latent Representation)
    • 推理阶段
      在这里插入图片描述

    • demo

      • 文本提示在这里插入图片描述
        文本提示:一个专业高质量的颈鹿乌龟嵌合体插画。模仿乌龟的长颈鹿。乌龟做的长颈鹿
      • 文本+图像提示
        在这里插入图片描述
        文本+图像提示:参照上面的猫在下面生成草图
    • 总结

      • 优点:
          1. 多模态生成能力:DALL-E可以将文本描述转化为对应的图像,实现了文本到图像的多模态生成。它能够生成高质量、多样化且创意性的图像,甚至可以生成以前从未见过的新颖图像
          1. 创造力和想象力:DALL-E模型展现了惊人的创造力和想象力。它可以将抽象的文本描述转化为具体的图像,同时保持图像的相关性和连贯性。这使得它在创意设计、虚拟场景生成等领域具有广泛的应用潜力
      • 不足
        1. 训练数据的限制:DALL-E的训练过程依赖于大规模的图像和文本数据集
        2. 语义理解的限制:尽管DALL-E能够生成与文本描述相匹配的图像,但它对于理解文本的深层语义仍然存在限制。在某些复杂的场景或抽象概念的描述中,模型可能会产生与预期不一致的结果
  • BLIP2

    • 简介

      • BLIP2是一个图像到文本的模型
    • 模型框架

      • Stage1 在这里插入图片描述
        • 第一阶段从冻结图像编码器引导视觉语言表示学习,即让Q-Former学习和文本更相关的视觉特征(视觉-文本特征对齐)
        • 固定视觉预训练模型,通过三个任务来训练一个 Q-Former 将图像输入中的语义编码到一个和文本特征空间相似的特征空间中。具体来讲,模型基于 K 个可学习的 query 嵌入和 cross-attention 机制从图像中获取特征,三个任务包括:
            1. 图文匹配:对输入的(图像,文本)二元组分类,判断其是否相关
            1. 基于图像的文本生成:给定图像输入,生成对应的文本描述
            1. 图文对比学习:拉近图像特征和对应文本特征的距离,增大其和无关文本特征的距离
      • Stage2: 在这里插入图片描述
        • 第二阶段将视觉从冻结的语言模型引导到语言生成学习,即使用LLM来解析Q-Former输出的视觉特征
        • 针对两类不同的LLM设计了不同的任务:
            1. Decoder类型的LLM(如OPT):以Query做输入,文本做目标
            1. Encoder-Decoder类型的LLM(如FlanT5):以Query和一句话的前半段做输入,以后半段做目标
    • demo
      在这里插入图片描述
      在这里插入图片描述

    • 总结

      • 优点
          1. 将 Q-Former 的输出通过一个全联接网络输入给固定的大语言模型,通过【基于图像的文本生成】任务将与文本特征进行了初步对齐的视觉特征进一步编码为大语言模型可以理解的输入
          1. 通过固定大语言模型的参数,BLIP-2 保留了大语言模型的 Instruction Following 能力
      • 不足:
        • 模型缺乏多模态的 In-Context-Learning 能力
          在这里插入图片描述
        • 例子:给出一张树的照片,并告诉模型有两个树,给出一盘橙子,告诉模型有三个橙子,再给出一张小鸟的图片,问图片中小鸟的数量?
        • 原因:训练数据只是一些简单(图像,文本)对
      • 没修改大语言模型权重,保留了大语言模型的一些缺点,比如可能输出不准确的信息 在这里插入图片描述

多模态学习面临的难点和挑战

  • 数据获取和标注
    • 获取多模态数据集并进行准确的标注是一个挑战。不同模态的数据可能具有不同的特点和表示方式,需要耗费大量的时间和人力进行数据采集和标注
  • 特征表示学习
    • 如何以利用多种模态的互补性和冗余性的方式表示和总结多模态数据 在这里插入图片描述
  • 联合表征
    • 如何有效地融合不同模态的信息是一个关键问题。模态之间的关联性和权重分配需要仔细设计和建模 在这里插入图片描述
  • 模态间的对齐和匹配
    • 多模态学习需要处理不同模态之间的对齐和匹配问题,以便进行有效的信息融合和联合学习。模态之间的对齐可以是空间上的对齐(如图像和文本的对齐)或语义上的对齐(如情感的对齐) -
      在这里插入图片描述

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

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

相关文章

【k8s 系列】k8s 学习三,docker回顾,k8s 起航

k8s 逐渐已经作为一个程序员不得不学的技术&#xff0c;尤其是做云原生的兄弟们&#xff0c;若你会&#xff0c;那么还是挺难的 学习 k8s &#xff0c;实践尤为重要&#xff0c;如果身边有自己公司就是做云的&#xff0c;那么云服务器倒是不用担心&#xff0c;若不是&#xff…

IMX6ULL PHY 芯片驱动

前言 之前使用 IMX6ULL 开发板时遇到过 nfs 挂载不上的问题&#xff0c;当时是通过更换官方新版 kernel 解决的&#xff0c;参考《挂载 nfs 文件系统》。 今天&#xff0c;使用自己编译的 kernel 又遇到了该问题&#xff0c;第二次遇到了&#xff0c;该正面解决了。 NFS 挂载…

18JS09——作用域

作用域 一、作用域1、作用域 二、变量的作用域1、变量作用域的分类2、全局变量3、局部变量4、全局变量和局部变量区别 三、作用域链 目标&#xff1a; 1、作用域 2、变量的作用域 3、作用域链 一、作用域 1、作用域 通常来说&#xff0c;一段程序代码中所用到的名字并不总是有…

python基础----06-----文件读写追加操作

一 文件编码概念 思考&#xff1a;计算机只能识别: 0和1&#xff0c;那么我们丰富的文本文件是如何被计算机识别&#xff0c;并存储在硬盘中呢? 答案&#xff1a;使用编码技术(密码本)将内容翻译成0和1存入。 常见编码有UTF8&#xff0c;gbk等等。不同的编码&#xff0c;将内…

vulnhub靶场之DC-3渗透教程(Joomla CMS)

目录 0x01靶机概述 0x02靶场环境搭建 0x03主机发现 0x04靶场渗透过程 ​ 0x05靶机提权 0x06渗透实验总结 0x01靶机概述 靶机基本信息&#xff1a; 靶机下载链接https://download.vulnhub.com/dc/DC-3-2.zip作者DCAU发布日期2020年4月25日难度中等 0x02靶场环…

【Flink】DataStream API使用之输出算子(Sink)

输出算子&#xff08;Sink&#xff09; Flink作为数据处理框架&#xff0c;最终还是需要把计算处理的结果写入到外部存储&#xff0c;为外部应用提供支持。Flink提供了很多方式输出到外部系统。 1. 连接外部系统 在Flink中我们可以在各种Fuction中处理输出到外部系统&#xf…

C#读写参数到APP.Config

C#读写参数到APP.Config 介绍程序Demo常见错误 介绍 系统在开发时&#xff0c;可能需要设置默认参数&#xff0c;比如数据库的链接参数&#xff0c;某个参数的默认数据等等。对于这些数据&#xff0c;可直接在app.config中读取。 在读写时&#xff0c;需要先了解configuratio…

echo命令在Unix中的作用以及其常见用法

在Unix系统中&#xff0c;"echo"是一个常用的命令&#xff0c;用于在终端或脚本中输出文本。它可以将指定的字符串或变量的值打印到标准输出&#xff0c;从而向用户提供信息或进行调试。 本文将详细介绍"echo"命令在Unix中的作用以及其常见用法。 基本语法…

Keras-3-实例1-二分类问题

1. 二分类问题 1.1 IMDB 数据集加载 IMDB 包含5w条严重两极分化的评论&#xff0c;数据集被分为 2.5w 训练数据 和 2.5w 测试数据&#xff0c;训练集和测试集中的正面和负面评论占比都是50% from keras.datasets import imdb(train_data, train_labels), (test_data, test_l…

UE5 Chaos破碎系统学习1

在UE5中&#xff0c;Chaos破碎系统被直接进行了整合&#xff0c;本篇文章就来讲讲chaos的基础使用。 1.基础破碎 1.首先选中需要进行破碎的模型&#xff0c;例如这里选择一个Box&#xff0c;然后切换至Fracture Mode&#xff08;破碎模式&#xff09;&#xff1a; 2.点击右侧…

JAVA实现打字练习软件

转眼已经学了一学期的java了&#xff0c;老师让我们根据所学知识点写一个打字练习软件的综合练习。一开始我也不是很有思路&#xff0c;我找了一下发现csdn上关于这个小项目的代码也不算很多&#xff0c;所以我最后自己在csdn查了一些资料&#xff0c;写了这么一个简略版本的打…

【C++】——list的介绍及模拟实现

文章目录 1. 前言2. list的介绍3. list的常用接口3.1 list的构造函数3.2 iterator的使用3.3 list的空间管理3.4 list的结点访问3.5 list的增删查改 4. list迭代器失效的问题5. list模拟实现6. list与vector的对比7. 结尾 1. 前言 我们之前已经学习了string和vector&#xff0c…

Remix IDE已支持Sui Move在线开发

网页版Remix IDE与WELLDONE Code插件结合&#xff0c;让您无需本地设置或安装即可开始构建Sui应用程序。 不熟悉Sui的构建者可能想在正式配置开发环境之前&#xff0c;浅尝一下构建Sui应用程序。Remix IDE与WELLDONE Code插件组合&#xff0c;即可帮助构建者实现从浏览器窗口开…

JavaScript函数的增强知识

函数属性和arguments以及剩余参数 函数属性name与length ◼ 我们知道JavaScript中函数也是一个对象&#xff0c;那么对象中就可以有属性和方法。 ◼ 属性name&#xff1a;一个函数的名词我们可以通过name来访问&#xff1b; // 自定义属性foo.message "Hello Foo"…

Nginx 之 Tomcat 负载均衡、动静分离

一.详细安装及操作实例&#xff08;Nginx 七层代理&#xff09; 首先至少准备三台服务器 Nginx 服务器&#xff1a;192.168.247.131:80 Tomcat服务器1&#xff1a;192.168.247.133:80 Tomcat服务器2&#xff1a;192.168.247.134:8080 192.168.247.134:80811.部署Nginx 负载均…

微信自动回复怎么设置呢?

友友们 你们是否有以下这些烦恼 1、每天要手动点击“添加”按钮多次以通过大量好友? 2、你是否经常需要在多个微信帐号之间来回切换&#xff1f; 3、你的回复速度慢&#xff0c;导致客户流失率高&#xff1f; 4、为了及时回复&#xff0c;你总是需要带着多部手机出门&…

二十一、C++11(中)

文章目录 一、左值&右值&#xff08;一&#xff09;基本概念1.左值是什么2.右值是什么 &#xff08;二&#xff09;左值引用和右值引用1.左值引用2.右值引用 二、右值引用使用场景和意义&#xff08;一&#xff09;引入&#xff08;二&#xff09;左值引用的使用场景&#…

Linux编译器(gcc/g++)调试器gdb项目自动化构建工具(make/Makefile)版本管理git

Linux编译器-gcc/g&&调试器gdb&&项目自动化构建工具-make/Makefile&&版本管理git &#x1f506;gcc/g的使用可执行文件的"生产"过程gcc如何完成预处理编译汇编链接 函数库函数库一般分为静态库和动态库两种静态C/C库的安装 gcc选项gcc选项记…

WPF 学习:如何照着MaterialDesign的Demo学习

文章目录 往期回顾对应视频资源如何照着wpf项目学习找到你想要抄的页面查找对应源码演示示例如何认清页面元素抄袭实战 项目地址总结 往期回顾 WPF Debug运行是 实时可视化树无效&#xff0c;无法查看代码 WPF MaterialDesign 初学项目实战&#xff08;0&#xff09;:github …

【Java】线程池的概念及使用、ThreadPoolExecutor的构造方法

什么是线程池为什么用线程池JDK提供的线程池工厂模式如何使用 自定义线程池ThreadPoolExecutor类的构造方法工作原理拒绝策略 线程池的使用 什么是线程池 在之前JDBC编程中&#xff0c;通过DataSource获取Connection的时候就已经用到了池的概念。这里的池指的是数据库连接池。…