Qwen2-VL vs. MinCPM-V 2.6:结果可能没有你想得那么好

QWen2_VL多模态大模型介绍

IMG_256
千问团队在开源Qwen2_math(阿里重磅开源Qwen2_Math! 实操利用onnxocr+Qwen2_Math打造【AI数学老师助手】来给小孩辅导数学作业!)、Qwen2_Audio(Qwen2_Audio语音大模型来啦!语音内容分析、情绪分析、语言翻译轻松拿捏!手把手带你实操部署让其扮演翻译官、情绪安抚师~)垂直领域大模型之后,在8月底又重磅开源Qwen2-VL 多模态大模型。Qwen2-VL 基于 Qwen2 打造,相比 Qwen-VL,它具有以下特点:

读懂不同分辨率和不同长宽比的图片:Qwen2-VL 在 MathVista、DocVQA、RealWorldQA、MTVQA 等视觉理解基准测试中取得了全球领先的表现。

理解20分钟以上的长视频:Qwen2-VL 可理解长视频,并将其用于基于视频的问答、对话和内容创作等应用中。

能够操作手机和机器人的视觉智能体:借助复杂推理和决策的能力,Qwen2-VL 可集成到手机、机器人等设备,根据视觉环境和文字指令进行自动操作。

多语言支持:为了服务全球用户,除英语和中文外,Qwen2-VL 现在还支持理解图像中的多语言文本,包括大多数欧洲语言、日语、韩语、阿拉伯语、越南语等。

QWen2_VL模型架构

整体上千问团队仍然延续了 Qwen-VL 中 ViT 加 Qwen2 的串联结构,在三个不同尺度的模型上,采用 600M 规模大小的 ViT,并且支持图像和视频统一输入。为了让模型更清楚地感知视觉信息和理解视频,我们还进行了以下升级:

Qwen2-VL 在架构上的一大改进是实现了对原生动态分辨率的全面支持。与上一代模型相比,Qwen2-VL 能够处理任意分辨率的图像输入,不同大小图片被转换为动态数量的 tokens,最小只占 4 个 tokens。这种设计不仅确保了模型输入与图像原始信息之间的高度一致性,更是模拟了人类视觉感知的自然方式,赋予模型处理任意尺寸图像的强大能力,使其在图像处理领域展现出更加灵活和高效的表现。
IMG_257

Qwen2-VL 在架构上的另一重要创新则是多模态旋转位置嵌入(M-ROPE)。传统的旋转位置嵌入只能捕捉一维序列的位置信息,而 M-ROPE 通过将原始旋转嵌入分解为代表时间、高度和宽度的三个部分,使得大规模语言模型能够同时捕捉和整合一维文本序列、二维视觉图像以及三维视频的位置信息。这一创新赋予了语言模型强大的多模态处理和推理能力,能够更好地理解和建模复杂的多模态数据。

IMG_258

QWen2_VL性能介绍

千问团队从六个方面来评估我们模型的视觉能力,包括综合的大学题目、数学能力、文档表格多语言文字图像的理解、通用场景下的问答、视频理解、Agent 能力。整体来看, 72B 规模的模型在大部分的指标上都达到了最优,甚至超过了 GPT-4o 和 Claude3.5-Sonnet 等闭源模型,特别是在文档理解方面优势明显,仅在对综合的大学题目上和 GPT-4o 还有差距。同时 Qwen2-VL 72B 也刷新了开源多模态模型的最好表现。
IMG_259

在 7B 规模上,我们同样支持图像、多图、视频的输入,在更经济的规模上也实现了有竞争力的性能表现,特别是像 DocVQA 之类的文档理解能力和 MTVQA 考察的图片中多语言文字理解能力都处于 SOTA 水平。
IMG_260

千问团队还提供了一个更小的 2B 规模的模型,以此支持移动端的丰富应用。它具备完整图像视频多语言的理解能力,性能强劲,特别在视频文档和通用场景问答相较同规模模型优势明显。
IMG_261
这效果看着牛逼呀,之前也给大家分享MiniCPM_v_2.6多模态大模型,想找几个真实的案例来实测一下,看看谁更强?

实战部署QWen2_VL_7B多模态大模型

由于我没得显卡,只能白嫖kaggle平台的P100 16G显卡,具体可参考文章:免费GPU资源大放送!深度学习、大模型/AIGC必备白嫖神器,让你轻松开启AI之旅!,因此不能以半精度float16加载QWen2_VL_7B多模态大模型,显存会爆;决定采用int4量化的方式来加载QWen2_VL_7B_Instruct大模型。

以int4量化加载QWen2_VL_7B_Instruct大模型

from io import BytesIO

from urllib.request import urlopen

import librosa

from transformers import Qwen2VLForConditionalGeneration, AutoProcessor, BitsAndBytesConfig

model_name= “Qwen/Qwen2-VL-7B-Instruct”

processor = AutoProcessor.from_pretrained(model_name)

bnb_config=BitsAndBytesConfig(

load_in_4bit=True,

bnb_4bit_compute_dtype=torch.float16,

bnb_4bit_use_double_quant=True, #QLoRA 设计的 Double Quantization

bnb_4bit_quant_type=”nf4″, #QLoRA 设计的 Normal Float 4 量化数据类型

llm_int8_threshold=6.0,

llm_int8_has_fp16_weight=False,

)

model = Qwen2VLForConditionalGeneration.from_pretrained(model_name,

quantization_config=bnb_config,

torch_dtype=torch.float16,

low_cpu_mem_usage=True,

trust_remote_code=True).eval()

model

模型的网络结构如下:
IMG_262

进行效果推理

测试图片

IMG_263

进行推理

%%time

clean_memory()

import requests

from PIL import Image as PImage# Image

image = PImage.open(“7d43642c-85c6-4183-a527-b8042cd4eda8.png”)

conversation = [

{

“role”: “user”,

“content”: [

{

“type”: “image”,

},

{“type”: “text”, “text”: “描述图片中的内容.”},

],

}

]

text_prompt = processor.apply_chat_template(conversation, add_generation_prompt=True)

inputs = processor(

text=[text_prompt], images=[image], padding=True, return_tensors=”pt”

)

inputs = inputs.to(“cuda”)

# Inference: Generation of the output

output_ids = model.generate(**inputs, max_new_tokens=128)

generated_ids = [

output_ids[len(input_ids) :]

for input_ids, output_ids in zip(inputs.input_ids, output_ids)

]

output_text = processor.batch_decode(

generated_ids, skip_special_tokens=True, clean_up_tokenization_spaces=True

)

print(output_text)

模型输出的结果:
IMG_264
我去这个输出的是什么??感觉中毒了,可能是通过int4量化导致QWen2_VL_7B_Instruct大模型的性能大幅度下降,通过代码来推理可能无法实现评测。于是我在魔塔社区找到官方的部署的在线推理:https://www.modelscope.cn/studios/qwen/Qwen2-7B-VL-demo。界面如下
IMG_265

效果篇: Qwen2-VL-7B-Instruct VS MiniCPM-V-2.6效果对比

之前给大家介绍过【国内版GPT4V来啦】面壁智能开源最强端侧多模态大模型MiniCPM-V2.6;支持图片、视频理解,实操各类复杂表格轻松识别!; 我就很好奇2个多模态大模型谁更强?于是我找了几个案例来测试了一把,仅供参考~

模型来源:

  1. Qwen2-VL-7B-Instruct模型: https://www.modelscope.cn/studios/qwen/Qwen2-7B-VL-demo
  2. MiniCPM-V-2.6-int4模型: https://hf-mirror.com/openbmb/MiniCPM-V-2_6-int4

案例一: 识别图片中的计算题并计算结果(Qwen2-VL 优于 MiniCPM-V-2.6-int4)

Qwen2-VL-7B-Instruct的运行结果

IMG_266
完整的输出结果:

175-75+25 =100+25 =125

65+35×13 =65+455 =520

725-( 125+237 ) =725-362 =363

( 114+166 )÷35 =280÷35 =8

432÷( 9×8 ) =432÷72 =6

189-60+40 =129+40 =169

47+236+64 =283+64 =347

5+25×44 =5+1100 =1105

102×99 =10102

8+2×125 =8+250 =258

645-180-245 =465-245 =220

630x[840÷(240-212)] =630x[840÷28] =630×30 =18900

138x25x4 =138×100 =13800

1500-32×45 =1500-1440 =60

25x(24+16) =25×40 =1000

8100÷4÷75 =2025÷75 =27

(12+24+80)x50 =116×50 =5800

83×102-83×2 =83x(102-2) =83×100 =8300

50x(34×4)x3 =50x136x3 =50×408 =20400

1437×27+27×563 =27x(1437+563) =27×2000 =54000

其中102×99 =10102 计算错误,计算错了1道题,对了19道。

MiniCPM-V-2.6-int4的运行结果

IMG_267
其中第7题、第9题、第13题、第20题错了,对了16道。

Qwen2_VL_7B_Instruct大模型的性能是大于MiniCPM-V-2.6-int4模型的性能的。

案例二: 识别图片中的内容以json格式输出(Qwen2-VL 等于 MiniCPM-V-2.6-int4)

测试图片

IMG_268

Qwen2-VL-7B-Instruct的运行结果

IMG_269

MiniCPM-V-2.6-int4的运行结果

IMG_270

输出的结果都是对的。

案例三: 识别复杂式中国表格类图片对应的内容(Qwen2-VL 小于 MiniCPM-V-2.6-int4)

测试表格图片

IMG_271

Qwen2-VL-7B-Instruct的运行结果

IMG_272
完整的输出:

[{“流动资产”: [

{

“货币资金”: [

{

“行次”: 1,

“年初数”: “62,469.37”,

“期末数”: “52,453.02”

}

]

},

{

“短期投资”: [

{

“行次”: 2,

“年初数”: “0.00”,

“期末数”: “0.00”

}

]

},

{

“应收票据”: [

{

“行次”: 3,

“年初数”: “0.00”,

“期末数”: “0.00”

}

]

},

{

“应收账款”: [

{

“行次”: 6,

“年初数”: “25,811.80”,

“期末数”: “33,979.70”

}

]

},

{

“存货”: [

{

“行次”: 10,

“年初数”: “2,394.00”,

“期末数”: “4,251.00”

}

]

},

{

“待摊费用”: [

{

“行次”: 11,

“年初数”: “0.00”,

“期末数”: “0.00”

}

]

},

{

“一年内到期的长期债权投资”: [

{

“行次”: 21,

“年初数”: “0.00”,

“期末数”: “0.00”

}

]

},

{

“其他流动资产”: [

{

“行次”: 24,

“年初数”: “0.00”,

“期末数”: “0.00”

}

]

}

]

}

]

MiniCPM-V-2.6-int4的运行结果

IMG_273
输出完全的结果:

{

“流动资产”: [

{

“名称”: “货币资金”,

“行次”: 1,

“年初数”: “62,469.37”,

“期末数”: “52,453.02”

},

{

“名称”: “短期投资”,

“行次”: 2,

“年初数”: “0.00”,

“期末数”: “0.00”

},

{

“名称”: “应收票据”,

“行次”: 3,

“年初数”: “0.00”,

“期末数”: “0.00”

},

{

“名称”: “应收股利”,

“行次”: 4,

“年初数”: “0.00”,

“期末数”: “0.00”

},

{

“名称”: “应收利息”,

“行次”: 5,

“年初数”: “0.00”,

“期末数”: “0.00”

},

{

“名称”: “应收账款”,

“行次”: 6,

“年初数”: “25,811.80”,

“期末数”: “33,979.70”

},

{

“名称”: “其他应收款”,

“行次”: 7,

“年初数”: “0.00”,

“期末数”: “0.00”

},

{

“名称”: “预付账款”,

“行次”: 8,

“年初数”: “0.00”,

“期末数”: “0.00”

},

{

“名称”: “应收补贴款”,

“行次”: 9,

“年初数”: “0.00”,

“期末数”: “0.00”

},

{

“名称”: “存货”,

“行次”: 10,

“年初数”: “2,394.00”,

“期末数”: “4,251.00”

},

{

“名称”: “待摊费用”,

“行次”: 11,

“年初数”: “0.00”,

“期末数”: “0.00”

},

{

“名称”: “一年内到期的长期债权投资”,

“行次”: 21,

“年初数”: “0.00”,

“期末数”: “0.00”

},

{

“名称”: “其他流动资产”,

“行次”: 24,

“年初数”: “0.00”,

“期末数”: “0.00”

},

{

“名称”: “流动资产合计”,

“行次”: 31,

“年初数”: “90675.17”,

“期末数”: “90683.72”

}

]

}

CPU times: user 50.2 s, sys: 383 ms, total: 50.6 s

Wall time: 50.5 s

可以看出MiniCPM-V-2.6-int4输出的结果完全正确,而Qwen2-VL输出有漏的。

案例四: 识别复杂式表格类图片转为markdown语法(Qwen2-VL 小于 MiniCPM-V-2.6-int4)

测试图片

IMG_274

Qwen2-VL-7B-Instruct的运行结果

IMG_275

MiniCPM-V-2.6-int4的运行结果

| Model | Size | Token Density* | OpenCompass | MME | MMVet | OCRBench | MMMU val | MathVista val | MMB1.1 test | AI2D | TextVQA val | DocVQA test | HallusionBench | Object HalBench |

| — | — | — | — | — | — | — | — | — | — | — | — | — | — | — |

| Proprietary |  |  |  |  |  |  |  |  |  |  |  |  |  |

| GPT-4o | – | 1088 | 69.9 | 2328.7 | 69.1 | 736 | 69.2 | 61.3 | 82.2 | 84.6 | – | 92.8 | 55.0 | 17.6 |

| Claude 3.5 Sonnet | – | 750 | 67.9 | 1920.0 | 66.0 | 788 | 65.9 | 61.6 | 78.5 | 80.2 | – | 95.2 | 49.9 | 13.8 |

| Gemini 1.5 Pro | – | – | 64.4 | 2110.6 | 64.0 | 754 | 60.6 | 57.7 | 73.9 | 79.1 | 73.5 | 86.5 | 45.6 | – |

| GPT-4o mini | – | 1088 | 64.1 | 2003.4 | 66.9 | 785 | 60.0 | 52.4 | 76.0 | 77.8 | – | – | 46.1 | 12.4 |

| GPT-4V | – | 1088 | 63.5 | 2070.2 | 67.5 | 656 | 61.7 | 54.7 | 79.8 | 78.6 | 78.0 | 87.2 | 43.9 | 14.2 |

| Step-1V | – | – | 59.5 | 2206.4 | 63.3 | 625 | 49.9 | 44.8 | 78.0 | 79.2 | 71.6 | – | 48.4 | – |

| Qwen-VL-Max | – | – | 784 | 2281.7 | 61.8 | 684 | 52.0 | 43.4 | 74.6 | 75.7 | 79.5 | 93.1 | 41.2 | 13.4 |

| Open-source |  |  |  |  |  |  |  |  |  |  |  |  |  |

| LLaVA-NeXT-Yi-34B | 34B | 157 | 55.0 | 2006.5 | 50.7 | 574 | 48.8 | 40.4 | 77.8 | 78.9 | 69.3 | – | 34.8 | 12.6 |

| Mini-Gemini-HD-34B | 34B | 157 | – | 2141 | 59.3 | 518 | 48.0 | 43.3 | – | 80.5 | 74.1 | 78.9 | – | – |

| Cambrian-34B | 34B | 1820 | 58.3 | 2049.9 | 53.2 | 591 | 50.4 | 50.3 | 77.8 | 79.5 | 76.7 | 75.5 | 41.6 | 14.7 |

| GLM-4V-9B | 13B | 784 | 59.1 | 2018.8 | 58.0 | 776 | 46.9 | 51.1 | 67.9 | 71.2 | – | – | 45.0 | – |

| InternVL2-8B | 8B | 706 | 64.1 | 2215.1 | 54.3 | 794 | 51.2 | 58.3 | 79.4 | 83.6 | 77.4 | 91.6 | 45.0 | 21.3 |

| MiniCPM-Llama-V 2.5 | 8B | 1882 | 58.8 | 2024.6 | 52.8 | 725 | 45.8 | 54.3 | 72.0 | 78.4 | 76.6 | 84.8 | 42.4 | 10.3 |

| MiniCPM-V 2.6 | 8B | 2822 | 65.2 | 2348.4* | 60.0 | 852* | 49.8* | 60.6 | 78.0 | 82.1 | 80.1 | 90.8 | 48.1* | 8.2 |

CPU times: user 1min 51s, sys: 689 ms, total: 1min 52s

Wall time: 1min 52s

可以看出MiniCPM-V-2.6-int4输出的结果完全正确,而Qwen2-VL输出不完整并且有遗漏的。

测试小结

从上面的4个案例来看,仅供参考~

  1. 由魔塔的界面使用的Qwen2-VL-7B-Instruct大模型,在OCR层面和数据逻辑计算还是不错的。
  2. Qwen2-VL-7B-Instruct在复杂类的报表图片内容识别性能是低于MiniCPM-V-2.6多模态大模型的。
© 版权声明
THE END
喜欢就支持一下吧
点赞15 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容