引言
20250212苹果突然被爆将与阿里巴巴合作为中国 iPhone 用户开发人工智能功能。苹果从 2023 年就已经开始测试各类中国头部 AI 大厂开发的 AI 模型。去年,原本选定百度作为主要合作伙伴,但双方的合作并不顺利,百度为“Apple Intelligence”开发模型的进展未达苹果标准。近几个月苹果开始考虑其他选项,对腾讯、字节跳动、阿里巴巴以及 DeepSeek 开发的模型进行评估。最终,阿里被苹果选中。
解读:“阿里是当下苹果最好的选择,甚至可能没有之一”
优势
1)用户优势:阿里巴巴掌握的中国消费者个人数据比百度更多,因此能帮助“苹果智能”为中国用户提供更个性化的服务。
2)模型能力够强、开源社区认可:Qwen 系列模型主打全尺寸、全功能。除了旗舰模型闭源商用外,Qwen 小到手机也能运行的 1.5B(iPhone 的内存限制,大概就支持 1-3B 参数的模型端侧运行),大到 110B,基本上覆盖了开源社区的绝大多数需求,因而在全球开源社区中影响力很大。类 Llama 架构,能很好与各种 Infra 对接(苹果工程师也容易对接)。
3)云业务增加优势:端侧模型想要实现更好的功能,也需要结合用户数据做本地化训练,而这部分数据也不可能出境。阿里云做支持部署和训练,从商务、客户服务、技术支持等维度看,阿里云具备全面的团队支持。
deepseek?
1)模型的尺寸不全、云 Infra 链路、现实商用方向的对齐。
2)最新的 Qwen2.5-Max 其实是赢过 DeepSeek V3 的。非推理模型适用:用户常用场景“长输入、短输出”的场景,比如总结一篇文章主要内容、对多个信源进行总结等,且价格便宜。
PS:Deep seek o1/R1 推理模型虽然更强,但这价格贵、更适用于“短输入、长输出”。
测试
官方特性示例
1)万物识别
大幅扩大了可识别的图像类别量级:不仅包括植物、动物、著名山川的地标,还包括影视作品中的 IP,以及各种各样的商品。
2)视觉定位
Qwen2.5-VL 可以通过生成 bounding boxes 或者 points 来准确定位图像中的物体,并能够为坐标和属性提供稳定的 JSON 输出。
3)结构化输出
对于发票、表单、表格等数据,支持其内容的结构化输出,惠及金融、商业等领域的应用。
4)理解长视频和捕捉事件
引入了动态帧率(FPS)训练和绝对时间编码技术。这样一来,模型不仅能够支持小时级别的超长视频理解,还具备秒级的事件定位能力。
5)Agent
直接作为一个视觉 Agent,可以推理并动态地使用工具,初步具备了使用电脑和使用手机的能力。
Qwen2.5 VL!Qwen2.5 VL!Qwen2.5 VL! | Qwen
技术细节
PS:技术报告未出,这里只有公开blog 和coding来展开,不涉及训练数据、训练细节。主要是如下新特性对应的细节,qwen2-vl 见我的相关博客:VLM 系列——Qwen2 VL——论文解读_qwen vlm-CSDN博客
与 Qwen2-VL 相比,Qwen2.5-VL 增强了模型 对 空间尺度(动态原图输入&非归一化定位框)和 时间(动态fps和绝对实现编码)的感知能力,并进一步简化了网络结构(ViT 架构与LLMs一致,采用了RMSNorm、SwiGLU 结构,但是是全注意力+窗口注意力交替VIT)以提高模型效率。
ps: 下图和官方图略有区别,见红色个人理解部分,欢迎讨论。其中需要注意真实的代码实现也不是这么算的,而是秒级别的一个整数,可以看本文后面的内容。
空间尺度
1)动态地将不同尺寸的图像转换为不同长度的 token。
2)直接使用图像的实际尺寸来表示检测框和点等坐标,而不进行传统的坐标归一化,这使得模型能够直接学习图像的尺度。
*)如果做定位,需要自己调用qwen util库的的 smart_resize 函数获得最终resieze 后的分辨率,这个才是最终输入模型的,然后检测结果也是基于这个的。
时间尺度
1)引入了动态 FPS (每秒帧数)训练。测试时可以自己调节参数。
2)绝对时间编码,将 mRoPE id 直接与时间流速对齐。这使得模型能够通过时间维度 id 的间隔来学习时间的节奏。
*-1)他只具备最小到秒级别定位,所以注意输入fps(最大2)\nframe(介于模型配置文件外,还要注意不要大于2*视频之间)参数。
*-2)官方图可能是错的:一方面真实计算不是这个逻辑,另一方面及时是这个逻辑也是不对的。
*-3)关于源码:
用户设定:
fps(每秒帧数):视频的帧率,设定为 1。这意味着每秒处理一帧。通过utils库的smart_nframes转换为video_sample_fps,然后再通过Transformers 源码qwen2.5vl 的Qwen2_5_VLProcessor 函数转换为second_per_grid_ts。
tokens_per_second: 配置文件写死为2,源码看其实和temporal_patch_size是一个东西,因为second_per_grid_ts仅仅是两帧间的间隔是一帧长度,最终位置编码需要三个帧之间的间隔两个帧长度。
temporal_patch_size:构成一个时间片段的帧数。在这里是 2 帧。对应输入3dcnn 里面的维度为2*Chanel*height*weight。
计算来的:
interval:时间位置 ID 的步长,计算公式为 tokens_per_second * temporal_patch_size / fps。在这个例子中,25 * 2 / 1 = 50。这意味着每个时间片段在时间位置 ID 上将有 50 的差异。
second_per_grid_ts = [self.image_processor.temporal_patch_size / tmp for tmp in fps] fps 其实是video_sample_fps_list, 是根据用户的输入n-frame 或者fps(还需要min max frames) 算出来的。
time_tensor = expanded_range * second_per_grid_t * self.config.vision_config.tokens_per_second
视觉编码器
1)从头开始训练了一个原生动态分辨率的 ViT,包括 CLIP、视觉-语言模型对齐和端到端训练等阶段。
2)为了解决多模态大模型在训练和测试阶段 ViT 负载不均衡的问题,引入了窗口注意力机制,有效减少了 ViT 端的计算负担。 ViT 设置中,只有四层是全注意力层,其余层使用窗口注意力。最大窗口大小为 8x8,小于 8x8 的区域不需要填充,而是保持原始尺度,确保模型保持原生分辨率。
3)简化整体网络结构,使 ViT 架构与 LLMs 更加一致,采用了 RMSNorm 和 SwiGLU 结构。
直观对比qwen2-vl 和 qwen2.5vl 视频帧编码