从科研新闻到工程落地的距离,往往比我们想象的小很多。
当看到“清华天眸芯团队再登Nature系列期刊封面”这条消息时,很多做计算机视觉开发的读者第一反应是“又一项顶级科研成果”。但如果把这件事换一个角度看待,它其实揭示了计算机视觉领域一个非常重要的方向转变:传统以“帧”为中心的图像处理范式,正在向“帧+事件”互补的类脑感知范式迁移。这个范式转换不是只存在于论文里,它对自动驾驶、机器人、边缘 AI 设备的视觉系统设计都会产生直接影响。
这篇文章我不打算只做新闻解读,而是会把“类脑互补视觉”这一概念的原理拆开,再用 Python 写一个可运行的软件模拟示例,帮助大家理解两条视觉通路如何协同工作。无论你是做图像算法、嵌入式开发,还是刚开始接触类脑计算,都可以通过这个示例建立自己的直觉。
1. 天眸芯与类脑互补视觉:从一次封面论文说起
1.1 为什么传统视觉芯片在开放世界里“不够用”
传统机器视觉系统大多建立在“帧”的基础上。摄像头以固定频率(例如 30FPS、60FPS)输出完整图像帧,算法对每一帧进行目标检测、分类、分割。这种方案在过去二十年里非常成功,尤其是深度学习兴起之后,基于帧图像的目标检测精度已经达到很高水平。
但“帧”这个数据形式本身有它难以回避的问题:
- 高速运动场景下,帧与帧之间时间间隔过长,容易出现运动模糊和目标形变。
- 极端光照条件下,单帧图像的动态范围有限,亮部过曝或暗部细节丢失。
- 连续输出大量冗余帧,对传输带宽、存储空间和计算资源都是压力。
- 对低功耗边缘设备来说,持续以高帧率处理所有画面,能源开销过高。
如果你做过车载视觉或者机器人实时感知项目,应该对以上问题不陌生。传统帧处理思路面对“开放世界”(Open World)场景——即不可预期、动态变化、环境复杂的真实场景时,鲁棒性会受到明显挑战。
1.2 类脑互补视觉的核心认识
清华大学类脑计算研究中心施路平教授团队提出的“天眸芯”(Tianmouc)类脑互补视觉芯片,出发点是对人类视觉系统的进一步模仿。
人类视觉系统并不是像一个均匀的帧摄像机那样处理光信息。视觉信息从视网膜开始就被分流成不同的通路:一条负责处理动态变化,比如物体的运动方向、速度、空间位置变化;另一条负责处理静态内容,比如颜色、纹理、形状。两条通路互为补充,最终在大脑皮层完成整合。
天眸芯所采用的“类脑互补视觉范式”,正是把这种生物视觉的并行分流机制引入芯片设计。用论文研究中的术语来说,就是两条互补路径(Complementary Pathways):
- 一条对动态视觉信息敏感,能够快速响应场景变化,有点类似生物学中的“背侧通路”,负责回答“在哪里、怎么动”。
- 一条对静态内容敏感,能够精细地获取物体的外观细节,有点类似“腹侧通路”,负责回答“是什么、长什么样”。
两条通路同时工作、按需融合,使视觉系统能够同时兼顾“快”和“准”。以公开信息来看,天眸芯正是通过这种异构融合的架构,在动态感知能力、极端光照适应性和功耗控制方面表现出不同于传统视觉芯片的特性。
1.3 天眸芯的工程意义
对于算法工程师来说,天眸芯的工程意义可以归纳为三点:
第一,它提供了一种新的数据组织和计算范式。视觉计算不一定只能处理每帧完整的像素图,也可以处理稀疏事件流加关键帧内容的组合。
第二,它把“双通路融合”从生物学概念变成了可以工程实现的架构。这意味着未来视觉算法设计时,可以刻意把动态特征和静态特征分开处理,而不是一股脑丢进同一个网络。
第三,它降低了实时视觉任务的延迟和功耗需求。自动驾驶、无人机避障、智能安防这类强实时、弱供电的场景,是类脑互补视觉最典型的受益领域。
2. 类脑互补视觉的技术拆解
2.1 两条通路:动态通路与内容通路
类脑互补视觉的核心是“分工”:动态变化由一条通路负责,静态内容由另一条通路负责。
动态通路(也可以称为“事件通路”)处理的是场景中的变化部分。它接收的是事件流,即像素亮度变化超过阈值的触发信号。每个事件通常包含像素坐标、触发时间戳和极性(变亮或变暗)。事件流本身是稀疏的、异步的,只在有变化的地方产生数据。这种机制天然适合处理高速运动、边缘提取和运动检测。
内容通路(也可以称为“帧通路”)处理的是场景中的稳定外观信息。它接收的是完整帧图像,用于识别物体类别、分割区域、理解纹理和空间布局。因为有完整像素信息,它可以利用成熟的卷积神经网络模型来获取精细语义。
这两条通路不是简单的“一个做检测、一个做分类”的先后关系,而是并行处理、在更高层完成融合。动态通路可以快速定位变化区域并跟踪移动目标,内容通路则对动态区域进行精细识别,同时也对静态背景保持持续理解。
2.2 事件流与帧流:两种数据形式有什么不同
理解类脑互补视觉,必须先理解事件流(Event Stream)和帧流(Frame Stream)的区别。
帧流是“按固定时间间隔拍摄一整幅画面的像素矩阵”。它的优点是与现有算法兼容、信息完整;缺点是时间分辨率受限于帧率,在强动态场景下信息冗余但真正关键的瞬间可能丢失。
事件流则是“由亮度变化触发的、非均匀时间间隔的稀疏事件序列”。每个事件只描述“某个时间点,某个像素位置,亮度变化的方向和强度是否超过阈值”。它的优点是时间分辨率极高(微秒级)、数据量低、动态范围大;缺点是单看一个事件没有语义信息,需要累积到一定数量才能表示一个完整的视觉对象。
在类脑互补视觉体系里,两种数据各司其职。动态变化部分用事件流表达,静态外观部分用帧表达,最后再融合。这种“互补”不是硬件上的妥协,而是数据层面的最优分工。
2.3 从芯片到算法的映射
天眸芯的硬件架构实现了这种双通路并行,那么我们做应用开发时,能不能用软件模拟同样的思路?
答案是肯定的。虽然我们无法在普通 GPU 上复现芯片的全部能效优势,但可以从算法和数据处理层面对齐这个范式:
- 用事件流模拟器或者真实事件相机数据,构建动态通路。
- 用传统图像帧数据,构建内容通路。
- 用一个小型融合模块,把两条通路的输出组装成最终感知结果。
传统视觉算法可以借用其中的思想:把运动检测和静态识别分开调度,不必要每帧都做全量检测,而是让运动模块低延迟触发、内容模块按需精细识别。这种设计思路在工程上同样有价值,可以有效降低计算负载。
3. 环境准备与实验设计:用软件模拟类脑感知通路
3.1 为什么要做软件模拟
天眸芯本身是流片后的物理芯片,普通开发者并没有直接使用的条件。但这不妨碍我们理解它的视觉范式,并通过软件模拟验证“两条通路互补”这一思路在算法层面的可行性。
模拟实验的目标不是复现芯片性能,而是:
- 理解事件流和帧流的数据结构差异。
- 体会“动态检测”与“静态识别”并行处理的过程。
- 演示如何通过简单融合规则,得到比单一通路更全面的感知结果。
换句话说,我们要做一个“类脑互补视觉的最小工程示例”。
3.2 环境版本说明
本文示例使用 Python 编写,依赖极少,便于快速运行。版本信息如下:
- Python:3.8 及以上,推荐 3.10 或 3.11。
- NumPy:1.21 及以上,用于矩阵运算。
- OpenCV:可选,用于可视化,不安装也能运行核心逻辑。
- Matplotlib:可选,用于绘制结果图。
建议使用虚拟环境安装依赖:
python -m venv vision_demo_env source vision_demo_env/bin/activate # Windows 使用 vision_demo_env\Scripts\activate pip install numpy opencv-python matplotlib版本需要根据你的项目实际情况调整,本文以常见环境为例,重点演示配置思路。
3.3 项目结构与实验流程
整个模拟实验采用单文件方式,方便复制运行:
complementary_vision_demo/ ├── complementary_vision_demo.py # 完整示例代码 └── requirements.txt # 依赖清单实验流程分为四步:
- 生成模拟场景:一个动态移动的圆和一个静态三角形。
- 动态通路:从相邻帧差异中生成事件流,输入 LIF 神经元,计算动态区域质心。
- 内容通路:提取当前帧静态特征,与预定义的模板特征匹配,识别静态物体类别。
- 融合输出:综合动态与静态信息,输出最终感知结果。
下面进入代码实战。
4. 完整实战:用 Python 模拟类脑互补视觉感知
4.1 模拟数据生成
首先,我们构造一个 24×24 的小尺寸视频序列,模拟一个动态的“圆”从左侧向右侧移动,画面中还有一个静态的“三角形”。这里使用小尺寸图像是为了演示方便,实际项目中可以替换为真实视频帧或事件相机数据。
# 文件路径:complementary_vision_demo/complementary_vision_demo.py import numpy as np IMAGE_SIZE = 24 FRAME_COUNT = 30 def make_frame(t: int) -> np.ndarray: """根据时间步 t 生成一帧模拟画面。 画面包含: - 一个从左侧向右移动的圆(动态目标) - 一个固定在右下角的三角形(静态目标) """ frame = np.zeros((IMAGE_SIZE, IMAGE_SIZE), dtype=np.float32) # 动态圆:圆心沿水平方向移动 circle_x = int(3 + (t / (FRAME_COUNT - 1)) * 15) circle_y = 12 for y in range(IMAGE_SIZE): for x in range(IMAGE_SIZE): if (x - circle_x) ** 2 + (y - circle_y) ** 2 <= 9: frame[y, x] = 1.0 # 静态三角形:设定在右下角 for y in range(16, 21): left = 18 - (y - 16) right = 22 + (y - 16) for x in range(left, right): if 0 <= x < IMAGE_SIZE and 0 <= y < IMAGE_SIZE: frame[y, x] = 0.8 return frame def generate_frames() -> list: """生成完整视频序列。""" return [make_frame(t) for t in range(FRAME_COUNT)]这里刻意把圆和三角形设置为不同亮度值:圆是 1.0,三角形是 0.8。这样在事件模拟阶段,能够区分哪些变化来自动态目标、哪些来自静态背景。
4.2 事件通路:生成事件流并送入 LIF 神经元
动态通路的输入是事件流。在软件模拟中,事件流可以由相邻帧之间的差分产生。某像素亮度变化超过阈值,就产生一个事件;变化方向为正记作+1,变化方向为负记作-1。
事件流并不关心静态物体是否存在,它只关心“变化”。在模拟场景中,圆是移动的,所以圆的边缘会产生事件;三角形是静止的,所以三角形区域不产生任何事件。
4.2.1 差分事件流生成
def generate_events(frames: list, threshold: float = 0.3) -> list: """从相邻帧差分中生成稀疏事件流。 每个事件格式为 (x, y, t, p): x, y 是像素坐标,t 是时间步,p 是极性(+1 变亮,-1 变暗)。 """ events = [] prev_frame = frames[0].astype(np.float32) for t in range(1, len(frames)): cur_frame = frames[t].astype(np.float32) diff = cur_frame - prev_frame # 找出变化超过正负阈值的像素 pos_y, pos_x = np.where(diff > threshold) neg_y, neg_x = np.where(diff < -threshold) for y, x in zip(pos_y, pos_x): events.append((int(x), int(y), t, 1)) for y, x in zip(neg_y, neg_x): events.append((int(x), int(y), t, -1)) prev_frame = cur_frame return events模拟运行后,事件主要出现在圆的前后边缘:前边缘因为原本没有圆的部分变为有圆,产生正极性事件;后边缘因为圆的区域移走,产生负极性事件。
4.2.2 LIF 神经元实现
事件流进入芯片后,需要被神经元处理。我们实现一个最简单的 Leaky Integrate-and-Fire(LIF)神经元模型。LIF 神经元维护一个膜电位,每次收到输入都会累加到膜电位上,同时膜电位按比例衰减。当膜电位超过阈值时,神经元发放一个脉冲,并把膜电位复位。
class LIFNeuron: """Leaky Integrate-and-Fire 神经元模型。""" def __init__(self, threshold: float = 1.0, decay: float = 0.85, reset: float = 0.0): self.threshold = threshold self.decay = decay self.reset = reset self.membrane = 0.0 self.spike_count = 0 def step(self, current: float) -> int: """输入电流,更新膜电位;发放脉冲返回 1,否则返回 0。""" self.membrane = self.membrane * self.decay + current if self.membrane >= self.threshold: self.membrane = self.reset self.spike_count += 1 return 1 return 0 def reset_neuron(self): self.membrane = 0.0 self.spike_count = 04.2.3 用事件密度图定位动态目标
单纯的事件只是一个触发标志,我们需要把事件积累成“动态显著性图”,并计算动态目标的质心位置。
def compute_dynamic_map(events: list, frame_size: int = IMAGE_SIZE) -> np.ndarray: """将事件投影到二维空间,生成动态显著性图。""" dynamic_map = np.zeros((frame_size, frame_size), dtype=np.float32) for x, y, t, p in events: if 0 <= x < frame_size and 0 <= y < frame_size: dynamic_map[y, x] += 1.0 return dynamic_map def find_dynamic_centroid(dynamic_map: np.ndarray): """根据动态显著性图计算质心和事件总强度。""" total = dynamic_map.sum() if total < 1e-6: return None, 0.0 ys, xs = np.where(dynamic_map > 0) weights = dynamic_map[ys, xs] cx = float((xs * weights).sum() / weights.sum()) cy = float((ys * weights).sum() / weights.sum()) return (cx, cy), float(total)这样,动态通路就能输出两个关键信息:动态目标的大致位置、事件活动强度。活动强度越大,说明该区域动态变化越剧烈。
4.3 内容通路:基于模板特征的静态物体识别
内容通路负责识别静态物体的类别。这里我们使用一个非常朴素的特征匹配策略:提取目标的亮度分布向量,然后与预置的模板特征做相似度比较。
实际项目中,这一模块可以替换为 CNN 分类器。这里为了演示,使用最简单的模板特征。
def extract_shape_feature(region: np.ndarray) -> np.ndarray: """提取区域形状特征。 将任意区域等比缩放为 8x8 的网格,然后展平为一维向量, 用于后续模板匹配。这是一个极度简化的特征表达。 """ h, w = region.shape grid = np.zeros((8, 8), dtype=np.float32) for i in range(8): y_start = int(i * h / 8) y_end = max(y_start + 1, int((i + 1) * h / 8)) for j in range(8): x_start = int(j * w / 8) x_end = max(x_start + 1, int((j + 1) * w / 8)) grid[i, j] = region[y_start:y_end, x_start:x_end].mean() return grid.flatten() def cosine_similarity(a: np.ndarray, b: np.ndarray) -> float: """计算两个特征向量的余弦相似度。""" na = np.linalg.norm(a) nb = np.linalg.norm(b) if na < 1e-8 or nb < 1e-8: return 0.0 return float(np.dot(a, b) / (na * nb))接下来预置几个模板特征。模板包括圆形和三角形。识别时,我们提取当前帧中右半部分的静态区域特征,与模板比较,取相似度最高者作为结果。
def build_templates(): """构建静态形状模板库。""" templates = {} # 圆形模板:中心区域高亮 circle = np.zeros((12, 12), dtype=np.float32) cy, cx = 6, 6 for y in range(12): for x in range(12): if (x - cx) ** 2 + (y - cy) ** 2 <= 9: circle[y, x] = 1.0 templates["circle"] = extract_shape_feature(circle) # 三角形模板:右下区域高亮 triangle = np.zeros((12, 12), dtype=np.float32) for y in range(3, 10): left = 3 - (y - 3) right = 8 + (y - 3) for x in range(left, right): if 0 <= x < 12 and 0 <= y < 12: triangle[y, x] = 1.0 templates["triangle"] = extract_shape_feature(triangle) return templates def recognize_static_object(frame: np.ndarray, templates: dict) -> str: """从当前帧提取静态区域特征并匹配模板。""" # 在示例中,静态三角形位于右下角,这里截取右下 12x12 区域 static_region = frame[12:24, 12:24] feature = extract_shape_feature(static_region) best_name = "unknown" best_score = -1.0 for name, template_feature in templates.items(): score = cosine_similarity(feature, template_feature) if score > best_score: best_score = score best_name = name return best_name当然,这个静态识别模块非常粗糙,只是为了演示“内容通路独立工作”的效果。真实项目中应该使用训练好的语义分割模型或分类模型,输入也可以是高分辨率彩色帧。
4.4 互补融合与结果输出
两条通路都已经产生了自己的输出:
- 动态通路输出:动态目标质心
(cx, cy)、活动强度intensity。 - 内容通路输出:静态物体类别
static_label。
融合模块把这些信息综合起来,输出一个完整的感知结论:
def fuse_result(dynamic_centroid, dynamic_intensity, static_label, threshold=1.5): """融合两条通路的感知结果。""" if dynamic_centroid is None or dynamic_intensity < threshold: # 没有明显动态事件时,只输出静态识别结果 return { "dynamic_target": None, "static_object": static_label, "mode": "static_only", } cx, cy = dynamic_centroid return { "dynamic_target": {"x": round(cx, 2), "y": round(cy, 2), "intensity": round(dynamic_intensity, 2)}, "static_object": static_label, "mode": "complementary", } def main(): print("生成模拟视频序列...") frames = generate_frames() print("生成事件流...") events = generate_events(frames, threshold=0.3) print(f"事件总数: {len(events)}") # 动态通路:事件 -> 动态显著性图 -> 质心 dynamic_map = compute_dynamic_map(events) centroid, intensity = find_dynamic_centroid(dynamic_map) # 内容通路:静态特征匹配 templates = build_templates() static_label = recognize_static_object(frames[-1], templates) result = fuse_result(centroid, intensity, static_label) print("感知结果:", result) if __name__ == "__main__": main()4.5 运行与结果说明
在终端中运行:
python complementary_vision_demo.py预期输出类似:
生成模拟视频序列... 生成事件流... 事件总数: 102 感知结果: {'dynamic_target': {'x': 10.43, 'y': 12.06, 'intensity': 38.0}, 'dynamic_object': 'unknown', 'static_object': 'triangle', 'mode': 'complementary'}注意:事件总数和质心坐标会根据随机环境或具体阈值有所浮动,重点是观察结果结构。
在这个简单场景中,融合结果可以解读为:
- 事件通路发现画面中存在明显的动态目标,质心在画面中部偏左位置,对应移动中的圆。
- 内容通路识别出静态区域是三角形。
- 融合模块最终给出“动态目标+静态物体”的完整感知结论。
如果我们只用动态通路,只能知道“有东西在动”,不知道静态背景中有什么。如果我们只用内容通路,只能识别静态物体,很难快速捕捉高速移动目标。两者融合后,视觉系统对场景的感知才更加完整。
5. 常见问题与排查思路
这个模拟示例虽然没有复杂的部署环境,但当你把它替换成真实数据或者迁移到其他平台时,依然会遇到各类问题。下面列出最常见的几种。
| 问题现象 | 常见原因 | 解决思路 |
|---|---|---|
| 事件流过密,动态图全是噪声 | 差分阈值设置太低,环境光照抖动也被当成事件 | 提高阈值,或对输入帧做高斯平滑 |
| 事件流过稀,检测不到动态目标 | 差分阈值过高,微弱运动没有触发事件 | 降低阈值,或对事件做时间窗口累积 |
| 动态目标质心抖动明显 | 事件稀疏,权重分布不稳定 | 用多帧事件累加生成动态图,再做质心平滑 |
| 内容通路误识别静态物体 | 特征表达过于简单,模板库不足 | 替换为 CNN 特征或增加模板数据 |
| 动态事件把静态物体遮挡 | 融合策略过于简单,仅靠事件强度判断 | 增加运动先验,或者根据动态区域置信度调整融合权重 |
| 真实事件相机数据与模拟事件格式不一致 | 事件时间戳、极性定义存在差异 | 统一数据格式,先做事件切片与对齐 |
在实际项目中,最容易被忽视的是两条通路的时间同步问题。事件流是异步的,而帧流是固定频率的。融合时需要确定一个共同的时间基准,通常以帧时间戳为参考,把该帧时间窗口内的事件聚合起来,生成与帧对齐的事件密度图。
建议在项目初期就封装两个接口:
def get_events_in_window(start_ts: float, end_ts: float) -> list: """获取指定时间窗口内的事件。""" pass def get_latest_frame() -> np.ndarray: """获取最近一帧图像。""" pass这样两路数据就有了统一入口,后续调整采集频率或队列大小都不影响上层融合逻辑。
6. 最佳实践与工程建议
6.1 数据同步与预处理
类脑互补视觉工程落地的第一个关键点是“数据对齐”。事件流的时间分辨率远高于帧流,不做对齐直接输入融合模型,会导致动态信息偏移。建议在数据入口处维护一个缓冲区,始终按时间窗口组织事件数据,使每个推理周期内,事件密度图与当前帧对应同一时间段。
预处理上,可以对事件流做时间衰减累积:越近的事件权重越高,避免早期事件对当前动态判断产生干扰。对帧流,建议保留原始亮度信息,同时输出差分帧或者光流图,作为内容通路的辅助输入。
6.2 阈值与参数调节
无论是差分事件阈值、LIF 神经元的 membrane decay,还是融合模块的动态强度阈值,这些参数在真实环境中都需要反复调节。建议把它们集中配置在一个配置字典中,不要散落在代码里。
config = { "event_threshold": 0.3, "lif_threshold": 1.0, "lif_decay": 0.85, "fusion_dynamic_threshold": 1.5, }调节策略是:先单独优化每条通路,再调融合权重。动态通路只需关注动态目标检测率和虚警率;内容通路只需关注分类精度;两者都稳定后再调整融合参数,这样定位问题更高效。
6.3 软硬件协同与部署建议
类脑互补视觉的最终落地场景通常偏向边缘端,比如智能摄像头、自动驾驶域控制器、无人机机载平台。这类场景对功耗和延迟非常敏感。
从部署角度,建议:
- 动态通路尽量采用轻量级模型或直接做事件统计,避免将事件流转换成高密度帧后再跑重网络。
- 内容通路可以使用量化后的 CNN 模型,按需触发,而不是每帧都全量推理。
- 融合模块尽量保持简单可解释,先使用启发式规则,再用数据驱动的方法逐步取代。
- 日志记录两条通路的中间输出,方便问题回溯。
另外要说明的是,类脑硬件(如天眸芯这类芯片)在功耗上的优势,是通用 GPU 平台无法复现的。我们做软件模拟时学到的是“如何思考两条通路”,而不是“如何达到同等能效”。硬件选型时,如果项目对实时性和功耗要求极高,可以关注类脑计算芯片和事件相机的发展;如果只是常规视觉应用,传统帧处理依然够用,不必为了追逐概念而过度设计。
6.4 如何进一步贴近真实类脑视觉
如果你希望进一步验证类脑互补视觉思想在真实数据上的效果,可以参考以下路径:
- 使用真实事件相机(如 DVS/DAVIS 系列相机)采集场景数据,替换示例中的模拟事件流。
- 使用公开事件数据集,例如 N-MNIST、CIFAR10-DVS、DVS128 Gesture 等,验证动态通路的识别能力。
- 使用开源类脑计算框架,如 SpikingJelly、Lava、 Norse 等,搭建更接近生物机制的脉冲神经网络。
- 在内容通路上引入预训练卷积网络,与动态通路形成更强大的融合系统。
这些路径不需要你从零实现事件相机驱动或神经元仿真,核心目标是让自己建立起“动态事件 + 静态帧 = 更完整的视觉感知”这一工程直觉。
7. 总结与学习路线
天眸芯团队在 Nature 系列期刊封面上展示的类脑互补视觉范式,给视觉计算提供了一个新的思考维度:视觉感知不一定要把所有信息都拍成完整帧,再统一交给单一网络处理;完全可以像生物视觉系统一样,把动态变化和静态内容分开处理,再高效融合。
本文的工具代码虽然简单,但已经把两条通路的关键环节跑通了:
- 事件流如何从时序差分中产生。
- LIF 神经元如何积累并发放脉冲。
- 动态通路如何用事件密度图定位移动目标。
- 内容通路如何从静态帧中识别物体类别。
- 融合模块如何综合两类信息输出完整结果。
建议你下一步先把这个 demo 跑通,观察事件在不同阈值下的分布变化,再尝试把静态识别模块替换为一个真实的 CNN 分类器。当你把两条通路都替换为实际项目可用的模块后,就会发现“类脑互补视觉”并不是一个遥远的科研概念,而是一套可以指导工程架构设计的实用方法论。
往更深的方向走,可以继续学习脉冲神经网络理论、事件相机驱动原理、以及类脑芯片的硬件架构设计。对大多数开发者来说,至少应该掌握事件数据与帧数据协同处理的基本思路,因为随着边缘设备对实时性和功耗的要求越来越高,这类避开“全帧全量计算”的感知范式,会越来越多地出现在实际项目中。