VLM与扩散模型深度整合,图像理解生成编辑三合一模型登场,权重数据训练流程全开源

ModelScope(魔搭)团队发布Nexus-Gen V2,一个同时支持图像理解、生成和编辑的统一模型,而且模型权重、训练流程和数据集全部开源。

VLM和扩散模型被整合到一起了。

ModelScope(魔搭)团队发布Nexus-Gen V2,一个同时支持图像理解、生成和编辑的统一模型,而且模型权重、训练流程和数据集全部开源。

这事儿有多重要?今年以来,GPT-4o-Image、Gemini、Blip3O这些大厂的统一模型都在证明一件事:把图像理解和生成能力塞进一个模型,不仅仅是为了省事,更是因为两种任务的有机结合能带来意想不到的效果。

魔搭团队其实早在五月就发布了V1版本,但他们很快发现了问题:图像理解能力相比原始VLM掉点严重,图像生成对提示词太敏感,编辑细节也保持不好。

于是他们憋了几个月大招,从三个方向全面优化,终于拿出了这个V2版本。

图片

在图像理解上,优化了模型的训练策略,极大程度地保留了VLM的理解能力;

在图像生成上,对所有图像生成样本进行了重标注,采用长短描述同时标注并采样选取的策略,提升了图像生成的鲁棒性,同时加入了中文标注样本,支持了基于中文的图像生成。

在图像编辑上,团队系统性地研究了图像重建效果与图像编码token数量之间的关系,并设计了全新的编辑方案。经过以上优化,Nexus-Gen V2达到了第一梯队统一模型的水平,模型的模型权重和全链路训练流程全部开源。

此外,Nexus-Gen V2使用2600万样本进行训练,包括580万图像理解、1330万图像生成和630万图像编辑样本,这个大规模数据集已经在ModelScope主站上开源。

Nexus-GenV2模型的图像编辑和生成可视化效果下:

图片

△图1 Nexus-Gen 图像生成效果

图片

△图2 Nexus-Gen 图像编辑效果

模型架构设计

Nexus-Gen V2沿用了V1的模型架构设计,如图3 a所示,其核心是将扩散模型作为自回归语言模型(Autoregressive Model)的视觉解码器(Vision Decoder),并使用一个统一的图像编码空间(Image Embedding Space)来连接两者,并统一建模图像理解、生成和编辑任务。

输入图像由视觉编码器(Vision Encoder)编码到统一编码空间中,由自回归模型处理。自回归模型使用预填充自回归策略预测输出图像在编码空间的特征向量,然后由视觉解码器解码为输出图像。

参考现有引用,虽未直接提及使用VLM扩散模型生成一个VLA的具体步骤,但可依据相关信息进行推测。 典型VLM包含视觉编码器、驾驶视觉适配器、文本编码器和大型语言模型(LLM),VLAVLM相比多了一个基于扩散模式的轨迹规划器,且LLM是核心 [^1]。由此推测生成VLA的步骤如下: 1. **构建VLM基础**:搭建视觉编码器、驾驶视觉适配器、文本编码器和大型语言模型(LLM)这四个组件。例如确定合适的视觉编码器架构来处理图像输入;使用驾驶视觉适配器(也叫Input Projector)将不同模态输入数据映射到共享语义空间;构建文本编码器处理文本信息;选择合适的LLM作为核心,可如实践中使用PaliGemma - 3B作为基础模型,它在大小和性能之间有便捷权衡 [^1][^2]。 2. **添加轨迹规划器**:基于扩散模式构建轨迹规划器并集成到已构建好的VLM中,使整个模型成为VLA。 3. **数据准备训练**:准备相关数据用于训练,对于动作专家可添加参数(如添加3亿个参数并从头开始初始化),然后对整个VLA模型进行训练和微调,可参考RoboFlamingo的方式,在少量操作演示上进行微调 [^2][^4]。 ```python # 以下为简单示意代码,实际情况需根据具体模型数据进行调整 # 假设已有VLM模型VLMModel class VLMModel: def __init__(self): # 初始化视觉编码器、驾驶视觉适配器、文本编码器和LLM pass def forward(self, visual_input, text_input): # 前向传播处理 pass # 构建基于扩散模式的轨迹规划器类 class DiffusionTrajectoryPlanner: def __init__(self): # 初始化扩散模式相关参数 pass def plan_trajectory(self, input_data): # 进行轨迹规划 pass # 构建VLA模型类,继承自VLMModel并添加轨迹规划器 class VLA(VLMModel): def __init__(self): super().__init__() self.trajectory_planner = DiffusionTrajectoryPlanner() def forward(self, visual_input, text_input): # 先进行VLM的前向传播 vlm_output = super().forward(visual_input, text_input) # 再进行轨迹规划 trajectory = self.trajectory_planner.plan_trajectory(vlm_output) return trajectory # 创建VLA模型实例 vla_model = VLA() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值