立体匹配的脉动阵列技术解析
1. 脉动阵列的寄存器重分配与拓扑变换
在构建高效的立体匹配脉动阵列时,寄存器的重分配是关键步骤之一。通过采用重定时技术(retiming technique),可以实现所有边缘的流水线化。例如,在特定的电路中,原本的寄存器经过重新分配后,原本的两个先导“无关项”(equivalent to two register delays)沿着路径传递,使得先导“无关项”减少了两个,而广播路径上的寄存器增加了两个。这样一来,关键路径被缩短至节点延迟,从而显著提高了系统速度。
从拓扑和时序变换的角度来看,我们可以从一个基本电路出发,推导出许多功能等效的替代阵列。这一概念涉及到时序、空间规则性和对偶性的结合。电路可以用关联矩阵来表示,其元素代表顶点和边缘寄存器,而拓扑和时序变换则可以用相似变换来表示。以下是具体的脉动变换算法:
Algorithm 13.1 (Systolic transformation)
考虑一个数组 {PE(k)|k ∈[0, K −1]},具有 K 个节点,且仅相邻节点相连。输入流为 t ∈[0, T −1] 时的 x(t) 和 y(t)。
1. 从一个具有大扇出和大扇入的基本电路开始。节点执行:
xo(k) ←xi(k),
z(k) ←T(xi(k), yi(k)),
其中 T(⋅) 是内部操作,y 是中间结果。必要时,输入流会通过添加先导“无关项”来满足同步需求。
2. 通过将扇入和扇出边缘通过节点以多种方向进行路由来移除它们。节点变为:
xo(k) ←xi(k),
yo(k) ←yi(k),
z(k) ←T(xi(k), yi(k)).
3. 如果一个循环由 E 条边和 R 个寄存器组成,将所有边乘以一个常数‘c’,使得 c = arg minc{cR ≥E},并将信号(包括先导延迟)与 c - 1 个“无关项”交错。
4. 重新分配寄存器,使所有边缘至少被一个寄存器阻塞。
5. 对于对偶电路,从步骤 1 开始重复该过程。
2. 基本脉动阵列的推导
我们已经推导出一种图像流反向移动的脉动阵列。直观上,还存在另一种两个数据流同向移动的脉动阵列。利用上述的脉动变换算法(Algorithm 13.1)可以推导这种阵列。
在推导过程中,起始图与之前相同,但在第二阶段,右图像被路由到另一个方向,从而使两个流同向流动。由于该电路中没有循环,因此无需进行交错处理。通过从源端提供寄存器,可以轻松实现流水线化。因为有两条组合边,所以需要两个额外的寄存器。可以在源的前面插入两个寄存器,而不会违反数据同步。插入的寄存器会沿着路径移动,并均匀分配给每条边。
考虑对偶性,还可以推导出更多的电路。例如,之前假设数据是头先进入的,其对偶情况是数据尾先进入。这样可以得到不同的电路,如没有初始延迟但有最终延迟的电路,以及需要进行交错处理的电路等。
通过结合流的方向(向前或向后)、流的顺序(头先或尾先)和参考系统(右参考或左参考)这三个因素,我们可以得到八种基本电路:FBR、FBL、BBR、BBL、FFR、FFL、BFR 和 BFL。这些电路在某种程度上互为对偶,它们可以被称为基本电路。具体信息如下表所示:
| 电路名称 | 流方向 | 流顺序 | 参考系统 | 交错情况 | 初始延迟情况 |
| ---- | ---- | ---- | ---- | ---- | ---- |
| FBR | 向前 | 头先 | 右参考 | 是 | 无 |
| FBL | 向前 | 头先 | 左参考 | 是 | 无 |
| BBR | 向后 | 头先 | 右参考 | 否 | 有 |
| BBL | 向后 | 头先 | 左参考 | 否 | 有 |
| FFR | 向前 | 尾先 | 右参考 | 否 | 无 |
| FFL | 向前 | 尾先 | 左参考 | 否 | 无 |
| BFR | 向后 | 尾先 | 右参考 | 是 | 无 |
| BFL | 向后 | 尾先 | 左参考 | 是 | 无 |
3. 基本脉动阵列的搜索空间分析
我们可以通过观察这八种电路在搜索空间中的行为来对它们进行比较。搜索空间定义为 {(x, d)|x ∈[0, N −1]},根据参考系统的不同,观察区域也会有所不同。线性阵列对应于扫描该空间的一条线,线上的所有节点并发操作,寻找其父指针并更新其成本。
交错系统(a) - (d)对应的电路中,线的斜率大于 1,扫描线中有两种类型的节点交替操作以匹配图像,其余节点必须保存先前的成本和指针,以便在轮到它们时再次操作。斜率为 1 的电路(e) - (h)则不需要交错处理。
在性能方面,起始点是影响性能的第一个因素。在 BF 和 FF 中,计算从较少节点向较多节点进行;而在 FB 和 BB 中,计算方向相反,后者能提供更可靠的结果。另一个因素是邻域的形式,不同的电路在邻域节点的选择和处理上有所不同,例如 FBR 中某些邻域节点可能会导致结果不佳,而 BBR 中没有遮挡节点,所有节点在正向计算时都处于忙碌状态,但也存在一定的约束。
以下是搜索空间中不同电路行为的 mermaid 流程图:
graph LR
classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px;
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
classDef decision fill:#FFF6CC,stroke:#FFBC52,stroke-width:2px;
A([开始]):::startend --> B{选择电路类型}:::decision
B -->|交错系统 (a - d)| C(线斜率 > 1):::process
B -->|斜率为 1 电路 (e - h)| D(无需交错):::process
C --> E(两种节点交替操作):::process
D --> F(所有节点正常操作):::process
E --> G(保存先前成本和指针):::process
F --> H(更新成本和指针):::process
G --> I([结束]):::startend
H --> I
4. 脉动算法的构建
基于这八种基本脉动阵列,我们可以构建一个脉动系统和算法。每个处理器除了进行正向处理外,还需要执行反向处理和其他形式的处理,因此需要在基本电路中添加额外的端口。幸运的是,这些额外端口对于所有基本电路都是相同的。
内部操作主要与指针表的维护有关,需要邻居节点的成本和一个激活位(表示邻居节点是否在最短路径上)。由于通信是双向的,输入和输出端口的数量必须相同。
我们可以构建两种类型的阵列,一种用于正向处理,另一种用于反向处理。阵列由处理器 PE(k)(k ∈[0, D −1])组成,它们之间存在邻域连接。以下是控制单元的算法:
Algorithm 13.2 (Control unit)
给定 (Ir, Il),执行以下操作:
1. 初始化:在阵列中对齐两个图像流。
2. 正向传递:对于 t = 0, 1, … , N - 1,持续提供图像流。
3. 最终化:等待最终化,设置 d(N) ←0(或 d(0) ←0)。
4. 反向传递:对于 t = N - 1, N - 2, … , 0,d(t) ←d(t + 1) + 𝜂(t)。
控制单元和脉动阵列的连接方式如下:控制单元为不同的脉动阵列提供不同的图像流,并通过线或总线接收所有阵列元素的输出。为避免冲突,只有一个元素允许发出指针,其他元素处于三态或全零状态。控制机制非常简单,因为控制单元和脉动阵列之间没有握手机制。控制器启动脉动阵列后,两个系统独立但同步地工作。
综上所述,通过对脉动阵列的寄存器重分配、基本阵列的推导、搜索空间的分析以及脉动算法的构建,我们可以设计出高效的立体匹配脉动阵列系统。不同的基本电路具有不同的特性,在实际应用中需要根据具体需求选择合适的电路。未来,我们可以进一步研究如何优化这些电路和算法,以提高立体匹配的性能和效率。
5. 脉动阵列系统的详细结构与工作原理
为了更深入地理解脉动阵列系统,我们进一步分析其详细结构和工作原理。脉动阵列系统主要由控制单元和处理单元组成,处理单元又可细分为不同类型的处理器。
脉动阵列由处理器 PE(k)(k ∈[0, D −1])构成,这些处理器之间存在邻域连接。每个 PE 具有用于图像、成本和活动位的输入输出端口对,仅两端的元素作为输入连接到外部。输出端口可以直接连接到输入端口,也可以由内部寄存器驱动,指针输出是一个两位线,所有输出通过三态连接到总线。
脉动阵列可以进一步分解为两种类型的处理器,一种处理器的图像端口方向相反,另一种则相同。以下是这两种处理器的特点对比表格:
| 处理器类型 | 图像端口方向 | 特点 |
| ---- | ---- | ---- |
| 类型一 | 相反 | 适用于特定的数据流方向和处理需求 |
| 类型二 | 相同 | 适用于另一种数据流方向和处理场景 |
在构建算法时,控制器的描述基于图 13.8 中的阵列,而处理器的算法则基于图 13.9 中的两种处理器。为了使系统成为一个脉动系统,需要一个控制单元来辅助。与单处理器算法不同,阵列算法通常由两部分组成,一部分用于控制单元,另一部分用于单个处理元素。
控制单元负责驱动整个阵列,提供数据并接收结果;处理元素则对输入数据进行处理并输出结果。控制单元和脉动阵列的工作流程可以用以下 mermaid 流程图表示:
graph LR
classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px;
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
classDef decision fill:#FFF6CC,stroke:#FFBC52,stroke-width:2px;
A([开始]):::startend --> B(控制单元初始化):::process
B --> C(控制单元提供图像流):::process
C --> D{脉动阵列处理}:::decision
D -->|正向处理| E(正向处理阵列工作):::process
D -->|反向处理| F(反向处理阵列工作):::process
E --> G(脉动阵列输出结果):::process
F --> G
G --> H(控制单元接收结果):::process
H --> I([结束]):::startend
6. 不同基本电路的性能对比与选择
在实际应用中,选择合适的基本电路对于立体匹配的性能至关重要。我们已经知道有八种基本电路:FBR、FBL、BBR、BBL、FFR、FFL、BFR 和 BFL,它们各自具有不同的特性。
从起始点和计算方向来看,FB 和 BB 类型的电路计算方向与 BF 和 FF 类型相反,前者能提供更可靠的结果。从邻域形式来看,不同电路在邻域节点的选择和处理上存在差异,例如 FBR 中某些邻域节点可能导致结果不佳,而 BBR 中没有遮挡节点,但也存在一定约束。
以下是不同基本电路的性能对比总结表格:
| 电路名称 | 起始点与计算方向 | 邻域形式 | 性能特点 |
| ---- | ---- | ---- | ---- |
| FBR | 正向计算,从较少节点到较多节点 | 某些邻域节点可能影响结果 | 有一定局限性 |
| FBL | 正向计算,从较少节点到较多节点 | 类似 FBR | 有一定局限性 |
| BBR | 反向计算,从较多节点到较少节点 | 无遮挡节点,但有约束 | 结果较可靠 |
| BBL | 反向计算,从较多节点到较少节点 | 类似 BBR | 结果较可靠 |
| FFR | 正向计算,从较少节点到较多节点 | - | - |
| FFL | 正向计算,从较少节点到较多节点 | - | - |
| BFR | 反向计算,从较多节点到较少节点 | - | - |
| BFL | 反向计算,从较多节点到较少节点 | - | - |
在选择电路时,需要综合考虑应用场景和性能需求。如果对结果的可靠性要求较高,且可以接受一定的约束条件,那么 BBR 和 BBL 类型的电路可能是较好的选择;如果对计算方向和邻域形式的要求不那么严格,其他电路也可以根据具体情况进行选择。
7. 立体匹配脉动阵列技术的应用前景
立体匹配脉动阵列技术在计算机视觉领域具有广阔的应用前景。在自动驾驶中,立体匹配可以帮助车辆识别周围环境的深度信息,从而实现更精确的导航和避障。在机器人视觉中,立体匹配可以让机器人更好地感知周围环境,进行目标识别和抓取操作。
随着技术的不断发展,立体匹配脉动阵列技术也将不断优化和改进。未来,我们可以期待更高效的电路设计和算法,进一步提高立体匹配的性能和效率。例如,通过优化寄存器的分配和使用,减少电路的延迟和功耗;通过改进算法,提高匹配的准确性和速度。
同时,立体匹配脉动阵列技术也可以与其他计算机视觉技术相结合,如深度学习、图像分割等,实现更复杂的视觉任务。例如,将立体匹配与深度学习相结合,可以提高目标识别的精度和鲁棒性。
总之,立体匹配脉动阵列技术是计算机视觉领域的一项重要技术,具有巨大的发展潜力和应用价值。通过不断的研究和创新,我们相信这项技术将在未来的智能系统中发挥更加重要的作用。
超级会员免费看
25

被折叠的 条评论
为什么被折叠?



