【AI大模型前沿】InternVL3.5:上海 AI Lab 开源多模态大模型、荣登多模态开源榜首
InternVL3.5是InternVL系列的最新力作,它在继承前代模型优势的基础上,通过一系列技术创新实现了性能的飞跃。该模型采用“ViT–MLP–LLM”范式,融合了动态高分辨率文本分词器、InternViT视觉编码器以及视觉-语言连接器三大核心组件,能够处理从1B到241B的多种模型规模,覆盖不同资源需求场景。InternVL3.5在多模态通用、推理、文本和智能体任务的综合得分上达到了开源多
系列篇章💥
目录
前言
在人工智能领域,多模态大模型的发展正以前所未有的速度改变着我们对机器智能的认知。InternVL3.5作为上海人工智能实验室推出的最新一代开源多模态大模型,凭借其在通用能力、推理能力和部署效率上的全面升级,为多模态人工智能的研究和应用开辟了新的道路。
一、项目概述
InternVL3.5是InternVL系列的最新力作,它在继承前代模型优势的基础上,通过一系列技术创新实现了性能的飞跃。
该模型采用“ViT–MLP–LLM”范式,融合了动态高分辨率文本分词器、InternViT视觉编码器以及视觉-语言连接器三大核心组件,能够处理从1B到241B的多种模型规模,覆盖不同资源需求场景。InternVL3.5在多模态通用、推理、文本和智能体任务的综合得分上达到了开源多模态大语言模型(MLLMs)的最高水平,显著缩小了与GPT-5等顶级商业模型之间的性能差距。
二、核心功能
(一)多模态感知
InternVL3.5在多模态感知任务上表现出色,能够精准地理解和描述图像、视频等视觉内容。其241B-A28B模型在多模态通用任务中的平均得分达到74.1分,超越了现有的开源模型,与商业模型GPT-5(74.0分)不相上下。
无论是对复杂场景的图像描述,还是对视频内容的精准解读,InternVL3.5都能提供高质量的文本输出,展现了强大的多模态感知能力。
(二)多模态推理
在多学科推理基准MMMU中,InternVL3.5取得了77.7分的优异成绩,较前代模型提升了超过5个百分点,位列开源模型榜首。
这一成绩不仅体现了InternVL3.5在多模态推理任务上的卓越表现,也标志着其在处理复杂推理问题时的可靠性和准确性。无论是数学问题的逻辑推理,还是跨学科知识的综合运用,InternVL3.5都能给出合理的解答。
(三)文本能力
InternVL3.5在文本处理方面同样表现出色,在AIME、GPQA及IFEval等多个文本基准测试中,模型的平均得分达到了85.3分,处于开源模型的领先水平。
无论是文本生成、文本理解还是文本分类等任务,InternVL3.5都能精准地把握文本内容,生成高质量的文本输出,满足不同场景下的文本处理需求。
(四)GUI智能体
InternVL3.5强化了GUI智能体能力,能够实现跨平台的自动化操作。
在ScreenSpot GUI定位任务中,InternVL3.5以92.9分的成绩超越了主流开源模型。
(五)具身空间推理
InternVL3.5具备强大的具身空间推理能力,能够泛化到全新的复杂具身场景中。
它支持可泛化的长程物体抓取操作,使机器人能够在复杂环境中准确地定位和抓取物体。
(六)矢量图形处理
InternVL3.5在矢量图形处理方面也有着出色的表现,在SGP-Bench测试中以70.7分刷新了开源模型的纪录。它能够根据用户指令生成或编辑SVG矢量图形,适用于网页图形生成、工程图纸解析等专业场景。
三、技术揭秘
(一)级联强化学习(Cascade RL)
通过“离线预热-在线精调”两阶段流程,离线阶段使用混合偏好优化(MPO)算法快速提升基础推理能力,为后续训练提供高质量样本;在线阶段基于GSPO算法,以模型自身生成的样本为基础,动态调整输出分布,显著提升训练稳定性和推理性能。
(二)动态视觉分辨率路由(ViR)
为每个图像切片动态选择压缩率,在语义密集区域保留高分辨率,背景区域自适应压缩,减少视觉tokens,显著提升推理速度,同时几乎不损失性能。
(三)解耦部署框架(DvD)
将视觉编码器与语言模型分置于不同GPU,结合BF16精度特征传输与异步流水线设计,使视觉计算与语言生成并行执行,大幅提升吞吐量,解决传统串行部署的资源阻塞问题。
(四)全量级模型优化
提供从10亿到2410亿参数的九种尺寸模型,覆盖不同资源需求场景,包含稠密模型和专家混合模型(MoE),首个支持GPT-OSS语言模型基座的开源多模态大模型,满足多样化应用需求。
四、性能表现
InternVL3.5的多模态推理、文本处理、 GUI智能体等在多个基准测试中表现出色。
五、应用场景
(一)办公自动化
在办公自动化领域,InternVL3.5的GUI智能体功能大放异彩。它能够实现跨平台的自动化办公操作,例如自动处理Excel数据录入、PPT设计排版、邮件发送等任务。通过精准识别和操作图形用户界面,InternVL3.5可以大幅提高工作效率,减少人工操作的繁琐性,让办公变得更加高效和便捷。
(二)智能家居
InternVL3.5的具身空间推理能力使其在智能家居控制领域具有重要应用价值。它可以辅助机器人在家庭环境中完成物品定位、路径规划和物理交互任务。例如,智能清洁机器人可以根据InternVL3.5提供的环境布局信息,自主规划清洁路径,实现高效清洁。
(三)教育辅导
在教育辅导领域,InternVL3.5凭借其多模态推理和文本能力,能够为学生提供个性化的学习辅导。它可以解答复杂的学科问题,如数学物理题解、逻辑推理训练等,帮助学生更好地理解和掌握知识。
(四)内容创作
对于内容创作者来说,InternVL3.5的通用多模态感知能力是一个强大的助手。它可以自动生成图像描述、视频字幕等,帮助创作者快速生成创意内容。无论是视频制作、图文编辑还是社交媒体内容创作,InternVL3.5都能提供高质量的文本和视觉内容,提高内容创作的效率和质量,激发创作者的灵感。
(五)网页设计与图形生成
在网页设计和图形生成领域,InternVL3.5的矢量图形处理能力为设计师带来了极大的便利。它可以根据用户指令生成或编辑SVG矢量图形,适用于网页设计、图标制作等场景。通过智能化的图形生成和编辑功能,设计师可以更加高效地完成设计任务,提升设计效率和个性化体验,为网页设计和图形创作带来新的可能性。
六、快速使用
(一)安装依赖
确保安装了transformers>=4.52.1版本。
pip install transformers>=4.52.1
(二)加载模型
import torch
from transformers import AutoTokenizer, AutoModel
path = "OpenGVLab/InternVL3_5-8B"
model = AutoModel.from_pretrained(
path,
torch_dtype=torch.bfloat16,
low_cpu_mem_usage=True,
use_flash_attn=True,
trust_remote_code=True).eval().cuda()
(三)推理示例
# 导入所需的库
import math
import numpy as np
import torch
import torchvision.transforms as T
from decord import VideoReader, cpu
from PIL import Image
from torchvision.transforms.functional import InterpolationMode
from transformers import AutoModel, AutoTokenizer
# ImageNet数据集的均值和标准差,用于图像归一化处理
IMAGENET_MEAN = (0.485, 0.456, 0.406)
IMAGENET_STD = (0.229, 0.224, 0.225)
# 构建图像预处理流程
def build_transform(input_size):
"""
构建图像预处理流程,包括将图像转换为RGB模式、调整图像大小、转换为张量并进行归一化处理。
:param input_size: 输入图像的大小
:return: 预处理流程
"""
MEAN, STD = IMAGENET_MEAN, IMAGENET_STD
transform = T.Compose([
T.Lambda(lambda img: img.convert('RGB') if img.mode != 'RGB' else img), # 确保图像为RGB模式
T.Resize((input_size, input_size), interpolation=InterpolationMode.BICUBIC), # 调整图像大小
T.ToTensor(), # 转换为张量
T.Normalize(mean=MEAN, std=STD) # 归一化处理
])
return transform
# 寻找最接近目标宽高比的宽高比
def find_closest_aspect_ratio(aspect_ratio, target_ratios, width, height, image_size):
"""
在给定的目标宽高比列表中,寻找与输入宽高比最接近的宽高比。
:param aspect_ratio: 输入图像的宽高比
:param target_ratios: 目标宽高比列表
:param width: 输入图像的宽度
:param height: 输入图像的高度
:param image_size: 目标图像大小
:return: 最接近的宽高比
"""
best_ratio_diff = float('inf') # 初始化最佳宽高比差值为无穷大
best_ratio = (1, 1) # 初始化最佳宽高比为1:1
area = width * height # 计算输入图像的面积
for ratio in target_ratios:
target_aspect_ratio = ratio[0] / ratio[1] # 计算目标宽高比
ratio_diff = abs(aspect_ratio - target_aspect_ratio) # 计算与输入宽高比的差值
if ratio_diff < best_ratio_diff: # 如果当前差值更小
best_ratio_diff = ratio_diff # 更新最佳差值
best_ratio = ratio # 更新最佳宽高比
elif ratio_diff == best_ratio_diff: # 如果差值相同
if area > 0.5 * image_size * image_size * ratio[0] * ratio[1]: # 且目标面积更大
best_ratio = ratio # 更新最佳宽高比
return best_ratio
# 动态预处理图像
def dynamic_preprocess(image, min_num=1, max_num=12, image_size=448, use_thumbnail=False):
"""
对图像进行动态预处理,包括调整图像大小、分割图像等。
:param image: 输入图像
:param min_num: 最小分割块数
:param max_num: 最大分割块数
:param image_size: 目标图像大小
:param use_thumbnail: 是否使用缩略图
:return: 预处理后的图像列表
"""
orig_width, orig_height = image.size # 获取输入图像的宽度和高度
aspect_ratio = orig_width / orig_height # 计算输入图像的宽高比
# 生成目标宽高比列表
target_ratios = set(
(i, j) for n in range(min_num, max_num + 1) for i in range(1, n + 1) for j in range(1, n + 1) if
i * j <= max_num and i * j >= min_num)
target_ratios = sorted(target_ratios, key=lambda x: x[0] * x[1]) # 按宽高比排序
# 寻找最接近目标宽高比的宽高比
target_aspect_ratio = find_closest_aspect_ratio(
aspect_ratio, target_ratios, orig_width, orig_height, image_size)
# 计算目标宽度和高度
target_width = image_size * target_aspect_ratio[0]
target_height = image_size * target_aspect_ratio[1]
blocks = target_aspect_ratio[0] * target_aspect_ratio[1] # 计算分割块数
# 调整图像大小
resized_img = image.resize((target_width, target_height))
processed_images = [] # 初始化预处理后的图像列表
for i in range(blocks): # 遍历每个分割块
box = (
(i % (target_width // image_size)) * image_size, # 左上角x坐标
(i // (target_width // image_size)) * image_size, # 左上角y坐标
((i % (target_width // image_size)) + 1) * image_size, # 右下角x坐标
((i // (target_width // image_size)) + 1) * image_size # 右下角y坐标
)
# 分割图像
split_img = resized_img.crop(box)
processed_images.append(split_img)
assert len(processed_images) == blocks # 确保分割块数正确
if use_thumbnail and len(processed_images) != 1: # 如果使用缩略图且分割块数不为1
thumbnail_img = image.resize((image_size, image_size)) # 生成缩略图
processed_images.append(thumbnail_img)
return processed_images
# 加载图像并进行预处理
def load_image(image_file, input_size=448, max_num=12):
"""
加载图像并进行预处理。
:param image_file: 图像文件路径
:param input_size: 输入图像大小
:param max_num: 最大分割块数
:return: 预处理后的图像张量
"""
image = Image.open(image_file).convert('RGB') # 打开图像并转换为RGB模式
transform = build_transform(input_size=input_size) # 构建预处理流程
images = dynamic_preprocess(image, image_size=input_size, use_thumbnail=True, max_num=max_num) # 动态预处理图像
pixel_values = [transform(image) for image in images] # 对每个图像块应用预处理流程
pixel_values = torch.stack(pixel_values) # 将图像块堆叠为张量
return pixel_values
# 加载预训练模型和分词器
path = 'OpenGVLab/InternVL3_5-8B'
model = AutoModel.from_pretrained(
path,
torch_dtype=torch.bfloat16, # 使用bfloat16数据类型
load_in_8bit=False, # 不使用8位量化
low_cpu_mem_usage=True, # 低CPU内存使用
use_flash_attn=True, # 使用Flash注意力机制
trust_remote_code=True, # 信任远程代码
device_map="auto" # 自动分配设备
).eval()
tokenizer = AutoTokenizer.from_pretrained(path, trust_remote_code=True, use_fast=False) # 加载分词器
# 加载图像并进行预处理
pixel_values = load_image('./examples/image1.jpg', max_num=12).to(torch.bfloat16).cuda() # 加载图像并转换为bfloat16格式
generation_config = dict(max_new_tokens=1024, do_sample=True) # 设置生成配置
# 纯文本对话
question = 'Hello, who are you?' # 提问
response, history = model.chat(tokenizer, None, question, generation_config, history=None, return_history=True) # 获取回答
print(f'User: {question}\nAssistant: {response}') # 打印对话内容
question = 'Can you tell me a story?' # 提问
response, history = model.chat(tokenizer, None, question, generation_config, history=history, return_history=True) # 获取回答
print(f'User: {question}\nAssistant: {response}') # 打印对话内容
# 单图单轮对话
question = '<image>\nPlease describe the image shortly.' # 提问
response = model.chat(tokenizer, pixel_values, question, generation_config) # 获取回答
print(f'User: {question}\nAssistant: {response}') # 打印对话内容
# 单图多轮对话
question = '<image>
question = 'Please write a poem according to the image.' # 提问
response, history = model.chat(tokenizer, pixel_values, question, generation_config, history=history, return_history=True) # 获取回答
print(f'User: {question}\nAssistant: {response}') # 打印对话内容
七、结语
InternVL3.5作为开源多模态大模型领域的一颗明珠,凭借其卓越的性能、广泛的应用场景和高效的部署能力,为多模态人工智能的发展注入了新的活力。其开源的模型和代码为研究人员和开发者提供了宝贵的资源,有助于推动多模态技术从“理解”到“行动”的跨越。未来,随着多模态技术的不断演进,InternVL3.5有望在更多领域发挥更大的作用,为人工智能的发展贡献更多力量。
项目地址
- GitHub仓库:https://github.com/OpenGVLab/InternVL
- Hugging Face模型地址:https://huggingface.co/OpenGVLab/InternVL3_5-241B-A28B
- 技术报告:https://huggingface.co/papers/2508.18265
🎯🔖更多专栏系列文章:AI大模型提示工程完全指南、AI大模型探索之路(零基础入门)、AI大模型预训练微调进阶、AI大模型开源精选实践、AI大模型RAG应用探索实践🔥🔥🔥 其他专栏可以查看博客主页📑
😎 作者介绍:资深程序老猿,从业10年+、互联网系统架构师,目前专注于AIGC的探索(CSDN博客之星|AIGC领域优质创作者)
📖专属社群:欢迎关注【小兵的AI视界】公众号或扫描下方👇二维码,回复‘入群’ 即刻上车,获取邀请链接。
💘领取三大专属福利:1️⃣免费赠送AI+编程📚500本,2️⃣AI技术教程副业资料1套,3️⃣DeepSeek资料教程1套🔥(限前500人)
如果文章内容对您有所触动,别忘了点赞、⭐关注,收藏!加入我们,一起携手同行AI的探索之旅,开启智能时代的大门!
更多推荐
所有评论(0)