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

ops/2024/9/23 11:01:05/

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

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

2 模型概念区分

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

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

3 多模态的发展历程

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

DL

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 多模态大语言模型的应用

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

在这里插入图片描述


http://www.ppmy.cn/ops/31717.html

相关文章

设计模式之业务代表模式

在编程江湖的风雨中漂泊多年,每当我遇到那些错综复杂的业务逻辑和系统交互,总有一个模式像一位忠诚的骑士,默默守护着我的代码城堡,那就是——业务代表模式(Business Delegate Pattern)。它不是最耀眼的明星…

代码随想录算法训练营第四十二天| 01背包问题 二维,01背包问题 一维,416. 分割等和子集

目录 题目链接: 01背包问题 二维 思路 代码 题目链接:01背包问题 一维 思路 代码 题目链接: 416. 分割等和子集 思路 代码 总结 题目链接:01背包问题 二维 思路 ①dp数组,物品从下标0到i的物品中任取&#x…

Spring扩展点(一)Bean生命周期扩展点

Bean生命周期扩展点 影响多个Bean的实例化InstantiationAwareBeanPostProcessorBeanPostProcessor 影响单个Bean的实例化纯粹的生命周期回调函数InitializingBean(BeanPostProcessor 的before和after之间调用)DisposableBean Aware接口在生命周期实例化过…

企业定制AI智能名片商城小程序:重塑营销场景,引领数字化营销新纪元

在数字化时代的浪潮中,多企业AI智能名片商城小程序以其独特的魅力和创新的功能,为消费者带来了前所未有的购物体验。它不仅是一个汇聚各类商品的购物平台,更是一个充满活力和创造力的社群生态。通过强化社群互动、鼓励用户生成内容以及引入积…

深入浅出DBus-C++:Linux下的高效IPC通信

目录标题 1. DBus简介2. DBus-C的优势3. 安装DBus-C4. 使用DBus-C初始化和连接到DBus定义接口和方法发送和接收信号 5. dbus-cpp 0.9.0 的安装6. 创建一个 DBus 服务7. 客户端的实现8. 编译和运行你的应用9. 瑞芯微(Rockchip)的 Linux 系统通常会自带 db…

【iOS】pthread、NSThread

文章目录 前言一、pthread 使用方法pthread 其他相关方法 二、 NSThread创建、启动线程线程相关用法线程状态控制方法NSThread 线程安全和线程同步场景 线程的状态转换 前言 五一这两天准备将GCD相关的知识完,同时NSOperation与NSThread、pthread也是相关知识&…

matlab期末知识

1.期末考什么? 1.1 matlab操作界面 (1)matlab主界面 (2)命令行窗口 (3)当前文件夹窗口 (4)工作区窗口 (5)命令历史记录窗口 1.2 matlab搜索…

【网络】tcp协议如何保证可靠性

TCP(Transmission Control Protocol)是一种面向连接的、可靠的传输层协议,为网络通信提供了可靠性和连接稳定性。本文将详细介绍 TCP 协议如何保证数据的可靠传输和连接的稳定性,并分析其优缺点。 可靠性保证 序号和确认机制&…