InternVL
视觉与图像生成

InternVL

InternVL 是 OpenGVLab 开发的一系列开源多模态大型语言模型,旨在提供强大的视觉和语言理解能力,支持包括图像描述、视觉问答、文档理解等多种任务。它具有高性能、多功能和易于使用的特点,是研究和应用多模态人工智能的有力工具。

快点收藏起来

什么是 InternVL

InternVL 是由 OpenGVLab 开发的一系列先进的多模态大型语言模型(Multimodal Large Language Models, MLLMs)。它旨在成为一个强大的视觉-语言基础模型,能够理解和处理包括图像和文本在内的多种类型的数据。InternVL 的目标是支持广泛的视觉任务,如图像描述、视觉问答(Visual Question Answering, VQA)、文档理解、图表理解、信息图问答、场景文本理解与 OCR 任务、科学与数学问题求解,以及文化理解和综合多模态能力。该项目旨在提供一个开源的、性能媲美甚至超越一些商业模型的替代方案,为研究人员和开发者提供强大的多模态智能基础。

InternVL

InternVL 的功能

InternVL 作为一个多功能的视觉-语言模型,具备以下一系列强大的功能:

  • 多模态理解: 能够同时理解和处理图像和文本信息,实现跨模态的知识融合和推理。
  • 广泛的任务支持: 支持包括图像描述生成(Image Captioning)、视觉问答(VQA)、文档问答(Document VQA)、图表问答(Chart VQA)、信息图问答(Infographics QA)、场景文本理解(Scene Text Understanding)和光学字符识别(OCR)等多种任务。
  • 强大的文档和图表理解能力: 在处理文档和图表相关的任务上表现出色,能够理解复杂的布局和数据关系。
  • 数学和科学问题求解: 部分 InternVL 模型具备一定的数学和科学问题求解能力,能够理解和回答包含数学公式或科学概念的问题。
  • 文化理解和综合多模态能力: 展现出在文化理解和整合多种模态信息方面的潜力。
  • 支持动态分辨率图像: 能够处理高达 4K 分辨率的图像输入,适应不同场景的需求。
  • 高效的推理能力: 提供了多种推理优化方法,包括 16 位浮点数(bf16/fp16)、8 位和 4 位量化,方便在不同硬件上部署。
  • 流式输出: 支持文本的流式生成,可以实现更快的响应和更好的用户体验。
  • 多轮对话能力: 部分 InternVL 模型支持多轮对话,能够进行更复杂的交互。
  • 多种模型尺寸选择: InternVL 提供不同参数规模的模型,如 1B、2B、4B、8B 甚至更大的模型,以满足不同计算资源和性能需求的应用场景。
  • 易于使用和集成: 提供了基于 Transformers 库的接口和快速上手指南,方便开发者集成到自己的项目中。

如何使用/快速开始

要开始使用 InternVL,您可以按照以下步骤进行操作:

  1. 安装必要的库: 确保您的环境中安装了 PyTorch 和 Transformers 库:
    pip install torch transformers

    您可能还需要安装其他依赖,如 GitHub 仓库中的 requirements.txt 文件所示。

  2. 加载模型和 Tokenizer: InternVL 提供了在 Hugging Face Hub 上的预训练模型。您可以使用 AutoModelAutoTokenizer 类加载模型和 tokenizer:
    from transformers import AutoTokenizer, AutoModel
     import torch
    
     path = "OpenGVLab/InternVL2-1B"  # 替换为您想要使用的 InternVL 模型名称
     model = AutoModel.from_pretrained(path, torch_dtype=torch.bfloat16, low_cpu_mem_usage=True, use_flash_attn=True, trust_remote_code=True).eval().cuda()
     tokenizer = AutoTokenizer.from_pretrained(path, trust_remote_code=True, use_fast=False)

    请根据您的需求选择合适的模型路径,例如 OpenGVLab/InternVL-Chat-V1-2 或其他版本。

  3. 准备输入数据: 根据您要执行的任务准备输入数据。对于图像相关的任务,您可能需要使用 PIL 库加载图像并进行预处理。对于文本输入,使用 tokenizer 进行编码。
  4. 进行推理: 根据您选择的模型和任务类型,使用相应的方法进行推理。例如,对于纯文本对话,可以使用 model.chat() 方法;对于单轮图像问答,需要将图像特征和问题一起输入模型。具体的代码示例可以在 InternVL 的 GitHub 仓库和 Hugging Face 模型页面找到。例如,一个简单的单图单轮对话示例:
    from PIL import Image
     from transformers import CLIPImageProcessor
    
     image_processor = CLIPImageProcessor.from_pretrained(path)
     image = Image.open('./examples/image2.jpg').resize((448, 448))
     pixel_values = image_processor(images=image, return_tensors='pt').pixel_values.to(torch.bfloat16).cuda()
     question = '\\nPlease describe the image shortly.'
     response = model.chat(tokenizer, pixel_values, question, generation_config={'max_new_tokens': 1024, 'do_sample': True})
     print(f'User: {question}')
     print(f'Assistant: {response}')
  5. 查看和处理输出: 模型会生成文本回复。您可以根据您的应用场景对输出进行进一步处理。

InternVL 提供了详细的文档和示例代码,您可以在其 GitHub 仓库和 Hugging Face 模型页面找到更多关于不同任务的具体使用方法、数据格式要求以及高级特性的说明。同时,OpenGVLab 社区也提供了支持,您可以在社区中交流使用经验和寻求帮助。

相关导航