具身智能机器人系统五-具身智能机器人大模型
加速机器人计算
实时性对于机器人非常重要,但是这在进入具身智能时代前,实时性难以实现,主要原因有两个,机器人的算力要求很高,第二是机器人的算法比较碎片化难以实现单硬件实现加速。
因此,机器人计算加速非常重要,本书列举了硬件定制机器人加速,初次之外,使用gpu加速和fpga也是常用的方法。本书列举了机器人定位,规划和控制加速模块,我来介绍以下其中一种的加速方式。
机器人定位加速
由于机器人的定位模块有多种算法且更具场景各有好坏,比如我们可以分为,有无地图,有无gps信号来分类。在室内无地图环境下,采取slam,在室内有地图时直接使用配准算法简单高效,室外环境又要使用视觉惯性测距。
那么我们现在有3个算法要根据不同的情况进行选择,我们来设计一个面向这些算法的芯片。
首先我们需要一个共享的视觉前端用来提取特征并且始终处于激活状态,后端通过分类激活不同的数据流。
我们先来介绍视觉前端:
介绍前我们先解释一些词语:SPM
Spatial Pyramid Matching(SPM)
- 核心思想
通过将图像划分为不同尺度的子区域(如 1×1、2×2、4×4 等),在每个子区域内提取局部特征(如 SIFT、HOG 等),再将这些特征聚合起来,形成多尺度的全局特征表示。这种分层结构能更好地捕捉图像的局部细节和全局空间信息。
- 工作流程
- 分块:将图像按金字塔结构分层划分(例如 L0 层为整张图,L1 层分为 2×2 块,L2 层分为 4×4 块)。
- 特征提取:对每个子块提取局部特征。
- 特征聚合:将各层子块的特征加权组合,形成最终的全局特征向量。
- 分类/匹配:利用 SVM 等分类器进行图像分类或相似性匹配。
MUX
通常是 Multiplexer(多路复用器) 的缩写,其核心功能是将多个输入信号合并为单个输出信号传输,并在接收端分离还原。以下是它在图像处理中的几种常见应用场景:
- 用途:将多个摄像头或传感器的图像/视频流合并为单一信道传输,降低硬件复杂度。
在图像处理领域,SB 和 FIFO 是两种常见的技术术语,通常与数据处理、硬件架构或算法实现相关。以下是具体解释:
SB
Stencil Buffer(模板缓冲区)
- 定义:一种专用缓冲区。
FIFO(First-In-First-Out,先进先出队列)
在图像处理系统中,FIFO 是一种数据管理机制,用于确保数据按接收顺序处理:
- 数据流控制:在流水线架构中缓冲输入/输出数据,避免处理速度不匹配导致的丢帧或卡顿。
- 同步时序:协调不同模块(如传感器、处理器、显示器)的时钟差异。
这个前端一个立体视觉系统如何通过左右两个摄像头(类似人眼)拍摄的图像,计算出物体的深度(3D信息),最终输出精准的匹配结果。整个过程分三步走:前端处理 → 核心计算 → 优化输出。
一、输入与预处理阶段
1. 输入图像(Image@1)
- 输入源:双目摄像头同步采集的左右图像(Left/Right Image@1)。
- 数据格式:RAW图像数据(可能为Bayer格式),分辨率由摄像头参数决定(如1280x720@30fps)。
- 传输方式:通过DMA(Direct Memory Access)控制器,绕过CPU直接从片外DDR内存搬运至片上缓存(SPM)。
2. 图像滤波(图像滤波波)
- 功能:消除传感器噪声,保留边缘信息。
- 算法
- :硬件优化的双边滤波(Bilateral Filter)或导向滤波(Guided Filter)。
- 硬件加速:滤波核并行计算(例如3x3窗口),通过SPM缓存局部像素,减少DDR访问次数。
- 输出:滤波后的左/右图像数据(Left/Right Filtered Image)。
3. 特征点检测(特征点检测)
- 目标:提取鲁棒性强的关键点(Keypoints)及其描述符。
- 算法选择:
- ORB(Oriented FAST and Rotated BRIEF):适用于嵌入式系统的低复杂度特征。
- 硬件优化:FAST角点检测器并行化(图中“L'F(1)-”模块),通过SIMD指令加速像素梯度计算。
- 关键输出:
- 特征描述符(L'(0)/L'(+)):二进制描述符(如BRIEF)存储于SPM。
- 时空关联数据(Temporal correspondences):通过“XUM”模块关联连续帧特征点,解决动态场景匹配问题。
二、特征传输与立体匹配阶段
4. 特征数据缓存(SPM与FIFO)
- SPM(Scratchpad Memory):
- 层级设计:分为多级(如L'(0)/LP(0)/$P(0)),分别存储当前帧特征、历史帧特征及匹配中间结果。
- 复用策略:通过“SB(Shared Bus)”模块动态分配访问权限,避免多模块争抢带宽。
- FIFO(先进先出队列):
- 作用:解决左右图数据处理速度差异(如右图延迟补偿),确保时序对齐。
- 深度配置:根据流水线延迟设定队列深度(例如8级FIFO应对3帧延迟)。
5. 立体匹配(Stereo Matching)
- 核心模块:差分计算(差分计算) + 描述符匹配(DREAMUXIX模块) + 求解器(最小二零)。
- 流程分解:
- 代价计算(差分计算):
- 输入:左图特征描述符(L'(0))与右图描述符(Rp)通过FIFO对齐。
- 计算方式:基于Hamming距离或Census变换的代价矩阵(Cost Volume)生成。
- 代价聚合(DREAMUXIX模块):
- 算法:自适应窗口聚合(Adaptive Support Weight),利用局部纹理信息调整权重。
- 硬件加速:窗口滑动计算通过行缓冲区(Line Buffer)实现,减少重复数据加载。
- 视差求解(最小二零求解器):
- 算法:半全局匹配(SGM)的能量函数最小化,采用动态规划(Dynamic Programming)或置信传播(Belief Propagation)。
- 输出:初始视差图(Disparity Map r(0)),分辨率与输入图像一致。
- 三、后处理与优化阶段
- 6. 匹配优化(MO, Matching Optimization)
- 输入:初始视差图(r(0))及空间-时间关联约束(Temporal/spatial correspondences)。
- 输出:优化后的视差图(Refined Disparity Map)。
- 7. 误差平滑(DR, Error Smoothing)
- 功能:消除视差图的局部突变与量化误差。
- 算法实现:
- 边缘感知滤波:联合引导图像(原左图)与视差图,使用联合双边滤波(Joint Bilateral Filter)平滑非边缘区域。
- 多尺度融合:通过金字塔下采样与上采样操作,保留远距离物体的细节。
- 硬件加速:滤波核计算复用图像滤波阶段的SPM缓存结构。
图像中的橙色算子构成特征提取模块,蓝色的算子构成空间匹配模块,绿色的构成时间匹配模块,由于无论是vio,slam还是匹配算法都需要用到以上三个模块。
采用以上的前端的优势是对多种可能的计算进行并行计算。在高层次上,特征提取同时可以处理左右的图像可以并行处理,因为立体匹配需要两个图像生成的特征点,立体匹配需要完成特征点描述后才计算。时间匹配只需要左侧图像进行操作,因此左侧图像在图像滤波后就可以开始时间匹配。
第二个优势是利用多种储存方式混合而成的片上储存网络,尽量让数据留在片内而不是频繁的与片外数据进行交互。前端算法包含许多模板操作,例如图像滤波中的卷积和立体匹配中的快匹配,因此使用模板缓冲区可以用来捕获模板操作中的数据重用。许多模板操作会按顺序重列表中读取,在这种情况下使用fifo队列是合适的。
然后我们来讨论一下后端算法,后端算法本质上都有一个计算模块,我们的想法就是加速这些计算模块,为了避免资源浪费并且提高效率,设计一个灵活的硬件架构更加合适。
总之,定位加速模块的整体设计体现机器人加速芯片设计的一个重要思想,依托算子而非算法进行优化的芯片设计思路,尽管算法的碎片化程度很高但是一些算子任然可以通用。作者使用过一种FPGA实现了算法的算子加速,FPGA会和主机进行通信,主机会获得前端处理的结果。并且平均帧数和功耗都有所优化。作责也使用过GPU计算加速这需要一定的计算核的读取和建立时间。另外,算法中的大量的稀疏矩阵在GPU中并没有明显的优势。
除此之外本书还介绍了其他加速模块,机器人的实时性及其加速器设计才刚刚引起研究者的重视还没有达到成熟的地步,如何对具身智能大模型进行加速,这是对当前机器人计算系统实时性必须面对的重要问题。