具身智能论文阅读笔记

关于具身智能领域的论文

具身智能: 集成了物理上的机械以及 ai(一般是常用的机器学习模型)的一种智能体, 这个词与 robotics(机器人学)的区别是, 后者较为关心硬件上的很多问题, 以及操作系统等偏底层的问题; 而具身智能较为关注抽象层面的智能, 暂时屏蔽掉底层的一些细节

Semantic Mapping 语义地图

survey

前言

语义地图以结构化的方式捕获环境信息, 让代理能够利用这些信息进行推理
由于具身智能面对的现实问题复杂性, 它会需要很多种 ai 技术, 单单是抓取一件物品, 就需要包括视觉辨识, 自然语言的理解与推理, 导航, 操控机械臂的能力等等
在这一系列任务中, 辨识理解环境是第一步, 在认知科学中, 研究者发现人类和动物实际上也会将现实的空间抽象化为一种“认知地图”, 也就是说, 对我们的大脑来说, 一处地点在脑中的印象不只是一些有长宽高形状的障碍物, 还有名称, 物理性质, 用途之类的“语义”, 这一定程度上启发了研究者使用类似的机制让 ai 理解环境, 也就是语义地图
为了方便, 将建立(语义)地图的过程简称为映射(mapping)
对于导航, 寻物等任务, 当前主流的流程可分为三步:

  1. 将当前的环境合理地建立数据模型
  2. 定位自己的当前位置
  3. 路径规划

智能机器人可以分为很多种, 我们只考虑不联网(用不了 gps), 没有复杂传感器的一类, 就叫 bot 吧, bot 想建立地图, 最直观的方法就是以自己为中心开始认知环境, 这就有点类似人类的认路, 对这种机器人来说,1. 2.其实可以视为一体, 因为在对当前环境建模的过程中可以自然地知道自己的位置, 主流的技术也是这么做的, 称为 simultaneous localization and mapping (SLAM)
总结一下, 接下来要讨论的 SLAM 是一种对环境的不断认知地同时进行地图制定及定位的一种技术
现在设想一个传统印象里的机器人, 它可能有光学或者声学的某些传感器, 这些传感器能很容易地捕捉到附近的障碍物, 这和初中生物讲的蝙蝠超声波定位也没什么本质区别, 但这些障碍物信息并不包括语义信息
附带语义的 slam 称为 semantic slam, 常见的做法是对传感器画面做特征提取, 例如可以提取成一系列词汇, 这称为 Bag of Visual Words, 得到这些词后, 查找词典匹配到一个具体物品; 如果想要更好的效果, 则可以进行深度学习

名词介绍

如果我们想要真正能用的机器人, 就不得不想办法让它能理解概念性的东西, 例如自然语言里的上下文, 词义向量, 而在具身智能的问题场景中, 则需要带有语义的地图, 例如客厅和餐厅都摆着大桌子, 要区分这两种房间就需要很多上下文信息
以下开始介绍一些细节, 首先是地图的表示方法(结构), 考虑室内这个场景, 由于其最大高度是固定的, 因此可以比较方便地使用 2d 的拓扑图, 网格来表示, 除此之后也可以使用 3d 的点云或者其他混合结构
我们首先做的是物体辨识和分类问题, 在室内, 例如普通住房中, 房间、家具的种类都是有限且数量级很小的, 对于机器人, 用内置芯片的算力可能就能做出来, 在机器人探索的过程中, 得到的各个空间、物体关系可以不断存入语义地图中供之后调用, 例如让机器人找一个苹果, 它能发现苹果在冰箱里面, 拓扑关系上可能就是客厅-冰箱-苹果, 这样之后找苹果也可以跟着这条路径走

  • 开放词汇语义地图(Open-Vocabulary Semantic Maps): 系统能够识别和处理未在训练中见过的新对象或特征, 而不仅仅局限于预定义的类别; 与其相反的情况就可以视为是一个分类问题
  • Embodied AI tasks: 大致可分为: 探索、导航、操纵, 更细粒度的划分可以使用目标的类型, 例如图像目标比定位上的目标需要更细的信息
  • End-to-end | Modular approaches: 前者直接用传感器信息生成行动, 优点是对中小型任务效果不错, 但复杂的 3d 空间, 长期路径规划等任务中表现不佳, 此外也无法复用; 后者会将输入信息投入不同模块中处理例如编码器, 映射, 探索等, 最后生成行动, 优点是各个模块可以分开训练或者使用预训练模型
  • e2e 相关
    • intermediate map representation: 输入和输出之间的中间数据, 一般用于提取关键信息
    • egocentric map: 从个体的视角(通常是观察者或移动体的视角)表示环境的地图
  • 模块化相关
    • 一般包括: visual encodermapperexploration(决定去哪探索)、planner(决定机器采取什么动作), 以上提及的这些是顺序关系
    • 视觉编码器: 将观察转化为带有语义的编码, 一般使用预训练的模型, 最后可以将检测到的物体放入标好名字的 box
    • 映射器: 接受编码器的特征信息, 构建语义地图
    • 探索: 类似红警 2 的探图能产生信息优势, 由于知道越多的地图信息应该是越好的, 因此设置这个模块鼓励智能探索未知区域, 优先探索哪边可以选取合适的方法, 例如图文相关型, VLM 输出的最佳方向
    • 计划: 在地图建后, 需要指定导航路径, 这部分取决于机器的运动方式等细节
  • Active SLAM: 强调机器人自己能选择以某种方式主动收集地图信息用于映射, 比如自己走几步, 让摄像头拍到更多画面, 也就是相比 ALAM 增加了 planning 部分。

具体环节:

  1. localization: 非常依赖于传感器, 由于本领域相对不关注底层细节, 一般假设每次采样都获得了最佳结果或者每次行动都实现了理想的位移
    1. 由于现实中不可能有理想情况, 我们有 Loop Closure(闭环检测) 这样的算法来矫正误差, 该算法会利用再次访问之前访问过的地点时的数据矫正对行为位移的估计值
  2. feature extraction: 关键部分, 后文详细介绍
  3. projection: 存储 3 维地图是一件非常难的事, 而且常识上高度轴上的物体关系较简单, 因此我们常用 2 维地图, 学习时将 3 维信息添加到 2 维地图上, 如果我们通过相机来获取空间信息, 那么过程就是, 根据相机的内置功能算出物体的世界坐标(X, Y, Z)将世界坐标投影到 2 维地图坐标(x, y),
  4. Accumulation: 上一步中可能遇到不同的物体堆到同一个二维点的情况, 为此有很多方法, 例如取最大, 取平均, 等, 其中可学习的方法可以有带有 LSTM 或者 GRU 的 RNN

此外还有一些权衡的地方:

  • Egocentric vs allocentric
  • Tracking visited areas
  • View point selection: 固定视角的摄像头或者全局摄像头
  • Online vs offline map building: 考虑到盲点等问题, 一般 online 是更好的
  • 现实世界的复杂性: 例如我们以上提到的 localization 假设与现实肯定不符的

总结一下常见的问题:

  • 计算量较大: 尤其对于本地模型来说, 更需要优秀的算法, 部分任务还会要求低延迟
  • 容量需求: 对复杂的场景, 传统地图已经很庞大了, 加上语义, 复杂度更高, 储存和更新都是个问题
  • 噪声: 现实世界的噪声很多, 还有各种随机因素, 学界目前没有很好的过滤方法
  • 动态的环境: 如果环境不断变化, 现有的方法可能无法有效地更新
  • 语义理解: 这部分较为依赖 clip 之类的视觉语言模型或者 llm
  • 可用性和可靠性: 事实上, 目前的 em-ai 都很难落地
  • 标准化: 目前的机器人或者 ai 社区使用不同的系统或者平台

地图结构

  1. Spatial map building

我们将地图做成一个(M×N×K)的网格, 其中(M, N)是空间上的维度, K 是语义上的 channel, 一般来说过程是这样的: 划分输入图片-> 把图片投影到自我为中心的地图 ego_map -> ego_map 注册进外部坐标系的 allo_map -> 降噪

  1. Topological map building

类似图论, 用(v, e)两个集合就可以表示一个图, 节点和边可以各自携带语义, agent 在更新中定位或者新建自己所处 node, 并可以根据一轮中学习的信息对整个图进行修改

  1. point cloud map

由于成本较大, 这方面应用有限

下面对各个结构详细介绍

Spatial grid map

现在对室内具身智能的研究通常用 MP3D, HM3D 等数据集, 这些都是对现实空间的 3d 建模, 都小于 1000 平米, 一个 cell 表示 400-900 平方厘米的空间, 有时也会再拓展一个高度维
早期研究直接使用自我中心的映射, 并直接端到端训练, 这样的缺点是无法认知到全局的空间结构, 甚至还会忘掉过去的学习结果, 于是就需要得到外部坐标系的空间地图
但由于智能体只能观察到自己传感器的部分, 也就是其观察内容是自我中心的, 所以想要得到外部坐标系的空间模型, 就需要有一种办法通过一次次的观察结果一笔一笔“画”出全局的地图
我们将这种办法称为 registration 注册, 也就是将每次的自我中心观察提取到的图像特征一点点放进全局地图, 这其实和人类画地图的方向比较像
每一轮中, 将观察信息融入到一些特定的 grid cells, 如果有重叠, 则通过某种方法把两个值叠加为一个结果值, 这种叠加称为 aggregation(聚合)
有一种基于注册的方法叫做 MapNet, 即通过使用已知的相机内参和对深度的测算, 将 egocentric 图像特征投影到一个 2D 俯视网格上
它执行 注册 的方法是: 首先获取一系列旋转多次后的 egocentric 地图, 然后与之前 allocentric 地图进行 密集匹配, 以确定代理在地图上的当前位置

另一种方法是: 直接通过相机内置函数将图片像素转化为(相对于相机的)3d 坐标, 由于相机的 pose 我们是知道的, 所以可以直接将其转化为世界坐标, 并将其体素化, 投影到 2d 平面时, 我们可以把这些体素的 weight 也压上去
这样的缺点就是太依赖相机功能, 对于现实的噪声敏感, 需要额外的降噪步骤, 使用这种方法的 Semantic MapNetMOPA 都各自用了一些降噪算法, 前者还发现, 先对图像编码, 然后投影, 最后执行分割会减少噪声, 甚至可以不去降噪

总结: 使用 grid 能比较方便地表示空间, 也能方便 agent 学习, 但固定的宽高对于变化环境不太方便, 而且内存占用较多

  • 密集匹配(dense matching) : 计算机视觉和图像处理中的一种技术, 用于在图像或视频序列中找到像素级别的对应关系。与稀疏匹配(只在特定特征点上进行匹配)不同, 密集匹配试图为图像中的每一个像素找到对应的像素。
  • pose: 物体在三维空间中的位置和方向
  • 体素(Voxel): 是“体积像素(volume pixel)”的缩写。它是三维空间中的最小单元, 具有位置、大小和属性(如颜色、密度等)
  • 体素化(voxelized): 将三维空间中的物体或场景表示为一组 体素(voxel) 的过程

Topological map

拓扑图更注重节点(地标)之间的关系, 这其实也是人类认路的一种方法, 符合常识, 但缺点是抽象层级较高
首先考虑怎么表示给出一个空间, 怎么画它的拓扑图, 什么是节点, 什么是边呢?符合直觉的想法是, 节点有较为重要的语义信息, 例如是一种房间的典型物体, 而边描述节点之间的连接性, 常见方法中节点通常存储图像特征或时间信息 (访问时间戳) 等信息, 而边缘可以存储一对节点之间的相对 pose
实际训练中, 可以让模型预先跑几遍结合这几次的轨迹画出一个 graph, 然后的规划过程寻找 graph 中最接近的节点, 这称为 Semi-Parametric Topological Memory (SPTM), 这种做法有很多缺点, 例如预探索可能有很多没走到的路, 不适合未知场景等
为了解决这种问题, 我们需要让 agent 能实时地感知到自己有哪边不了解, 应该先探索那边, 也就是 online 学习, 一种做法叫 Neural Topological SLAM (NTS), 它使用 Graph Update 模块更新 map, Global Policy 模块对 map 采样, Local Policy 模块输出离散的导航行动; 其中图更新模块作用如下:

  1. 定位: 尝试将智能体在前一个时间戳的图中进行定位
  2. 对已存在节点:
    1. 如果智能体成功定位到一个现有节点, 便在该节点与上一个时间戳的节点之间添加一条边
    2. 存储两个节点之间的相对 pose
  3. 如果智能体无法定位, 则在图中添加一个新节点

这就产生了另一个问题, 什么情况下是在已有节点, 什么情况下要新增节点呢?这需要判断两个观察值是否相似, 可以视为一个分类(二分)问题, 用一个既有的分类器计算, 也可以用可达性估计或者一些预训练的无监督网络处理(附近拍的观察可以视为一类, 这样就不用手动标注)
与网格地图相比, 拓扑的空间占用少, 但也因此可能漏掉细粒度的信息

Point-cloud map

用过建模软件的都知道, 出于优化性能考虑, 复杂的模型经常用三角形 mesh 表示, 由于训练智能体大多是在虚拟环境中, 点云与 meshes 有不错的适配性
而对于语义信息, 可以直接为每个点赋予一定的寓意, 最后我们就得到了一个不那么传统的 map, 我们一般用一个神经网络来赋予每个(x, y, z)点一个语义向量, 这个网络称为 neural field
这方面的应用暂时不算多, 点云更多被用在场景理解或者分类上, 这里暂且略过少数几个例子
光看简介就能看出来, 点云的计算和存储成本都很高, 并且对于稀疏的场景, 提供的信息可能也不足, 是一种有待探索的结构

Hybrid map

混合方法也是常见的思路, 一些相关的应用有:

  • 拓扑更能捕捉空间之间的关系, 而 grid 更有距离上的细节, 两者结合称为 topometric map
    • 例如, 先生成一个粗糙的拓扑图, 根据拓扑图完善一个细粒度的 grid; 实验发现, 拓扑图能修正一些巨大的测量问题, 也就是全局问题, 而网格则能更好地解决局部问题
    • 另一篇文章中, 为了处理紧凑的环境, 作者将转角和走廊用拓扑表示, 房间则用网格表示, 由于一般来说我们只需要房间里有详细的信息, 而对交通空间不关心具体情况
    • 以上两篇都比较古早, 最近的一种基于 bert 的文章离线训练 hybrid maps, 然后训练一个多模态模型进行语言指导式的空间推理
    • 还有结合三者的, 网格存储 occupancy(障碍物)信息, 拓扑图存储地标及其连通性, 点云则存储详细的语义信息
  • 构建能够捕捉场景语义层次的地图可以实现不同层次的推理, 例如不同的节点实际上在不同层级(坐标系)中而, 边表示坐标系的转化关系; 除了分层, 还可以额外存储物体, agent 之间的时空关系, 实验证明分层的场景表示对复杂的环境效果更好, 这样的技术甚至可以用来对城市的交通系统进行建模

混用这些地图结构时需谨慎考虑各自的特点, 例如拓扑和点云地图在大环境中比网格地图更具可扩展性, 但点云需要更多存储空间, 拓扑地图所需的存储空间最少

地图编码 map encoding

地图编码是指将信息通过某种方式存储在语义地图中, 而这些信息可以分为隐式和显式的, 显式指的是可以被直接解释或者理解的信息, 例如像素的颜色, object 所属的类别等; 隐式则指一些提取出来的特征, 无法被直接地理解

显式编码

那么根据常识, 至少障碍物信息, 也就是 occupancy information 信息是很值得显式存储的, 并且可以用一个 bool 就能表示是否占用的二元关系
此外, 为了鼓励 agent 探索未去过的区域, Active Neural SLAM 方法会存储一个 bool 值表示是否已探索
而对于更复杂或者更长期的任务, 例如针对语义目标的导航任务, 就需要额外存储语义信息, 例如 SemExp 会额外存储 agent 认知的语义类别标签, 这些标签通过 MaskRCNN 产生, 在 aggregate 时使用 element-wise max pooling(取各个子区域里的最大值), 且保留最新的预测值
首先将图像分割再投影会造成 label splattering 现象, 也就是一些噪声标签会散布到多个 grid cells, 这是因为对深度的观察会受到环境噪声的影响; 但首先投影编码后的特征再分割能实现一定的降噪效果(需要预探索)
此外, 图像, 文字, 目标检测概率(对目标属于某个类别的置信度评分)等值也可以作为存储标签, 近年一些图文, 图图匹配也有不错的效果; 存储音频信息(例如声音强度)的地图在视听导航任务中也有作用;
以上都是网格地图的应用, 拓扑图中, 可存储每次都会替换更新的访问时间戳, 用来表示地点之间的时间相对关系

总结: 显式编码的优点是其可解释性, 对于具体的任务, 我们可以选择常识上有益的信息类型并编码存储, 但是这较为依赖人类对问题的理解

隐式编码

大部分的早期工作使用预训练的基于封闭词汇表的视觉模型提取特征, 例如 cnn, 近年来, 更多使用预训练的基于开放词汇表的大型视觉-语言模型
封闭词汇表:

可以使用 cnn 或者流行的 vision model 例如 ResNet 除了图像以外, 也可以根据可微分的映射器和 planner 进行非监督学习, 通过计算微分, 模型可以不断优化性能, 地图则可以通过 differentiable warp 不断集成

开放词汇表:

封闭词汇表最大的漏洞是: 无法编码不认识的特征, Large Vision-Language Model (LVLM)CLIP 可以缓解这个问题, 这些模型有庞大的训练资料, 对于不认识的物品, 可以通过已有知识建立新的类别
CLIP 有强大的图文匹配能力, 利用这点, 可以在 2Dmap 中存储图文相似得分(value maps), 这在下游应用例如 zero-shot 的语言驱动的导航中表现良好, 也有论文将其拓展到 3D
尽管其匹配能力相比封闭词汇表十分强大, 但仅限于图片和文本的匹配, 依旧缺乏更详细的语义和空间信息, 因此空间推理能力欠缺
为了增强推理能力, 需要找到判断物体在图片中的位置, 以及提取特征的方法, 一个思路是对图片的所有像素嵌入一些特征, 根据摄像头的深度信息, 可以得知这些像素对应 3d 空间的坐标, 随后投影(聚合)到 2d 网格上, 在查询时, 先从输入提取出物品名, 再和这些像素匹配
这个方法的缺点是, 并没有做到物体级别的语义, 可能忽略了空间上的一些关系, 此外很多像素可能就是空气, 毫无语义信息, 没有必要存储。24 年(OneMap)的一种方法使用分层的编码器缓解了这个问题
NLMap(grid): 如果想直接辨别图像里的物品, 则可以使用 class-agnostic region proposal network 来划分出感兴趣的图像区域(region), 对于这些 region, 提取特征并将其存入 3d map(携带坐标和估计的大小信息), 这样一来, 对每次查询(会被先转化为物体名), 只要查找匹配度最高的 region 就可以了
ConceptGraphs(topo): 使用无类别的 2d 分割算法划分出物体, 这些物体可以直接作为拓扑图的节点并存储一些信息, 除了特征信息外, 例如对其的描述, Candidate Masks 的点云等也可以存储。接下来考虑边, 在这种方法中, 考察物体的点云是否有几何相似性或者重叠部分, 有两个物体的点云重合度到达一个阈值, 则认为它们是空间相关的, 从而建立边。边也可以额外存储信息, 例如大模型对链接方关系的描述
开放词汇表映射编码的优点是它可以一次构建, 然后复用到不同的下游任务。它可以有效地使用开放词汇表进行查询, 并且具有较高的可解释性
缺点是, 当前阶段大模型的训练开销和计算开销都极大

  • Zero-Shot Manner(零样本方式): 在机器学习和人工智能中, 模型能够在没有针对特定任务或类别进行微调的情况下, 直接执行任务的能力
  • class-agnostic region proposal network: 一种用于目标检测的网络架构, 旨在生成图像中潜在目标的区域分割, 而无需事先知道目标的具体类别, 如 ViLD
  • Candidate Masks: 计算机视觉中的一种概念, 通常用于目标检测和图像分割任务。它们代表了图像中可能包含目标的区域或对象的区域

地图评估 Map Evaluation

很明显, 对智能效果最直接的评价标准就是 agent 执行任务的效果, 因此目前对 map 的评估较少, 本文讨论如何从准确性, 完整性, 一致性, 健壮性以及实用性的角度评价地图对于下游任务的功效

  • Utility 实用性: 大部分工作将语义地图作为一个中间步骤, planner 使用它来规划路径, 产生动作指令, 如果我们只用地图做这一件事, 那么直接看任务完成地怎么样就是最好的评价标准了; 但对一些和地图有关的任务, 例如导航、勘探, 则也可以用覆盖率, 导航准确性等作为指标
  • Accuracy 准确性: 地图准确度是指与现实地形进行比较时, 地图捕获语义信息的准确度, 问题在于, 很多时候现实的地理信息较难获取。如果只论语义的比对, 则可以使用一些语义分割上的指标, 与智能的语义划分进行比对; 还有一个问题是, 这种比较对常常种类有限的显式特征较为方便, 但对隐式的特征则无从下手, 对此只能再用一个分割器将隐式转化为显式, 又或者人工评估
  • Completeness 完整性: 地图是否完整地表示环境, 这包括了几何和语义层面。这点很大程度上取决于机器人在下游任务中探索环境的彻底程度, 并且与 “停止标准 stopping criteria” 密切相关, 一般来说, 会在任务完成或者达到时间限制时停止; 而语义上的完整则很难测算, 几乎没有成熟的方法
  • Consistency 一致性: 几何一致性指的是地图的空间结构能反映环境物理布局的准确性, 不严谨的说可以视为地图局部细节(距离, 角度, 物体相对位置)的准确性, 模拟环境下不存在传感器噪声, 因此几乎可以不考虑, 但实际情况中, 由于各种因素影响, 代理可能错估自己走过的距离, 相对位置等, 从而破坏一致性; 语义一致性则指随着机器人运动, 语义信息和物理位置能否对齐。由于当前还处于理论阶段, 这方面的研究尚且不足
  • Robustness 健壮性: 在不可预测或动态环境中的可靠性, 由于现在大量使用预训练模型, 可以用预测的置信度来评估; 此外也可以使用模型预测的方差来评估, 但由于能落地的应用有限, 这方面的研究也比较缺乏

展望未来与结语

当前的趋势为创建灵活、通用、开放词汇和可查询的地图, 以支持多种任务; 为了提高空间推理能力, 密集, 可扩展和内存高效也是一种方向

  • General-purpose maps: 由于机器人任务多样化, 通用的模型明显有着重要意义, 更有通用能力的开放词汇表也可能是趋势, 这需要对计算成本和内存消耗的平衡
  • Dense yet efficient maps: 为了更好的空间推理能力, 需要高密度的地图, 但又为了计算效率, 需要其尽可能节省内存和算力, 常用方法中拓扑图过于稀疏难以捕捉细粒度信息, grid 难以处理多层面信息, 点云则过于密集, 性能消耗大, 可能需要一个更好的结构
  • Dynamic maps: 当前的地图技术基本都是基于静态环境, 对动态环境如室外的交通, 则很难有高效地建模方法
  • Hybrid map structure: 上文已经提到过混合结构的优点, 但如何融合或者切换也是值得研究的方面
  • Devising evaluation metrics: 与下游任务中代理表现的评估相比, 语义地图的评估在具身 AI 研究中受到的关注较少。为了推动该领域的发展, 需要强调使用准确性、完整性、一致性和健壮性等指标对地图进行评估。

DualMap: 在线开放词汇语义建图助力智能体自然语言导航

背景

鉴于近年 ai 领域的发展, 机器人领域逐渐开始研究对于自然语言理解能力的集成, 对此可以分为 3 种任务:

  1. 开放词汇理解
  2. 高效地在线建图
  3. 动态环境导航

一些经典方法如 yolo(深度学习的对象检测模型), 虽然表现较为不错, 但鉴于它基于封闭的词汇表, 对于 "不认识" 的类别是没有辨别能力的
而所谓的开放词汇, 就是需要让模型能够理解没见过的类型, 并逐渐学习怎么更好地分类和认知, 常见的方法有:

  1. 通过图像标注模型标出标签, 再根据标签使用基于封闭集合的检测器, 不过图像模型成本较为高昂, 很难在线学习
  2. 类别无关分割: 使用一种不依赖具体类别的专用分割模型, 再借助视觉基础模型(VFM)提取语义特征, 开销也较大

其主要的创新点正如其名, 在开放词汇的基础上使用两种地图, 空间占用较低的抽象地图用于导航任务, 具象地图在需要更多细节时用于参考

DualMap 的改进

  1. 开放词汇的目标分割
    利用 llm 提供类别, 让 yolo 快速生成粗略的目标检测结果, 并通过 mobileSAM 生成分割掩码; 同时让 FastSAM(开放词汇表分割模型)捕捉 yolo 的封闭表外的对象(这步可能会过度分割, 之后还会进行合并操作); 对两者进行融合时 yolo 优先, 补充不重复的 FastSAM 片段;这样的设计主要是为了使用成本较低的 yolo 和 fastsam, 从而实现在线学习
    这里补充一下对每一帧 I 的处理, 事实上有三个模块会并行地使用 I, 即上述的 YOLO, FastSAM 以及一个点云生成器, 点云地图和语义信息无关, 只是用于提供空间布局

  2. 语义特征处理
    由于我们希望能让机器人做到能理解模糊的指令, 就需要让地图也携带语义信息, 这方面也有很方便的图文嵌入模型例如 CLIP, CLIP 提供对图像的编码功能, 在第一步的分割后, 对裁剪出的图像区域编码为 \(f_{image}\) , 如果之前的分割给出应该类别标签, 对标签编码为 \(f_{text}\) , 最后通过加权求和得到总的特征
    \[\mathbf{f}=w_{\mathrm{image}}\mathbf{f}_{\mathrm{image}}+w_{\mathrm{text}}\mathbf{f}_{\mathrm{text}},\qquad\mathbf {f}_{\{ {\mathrm{image,~text}\}}} \in\mathbb{R}^{d}\]
    对于 FastSAM 标记为“null”的对象, 用所有已知类别嵌入的归一化平均文本特征替换 \(f_{text}\)  , 以消除语义偏差

  3. 观察结构
    摄像机拍到的一帧为 I, 每个 I 提取出一个观察集 Z, Z 由 N 个片段 \(z_i\) 组成, z 称为观察 , 可表示为: \(z=(P_{z},f_{z},y_{z},t_{z})\)
    其中 P 表示分割区域从深度图投影到世界坐标系中生成的 3D 点云; f 表示之前我们得到的语义特征; y 表示 yolo 检测的对象类别, 对于 fastSAM 分辨出的则设置为 null; t 为观测的时间戳

  4. 场景建模
    本模型使用点云对场景建模, 但为了减少性能消耗, 只在遇到姿态变化大的帧时通过投影(相机带有深度信息)更新点云(这个更新线程并行低频运行)

dualmap 最大的特点正如其名, 使用两种 Map, 下文分别介绍

具象地图

  1. 地图初始化
    地图有一系列对象组成, 每个对象, 这里称为 o, \(o=(P_{o},y_{o},f_{o},L_{o})\)
    其结构类似于观察 z, 但其中的 L 记录与对象关联的观测集, 即 L=set{z}

  2. 地图更新
    当新的观测集合到达时, 系统开始新一轮匹配(第一轮所有观测 z 都会分配一个对象 o), 定义一个相似度矩阵 \({ S}\in R^{\mathbb{N}{\times}\mathcal{M}}\) , 从点云重合度和语义相似度两个角度衡量
    \[S(z_{i},o_{j})=\mathrm{cos}(f_{z_{i}},f_{o_{j}})+\mathrm{Overlap}(P_{z_{i}},P_{o_{j}})\] 而更新条件用一个简单的阈值 \(\tau\) 表示, 超过阈值认为是相同对象, 更新过程则是对 f 求新增一个 f 后的平均, 扩充点云, L 内部新增加一个观察 z; 否则新建对象

  3. 地图维护
    一般来说, 语义地图最“昂贵”的地方就是对 3d 物体进行合并, 为了避免这种开销, 通过轻量级的内部对象状态检查来维护地图的保真度, 可分为:

  • 稳定性检查: 对一个较长时间未更新的对象
    • 如果有足够观测次数, 至少有 2/3 的类别是同一个, 则保留
    • 否则删除
  • 分割检测: 如果有若干连续帧(每一帧产生一个观察集)中在同一时间步内出现具有不同类别 ID 的观测, 例如对象 chair 连续 3 帧对应的时间步内有两个类别标签 chair 和 cushion
    • 触发分割操作, 将对象的观测列表按类别 ID 分割并创建新对象

抽象地图

上一节我们讨论的地图依然是不包含全部语义信息, 只有对象(包括一些类别 id)信息的具象地图
而相比前者, 抽象地图牺牲易变对象, 只存储锚点对象, 且新增一些语义信息与空间关系信息, 具体包括:

  1. 锚点对象
    1. 首先使用两个代表性的锚点, 易变类别列表(list)对现有对象分类, 使用 CLIP 对对象编码得到特征 f, 如果 f 和两个列表的近似度相差达到一个门槛值, 则分到相似度更高的一类, 此时的门槛值较小, 仅设 0.05
    2. 除了 1.中的两个列表, 典型锚点对象的列表还有一个存储对应描述信息的列表, 对 1.中没有决定的对象, 计算其特征与描述列表的相似度, 这里设一个较大的门槛值 0.5, 并且强制二分
    3. 丢弃易变对象的非语义属性(因为对导航任务没用)
  2. 空间关系(易变与锚点对象之间), 以 on 关系为主:
    1. 以锚点对象点云的 Z 轴直方图以提取其支撑平面, 计算对象与锚点 2d 投影的重叠比例, 如果两者重叠且对象底部到支撑平面的垂直距离小于阈值, 则存在 on 关系
    2. 建立空间关系后, 易变对象的语义特征 f 将存储于对应锚点对象的特征列表 L(L 存储于其关联的易变对象语义特征), 对每个锚点对象 a, \(a\,=\,(P_{a},f_{a},y_{a},L_{a})\)
  3. 场景布局
    1. 将点云投影到鸟瞰平面, 划分出单元格, 对最密集的地方, 视为墙壁等结构物, 这种结构物只在新的查询请求到来时更新

导航策略

  1. 候选检索
    对查询语句, 用 CLIP 编码为语义特征, 并与我们现有的锚点以及易变对象的特征集比较, 得分最高者作为候选, 候选锚点称为 a*
    锚点得分的计算公式:

\[s(a)=\mathrm{max}\Biggl(\mathrm{cos}\big(f_{q},\,f_{a}\big),\,\mathrm{max\underset{i}\,cos}\big(f_{q},\,f_{v i}\big)\Big)\] 其中 q 下标表示查询, a 下标表示锚点对象, vi 下标表示易变对象

  1. 导航策略
    1. 全局路径规划: 使用基于 Voronoi 图的规划器在抽象地图上规划一条通往候选锚点的全局路径; 智能体移动时, 会逐步构建局部具象地图, 局部地图中的对象也可以用于匹配
    2. 局部路径规划: 对局部具象地图中的对象, 计算其特征与查询特征的余弦相似度 s, 如果 s 接近之前的全局候选相似度, 且正好在去之前的候选对象的路上, 使用 RRT*算法规划局部路径
    3. 动态环境导航: 如果 a*附近没有可信匹配, 那么环境可能变化, 系统会更新抽象地图 Ma'重新寻找候选
      1. Ma'会将局部具象地图中的稳定对象合并, 详解下文
      2. 更新地图后, 全局相似度分数依旧使用过去的版本, 即保留历史上下文信息
  2. 抽象地图更新
    1. 对局部具象地图中的稳定对象, 进行一轮抽象化得到新的锚点 \(a_{new}\)
    2. 每个 \(a_{new}\) 与现有的 a 比较, 计算重叠率
      1. 如果重叠率超过门槛值, 说明 \(a_{new}\) 和 a 有一定关系, 更新: \(f_{a}~\longleftarrow~{\frac{\left|P_{a}\right|\cdot{f}_{a} + \left|\mathcal{P}_{a_{\mathrm{new}} }\right|\cdot\ {f}a_{\mathrm{new}} } {\left|\mathcal{P}_{a}\right|\ +\left|\mathcal{P}_{a_{\mathrm{new} } }\right|} }\)
      2. 如果超过更严格的阈值, 则用 \(L_{a_{new}}\) 替代 La
      3. 如果以上都不满足, 将 \(a_{new}\) 作为新节点插入抽象地图中
  • RRT*(Rapidly-exploring Random Tree Star) 算法: 一种用于路径规划的优化算法, 尤其适用于高维空间中的移动机器人和其他自动化系统; 使用随机采样的方法在配置空间中探索路径, 逐步构建一棵树, 与基本的 RRT 算法不同, RRT* 在扩展树的过程中, 会不断优化已有路径, 尽量减少路径的成本
  • 平均交并比(mIoU): 计算分割或检测任务中预测区域与真实区域交集与并集之比的平均值
  • 频率加权交并比(F-mIoU): 对 mIoU 的一种加权版本, 考虑了每个类在数据集中出现的频率, 将每个类的 IoU 乘以该类在数据集中出现的频率, 然后求和, 最后除以总频率

测试结构与总结

定义两种典型的变化: In-anchor relocation(和一个锚点有关的对象移动位置但不改变和锚点关系, 例如桌子上移动水杯)、Cross-anchor relocation(易变对象转换锚点, 例如从桌子移到架子上)
对锚内变化, dualmap 可以通过更新局部具体地图找到目标;对于跨锚点变化, dualmap 可以通过更新抽象地图解决
ConceptGraphsHOV-SG 相比, dualmap 在表现提升之外, 内存使用量大大减少, 相比 HOV-SG 减少了 96%以上, 这是因为其避免了 3d 合并开销, 抛弃了多余的易变对象非语义数据, 并执行稳定性检查减少噪声数据等
消融实验中, FastSAM、YOLO 细化、加权特征合并和对象分割检测等组件对性能有显著影响

附录

实验中存在一些问题:

  • YOLO 可能会将不一致的类标签分配给同一对象的不同部分, 基于类别的合并将无法将它们识别为一个对象
  • 对多个堆叠关系或者离得很近的类的对象, 容易导致错误合并

对合并问题, 在合并前使用一次额外的 rgb 检测尽可能经济地解决, 也就是对待合并对象画出 rgb 三个 channel 的直方图, 根据直方图计算余弦相似度, 超过一个阈值时才合并

ConceptGraphs: Open-Vocabulary 3D Scene Graphs for Perception and Planning

来自 ICRA 2024

这篇论文写得比较早(2023), 所以前言部分这里写得简略一点, 在当时主流的技术往往是封闭词汇或者一些性能消耗大的开放词汇表(也就是携带语义特征的点云);此外还有个痛点是难以表达结构信息
本文提出的感知图是一种以对象为中心的语义地图, 其几何信息由 3d 形式存储, 语义信息由 2d 形式存储

3d 对象生成

  1. 类别无关的 2d 图像分割: 当传入观察帧后, 使用分割模型得到一个掩码集合 { \(m_{t,i}\) } , 每个掩码得到图片片段, 将这个片段传入视觉特征编码器如 CLIP, DINO, 从而得到视觉特征向量;此外对片段中的点, 根据深度形象投影到 3d 坐标系中, 对投影后的点云使用聚类算法降噪, 最后放入地图中;最后我们得到了点云以及对应的单位归一化后的语义特征向量
  2. 对象中心的 3d 图: 令观察帧(rgbd)为 \(I={I_t}\) , 其中 \(I_{t}\ =\ \langle I_{t}^{\mathrm{rgb}},I_{t}^{\mathrm{depth}},\theta_{t}^{*}\rangle\) (color image, depth image, pose) 类似的, 图 M ={O, E}中的对象集合为 O, 边集合为 E
  3. 对象关联: 对每个新检测到的对象 \(o_t\)<p,f>(点云和特征向量), 计算它与在 3d 图上有空间重叠的对象 \(o_{t-1,j}\) 的几何以及语义相似度
    1. 几何相似度 \(\phi_{\mathrm{geo}}(i,j)\;=\;{\mathfrak{n}}_{\mathrm{nnratio}}({\bf p}_{t,i},{\bf p}_{oj})\) 也就是 \(p_{t,i}\) 中的最近的邻居点在 \(p_{oj}\) 中的点所占比率(有一个门槛值)
    2. 语义相似度 \(\phi_{\mathrm{sem}}(i,j)\,=\,\mathbb{F}_{t.i}^{T}\mathbf{f_{oj}} / 2+1/2\)
    3. 以上两种相似度的简单相加作为总体相似度, 权衡计算花费和表现后, 贪心地选择相似度最高的对象匹配(如果超过一个门槛值), 而如果不到门槛值, 创建一个新对象
  4. 对象融合: 对上一步关联的两个对象, 进行融合, 融合过程就是一个简单的求平均: \({\bf f_{o j}}\,=\,(n_{o_{j}}{\bf f_{o j}}+{\bf f}_{t,i})/(n_{o_{j}}+1)\) 其中 n 是迄今为止(融合前)被关联到这个对象的观察片段数量, 点云部分则执行一个简单的并集操作, 并进行下采样降低成本
  5. 节点描述: 很实用主义的一步, 在我们暂时完成了一系列图像处理后, 对得到的对象, 将最好的 10 张图片送给 LVLM 处理, LVLM 生成对应的粗略描述, 再将其送给一个 LLM 生成一个最终描述

简单地概括一下, 上述主要处理空间和语义上的物体(对象)表示, 空间部分是从二维图片提取的点云, 确定点云时和语义类别无关, 直到确认后才编辑语义部分, 提取语义的过程也很单纯, 将图片发给 LVM 和 LLM 得到描述, 每个对象存储一个关于自己的描述

3d 场景图生成

之前已经得到了对象层面的抽象, 这部分主要处理对象关系
对每对 3d 对象, 计算器 3d 边界 Box 的 IoU 生成一个相似度矩阵, 并通过估计应该最小生成树 MST 来修剪矩阵, 从而得到数量可控的候选边
(可能有人好奇为什么之前的描述不进行编码直接存储, 这是因为后面还会对 LLM 会使用描述信息)
对这棵树的每条边, 将边对应的一对 obj 的描述和位置信息喂给 LLM, LLM 生成其可能的关系, 这个关系作为场景图的标签存储, 例如 on, in
之后, 对自然语言类型的查询, 让 LLM 读取一个存储好相关信息的对象列表, 找到最有可能的关联对象并将这个对象交给下游应用
当然还有一个很常见的思路是, 为什么不舍弃描述性信息, 直接使用 CLIP 之类的模型嵌入编码查询语句然后查找匹配对象呢? 答案很简单: 实验者尝试过, 但效果不如 LLM, 准确地说, clip 对描述性的查找表现不错, 但对于比较模糊的查询表现不佳
相比更近年的 dualmap, 这个模型还有一个比较直观的问题, 对动态环境无能为力, 但优点在于 llm 的泛化能力能解决很多导航问题, 例如一开始没找到之后去哪里找, 有障碍物的路径其障碍物能否推开等

场景图对象的 json 表示示例:

1
2
3
4
5
6
7
8
9
10
11

[
{
id: 2,
bbox_extent: [2.0, 0.7, 0.6],
bbox_center: [-0.6, 1.1, -1.2],
object_tag: 'wooden dresser or chest of drawers',
caption: 'A wooden dresser or chest of drawers'
}
]

简评: 无疑这个系统很实用, 但过于依赖 LLM 了, 文本描述很可能不是最好的空间表示方式

  • 下采样(subsampled): 简单地说, 尽可能保留信息地压缩原数据, 上采样与其相反

Hierarchical Open-Vocabulary 3D Scene Graphs for Language-Grounded Robot Navigation

来自 RSS 2024

本文提出的模型简称为 HOVSG, 相比同行最大的特点在于它是分层结构的, 我们之前提到的工作往往只是用拓扑图基于一个简单的图论空间模型表示现实空间, 也就是对象层级的地图, 但对于更加复杂的现实空间例如多层建筑, 其表现力就会受限, 因此本文使用分层的模型增强表示能力

本模型专注于解决对有 rpgd 相机和里程计(里程计用于构建坐标系)的多层环境建图问题, 其最初的 3d 建图和上一章的感知图比较类似, 之后增加分层信息
下面介绍其流程, 和感知图类似的部分会略过

  1. 进行类别无关的分割, 并将片段投影为 3d 点云, 其合并算法与感知图不同, 重叠度记作: \(R(m,n)=m a x(o\nu e r l a p(S_{m},S_{n}),o\nu e r l a p(S_{n},S_{m}))\) 其中 \(overlap(S_a, S_b)\) 表示 Sa 中的点在 Sb 的邻域内(在一定距离内)的比率, 但合并不是一对对进行的, 而是构建一个全连接的图, 每条边存储连接的一对节点(片段)的重叠度, 这样就能找到一些重叠度较高的子图, 将所有子图一起合并
  2. 接下来开始计算特征, 这里还是用我们的老熟人 CLIP, 但有一些 trick, 由于之前的分割我们其实是有各个区域的掩码的, 按常识想, 似乎应该只把分割出的部分用来求特征, 但也有些工作会把掩码部分和整个图像都求特征算加权和, 根据本文团队的经验, 其特征也是加权和的形式, 写作: \(f_{i}=w_{g}f_{g}+w_{l}f_{l}+w_{m}f_{m}\) 其中 i 表示第 i 个 2d 掩码, g 表示整个图像, l 表示基于掩码的图像裁剪, m 表示在l基础上再去除背景的图像裁剪, 详细可参考上图左侧
    1. 接下来考虑怎么将算出的语义和点云表示的空间相关联, 这里简单地说, hovsg 采取了计算消耗最大的方法, 用 3d 点云存储语义, 但是会进行一定的优化
    2. 在准备阶段, 会预计算出大概的点云, 这称为参考点云, 而对在之前一步中得到的掩码区域, 会计算逐点特征并将其映射到(参考点云的) 3d 坐标系中,映射中片段的各个点会与参考点云中的最近点匹配, 也就是语义特征会关联到那个对应点,称为参考点, 在映射结束后,对各个参考点关联到的语义算平均作为其最终语义
    3. 在 2. 结束后, 我们得到一个有逐点语义信息的参考点云,接下来反过来从片段内的点出发匹配参考点作为语义, 之后在片段内用 DBSCAN 算法进行聚类(将最密集的聚类中最接近平均值的特征作为片段语义)达到降噪和规避模式崩溃的效果, 以上三步可参考上图中间, 也就是空间上每个片段只存储一个特征
  3. 在完成语义存储后, 接下来的任务就是构建场景模型, 本文的抽象数据结构是主流的拓扑图, 但在设计上有一些 trick , 准确地说应该是分层图
    1. 其中 \({\cal N}\;=\;{\cal N}_{S}\;\cup\;{\cal N}_{F}^{\;}\;\cup{\cal N}_{R}\;{ {\cup}}\;{\cal N}_{O}\) 其中 s 下标是根节点, 其他则是 floor, room, object 的简称
    2. 类似的, 边集合定义为 \({ \mathcal{E}}={ \mathcal{E}}_{S F}\cup{\mathcal{E}}_{F R}\cup{\mathcal{E}}_{R O}\) ,也就是自上到下的树状关系
    3. 以上的定义都比较常识化, 接下来讨论具体的实现:
      1. floor: 对目前已有片段的点云画出高度上的直方图, 然后寻找一些峰值(也就是找到点相对最多的高度), 具体来说, 只选择超过最高峰 90%或以上的峰值;用 DBSCAN 选择每个片段点云中排名最高的两个峰, 用常识想, 应该其中最密集的高度是楼层底面或者天花板; 对最后得到的所有候选高度(存储为一个向量)排序, 文章假设每两个连续的高度对是天花板和地板的高度
      2. room: 基于划分好的层级, 画一个 2d 鸟瞰直方图, 由于一般墙壁处是最密集的, 用一个阈值就可以分离出大概, 然后用一个 EDF 加上分水岭算法完善分割; 同样基于常识, 房间应该有一些语义信息, 将一些观察帧用于嵌入, 用 k-means 方法选出 k 个代表;推理时, 将一系列常见房间类别输入 clip 编码, 然后将这些编码和之前的房间代表信息计算余弦相似度, 这里的代表其实是个双关, 每个房间有 k 个代表, 这些代表每人一票投给与其最类似的房间种类, 然后根据票数或者投票分数决定房间种类
      3. object: 得到房间划分后, 我们其实就能知道之前的片段各自落在什么房间, 而对不落在任何房间里的对象, 将其与欧几里得距离最小的房间相关联, 类似之前的工作, 这部分也会进行重叠度高对象的合并(空间标准前文写过, 语义标准是对封闭词汇表的查询, 或者说分类任务, 有相同标签输出), 每个对象存储自己的 3d 点云,片段信息, 特征和最大得分的标签
      4. 互动图: 对机器人来说, 很重要的是整个场景中物件的可交互性, 在本文的模型里, 还涉及对跨层交通的标注, 这使用一个 Voronoi graph(下文简称 v 图)实现; 在此前我们得到了各个楼层的地图, 将相机姿势作为一个个点投影到各层平面, 假设这些轨迹点的两两连线周围(有点像轨迹的描边)是可通行的, 此外, 根据高度范围 [ymin + δ1, ymin + δ2] 其中ymin表示楼层内的最低点高度, 而两个偏移是经验值 的点画出障碍物地图; 对姿势区域图和楼层平面区域图做并集并减去障碍物区域图, 就得到了每层的自由空间图; 对跨层交通(楼梯), 将分类为楼梯的片段上的相机姿态点连起来, 然后寻找上下两层中与楼梯最近的点, 将这些点都连起来, 就得到了跨层区域
  4. 完成以上 3 步后, 现在我们已经得到了完整的语义地图, 对导航任务, 使用 LLM 将其分解为 3 个子任务, 也就是楼层、房间和对象, 分解后是一个常见的处理; 嵌入查询语句并通过比较余弦相似度选择候选

  • 分水岭(Watershed)算法: 广泛应用于图像处理的分割技术, 特别用于图像的边缘检测和区域分割
  • 欧几里得距离场(Euclidean Distance Field, EDF): 在一个给定的空间中, 欧几里得距离场为每个点分配一个值, 这个值是该点到某个特定形状(如物体边界或目标点)的最短距离
  • Voronoi graph: 一种用于将空间划分为离散区域的图形表示方法, 其分割出的一个个单元是泰森多边形

实验

语义分割上, 用 mIOU 和 FmIOU 评估效果, HOVSG 对比基线模型有不错的提升, 作者将其归功于合并策略使用逐点计算的特征以及聚类算法;此外使用掩码特征的加权和来降低背景图像的影响
对于房间分类,作者比较了基于使用模型预测的房间内物体分类和真实分类数据为输入的llm预测和本文方法(特权和非特权), hovsg战胜了非特权与基于gpt 3.5的特权方法,惜败于特权gpt4
对于对象语义信息, 提出一种新的度量方法 \(\mathrm{AUC}_{k}^{t o p}\), 也就是基于类别(为了通用性横坐标设置为k%形式)画出 top-k 的准确率曲线, 并计算与坐标轴围成的面积

  • groundtruth: 一般指机器学习样本中的真实数据

Open Scene Graphs for Open-World Object-Goal Navigation

来自 IJRR 2025 / ICRA 2024

本文引入了 OSG Navigator, 一种开放语义的面向对象,有较强泛化能力的导航模型
鉴于这是一篇很新的工作, 其泛化能力也超越了以上的文章, 上文的分层模型虽然做到了层次结构的语义地图,但过于依赖人为规定好的结构, 本文通过LLM等模型提供更强的结构模板,增强对不同环境的适应能力, 此外结构上OSG使用模块化设计, 完全用LLM这样的基础模型组成
略过相关工作部分, 开始概述这个系统:

  1. 之前的工作(ObjectNav,2022)输入为rgbd信息与无噪声的定位, 而输出是速度命令
  2. 在1. 的基础上, 本系统拓展到了开放世界, zero-shot任务,面向现实考虑,输入只限于RGB,输出则是线/角速度, 而代理部分接受自然语言的开放词汇表查询
  3. 本文将上述定义的任务视为一个物体和地点中心的POMDP(Partially Observable Monte Carlo Planning 部分可观察马尔可夫决策过程) 对此定义以下符号 $ s_a , s_r , s_o, s_e, o, r, , O , $ 分别是: 代理状态,空间地点状态, 物体状态, 物体/地点的关系(edge), MOVETOOBJECT(动作), MOVETOREGION(动作), 过渡, 观察, 目标(开放词汇的描述)
  4. 具体的模块分为: LLMs,GNMs(General Navigation Model 提供对不同机器人的泛化导航能力),VFMs(视觉基础模型, 即有完成通用性视觉任务能力的模型) for Visual Question Answering (VQA 视觉问答模型) , VF for Open-set Object Detection
  5. 任务流程上: 开放场景图作为基础, 被高层模块调用进行推理,产生图像子目标来指导底层导航模块, 细节上, 映射器会从图像中提取出描写其中突出物体的文本, 这些描述数据送给LLM用于更新场景图, 推理器则使用LLM从场景图中提取子目标并规划路径, 所谓的路径其实是一个图像目标序列,也就是说其路径点就是图像的经过裁剪的部分(即图像中的某个物体), 由于这些裁剪的物体是中间路径上的, 导航区能使用这些子目标具体地产生动作指令, 同时在导航过程中会动态更新场景与导航计划

场景图

其场景图大体上可以表示为以下的类似yaml的形式,比起只有楼层、房间、物体三级的分层图以及没有分层关系只有物体间关系的双重图都有着更强的抽象能力
可以看到,其并非是隐变量而是显式的文字描述,这就意味着也可以根据经验提供一些预设语义,本文中使用LLM来生成
下面介绍细节

1
2
3
4
5
6
7
8
9
10
11
12
13

Floor:
layer_type: Region
layer_id: 3
contains: Room , Corridor
connects_to: Stairs

Room:
layer_type: Place
layer_id: 2
has: Object
connects_to:Entrance,Room,Stairs

  1. 节点定义: 可分为4个抽象类, 除了Objects外其他3种都可以视为地点(location)类:
    1. Objects: 占据局部空间的对象
    2. Places(地点): 较为细粒度的空间,例如对民居来说可以是房间和走廊
    3. Connectors: 连接相邻空间的局部元素,同时有物体和地点属性, 例如大门, 在语义上可以作为路径点或者探索边界
    4. Region(区域): 比较粗粒度的空间, 可以包含很多局部地点, 例如楼层
  2. 有向边定义,也可以分为4类:
    1. Proximity: 空间上的近邻关系, 端点是物体或者连接体, 可用来构建上下文关系
    2. Connectivity: 即可达性关系,端点可以是任意节点,
    3. Inclusion: location和object的单向关系, 表示地点内存在物体
    4. Hierarchy: region/place-region/place的关系, 捕获层级关系, 源节点必须是区域节点,且目标节点必须是树中下一个较低级别的位置节点(region/place)
  3. OSG层次定义, 以下是自底向上的顺序:
    1. Objects Layer: 存放独立的物体, 以及它们之间的关系,
      1. 每个其中的节点保存四个属性:
        1. 开放词汇标签, 一般就是物体的名字 \(\mathcal{v}_{label}^o\)
        2. 对物体外观的开放词汇文本描述, \(\mathcal{v}_{desc}^o\)
        3. 独特的节点id, \(\mathcal{v}_{id}^o\)
        4. 图片剪切, \(\mathcal{v}_{img}^o\)
      2. 除了属性以外, 还会存储is near边组成的数组, 例如对有k个近邻的节点形如 \([(v_{l a b e l}^{o},\ \ v_{d e s c}^{\mathcal{o}})_{0},\ \ ...,\ (v_{l a b e l}^{\mathcal{o}},\ \ v_{d e s c}^{o})_{k-1}]\), 这个数组可以作为用于区分object的特征
    2. Places and Connectors Layer: 捕获细粒度的空间位置信息,并描述场景中位置之间的连通性,在导航期间,机器人的状态被指定为该层的位置节
      1. 每个Place节点 \(v^p\) 有三个属性:
        1. 类别信息, \(\mathcal{v}_{cls}^p\) , 来自OSG架构,形式是字符串
        2. 对地点(place)的开放词汇文本标签, \(\mathcal{v}_{label}^p\)
        3. 独特的节点id , \(\mathcal{v}_{id}^p\)
      2. Place节点的边集包括:
        1. connects to 边(下文也称连接边)指向 Place/Connector, 表示联通关系
        2. contains 边(下文也称包含边)指向 Place 内的物体, 即Place的特征可表示为它contains的物体的特征(标签和描述)集
      3. Connectors节点不同于地点节点的是没有包含边指向物体节点(或者说它自己就是物体节点), 但是可以通过连接边指向其他地点
    3. Region Abstract Layer(可选): 更加通用的抽象空间划分, 例如对多层的住房场景可以是不同楼层, 从这层开始, 对高层对低层只用包含边, 但是可以被低层的连接体连接边指向,详情可见下图
      1. 属性只有 \(\mathcal{v}_{label}^i\) , \(\mathcal{v}_{id}^i\) , 含义类似上文其他节点

地图生成和定位

Mapper职能如上图所示, 接下来分组件介绍其生成和更新OSG的方式

自动生成OSG

为了泛化能力, 本模型的环境图结构也由模型来自动生成, 输入一个环境的简单描述, 生成器就会产生一个OSG架构
具体地说, OSG以json的形式被生成, 过程分为三个Pipeline

  1. 描述生成: 让llm生成无结构, 尽可能长, 包含典型空间抽象关系的自然语言描述
  2. 规范化(Canonicalise): 让LLM将上一步的描述转化为规范图表示, 此外这一步会让LLM将节点和边定义为上面提到的类型, 形式上类似于[Abstraction1, Relation, Abstraction2]
  3. 验证: 根据OSG的结构要求检查规范图, 通过一个测试类检验其结构是否满足上一节定义的OSG, 如果不满足,将检测到的错误添加到1. 中的文字描述, 并让LLM修正生成的图, 循环直到满足条件,将其以json格式返回

图像解析 Image Parser

使用VFMs解析视觉输入, 开放集的物体检测模型来区分标记场景元素, 以及一个VQA把图像观察翻译为密集的语言描述(对于Places, Objects Connectors), 过程为:

  1. 解析地点: 将机器人周边的RGB图像输入VQA
    1. 首先提问哪种地点能最好地描述观察帧
    2. 得到类别后,继续提问从而获得一个更详细的标签来反映这个地点的语义信息
  2. 物体/连接体解析: 探测器是区分不出本文自己定义出的两类物体的, 但可以得到基于自然语言的物体信息,将这些信息输入LLM进行分类, 然后让VQA模型产生对其图像裁剪的描述,使用 is near 边连接两个体积盒距离低于门槛值的一对节点
  3. 目标探测: 使用VQA或者LLM处理上面得到的数据, 如果有和目标很相似的物体,则直接让代理导航过去

状态评估

输入上一步得到的文本描述与已有的OSG, 输出目前的机器人状态即占据的Place节点
流程如上图所示, 其中(P,O,C)指Places, Objects, Connectors三种对象, LLM第一次用于提取一些候选Place,这些候选对象根据和上一个s的距离被贪心地匹配, 匹配过程中由LLM根据两者的描述等信息决定是否匹配成功(优先考虑较大的物体)

OSG 更新

将来自图像解析器的观察结果递增地集成到OSG中, 这部分的难点主要在于门槛的设定, 即更新和新建的选择, 在本文定义的OSG还有个问题就是节点间关系的选取
这些问题需要近似人类的"常识", 因此使用强大的LLM来处理, 见下图

这部分伪代码比较抽象,这里简单总结一下:

  1. 上一步中得到了预估的状态,于是有两种可能
    1. 新状态之前没有见过:
      1. 先将其添加进地点集合,并增加边关系(依靠LLM)
      2. 对region层及以上遍历layer:
        1. 贪心地让LLM推断是否是已有region还是不存在,如果是后者则新建节点
    2. 新状态之前见过
      1. 获取新状态对应的叶节点
        1. 对本轮观察识别到的物体和连接体,让LLM匹配是否也见过,如果没见过就新建节点,否则根据LLM输出来更新边关系

基于概率的OSG

基于Online Probabilistic Topological Mapping (OPTM 2011), 也就是基于概率的拓扑图
简单地说, 这种方法基于当前的拓扑以及观察来预测之后的拓扑结构,每个观察都会被连接到一个节点(新建或已有节点), 即计算 \(p({\mathcal{T}}_{t}|{\mathcal{T}}_{t-1}{)}\) 其中 T表示拓扑图结构,对本文来说就是Place & Connectors层
每一轮中,实际上做的就是将新的观察链接到新建或者已有节点, 对此有两种可能比较启发性的设置:

  1. 新的观察 \(o_t\) 倾向于关联到频繁访问的节点
  2. 新的观察倾向于关联到最近访问的节点

换句话说就是时空局部性原理
对于前者,使用狄利克雷过程来建模, 对于后者使用对附近节点的均匀分布建模
本模型中可以这样设置:

重要性权值更新方法设置为:

\[w_{t}^{(i)}\propto\mathcal{P}(o_{t}|\mathcal{T}_{t}^{(i)})w_{t-1}^{(i)},\,\mathrm{for \space i \space th \space particle}\]

\(v'\) 为当前( \(o_t\) )所属的节点, V为语义上类似 \(o_t\) 地点的拓扑图节点,将模型定义为:

\[p(o_{t}|T_{t}^{(i)})=p(o_{t}|v^{\prime})\prod_{v_{i}\in\mathcal{V}\backslash\{v^{\prime}\}}(1-p(o_{t}|v_{i}))\]

这个定义可以视为一种贪心策略,也就是假设对每对匹配的观察o和节点v, o最有可能是由v处观察的, 是出自其他节点的概率则更低

推理和控制

推理

推理器接受当前OSG,状态,目标区域(由区域提议组件生成)以及目标物体, 输出最有可能的子目标, 由3个组件组成:

  1. 区域提议: 对每一层询问LLM识别最有希望的节点, 遍历每一层的过程中,将候选地点标注为子目标区域
  2. 寻路: 从OSG中提取Places和Connectors的连通性子图, 使用迪杰斯特拉规划从当前位置到子目标节点路径
  3. 物体提议: 到达子目标后, 查询LLM选择其中可能接近目标的对象; 此外, 去子目标的路上也会不断寻找候选子目标, 这是因为机器人大多在地层水使用物体为导航的单位, 该组件用于不断生成MOVETOOBJECT行动

控制

这是一个底层的目标,用于不断前进到下一个目标(有点像rts游戏里控制单位前进), 具体说就是将RGB输入和目标(图像剪切)映射为速度命令, 推理器会不断发送图像剪切目标, 而且都会在机器人传感器能看到的附近位置
本文使用ViNT GNM实现

实验与总结

略过一些细节, 本文OSG的优点在于, 详细的语义信息如区域划分、连接体等为推理和探索提供了充足的线索
此外LLM为OSGN提供了强大的开放词汇能力, 对数据集上没有的物体类别也有足够的辨别能力 OSGN目前在成熟的LLM,VQA等模型上取得了很好的成绩, 但主要问题在于,它使用的是GPT3.5这样的成熟大模型,如果想在不联网的机器人上部署接近性能的语言模型想想就不可能
此外LLM也存在局限,例如对语料库稀少的场景如医院等准确性就会下降, 另一个缺点是由于这些都是基础模型, 除了人为指导或者优化基础模型性能,几乎没什么改进的办法

stage 1 summary

总结一下目前读过的四种语义地图:

  1. 概念图(ICRA 2024) : 使用类别无关的分割模型切割对象, 用点云表示空间占用, 对merge操作使用clip计算一个中间值特征, 但最后存储的是LLM生成的描述信息, 由于是早期工作比较粗糙
  2. 分层图(RSS 2024): 核心想法是构建一个floor-room-object三层的场景树, 这其中有很多trick, 这里略过大部分细节, 实际的空间存储是优化(合并)过的点云, 语义存储是每个点云有一个特征向量以及基于封闭词汇的标签, 以占用来说是可控的, 但由于是逐点计算, 我猜想计算量应该偏大, 此外这篇文章虽然确实是开放词汇表, 但其实建图和更新过程中使用了很多封闭词汇表的分类
  3. DualMap(预印): 以上两个模型都不涉及对地图的动态更新, dualmap与其区别在于使用两种地图用于节省空间和计算量, 并动态更新地图,更新过程避免昂贵的3d物体合并, 这种双图设计在节省开销方面不错,但其更新方式比较粗糙,只是单纯地取平均
  4. 开放场景图(IJRR 2025): 这是一个神奇的模型, 其输入是rgb没有d,也没有里程计, 其机器人的导航实现是一个个move_to_object 中间数据都是显性的自然语言信息, 几乎全部的工作是云端LLM做的, 虽然有更新算法,但更新上也是通过LLM生成json格式的数据来更新拓扑图结构, 这其实可以视作马尔科夫链, 但是使用LLM来更新
  5. 总结: 受限与现实场景规模和成本, 当前语义地图的语义存储主要是对每个对象存储文字描述或者单个特征向量, 更新上其实很难处理, 因为很难找到合适的对先后观察的权重分配,这点可能还需要继续搜集一些模型

语义级别:

ConceptMap HOVSG(分层图)
DualMap OSGN(开放场景图)
物体级别的单图 三层的树状空间关系图 物体级别的双图 层级关系的有向图

空间(占用)图表示:

ConceptMap HOVSG(分层图)
DualMap OSGN(开放场景图)
点云(降采样处理) 点云(有一定压缩) 点云(但导航时只用到锚点对象的点云) 无(只存储抽象对象,无距离表示)

语义形式:

ConceptMap HOVSG(分层图)
DualMap OSGN(开放场景图)
描述和标签信息 特征向量 特征向量 描述和标签信息

使用的基础模型:

ConceptMap HOVSG(分层图)
DualMap OSGN(开放场景图)
SAM,Clip,LLM SAM,Clip,LLM SAM,YOLO,Clip GNM,,LLM

导航(子目标选取)算法:

ConceptMap HOVSG(分层图)
DualMap OSGN(开放场景图)
LLM生成 LLM分解任务再用余弦相似度选取目标 余弦相似度选取候选 LLM生成

Vision-Language-Action Models

Large VLM-based Vision-Language-Action Models for Robotic Manipulation: A Survey

前言

机器操控, 作为机器人学和具身智能的关键领域, 需要精确的动力控制以及内置的视觉和语义信息理解能力的智能, 其传统做法一般局限于使用预定义的动作以及严格的控制策略, 泛用性较为有限
近年来随着算力和研究方法的进步, 基于大量图像文本数据上预训练的大型视听语言模型(VLM)以及基于 VLM 增加了动作能力的 VLA, 可以称为一种新的技术趋向
所谓的 VLA 其实是一件很有野心的事, 它不但有对图像、文本这两种信息量最大的载体的理解能力, 还要有做出合适行动的机械系统, 这几乎涉及了 cv, nlp, em-ai 等 cs 大部分的前沿领域, 理论也相当庞杂
VLA 具体可以定义为:

  1. 使用 VLM 理解视觉观察和自然语言指令
  2. 进行推理并直接或间接地帮助动作指令的生成

又可以分为:

  1. Monolithic Models: 单片模型, 也就是集成度高的模型
    1. Single-system models: 将环境理解, 视觉感知, 语言理解, 机器状态认知, 动作生成都统一到一个模型
    2. dual-system models: 将认知环境和动作生成分为两个任务, 分别让 VLM 和一个 action expert 去做, 这是因为相比前者, 后者时效性更强
  2. Hierarchical Models: 分层模型, 耦合度最低的模型, 一般有结构, 中间输出可解释的中间产物, 例如计划模块产生 keypoint detections, affordance maps, trajectory proposals , 交给策略模块来产生动作; 这样的解耦让不同模块可以并行训练, 使用不同的 loss 和优化方式
  • Keypoint Detection : 计算机视觉中的一种技术, 旨在识别图像中具有显著特征的点
  • Affordance Maps : 一种表示对象与环境之间交互可能性的图像或图形
  • Backbone : 一个神经网络结构的基础部分, 主要用于特征提取。Backbone 是整个模型的核心组件, 负责从输入数据(如图像)中提取重要的特征信息
  • Internet-scale : 表示很大的数据或者整体性能消耗的规格

背景知识

得益于用于跨领域和多模态能力的 VLM 的出现, 现代的 VLM 模型能执行对能力需求更加多样的任务例如自动驾驶, 图形用户界面交互等
这些模型往往由一个视觉编码器, 一个用于将视觉特征嵌入到文本的投影器(projector), 以及一个大语言模型组成; 这其中, 最为重要的是 模型为其带来的泛化能力, 如 GPT4 这种 LLM 能提供极强的过滤输入, 降噪, 处理模糊指令的能力, 从而为 VLA 定下基础, 也就是说, VLA 相当重视泛化、通用性质的能力

V、L、A 可以视为三种不同的任务, 早期的模型往往会将三者分开, 这样的好处是可以并行训练, 但缺点是可能降低一些理解和推理能力; 最近的模型一般会加强集成度, 例如除了传统的大规模(Internet-scale)训练资料外, 把机器人的动作也转化为文本标记并放入训练语料库中, 这能让 action 作为语言任务被语言模块理解, 增强整个模型的理解能力, 其他一些使用动作资料的模型也取得了较好的效果

接下来从单片/多片的角度讨论两种模式的发展趋势

MONOLITHIC MODELS 单片模型

Single-system Models

其经典范式为 Autoregressive Decoding, 将机器人的连续动作空间离散化为 token 序列, 模型能够序列化地生产动作 token, 再由一个 de-tokenizer 转化为具体动作。较为知名的模型有 RT series , OpenVLA

Model Performance Enhancement
  1. 认知模态(Perception Modalities):
    1. 3d 感知(perception): 一般能从传感器得到的数据就是 2d 图片, 为了构建 3d 的地图模型, 可以模拟环境并根据图片画出点云; 或者根据图片及其深度信息, 画出自我中心的地图
    2. 4d 感知: 多出来的 d 指的是轨迹, 也就是时空序列信息, 例如将动作或者轨迹信息添加到图像中, 从而增强模型的时空推理能力
    3. 触觉和听觉(Tactile and auditory)感知: 触觉信息可以使用视觉编码器, 听觉信息可以使用专用的编码器, 且两者都需要专用的数据集, 这两种能力均可以与语言模块对齐, 然后得到接受听觉触觉指令的能力
  2. 推理能力: 以下简单介绍一些相关工作
    1. ECoT: 生成一个推理链, 将高层任务规划与视觉特征相结合, 输出最终行动
    2. CoT-VLA: 引入视觉链式推理, 通过预测代表计划状态的子目标观察, 增强推理能力
    3. LoHoVLA: 采用“层次闭环控制 Hierarchical Closed-Loop Control ”机制, 解决规划错误、行动失败和外部干扰等问题, 适用于长周期任务
    4. ReFineVLA: 通过“选择性迁移微调 Selective Transfer Fine-Tuning ”策略, 仅微调上层, 增强多模态理解
  3. 泛化能力: 也就是处理各种场景需求的能力
    1. UniAct: 定义一个 Universal Action Codebook, 将所有机器人行动抽象到有限的类别中, 增强泛化能力
    2. ReVLA: 使用可逆的训练策略, 缓解遗忘问题
    3. HybridVLA: 使用一个 Collaborative Action Ensemble 机制, 融合 diffusion and autoregressive decoding, 针对任务选取不同策略
    4. VOTE: 使用一种 Ensemble Voting 机制, 将过去的动作预测根据与当前预测的相似性进行分组, 并对大多数集进行平均处理, 从而生成更稳健的动作输出
    5. 也有一些模型在物理规律层面进行学习
Inference Efficiency Optimization

Inference Efficiency Optimization 推理效率优化 : 机器人对及时性(控制频率)往往有一定要求, 因此模型的推理效率优化也是一个重要的方向

  1. Architectural Optimization 体系优化: 一些常用的方法用, 跳过层级, 早停止等, 进阶的有一些方法会动态计算哪些层级是关键的, 从而激活关键层完成推理; 此外也有方法会逐步减少视觉 token, 也就是修建掉那些与指令生成无关的 token, 再加上注意力机制, 这甚至能同时提高指令准确性
  2. Parameter Optimization 参数优化: 也就是压缩模型的大小, 通过蒸馏的模型提高效率; 或者使用 tokenizer 将高维动作指令转化为 token 的序列从而减少模型复杂度
  3. Inference Acceleration 推理加速: 即加速动作解码, 可以使用专门优化过的 action head, 一次生成一个动作序列; 通过某种方式实现并行运算等; 也可以单纯地(但有选择地)放开限制, 接受一些“不完善”的推理结果
  • Distillation-Aware Training: 一种优化训练方法, 旨在通过知识蒸馏(knowledge distillation)技术提高模型的性能和效率。这一过程通常涉及将一个大型、复杂的“教师”模型的知识转移到一个较小的“学生”模型中, 以便在保持性能的同时减少计算资源和加速推理
  • action head: 用于将模型的输出转换为具体的动作或决策的组件

Dual-system Models

双系统主要是为了解决动作生成速度与推理速度要求不同的问题, 引入了一个动作专家模块来对系统解耦, 而其与分层模型不同的是, 不会产生可解释的中间输出

Cascade-based Methods

串联的方法中, 负责推理部分(称为高级 high-level )的系统一般使用 VLM 处理多模态的输入, 提取语义并产生动作 计划 输出, 这些会被编码为某种中间形态, 然后由低级(low-level)系统解码为具体的动作指令
由于在双系统中, 认知和行为是解耦的, 行动可以使用一个不同的模型, 例如 diffusion transformer, Behavioral Cloning transformer
此外, 还有很多种改进方法:

  • 再加入一个视频生成模块来预测未来的帧, 并使用 diffusion action expert
  • 从人类演示中提取场景喂给 LLM 来生成可解释的行为树, 并转化为底层行为
  • 将 VLM 与扩散策略模型整合, VLM 会发射一个 TOKEN 控制是否允许动作生成
  • 使用预训练的卷积残差网络增加性能
  • 将 action expert 集成到 VLA 主干中, 两者可以复用一些组件, 协调工作
  • Cartesian Actions: 机器人学和控制系统中使用的一个概念, 指的是以笛卡尔坐标系为基础的运动或操作。这种动作通常涉及到机器人的末端执行器(如机械手臂的抓手)在三维空间中移动或执行任务
  • convolutional residual: 卷积神经网络(CNN)中使用的架构设计, 最著名的实现是 ResNet(Residual Network)。这一设计理念旨在解决深层网络训练中的退化问题, 即随着网络层数增加, 模型的性能反而下降; 引入残差连接(residual connections), 模型可以学习到输入与输出之间的“残差”而不是直接学习目标输出
Parallel-based Methods

上图中展示了一种共享注意力的架构, 它受到 mix-of-experts (MoE) 启发, 在注意力层中, VLM 与动作模块进行 token 上的交互, 过程中, 输入的视觉文本信息, 噪声, 机器人特定的输入在共享的注意力层中交互, 从而提高了任务效果
由于这种架构的低耦合性, 它可以实现字面意义上的 MoE, 也就是对每个子任务都让一个“专家”去做, 其中一个典例称为 π0, 其主干网络是 VLM, 为了处理机器人特定的输入输出, 它使用一个独立的权重集合和一个流匹配(Flow Matching(FM))的动作模块
π0 有一些变种, 例如增加显式推理, 基于最近推理生成动作两种模式, 可以根据需求切换; 降低信息力度; 防止动作模块的梯度流入 VLM 以保持 VLM 的知识优势; 增加动作 token 化方法从而自回归训练等; 其他的变种也一般是增加某个维度的输入或者通过复用注意力信息提高性能等常规优化

  • Normalizing Flows(NFs): 通过一系列概率密度函数的变量变换, 将复杂的概率分布转换为简单的概率分布, 并通过逆变换生成新的数据样本
  • Continuous Normalizing Flows(CNFs)Normalizing Flows 的扩展, 它使用常微分方程(ODE)来表示连续的变换过程, 用于建模概率分布
  • Flow Matching(FM) 是一种训练 Continuous Normalizing Flows 的方法, 它通过学习与概率路径相关的向量场(Vector Field)来训练模型, 并使用 ODE 求解器来生成新样本

HIERARCHICAL MODELS 分层模型

对于很大规模的任务, 由于算力, 存储空间等方面的要求都较高, 更低耦合的架构如分层模型较为常用, 例如长期推理, 空间抽象, 动作分解等
这些模型一般由高等级的 planner, 低等级的 policy 等组成, 计划期接受指令和观察, 转化为中间产物, policy 接受中间产物, 产生动作序列或底层指令
相比单片模型, 它能实现更复杂的组合, 甚至可以只有计划器; 相比其单片双系统, 它的中间产物是显式(可解释)的

Planner-Only

可分为:

  • Program-based Methods: 计划器生成中间程序, 即直接可执行的程序或者辅助程序, 辅助程序一般用于辅助对任务策略的制定
  • Keypoint-based Methods: 标记出一些关键点, 例如机器臂的可抓取点, 导航任务的路线节点等, 这些提取出来的点可以视为对问题的一种抽象, 从而输入给通用模型如处理, 也可以用作轨迹生成
  • Subtask-based Methods: 一般用于较大的 VLM, 接受一个抽象的隐式指令, 并输出详细的文字命令, 实际部署中可能还会需要一个控制策略。由于该种方法抽象程度较高, 可以使用一些通用模型进行任务分解或者规划

Planner+Policy

其分类上和前一类较为类似

可分为:

  • Keypoint-based Methods: 一般用 LVLM 产生一些关键点, 或者关键路径, 但这些信息将会交给低级策略模块, 用于生成指令; 例如在导航任务中, 对 生成的关键点进行排序, 并将这个有序路径用于之后的指引; 此外也可以用 LLM 为关键点赋予 cost, 用于确定最佳路径; 也有方法会将关键点赋予互动性上的标注, 用于生成控制指令。总的来说, 一般关键点会被赋予帮助决策的一些信息, 用于最后产生指令
  • Subtask-based Methods: 这种方法主要的工作在于如何划分子任务, 而对具体的子任务执行者则有很高的灵活性。例如对模糊的文字指令, 将其转化为一系列原子命令; 也有模型分出空间感知任务, 使用点云增强空间感知; 或者让高级模型划分任务, 低级扩散策略模型具体实现, 且这样的划分可以继续拓展, 例如再加一个中间的 skill 层辨识一些可重复使用的行动控制底层的执行者; 划分后的子任务也可以一步流水线执行从而增加效率; 这方面有非常多的类似变种
  • Embodiment-Agnostic Affordance Representation: Affordance 前文介绍过, 是对可交互性的标识, 而 Embodiment-Agnostic 指的是不依赖于机器人形态或者物理特性, 可以理解为通用的可互动性

Monolithic vs Hierarchical:

  1. 两者的输入输出是一致的, 主要区别为统一化/模块化的内部结构, 其优缺点和这两种常见的结构是类似的
  2. 另一个关键区别是中间产物的可解释性, 整体模型的中建五不可解释, 但更方便机器学习一些人类可能无法理解的特征; 分层模型输出可解释的中间数据, 这对需要兼容性, 可解释性的操控领域可能更好

其他前沿领域

  • RL: 与 LLM, VLM 不同的是, VLA 的问题更加长周期, 其最大的问题在于难于产生基于规则的奖励函数, 可能人类也不知道怎么做是更好的, 这方面没有特别好的解决方法, 一般将学习过程作为密集奖励或者以视觉上的近似成功率作为奖励;
    • 此外, 由于模拟环境现状, 在线学习效率有限, 一些方法会把在线, 离线方法混合起来, 例如离线用 q 学习, 在线用 Soft Actor-Critic 提高效率又或者引入人类监督
    • 部分方法会只把 RL 用作数据引擎来增强泛化能力, 例如先用 HIL-SERL 训练, 然后通过 sft 将训练成果提取融入给主要模型
  • Training-Free Methods: 通常利用模块化和可扩展的设计来改进现有的 VLA 架构, 而无需训练, 例如改变触发机制, 行为和视觉都稳定时不需要完全解码, 可以选择性重用之前的 visual tkoens; 其他的类似方法也是对于简单, 复用性强的任务使用低成本的方式计算, 或者通过一些变换方式压缩动作序列等负担较大的数据提高效率
  • Learning from Human Videos: 也就是将人类行为与机器行为对齐, 从而提高机器人行为的表现
  • World Model-based VLA: 世界模型(模拟环境), 允许一定程度上对未来状态的预测, 从而让 agent 能根据预测修正自己的策略, 并且世界模型也可以同步改进
  • Robotic Process Reward Model (RPRM): 一种用于强化学习和机器人控制的框架, 为机器人在执行特定任务时的行为提供奖励信号, 进而不断优化其行为模式
  • HIL-ConRFT(Hardware-in-the-Loop Control with Reinforcement Feedback Training): 结合了硬件在环(HIL)测试和 RL 的控制方法, 旨在优化复杂系统的控制策略, HIL 测试允许在真实硬件上进行控制算法的验证和优化, 通过将模拟环境与实际硬件连接, 确保控制系统在真实条件下的有效性, 结合强化学习的反馈机制, HIL-ConRFT 可以根据系统的表现持续优化控制策略。通过从环境中获取奖励信号, 系统能够学习最佳操作策略
  • HIL-SERL(Hardware-in-the-Loop Sample-Efficient Reinforcement Learning): 是一种结合了硬件在环(HIL)测试和样本高效强化学习(Sample-Efficient Reinforcement Learning)的框架, 旨在优化机器人和自动化系统的控制策略
  • SFT(Supervised Fine-Tuning): 通常用于在预训练模型的基础上进行进一步的监督学习, 模型首先在大规模数据集上进行预训练, 以学习通用的特征和表示。然后, 在特定任务的数据集上进行微调, 使模型能够针对特定任务进行优化

VLA 的特点

  1. 多模态:
    1. Shared Embedding Space: 视觉, 文字信息会被一起嵌入一个共享的语义对齐空间, 这个共享的语义空间能减少转码过程的损失, 提供更好的推理能力, 理解能力
    2. Multimodal Token-Level Integration: 通过 transformer 可以将连续的视觉文字等信息转化为离散序列, 提供了对这些不同类型的信息的综合性理解能力, 减少语义转化损失
    3. Comprehensive Modal Compatibility: 得益于强大的 VLM, VLA 天生有着与具体模态无关的语义对齐能力, 新的传感器信息, 例如声音, 点云等信息都可以在不影响主干网络的情况下加入
  2. Instruction Following
    1. Semantic Instruction Grounding
    2. Task Decomposition and Collaboration
    3. Explicit Reasoning via Chain-of-Thought: 链式的思考能力能让 VLA 能一定程度上预测未来的图像, 减少了短视现象
  3. Multi-Dimensional Generalization
    1. Cross-Task Generalization: 相比传统模型任务特化的训练过程, 很多 VLA 模型有着 zero-shot 或者 few-shot 级别的泛化能力, 有时可以直接用到没有特别训练的领域
    2. Cross-Domain Data Generalization: 相比传统模型, 多模态的 VLA 可以接受各种各样的数据, 从而得到相应的泛化能力
    3. Cross-Embodiment and Sim-to-Real Generalization: 由于现代 VLA 的解耦性质, 其经过抽象的规划起和底层动作解码器可以互相解耦, 也就是不同的机器人形态也可以被泛化

数据集和基准测试

  1. 真实世界机器人数据集: 尽管理论上讲真实世界是检验以及训练的最好数据, 但由于条件限制, 往往不够全面或者丰富
  2. 模拟数据集: 其优点是可以针对想要特化的能力调整模拟环境, 而缺点则是相比现实可能有较大差距, 导致可迁移不足
  3. 人类行为数据集: 对一些特定任务, 例如物体识别, 任务分解等较为实用
  4. 具身数据集: 强调主动感知, 推理和执行, 提供严格的协议来评估通用 VLA 中的高级语义规划

总结和展望

  1. 数据集和基准测试: 当前的真实数据稀少, 模拟环境存在缺陷, 可能需要更好的结合方法; 基准测试需要增加长期性, 且更丰富的指标
  2. 记忆机制和长期规划: 大多数当前的 VLAs 依赖于逐帧推理, 产生了短视问题, 需要增加记忆以及未来预测能力
  3. 3D&4D 感知: 当前的主要输入形式依旧是 2d 图片, 如果能增加输入维度(空间与时间维度)或许能增强模型能力
  4. 移动操纵: 鉴于现实任务特点, 导航能力和交互能力应该更加集成
  5. 多代理合作: 现实有很多协作任务, 且增加代理数量可以更灵活地划分子任务
  6. 开放世界终身学习: 大部分 VLA 模型基于静态数据集, 由于硬件以及当前软件性质难以长期积累知识
  7. 模型效率: 在机器人平台的性能往往受限, 因此需要平衡存储, 计算成本与模型表现

π0: A Vision-Language-Action Flow Model for General Robot Control

VLM 大模型的发展, 不仅在通用能力上取得了进步, 同时由于海量数据带来的能力, 在一些专业任务上也有应用空间
来到 VLA 领域, 想要融合 VLM 并得到一定的行动能力, 有几个挑战:

  1. 这样的研究需要很大规模的数据和训练
  2. 需要能有效从海量数据中学习的模型架构
  3. 需要正确的训练技巧

π0 正是为了解决这三个问题的原型模型, 相比其他系统, 其技术特点:

  1. 跨实体地进行训练
  2. 为了提供对复杂动作的生成能力使用动作块体系和流匹配方法

最近涌现出一批高质量数据集(关于机器人控制), 但往往总共的时长规模在 10h 左右甚至更少, 而为了尽可能地获取综合能力, 本文使用量 10kh 的演示数据(由研究者自己的数据和一些开源数据补充组成), 除了数量以外, 在涉及机器人的种类、任务类别数、标注数外规模也较大
与其他领域的大模型一样, 极大规模的输入也产生了极强的效果

  • Broad Generalization: 一个模型或系统在面对新数据或未见过的任务时, 能够有效地适应和推理的能力。这种概念通常在机器学习和人工智能领域讨论, 特别是在评估模型的泛化能力时

模型介绍

其主干可以说是一个基于 tf 的视觉模型, 将图像输入编码嵌入到语言空间, 但正如很多动作模型一样, 出于任务考虑输入输出数据会增加机器人感知与动作
模型使用条件流匹配(之前写的 介绍博文)来对连续的动作分布建模
模型不依赖特定的 VLM, 为了方便实验中使用 PaliGemma

受一个叫 transfusion 的模型(用一个 tf 处理不同类型的输出, 对连续输出使用流匹配的损失函数, 对离散输出使用交叉熵的损失函数)启发, 基于 transfusion, 在工程上(高情商说法), 发现机器人特有的 token 上(即动作与状态), 应用特定的权重集合能提高表现
作为一个生成任务, 技术上具体可以描述为对分布 \(p(A_t|o_t)\) 建模, 其中 At 是从 t 下标开始, 长度为 H 的动作序列(动作块), 文中的 H 为 50, 而观察 o 由 RGB 图像、语言指令和机器人状态(关节角度)组成分别用 I, l, q 表示
虽然输入类别有很多, 但 I, q 都会由编码器以及一个线性投影层投影到 l 的嵌入空间
将损失函数定义为:

\[L^{\tau}(\theta)=\mathbb{E}_{p(\mathbf{A}_{t}|o_{t}),q(\mathbf{A}_{t}^{\tau}|\mathbf{A}_{t})}||\mathbf{v}\theta(\mathbf{A}_{t}^{\tau},\mathbf{o}_{t})-\mathbf{u}(\mathbf{A}_{t}^{\tau}|\mathbf{A}_{t})||^{2}\]

其中上标是流匹配的时间步, 下标则是机器人的时间步, \(\tau\ \in\ [0,1]\) , 训练时从标准正态分布中采样一个 \(\epsilon\) , 令噪声行动 \(A_t^\tau = \tau A_t + (1-\tau ) \epsilon\) , 训练目标是让 \(\mathbf{v}\theta(\mathbf{A}_{t}^{\tau},\mathbf{o}_{t})\) 与去噪向量场 \(\mathbf{u}(\mathbf{A}_{t}^{\tau}|\mathbf{A}_{t}) = \epsilon - A_t\) 匹配, 初始动作输入是一个从标准正态分布中取样的噪声动作

这里先不讨论太多细节, 整体上这是比较标准的条件流匹配方法, 只不过学习的不是直接的动作输出, 而是如何对输入降噪, 最后我们得到的其实是一个和定义出来的降噪向量场尽可能接近的一个基于模型参数的向量场 v
得到向量场后, 推断过程就是做一个积分: \({\bf A}_{t}^{\tau+\delta}={\bf A}_{t}^{\tau}+\delta{\bf v}_{\theta}({\bf A}_{t}^{\tau},{\bf o}_{t})\)
其中 $ $ 是积分的步长, 这里设 0.1, 由于 $ $ 范围是 [0,1], 这就意味着一共积分 10 次
由于作者是企业, π0 其实算是一篇技术介绍或者说报告, 原理写得很简略, 后文会结合其他资料阐述 类似 LLM, 本文也将模型分为两个阶段, 预训练阶段让模型尽可能获得泛化能力(包括对物理任务的泛化), 后训练阶段则让模型流畅地执行下游任务

训练与实验

数据上, 正如前文所说, π0 使用了一组庞大的数据集, 包括一些开源数据与自己的数据, 且与以往数据不同的是, 自己的数据部分复杂度较高, 可以视为一些行为的组合
由于数据组成较为复杂, 因此对不同的数据集来源进行加权, 动作和状态向量(a, q)按最复杂的机器人设置, 对更简单的机器人, 则填零或者掩盖(mask out)掉缺失的维度
此外一个常见的思路是将复杂的任务分解为简单的任务组合, 由于 VLM 赋予了语言能力, π0 可以实现这种程度的语义推断
进一步的实验中, 为了评估语言能力, 对指令进行划分, 只接受整体性指令的模型表现最差, 而接受人类指令和高级 VLM 指令的模型互有胜负, 比没有任务分解的表现好一个阶层
论文还比较了 π0 的无预训练版本和预训练版本以及其他模型(包括这篇博文写过的 ACT), 较为符合常识的是, 对任务类型相似的任务, 预训练能带来更大提升, 但对其他模型, 往往直接从头开始面向任务训练的模型表现最好; 有些不不符合常识的是, 部分任务训练时间更长的版本表会更差(但降幅不高)
最后的实验针对最为复杂的任务, 例如兼顾移动与操控, 对这种任务, 往往预训练并微调后的模型有相当好表现, 有时能成倍于从头训练版本和 zero-shot 版本

细节

前置知识: flow matching

参考 :

这部分解释一些技术细节:

先放一张架构图

π0 将输入分为 3 个 block, 分别是 图像与文字指令、机器人状态、动作, 第一个 block 由 VLM 处理, 后两个交给动作专家
从 VLM 部分说起, 先简单地对图像处理为 token, 将图像 token 和文字 token 拼接, 交给注意力来计算 kvq, 这是个很简单的处理, 需要注意的是为了提高效率这里的 kv 之后会复用
然后是较为关键的动作专家, 机器人状态是一种很单纯的输入不需要额外处理, 而对(噪声化的)动作, 因为动作是有序的, 需要编码时间步信息(使用正弦编码), 这里不是常见的相加, 而是使用拼接(concat), 最后会得到两倍宽度的一个序列, 然后在经过线性层和激活函数得到最后的 action tokens

现在我们有了三种输入, 符合常识地, 他们之间存在顺序关系(图文-> 状态-> 动作), 后面的可以“注意”前面的数据(如果长度不够就 padding 0), 这种注意力关系会用 mask 实现, 且使用之前的 kv cache
所有这些信息最后喂给动作专家(一个较小的 VLM), 但沿用的 kv-cache 来自最初的大型 VLM, 结果投影至动作空间, 也就是流匹配的向量 v
那么 π0 使用的流匹配具体是怎样的呢, 作者根据先前研究的经验使用简单的线性高斯, 即 \[ q(\mathbf{A}_{t}^{\tau}|\mathbf{A}_{t})={\mathcal{N}}(\tau\mathbf{A}_{t},(1-\tau)\mathbf{I}) ; \mathrm{A}_{t}^{\tau}=\tau\mathrm{A}_{t}+(1- \tau )\epsilon \]
\(\mathbf{u}(\mathsf{A}_{t}^{\mathsf{\tau}}|\mathsf{A}_{t})\ =\ \mathsf{\epsilon}-\ A_{t}\) 此外, \(\tau\) 来自于 β 采样

简单回顾一下流匹配, 它的概率路径应该有的性质:

  1. t = 0 时, p(x|x1)服从一个标准正态分布
  2. t = 1 时, p(x|x1)服从一个均值 x1, 方差较小的正态分布

上面提到的 t 其实对应本文的 \(\tau\), 确实是满足条件的, 而这个 u 也很直观, 既然对原来的 At 加上噪声(动作噪声同系数, 动作正噪声负), 那么去噪过程就是噪声减去动作, 也就是噪声如何还原动作

实例

OpenIN

本文提出了一种「开放词汇、实例导向」的导航系统, 该系统「支持多模态和多类型对象导航指令」, 能够实现对 位置可变日常实例 的有效导航
OpenIN 的框架和大部分系统比较类似, 都可以分为场景图构建以及图更新(包括导航)两个主要模块

  1. CRSG
    具体而言, 本系统的地图称为 载体关系场景图(CRSG), 它基于一个开放词汇实例图 M, 结构上分为 建筑与房间层、载体层、承载层和其他对象层

  2. 位移对象导航策略
    本系统特殊之处在于, 输入是多模态的, 即可以是文本、图像的任意组合:

  • 对图像输入: 使用大语言模型获取文本描述
  • 对文本输入以及图像的文本描述: 使用 SBERT 对其编码, 与 CRSG 对象的特征比较余弦相似度, 最高者作为模板对象 Ot

确定目标后, 以 MDP 模型定义探索过程:

定义状态空间: \(S_{t}=(L_{t},C R_{t},C T_{t},F_{t})\) 其中 L 为机器人位姿, CR 是未探索的载体层对象集合, CT 为未探索载体层对象上的候选目标对象集合, F 是一个表示是否找到目标的布尔值, 对初始状态 CR0= 载体层对象全集, CT0 是上一轮选择的候选对象 Ot
定义动作空间: \(A=S t o p,E x p l o r e(c r),G o t o(c t)|c r\in C R_{t},c t\in C T_{t}\) 其中 stop 表示任务完成或者所有载体对象已探索, explore 表示探索载体层对象, goto 表示导航到 ct 的位置
定义策略(以下省略下标 t, 用伪代码表示):
1. if F ==1 CR == \(\emptyset\) then a = stop
2. if F == 0 && \(CT_t !=\emptyset\) , CT.sort(by priority); SS = similarity(CT, O) ;
3. Depth = distance(L, CT); D' = mean(distance(camera, CT));
4. \(P_{-}R(O_{t j})=\omega_{r}\cdot\frac{\omega_{1}s s_{t j}\cdot f(\bar{d}_{t j})}{1\ +\omega_{2}d_{t j}}\) (priority of \(O_{tj}\) in CT)
5. if F == 0 && $CT ==$ && $ CR!=$ then (CR.description, O.image, O.image_description) -> LLM -> $cr_k CR_t $ ( \(cr_k\) is best target )
6. \(a_t\) = Explore( \(cr_k\) ); excute( \(a_t\) )
7. if \(a_t\) == Explore(cr) || \(a_t\) == Goto(ct) then while moving: \(CR_{observed}\) = observed objects which don't include candidates in the radial r ; \(CR_{new}\) = new candidates in unexplored CT objects $

总结: 每轮中在候选对象里优先级排序, 对最佳候选对象的位置, 机器人导航到此处并探索是否存在目标对象; 如果没有候选对象但有为探索载体对象, 让 llm 选一个候选者进行探索; 在探索过程中, 机器人会不断更新 map 且寻找新的候选对象或者载体对象

Learning Fine-Grained Bimanual Manipulation with Low-Cost Hardware

精细的操控任务例如扎电线、将电池插入槽中, 往往需要较大的计算成本或者高端的硬件设备, 而想要落实应用, 成本控制是非常重要的, 因此需要找到在有限的预算下实现精细操作的智能
本文基于端到端的模仿学习, 训练数据也完全来自于现实的演示, 在高精度任务中, 模仿学习的缺点是对策略错误较为敏感, 且人类演示数据相差较大, 不便于学习; 为此, 本文提出了一种 Action Chunking with Transformers (ACT) 算法, 可以通过低成本地通过动作序列学习, 并得到不错的准确率

前言

举一个生活中的例子, 例如打开一个有盖的杯子, 这就需要一只手(假设为右手)握住杯子, 倾斜让左手靠近杯盖, 然后辨别出杯盖边缘, 让左手轻轻掀起; 这种任务对 ai 来说相当精细
由于需要在有限的成本内完成精细任务, 我们选择端到端的模型, 使用低成本的摄像头 rgb 图像作为输入, 让模型只学习操作策略而无需对整个环境建模(当然对这种复杂任务建模也非常难, 例如在电子游戏界, 几乎没有游戏能做好吃饭等人物的日常动画)
以下简述本文使用的一些技术:

  • 远程操控(tleoperation): 使用两只大致相同的低成本机械臂, 共用一个空间地图, 使用一下些 3d 打印组件来增强反向驱动, 总预算控制在 $20k 内
  • 模仿学习算法: 为了避免模仿学习常见的累积误差问题, 参考心理学的 动作块, 让学习策略预测接下来 k 步的一连串动作, 防止某个错误的一步影响后面的推理; 且能减少一些不相干因素的影响, 例如演示中的部分暂停
    • 为了提高策略的平滑度, 设置了 temporal ensembling 机制, 更频繁地查询策略, 且将重叠的动作块取平均值
    • 使用 Transformers 处理动作块(序列数据)
  • Backdriving : 在机械和控制系统中使用的术语, 通常指的是在某些系统中, 外部力或运动驱动系统的运动, 而不是通过其内部控制机制来实现, 也就是正向驱动是电机驱动机械装置, 反向驱动则可以是相对机械的外力——比如人力也可以驱动机械臂
  • compounding error(累积误差): 指在(模仿)学习过程中, 由于对错误示范的逐步复制和执行, 错误逐渐积累, 从而影响系统的整体表现
  • action chunking: 心理学术语, 将一系列动作或行为组合成一个更大、更有意义的单元(或“块”), 以提高任务执行的效率和流畅性

real work

  1. Behavioral cloning
    行为克隆是最简单的模仿学习方法, 但很明显也有非常多的问题, 例如之前提及的累积误差, 应该解决思路是使用额外的在线学习或者额外标注来更正, 但对低成本硬件的远程操纵常见, 难以适用
    如果常识在数据集加入噪声, 很可能会直接让训练失败, 又或者离线地生成校正数据, 但这种方法这在部分场景有效
    出于对以上过往问题的考虑, 本文引入了 动作块 机制

  2. 实体机器介绍
    如前文介绍, 本文的技术选择准则可以概括为“物美价廉”, 两个机械臂控制在数千美元, 本文使用的 ViperX arm 有 750g 的负重能力,1.5m 的宽度, 5-8mm 的准确度, 其关键电机可替换, 但手指对复杂任务不够适用, 为此 3d 打印了一些手指, 并用 Grip tape(握把胶带)缠一圈来提高抓取能力(it just works!)
    接下来要选择远程操作系统, 市面上一些常见的系统通过 vr 或者摄像头捕捉手臂姿势来操纵机械臂, 这称为 task-space mapping, 本文使用 WidowX 一种让用户通过反向驱动 "leader"(一个更小的机器部件)来驱动机械臂("follower")的系统, 这称为 joint-space mapping
    为什么选择这种系统:

    1. 系统中的机械臂有 6 个自由度且没有冗余, 如果使用反向运动学, 很容易陷入起一点
    2. 共用空间减少计算消耗和延迟
    3. leader 的重量防止用户动作过快且相比 VR 控制器减少振动

除此之外, 系统做了一些改造减少 leader 的耗力, 详见官网
这个机器系统称为 ALOHA

  1. ACT 理论部分

ACT 系统可以视为一种有条件(conditional)的 VAE(之前写的 介绍博文), 其编码器将动作序列和关节位置作为观察结果(输入数据)编码为 z(测试时会丢弃编码器), tf 部分的编码器接受所有相机输入、关节位置以及 z, 其解码器生成一个动作序列
实操中, 让操作员操作 leader 机器人(leader 由于要人类操纵, 规格与 follower 不同, 两者的动作参数之间可以隐式转换), ACT 不断预测人类操作员在给定观察下的未来 k 步操作
这样有个额外的好处, 由于学习的样本是人类提供的行为, 而这种行为不一定是符合马尔科夫假设的, 单步学习很可能会被暂停之类的行为误导, 而如果误导行为集中在一个动作块中, 对训练的损害则不会那么巨大
但相应的, 由于每 k 步切换, 可能过程不会太平滑, 因此在每步都会查询策略, 类似滑动窗口, 这样依赖每次预测的动作块都会有部分重叠, 因此为了充分利用这些信息, 对未来时刻的所有预测动作, 计算一个加权和, 这个过程称为 temporal ensembling, 实验发现这样的聚合效果要好于传统的对于时间上相邻动作动作的平滑化, 这部分机制会在下文详细讨论

接下来阐释对输入的处理:

  1. 我们用 CVAE 处理人类输入, 它由一个编码器和一个解码器组成, 解码器会预测 z 的均值与方差, 用作对角高斯分布, 也就是根据输入数据拟合一个高斯分布
  2. 出于训练速度考虑, 对输入数据, 不使用图像观察结果, 只用机器人的本体感知数据(例如姿势, 角度等)
  3. 解码器则会使用 z 以及当前观察结果(图像+关节位置)预测未来的动作序列
  4. 测试时, 设 z 为先验分布(给定)的均值, 如果想要确定性地解码, 可以直接设 0(注意是测试时这么做)
  5. 训练的过程中不断地最大化模型输出与演示数据里的相同动作块的对数概率; 同时也使用标准 VAE 的两个标准(重建损失与正则化项), 对正则化项, 乘以一个超参数 β(用于控制 z 包含的信息量, 更高的正则化会导致更少的信息转入 z)

具体实现:

  1. 使用 tf 作为编码和解码器, 具体来说, CVAE 的编码器类似 BERT, 其输入是当前关节位置以及长度为 k 的演示动作序列, 同样类似 BERT, 每段序列会有个 CLS 前缀, 具体见上图左侧部分
  2. CVAE 解码器实际上更为复杂, 由 ResNet image encoders, a transformer encoder, a transformer decoder 组成, 接受的输入也比编码器更多, 其动作空间是机器人的所有关键位置也就是一个 14 维向量(一只手对应 7 维), 大致过程如下
    1. resnet 的编码器将图像输入转化为特征地图, 再被展平(flatten)为序列(另外使用正弦位置编码保存空间关系)
    2. 处理完图像后, 特征数据以及关节位置, z 作为输入通过一个线性层投影到一个向量组, 其向量数为 k
    3. 得益于前一步中得到的固定长度的向量组, tf 解码器通过 cross-attention 产生相同长度的输出组, 然后在经过 MLP(多层感知机)的投影为 14 长度的动作向量组

神奇的是, 用 L1 损失作为重建损失的表现更好, 此外用 delta joint position(关节变化量)训练效果不如目标位置

  • 逆向运动学(Inverse Kinematics, IK): 运动学(Kinematics)是在给定所有关节角度的情况下计算链接结构(如一节人体的关节)的末端的空间位置的过程; 逆向运动学则相反, 知道末端状态, 需要求解关节应该是什么角度
  • 奇异点(singularities): 机器人在某些特定配置下失去自由度或控制能力的状态。在这些状态下, 机器人可能无法有效地执行运动或控制其末端执行器的位置和姿态
  • 变分自编码器(Variational Autoencoder, VAE): 一种生成模型, 结合了神经网络和贝叶斯推断的思想, 广泛应用于无监督学习、数据生成和特征学习
  • 风格变量(Style Variable): 生成模型中, 用于控制输出样本风格或特征的潜在变量, 能够影响生成内容的“风格”而不改变其“内容”

实验与总结

由于此部分大多是现实情况的细节, 省略这些部分, 只说结果
ACT 主要创新点在于能够预测连续的, 精确的动作序列, 而一些先前的模仿学习方法只能像分类问题一样预测离散动作, 此外端到端的训练方式对特化的任务可能有更好的效果
消融实验中, CVAE, 动作块等机制都较为有效
相比先前方法, ACT 大部分任务都取得了更好的表现, 但是会在对比度低图像难以捕捉特征的场景表现不佳