❤️ 如果你也关注 AI 的发展现状,且对 AI 应用开发感兴趣,我会每日分享大模型与 AI 领域的开源项目和应用,提供运行实例和实用教程,帮助你快速上手AI技术!
🥦 AI 在线答疑 -> 智能检索历史文章和开源项目 -> 丰富的 AI 工具库 -> 每日更新 -> 尽在微信公众号 -> 搜一搜:蚝油菜花 🥦
🚀 "机器人开发者必看!清华黑科技打破行业瓶颈:1个模型控制所有机器人类型"
大家好,我是蚝油菜花。当同行还在为不同机器人重复开发代码时,清华团队已经用AI统一了机器人行为范式!
你是否经历过这些崩溃瞬间:
- 🤖 工业机械臂和服务机器人的控制逻辑天差地别
- ⏳ 适配新机型要重新标注上千条示教数据
- 💻 14亿参数的大模型跑起来像老牛拉破车...
今天带来的 UniAct 具身智能框架,正在引发机器人开发范式革命!这个由清华、商汤、北大联合打造的开源项目,通过三大创新点重构行业规则:
- ✅ 原子行为统一编码:把"移动""抓取"等基础动作转化为跨平台通用指令
- ✅ 轻量级高性能架构:0.5亿参数碾压14亿级模型,推理速度提升300%
- ✅ 50条数据快速适配:新机型调试从数月缩短到一杯咖啡的时间
已有开发者用它同时控制机械臂和四足机器人完成协同作业,接下来我们将详解如何用开源版本搭建你的跨平台机器人帝国!
🚀 快速阅读
UniAct 是一个新型的具身基础模型框架,旨在解决不同机器人之间的行为异构性问题。
- 核心功能:通过通用行为空间实现跨平台控制,支持快速适应新环境和机器人。
- 技术原理:基于向量量化构建通用动作空间,结合视觉语言模型提取通用行为,并通过异质解码器实现跨平台控制。
UniAct 是什么
UniAct 是由清华、商汤、北大、上海AI Lab联合推出的具身基础模型框架,旨在解决不同机器人之间的行为异构性问题。通过学习通用行为,UniAct 能够捕捉不同机器人共享的原子行为特征,消除因物理形态和控制接口差异导致的行为异构性。
UniAct 的架构包括通用行为提取器、通用行为空间和异构解码器。通用行为提取器基于视觉语言模型,通过观察和任务目标提取通用行为;通用行为空间以向量量化码本形式实现,每个向量代表一种原子行为;异构解码器将通用行为翻译为特定机器人的控制信号。
UniAct 的主要功能
- 通用动作编码:UniAct 将不同机器人的原子行为(如"移动到目标位置"或"避开障碍物")通过向量量化形成一个通用的 codebook,每个 token 代表一种可跨平台共享的通用技能。
- 轻量化架构与高效性能:UniAct-0.5B 模型仅需 0.5 亿参数,在真实与模拟环境的任务测试中,表现已经超过了参数达到 14 亿的 OpenVLA 模型。
- 快速适应新环境和机器人:UniAct 仅需 50 条专用示教数据即可完成模型在新环境中的微调,能快速适应新机器人和控制接口。
- 跨领域数据利用:UniAct 通过通用行为空间,能更好地利用跨领域的数据进行训练,在不同机器人和环境中实现更高效的泛化。
- 一致的行为模式:在不同的部署场景和机器人类型上,同一个通用动作可以表现出一致的行为模式。
UniAct 的技术原理
- 通用动作空间(Universal Action Space):UniAct 通过向量量化(Vector Quantization)构建了一个离散的通用动作空间。这个空间被设计为一个向量化的码本(codebook),每个向量嵌入代表一种通用的原子行为。
- 通用动作提取器(Universal Action Extractor):UniAct 基于视觉语言模型(VLM)的通用动作提取器来识别和提取通用动作。提取器在给定观察结果和任务目标的情况下,输出选择通用动作的概率。
- 异质解码器(Heterogeneous Decoders):为了将通用动作翻译为特定机器人的可执行命令,UniAct 引入了异质解码器。这些解码器针对不同的机器人平台进行设计,能够根据机器人的具体特征将通用动作转换为具体的控制信号。
- 轻量化架构与高效训练:UniAct 采用了轻量化的模型架构,即使在低参数设置下也能保持良好的性能。UniAct 通过行为克隆损失进行训练,并根据动作标签的性质选择合适的损失函数。
如何运行 UniAct
1. 安装依赖
bash
git clone https://github.com/2toinf/UniAct-Preview.git
cd UniAct-Preview
pip install -r requirements.txt
2. 加载模型
首先从 [Model Zoo](#Model Zoo "#model-zoo") 下载预训练的 UniAct 模型。
python
import models.UniAct_V1
from timm.models import create_model
uniact_model = create_model("UniAct_05B_CodeBook_256_V1")
# 加载预训练的通用动作提取器 / 视觉骨干 / 码本
uniact_model.load_state_dict(torch.load("model path here"), strict=False)
# 加载特定机器人的解码器
uniact_model.load_state_dict(torch.load("decoder path here"), strict=False)
3. 准备输入
python
from datasets.utils import LLAVAOV_PREPROCESSOR, R18_PREPROCESSOR
from PIL import Image
proprios = None # 默认禁用 proprios,用于 ACT 解码器(需要归一化)
language_instruction = "your language instruction here"
image_list = ["image-view1 path here", "image-view2 path here"]
img_np = []
img_tensor = []
for image in image_list:
with Image.open(image) as img:
img = img.convert('RGB')
img_np.append(np.asarray(img))
img_tensor.append(R18_PREPROCESSOR(img))
img_np = np.stack(img_np),
img_tensor = torch.stack(img_tensor),
text = [LLAVAOV_PREPROCESSOR.apply_chat_template([
{
"role": "user",
"content": [
{"type": "video"},
{"type": "text", "text": language_instruction},
]
}], add_generation_prompt=True)]
video = [np.expand_dims(img_np[0], axis=0)] # 仅使用主视图进行提取!
inputs = LLAVAOV_PREPROCESSOR(videos=video, text=text, return_tensors="pt", padding=True)
inputs = {'inputs': inputs.to('cuda', torch.bfloat16),
'images': img_tensor.unsqueeze(0).to('cuda', torch.bfloat16),
}
if proprios is not None: inputs['proprios'] = proprios.to('cuda', torch.bfloat16)
4. 模型推理
python
pred_action = uniact_model.infer(
domain_name = "libero-1-rgb", # 检查 model_config.py 中的 domain_name
**inputs
)
资源
- 项目主页 :2toinf.github.io/UniAct/
- GitHub 仓库 :github.com/2toinf/UniA...
❤️ 如果你也关注 AI 的发展现状,且对 AI 应用开发感兴趣,我会每日分享大模型与 AI 领域的开源项目和应用,提供运行实例和实用教程,帮助你快速上手AI技术!
🥦 AI 在线答疑 -> 智能检索历史文章和开源项目 -> 丰富的 AI 工具库 -> 每日更新 -> 尽在微信公众号 -> 搜一搜:蚝油菜花 🥦