十、多模态大语言模型(MLLM)

2024-04-27 21:28
文章标签 语言 模型 模态 mllm

本文主要是介绍十、多模态大语言模型(MLLM),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1 多模态大语言模型(Multimodal Large Language Models)

  • 模态的定义
    模态(modal)是事情经历和发生的方式,我们生活在一个由多种模态(Multimodal)信息构成的世界,包括视觉信息、听觉信息、文本信息、嗅觉信息等
  • MLLMs的定义
    由LLM扩展而来具有接收和推理多模态信息能力的模型

2 模型概念区分

  • 跨模态模型
  • 单模态大模型
  • 多模态模型
  • 多模态语言大模型

跨模态模型
在这里插入图片描述
单模态大模型
在这里插入图片描述
多模态大模型
在这里插入图片描述
多模态大语言模型
在这里插入图片描述

3 多模态的发展历程

四个关键里程碑
1 Vision Transformer(ViT)
图片格子的线性映射

ViT

Mask Image Modeling 无监督图像特征学习
在这里插入图片描述
2 基于transformer架构的图像-文本联合建模
在这里插入图片描述
3 大规模 图-文 Token对齐模型CLIP
通过余弦距离将文和图转换至同一向量空间。将图像的分类闭集引入至开集
在这里插入图片描述

from transformers import CLIPProcessor, CLIPModel
model = CLIPModel.from_pretrained("openai/clip-vit-base-patch32")
processor = CLIPProcessor.from_pretrained("openai/clip-vit-base-patch32")

在这里插入图片描述

from IPython.display import Image, display
display(Image(filename="bus.jpg"))

在这里插入图片描述

from PIL import Image
image = Image.open("bus.jpg")
cls_list = ["dog", "woman", "man", "bus", "truck","person","a black truck", "a white truck", "cat"]
input = processor(text=cls_list, images=image,return_tensors="pt", padding=True)
outputs = model(**input)
print(outputs.keys())

在这里插入图片描述

logits_per_image = outputs.logits_per_image
probs = logits_per_image.softmax(dim=1)for i in range(len(cls_list)):print(f"{cls_list[i]}: {probs[0][i]}")

在这里插入图片描述
4 多模态大语言模型OpenAI GPTv4
支持图文交替输出,输入文本或图像,输出自然语言
在这里插入图片描述
特点如下:

  • 遵循文字提示
    在这里插入图片描述
  • 理解视觉指向和参考
    在这里插入图片描述
  • 支持视觉和文本联合提示
    在这里插入图片描述
  • 少样本上下文学习
    在这里插入图片描述
  • 强大的视觉认知能力
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    5 Google Gemini 原生多模态
    • 输入:文本、语音、图像和视频信息
    • 输出:自然语言、图像
      在这里插入图片描述
  • 支持多模态内容输出
    在这里插入图片描述
  • 复杂图像理解与代码生成
    在这里插入图片描述
!pip install google-generativeai -i https://pypi.tuna.tsinghua.edu.cn/simple
import gradio as gr
from openai import OpenAI
import base64
from PIL import Image
import io
import os
import google.generativeai as genai# Function to encode the image to base64def encode_image_to_base64(image):buffered = io.BytesIO()image.save(buffered, format="JPEG")return base64.b64encode(buffered.getvalue()).decode('utf-8')# Function to query GPT-4 Visiondef query_gpt4_vision(text, image1, image2, image3):client = OpenAI(api_key=os.getenv('OPENAI_API_KEY'))messages = [{"role": "user", "content": [{"type": "text", "text": text}]}]images = [image1, image2, image3]for image in images:if image is not None:base64_image = encode_image_to_base64(image)image_message = {"type": "image_url","image_url": {"url": f"data:image/jpeg;base64,{base64_image}"}}messages[0]["content"].append(image_message)response = client.chat.completions.create(model="gpt-4-vision-preview",messages=messages,max_tokens=1024,)return response.choices[0].message.content# Function to query Gemini-Prodef query_gemini_vision(text, image1, image2, image3):# Or use `os.getenv('GOOGLE_API_KEY')` to fetch an environment variable.# GOOGLE_API_KEY=userdata.get('GOOGLE_API_KEY')GOOGLE_API_KEY = os.getenv('GOOGLE_API_KEY')genai.configure(api_key=GOOGLE_API_KEY)model = genai.GenerativeModel('gemini-pro-vision')images = [image1, image2, image3]query = [text]for image in images:if image is not None:query.append(image)response = model.generate_content(query, stream=False)response.resolve()return response.text# 由于Gradio 2.0及以上版本的界面构建方式有所不同,这里使用blocks API来创建更复杂的UIdef main():with gr.Blocks() as demo:gr.Markdown("### 输入文本")input_text = gr.Textbox(lines=2, label="输入文本")input_images = [gr.Image(type="pil", label="Upload Image", tool="editor") for i in range(3)]output_gpt4 = gr.Textbox(label="GPT-4 输出")output_other_api = gr.Textbox(label="Gemini-Pro 输出")btn_gpt4 = gr.Button("调用GPT-4")btn_other_api = gr.Button("调用Gemini-Pro")btn_gpt4.click(fn=query_gpt4_vision, inputs=[input_text] + input_images, outputs=output_gpt4)btn_other_api.click(fn=query_gemini_vision, inputs=[input_text] + input_images, outputs=output_other_api)demo.launch(share=True)if __name__ == "__main__":main()

在这里插入图片描述
在这里插入图片描述

4 多模态大语言模型的应用

  • 工业
  • 医疗
  • 视觉内容认知与编辑
  • 具身智能
  • 新一代人机交互
    在这里插入图片描述

在这里插入图片描述

这篇关于十、多模态大语言模型(MLLM)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/941577

相关文章

Go语言使用select监听多个channel的示例详解

《Go语言使用select监听多个channel的示例详解》本文将聚焦Go并发中的一个强力工具,select,这篇文章将通过实际案例学习如何优雅地监听多个Channel,实现多任务处理、超时控制和非阻... 目录一、前言:为什么要使用select二、实战目标三、案例代码:监听两个任务结果和超时四、运行示例五

C语言中%zu的用法解读

《C语言中%zu的用法解读》size_t是无符号整数类型,用于表示对象大小或内存操作结果,%zu是C99标准中专为size_t设计的printf占位符,避免因类型不匹配导致错误,使用%u或%d可能引发... 目录size_t 类型与 %zu 占位符%zu 的用途替代占位符的风险兼容性说明其他相关占位符验证示

C语言进阶(预处理命令详解)

《C语言进阶(预处理命令详解)》文章讲解了宏定义规范、头文件包含方式及条件编译应用,强调带参宏需加括号避免计算错误,头文件应声明函数原型以便主函数调用,条件编译通过宏定义控制代码编译,适用于测试与模块... 目录1.宏定义1.1不带参宏1.2带参宏2.头文件的包含2.1头文件中的内容2.2工程结构3.条件编

Go语言并发之通知退出机制的实现

《Go语言并发之通知退出机制的实现》本文主要介绍了Go语言并发之通知退出机制的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录1、通知退出机制1.1 进程/main函数退出1.2 通过channel退出1.3 通过cont

Go语言编译环境设置教程

《Go语言编译环境设置教程》Go语言支持高并发(goroutine)、自动垃圾回收,编译为跨平台二进制文件,云原生兼容且社区活跃,开发便捷,内置测试与vet工具辅助检测错误,依赖模块化管理,提升开发效... 目录Go语言优势下载 Go  配置编译环境配置 GOPROXYIDE 设置(VS Code)一些基本

深入理解Go语言中二维切片的使用

《深入理解Go语言中二维切片的使用》本文深入讲解了Go语言中二维切片的概念与应用,用于表示矩阵、表格等二维数据结构,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧... 目录引言二维切片的基本概念定义创建二维切片二维切片的操作访问元素修改元素遍历二维切片二维切片的动态调整追加行动态

Python使用vllm处理多模态数据的预处理技巧

《Python使用vllm处理多模态数据的预处理技巧》本文深入探讨了在Python环境下使用vLLM处理多模态数据的预处理技巧,我们将从基础概念出发,详细讲解文本、图像、音频等多模态数据的预处理方法,... 目录1. 背景介绍1.1 目的和范围1.2 预期读者1.3 文档结构概述1.4 术语表1.4.1 核

Go语言中make和new的区别及说明

《Go语言中make和new的区别及说明》:本文主要介绍Go语言中make和new的区别及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1 概述2 new 函数2.1 功能2.2 语法2.3 初始化案例3 make 函数3.1 功能3.2 语法3.3 初始化

Go语言中nil判断的注意事项(最新推荐)

《Go语言中nil判断的注意事项(最新推荐)》本文给大家介绍Go语言中nil判断的注意事项,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1.接口变量的特殊行为2.nil的合法类型3.nil值的实用行为4.自定义类型与nil5.反射判断nil6.函数返回的

Go语言数据库编程GORM 的基本使用详解

《Go语言数据库编程GORM的基本使用详解》GORM是Go语言流行的ORM框架,封装database/sql,支持自动迁移、关联、事务等,提供CRUD、条件查询、钩子函数、日志等功能,简化数据库操作... 目录一、安装与初始化1. 安装 GORM 及数据库驱动2. 建立数据库连接二、定义模型结构体三、自动迁