想象你搬进一间新公寓。开发商留下的户型图只有几道黑色承重墙,没有家具,也没有标注——这是“毛坯图纸”:它只告诉你哪里是墙、哪里是门,却不告诉你沙发该摆在哪、餐桌靠哪面墙更舒服。真正住熟之后,你会在图上慢慢添上“这里放下书桌”“那里是去厨房的最短路线”——这张被生活经验填满的图,就是“生活说明书”。 机器人认识世界也经历了同样的进化。早期的几何地图只告诉机器人“哪里有障碍物、哪里可以走”,相当于毛坯图纸;而语义地图(Semantic Map),就是机器人在探索中自己写出的生活说明书:它不仅记录空间结构,还在每个位置贴上“这是桌子”“那是门”的标签,甚至记下“椅子在桌子旁边”这样的关系。有了这册说明书的机器人,才能听懂“去厨房把杯子拿来”这种指令,而不是对着一堆坐标发呆。 这篇教程,我们就用“写生活说明书”这个比喻,把语义地图的概念、构建流程、关键策略与工程价值一次讲透。

岗位关联

语义地图是连接“感知”与“决策”的桥梁。掌握它,你就能理解机器人怎样从“看见环境”走向“理解环境”,这是移动机器人、自动驾驶、智能家居方向从业者的核心能力之一。

目录
  1. 可视化演示
  2. 地图概念解析:从毛坯图纸到生活说明书
  3. SLAM流程框架:边看边写说明书
  4. 物体检测识别:睁大眼睛看家具
  5. 数据关联策略:对号入座的艺术
  6. 语义标注方法:给每件家具贴上标签
  7. 地图表征形式:选择说明书的版式
  8. 应用与挑战:说明书派上用场
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

可视化展示语义SLAM构建流程、3D点云语义分割与物体属性标注,交互调节参数体验机器人环境语义理解能力。

本节配有交互动效(进入视口后自动加载,约 3KB)。

3D点云语义分割 不同颜色代表不同语义类别的点云聚类 分割精度影响后续物体识别与标注质量 IoU = TP / (TP + FP + FN) 语义分割为地图构建提供类别信息

地图概念解析:从毛坯图纸到生活说明书

开发商交付的户型图上只有承重墙和管道井这些“硬信息”。你入住后闭着眼也能走到厨房,不是因为背下了户型图,而是因为心里那张“生活说明书”记着:客厅有沙发、冰箱在厨房角落、阳台朝南。机器人从“能走”到“会干活”,差的也正是这样一册说明书。

在机器人学中,几何地图解决“我能不能过去”的问题,语义地图则在几何信息之上叠加“这里是什么”的高层语义。两者之间的关系,就像毛坯图纸之上叠了一层标注了家具和房间用途的透明胶片。有了这层胶片,机器人才从“不怕撞墙”升级为“知道墙边有书架”。

一张完整的语义地图可以形式化地表示为三层结构,它们分别对应形状、物体与关系三个维度的信息:

所以,语义地图就是那张“透明胶片”——它不替代户型图,而是叠在户型图上,把抽象坐标翻译成机器人和人类都能读懂的生活语言。拿到它,机器人不再面对一间毛坯房,而是一间知道“哪里该绕行、哪里能交互”的真正房间。

M=(G,O,R)\displaystyle M = (G, O, R)
公式说明:语义地图不是一张“图”,而是三层数据结构的组合——几何是骨架,物体是血肉,关系是神经。
  1. 几何层 G记录环境中最基本的形状与位置信息,回答“哪里有障碍物”。
    G={pi∣pi∈R3}G = \{p_i \mid p_i \in \mathbb{R}^3\}
  2. 物体层 O保存检测到的物体实例与类别标签,回答“这里有什么”。
    O={(ok,ck)∣k=1,…,K}O = \{(o_k, c_k) \mid k = 1, \ldots, K\}
  3. 关系层 R描述物体间的空间联系,回答“东西是怎么摆放的”。
    R={(oi,rij,oj)∣oi,oj∈O}R = \{(o_i, r_{ij}, o_j) \mid o_i, o_j \in O\}

SLAM流程框架:边看边写说明书

写生活说明书不是一蹴而就的。你要先拿钥匙进门,在房间里转一圈,看到新家具就翻翻之前的笔记,发现记错位置就回头改,最后把所有信息整理成册。语义SLAM正是这套“边看边写”的工程化流程。

经典SLAM只回答“我在哪里、地图长什么样”;语义SLAM向前一步,同时回答“我看到的东西是什么”。它在传统SLAM的位姿估计与地图构建基础上,引入物体检测、数据关联与语义标注模块,并且让这些模块共享同一个优化框架,而不是各干各的。

整个流程可以统一写成联合后验最大化的形式。这个式子表明:定位、建图、语义三个问题不是先后处理,而是联合求解、互相修正:

就像写说明书时,你的行走路线、房间结构、家具清单必须彼此对得上;一旦发现“这里明明放床却标成桌子”,就得同时修正记忆和笔记。语义SLAM的联合优化,正是这种“全局自查”的数学表达。

(X,M,Θ)∗=arg⁡max⁡X,M,ΘP(X,M,Θ∣Z)\displaystyle (X, M, \Theta)^* = \arg\max_{X, M, \Theta} P(X, M, \Theta \mid Z)
公式说明:不要把语义当作SLAM的“事后注释”。联合优化让每一次观测同时改善定位、几何与语义,精度高于串行处理。
  1. 观测集合 Z激光雷达、相机等传感器所有数据的汇总,是推理的唯一证据来源。
    Z={z1,z2,…,zT}Z = \{z_1, z_2, \ldots, z_T\}
  2. 联合后验 P给定全部观测后,轨迹、地图与语义参数共同成立的概率,数值越大说明整体越合理。
    P(X,M,Θ∣Z)P(X, M, \Theta \mid Z)
  3. 最大化 argmax在解空间中搜索令联合概率最大的那组轨迹、地图与语义参数。
    (X∗,M∗,Θ∗)=arg⁡max⁡X,M,ΘP(X,M,Θ∣Z)(X^*, M^*, \Theta^*) = \arg\max_{X, M, \Theta} P(X, M, \Theta \mid Z)

物体检测识别:睁大眼睛看家具

写说明书的前提是先看清屋子里有什么。眼神不好的人会把椅子认成桌子,机器人也一样——物体检测与识别,就是给它一副“好眼睛”,把连续的画面分解成一个个可命名的物体。

传统的特征点匹配只能告诉我们“这里有个角点”,却不知道角点属于哪件家具。借助深度学习,物体检测识别能够输出物体的类别和位置,为语义地图提供最原始的“素材”,相当于给说明书准备好了词条。

从技术路线看,识别方法可分为四大类:二维检测输出2D边界框;三维检测输出物体的3D位置与朝向;语义分割对每个像素做类别预测;实例分割则更进一步,把同一类别的不同个体区分开。给定图像证据,物体类别后验可用贝叶斯公式计算:

有了这双“好眼睛”,机器人巡视房间时才能像人一样“入眼即知名”。不过,看清楚只是第一步,如何把一次次的“看清”累积成稳定的记忆,就要靠接下来的数据关联。

P(c∣x)=P(x∣c)P(c)P(x)\displaystyle P(c \mid x) = \frac{P(x \mid c)P(c)}{P(x)}
公式说明:把“认出桌子”拆成两部分——家具像不像桌子(似然)乘以屋子里桌子多不多(先验),再整体归一化。
  1. 类别后验 P(c|x)看到特征 x 之后,判断物体属于类别 c 的概率,是识别的最终输出。
    P(c∣x)P(c \mid x)
  2. 似然 P(x|c)已知物体是类别 c 时,观测到特征 x 的可能性,由标注数据训练得到。
    P(x∣c)P(x \mid c)
  3. 证据 P(x)特征 x 出现的总概率,作为归一化常数,保证所有类别的后验和为 1。
    P(x)=∑c′P(x∣c′)P(c′)P(x) = \sum_{c'} P(x \mid c') P(c')

数据关联策略:对号入座的艺术

你第二次走进房间,看到靠墙放着一个白色长方体,脑中瞬间翻出昨天的笔记:“客厅西北角,白色三门冰箱。”这就是一次完美的对号入座。数据关联要解决的,正是“眼前的物体”与“记忆中的物体”如何一一对应的问题。

在语义SLAM中,每一帧检测都会产生一批新的观测。如果关联做得不好,同一个桌子可能被当成两个不同物体存入地图——就像说明书里出现两条“客厅沙发”的记录,翻了页就找不到了。

最直接的方法是最近邻关联,把观测分配给距离最近的地图物体。其中距离函数同时度量位置偏差与类别差异;更进一步的匈牙利算法能对全体观测与地图物体做全局最优配对,再经过几何一致性校验剔除异常匹配,最后用贝叶斯规则把新观测的置信度融入既有估计:

关联策略决定了说明书里会不会出现“幽灵条目”。对号入座对了,说明书越写越整洁;对错了,整本笔记就会越翻越乱。这也是语义SLAM把数据关联当作建图质量生命线的原因。

a∗=arg⁡min⁡id(zt,mi)\displaystyle a^* = \arg\min_{i} d(z_t, m_i)
公式说明:最近邻是“每张照片各自找最像的记忆”,匈牙利算法是“成批照片集体配对”,两者结合兼顾效率与全局最优。
  1. 待关联观测 z_t当前帧检测到的一个物体,包含位置与类别信息,是“眼前的照片”。
    zt=(pt,ct)z_t = (p_t, c_t)
  2. 地图物体 m_i已被确认并存入地图的物体条目,是“记忆里的档案”。
    mi=(pi,ci)m_i = (p_i, c_i)
  3. 距离函数 d综合衡量观测与档案的差异,位置差用范数、类别差用指示函数。
    d(zt,mi)=∥pt−pi∥+λ⋅1(ct≠ci)d(z_t, m_i) = \|p_t - p_i\| + \lambda \cdot \mathbb{1}(c_t \neq c_i)
  4. 取最小 argmin在所有档案中挑差异最小的一个,完成对号入座。
    a∗=arg⁡min⁡id(zt,mi)a^* = \arg\min_{i} d(z_t, m_i)

语义标注方法:给每件家具贴上标签

写说明书不仅记录“这里有什么”,还要写清“它是什么样的”。一张饭桌上的标签可能写着“餐桌,深棕色,长1.4米,靠窗”。语义标注,就是给地图中的每个物体贴标签、写备注。

语义标注发生在数据关联之后,任务是把单帧的检测结果累积成对物体的稳定认知。由于机器人视角在变、光照在变,单次识别的置信度往往不可靠,需要用多帧证据持续更新,就像写备注时要多看几遍才下笔。

标注内容分为三个层次:类别标定回答“它是什么”,属性描述回答“它长什么样、可以怎么用”,空间关系回答“它在哪里、旁边有什么”。对类别置信度的更新使用贝叶斯递推:

标注越丰富,说明书越好用。当机器人推开厨房门,一眼扫过就能自动补全“灶台旁是调味料区”,这种层层累积的备注能力,正是语义标注的魅力。

Pt(c)=Pt−1(c)⋅P(zt∣c)Z\displaystyle P_t(c) = \frac{P_{t-1}(c) \cdot P(z_t \mid c)}{Z}
公式说明:这像“经验累积”——旧笔记按新观察修正,证据多了判断自然更稳。
  1. 先验 P_{t-1}(c)上一轮结合所有历史观测对物体类别的判断,是“旧笔记”。
    Pt−1(c)P_{t-1}(c)
  2. 新证据 P(z_t|c)当前观测对类别 c 的支持程度,是“新观察”。
    P(zt∣c)P(z_t \mid c)
  3. 归一化常数 Z对所有类别的分子求和,使更新后的概率仍满足和为 1。
    Z=∑c′Pt−1(c′)P(zt∣c′)Z = \sum_{c'} P_{t-1}(c') P(z_t \mid c')

地图表征形式:选择说明书的版式

同一本生活说明书,可以做成图文并茂的手绘册,也可以做成只有目录的速查卡。语义地图同样有不同“版式”,选哪种取决于任务需要和计算资源。

表征决定了语义信息如何存储、查询与更新。一张用于导航的语义地图需要支持快速查询“哪些区域可通行”,一张用于抓取的地图则更关心物体的精确位姿与几何轮廓,场景变了版式就要跟着变。

主流表征形式有四类:语义栅格地图把每个栅格赋予类别标签;语义点云地图在三维点云上附着语义颜色;物体级地图只保存物体实例列表,量级轻、适合长期记忆;拓扑语义地图以图为结构,强调物体间的连接关系。以语义栅格为例,格子的最终标签由后验概率取最大得到:

版式没有绝对优劣——手绘册信息丰富但翻查慢,速查卡轻便但细节少。工程实践中常常混合多种表征:栅格负责导航避障,物体列表负责语义查询,两者共用一份几何底图。

S(x,y)=arg⁡max⁡cP(c∣x,y,Z)\displaystyle S(x,y) = \arg\max_{c} P(c \mid x, y, Z)
公式说明:每个栅格像一个选票箱——哪个类别的证据票数最多,这个格子就归谁。
  1. 栅格位置 (x,y)语义栅格中单个格子的坐标,是“说明书纸张上的一个格子”。
    (x,y)(x, y)
  2. 类别后验 P(c | x,y,Z)综合全部观测后,该格子属于类别 c 的概率。
    P(c∣x,y,Z)P(c \mid x, y, Z)
  3. 取最大 argmax选出概率最高的类别作为格子的最终标签,完成整张地图的语义着色。
    S(x,y)=arg⁡max⁡cP(c∣x,y,Z)S(x, y) = \arg\max_{c} P(c \mid x, y, Z)

应用与挑战:说明书派上用场

说明书写好后,最大的快感莫过于按图索骥:朋友问“你家工具箱在哪”,你脱口而出“阳台右角柜子第二层”。语义地图的终极价值,就是让机器人具备这种“按语义找东西”的能力。

有了语义地图,机器人不再只回答“我在哪”,还能理解“这里是什么、接下来怎么做”。任务执行时,机器人可以根据语义信息规划更合理的路径——经过餐桌旁时减速,而不是把桌子当成一堵墙绕远路。

实际应用中,语义地图显著提升三类任务的效率:智能导航结合物体可达性与语义代价规划路径;人机交互让口语指令“去厨房拿杯子”直接映射到目标物体与导航目标;仓储物流按类别与属性检索货物,优化拣选动线。用强化学习的语言描述,语义地图改变了策略的期望回报:

不过,说明书也有“过时”的一天——家具挪动了、新柜子进场了。如何让语义地图在动态环境中持续更新,正是这个领域最活跃的研究前沿。能答好这道题的机器人,才真正把生活说明书读活了。

π∗=arg⁡max⁡πE[∑t=0∞γtrt]\displaystyle \pi^* = \arg\max_{\pi} \mathbb{E}\left[\sum_{t=0}^{\infty} \gamma^t r_t\right]
公式说明:语义地图把“盲人摸象式”的决策变成信息充分的决策,让每条策略的回报期望更高。
  1. 策略 π机器人根据当前状态(含语义地图信息)选择动作的规则。
    π(a∣s)\pi(a \mid s)
  2. 期望回报 E从当前状态出发、按策略持续行动所获得的长期累计奖励的期望。
    E[∑t=0∞γtrt]\mathbb{E}\left[\sum_{t=0}^{\infty} \gamma^{t} r_t\right]
  3. 最优策略 argmax在所有可行策略中挑选期望回报最大的那一个,作为最终决策依据。
    π∗=arg⁡max⁡πE[∑t=0∞γtrt]\pi^{*} = \arg\max_{\pi} \mathbb{E}\left[\sum_{t=0}^{\infty} \gamma^{t} r_t\right]

AI 应用场景

家庭服务机器人:听懂口语指令

阶段:语义建图与人机交互

解决的问题:传统导航机器人只能接收“走到坐标(3,5)”这类指令,用户说“去厨房把杯子拿来”时完全无法理解。语义地图将厨房、杯子等语义标签与几何位置绑定后,自然语言指令可以直接映射为“找到杯子类别”+“规划到厨房的路径”,任务执行从坐标级升级到语义级。

具体案例:某家庭扫地机器人新增语义地图模块后,用户说“别去猫窝附近扫”,机器人通过语义地图识别猫窝区域并在规划中自动添加禁区,无需人工画虚拟墙。

智慧仓储:按语义检索货物

阶段:物体检测与语义标注

解决的问题:传统仓储机器人靠二维码或人工录入的货位坐标找货,货架变动后需要重新标定。基于语义地图,机器人能直接识别货架上的物品种类(如“充电宝在C3货架第二层”),并在移动货架后自动更新语义位置,大幅降低库位管理成本。

具体案例:某电商仓库的拣选机器人使用3D检测+语义标注构建货架语义地图,将“找货”平均耗时从5分钟降到40秒,同时减少了人工盘点的频次。

自动驾驶:路口语义要素感知

阶段:语义分割与动态更新

解决的问题:普通高精地图提供车道线几何位置,但无法回答“当前绿灯还剩几秒”“前方是否有人行横道”。语义地图把红绿灯状态、斑马线、施工区域等动态语义叠加到几何地图上,让自动驾驶系统在复杂路口能做出更安全的决策。

具体案例:某自动驾驶公司的城区导航系统将语义分割输出的“行人/车辆/交通标志”实时融合进语义地图,在无保护左转场景中,系统能结合“对向直行车辆正在减速”这一语义信息提前起步,通行效率提升约18%。

Python 演示

python102 行
# -*- coding: utf-8 -*-# 语义地图构建演示: 几何地图 + 物体检测 = 带标签的生活说明书import math  class SemanticMapBuilder:    """语义地图构建器: 管理几何地图、物体列表与语义标签"""     def __init__(self, width, height):        self.width = width        self.height = height        self.geo_grid = [[0] * width for _ in range(height)]  # 几何层: 0空 1占据        self.objects = []        # 物体层: 已确认的物体实例        self.semantic_grid = [[None] * width for _ in range(height)]  # 语义标签     def set_wall(self, x, y):        """在几何层放置一面墙"""        if 0 <= x < self.width and 0 <= y < self.height:            self.geo_grid[y][x] = 1     def detect_object(self, positions, classes):        """模拟检测器输出: 位置 + 类别"""        detections = []        for i, (x, y) in enumerate(positions):            detections.append({"x": x, "y": y, "cls": classes[i]})        return detections     @staticmethod    def distance(a, b):        """欧氏距离"""        return math.hypot(a["x"] - b["x"], a["y"] - b["y"])     def data_associate(self, detections, max_dist=2.0):        """最近邻数据关联: 眼前的观测 vs 记忆里的档案"""        for det in detections:            best_id = None            best_d = max_dist            for obj in self.objects:                d = self.distance(det, obj)                if d < best_d:                    best_d = d                    best_id = obj["id"]            if best_id is None:                item = {"id": len(self.objects)}                item.update(det)                self.objects.append(item)            else:                obj = self.objects[best_id]                obj["x"] = det["x"]                obj["y"] = det["y"]                obj["cls"] = det["cls"]     def build_semantic_map(self):        """将物体类别标注到语义栅格上, 物体周围一圈也连带标注"""        for obj in self.objects:            x, y = int(obj["x"]), int(obj["y"])            for dx in (-1, 0, 1):                for dy in (-1, 0, 1):                    nx, ny = x + dx, y + dy                    if 0 <= nx < self.width and 0 <= ny < self.height:                        if self.semantic_grid[ny][nx] is None:                            self.semantic_grid[ny][nx] = obj["cls"]     def render(self):        """把语义地图打印成文本: #墙壁 C椅子 T桌子 D门 .空地"""        symbol = {"chair": "C", "table": "T", "door": "D", None: "."}        for y in range(self.height):            line = ""            for x in range(self.width):                if self.geo_grid[y][x] == 1:                    line += "#"                else:                    line += symbol.get(self.semantic_grid[y][x], "?")            print(line)  def main():    builder = SemanticMapBuilder(14, 9)    for i in range(14):        builder.set_wall(i, 0)        builder.set_wall(i, 8)    for j in range(9):        builder.set_wall(0, j)        builder.set_wall(13, j)     print("=== 第1次观测: 看到桌子与椅子 ===")    dets = builder.detect_object([(4, 4), (9, 6)], ["table", "chair"])    builder.data_associate(dets)    builder.build_semantic_map()    builder.render()     print("=== 第2次观测: 桌子轻微移动 + 新发现门 ===")    dets = builder.detect_object([(4, 5), (9, 5), (7, 2)], ["table", "chair", "door"])    builder.data_associate(dets)    builder.build_semantic_map()    builder.render()     print("物体列表:", [(o["id"], o["cls"]) for o in builder.objects])  if __name__ == "__main__":    main()
目的:用二维栅格模拟语义地图的完整构建流程——几何层置墙、检测器输出物体、最近邻关联去重、语义栅格叠加标签,最终打印出“带文字的生活说明书”。
  1. self.geo_grid = [[0] * width for _ in range(height)]几何地图用二维列表存放占用状态,0表示空、1表示有墙,相当于毛坯图纸。
  2. def detect_object(self, positions, classes):模拟检测器输入位置和类别,输出检测列表,相当于“睁眼看到家具”。
  3. d = self.distance(det, obj)计算当前检测与地图中已有物体的欧氏距离,衡量“眼前的照片”和“记忆里的档案”差多远。
  4. if d < best_d:记录距离最小的档案,这是最近邻关联的核心动作。
  5. item.update(det)没有匹配到旧物体的检测作为新物体加入地图,避免说明书漏掉新家具。
  6. obj["x"] = det["x"]匹配成功则用新位置更新旧物体,相当于修正笔记里的坐标。
  7. self.semantic_grid[ny][nx] = obj["cls"]把类别标签写入栅格,完成语义标注这一步。
  8. if self.geo_grid[y][x] == 1: line += "#"墙壁优先于语义标签显示"#",体现几何与语义两层叠加、互不覆盖。

常见误区

误区我以为只要把地图上的障碍物换成彩色块,就是语义地图了。比如把墙壁涂成蓝色、地面涂成绿色,看起来“很语义”。

正解颜色本身只是可视化手段。语义地图的关键是每个位置都关联着一个机器可理解的语义标签(如"table""door"),并且这个标签来自检测与关联的推理过程,而不是人工预设的固定配色。彩色渲染只是把语义标签翻译给人看。

为何常见:因为很多SLAM可视化工具都用地物色块展示结果,初学者容易把“显示形式”误当成“语义本身”。

误区我一直以为先跑一个传统SLAM得到地图,再拿物体检测模型在图像上框一框,把结果贴到地图上,就算是语义SLAM了。

正解真正的语义SLAM强调联合优化:物体检测结果会反过来约束机器人的位姿估计,位姿又能提升检测的准确性,语义与几何在同一优化框架里互相修正。独立跑两个模块再拼起来,位姿误差会导致标签贴错位置,这也是“事后注释”方案被淘汰的原因。

为何常见:从工程实现上看,“先建图后贴标签”的流水线最简单,容易让人误以为这就是正式方案。

误区我以为数据关联就是把两帧里的物体坐标拉出来算距离,离得近就是同一个物体。

正解坐标距离只是必要条件,不是充分条件。两个物体类别不同(比如“椅子和桌子紧挨着”)、尺寸差异大、外观特征不一致,即使坐标很近也不该关联。正式的距离函数往往同时包含位置项、类别项和外观项,还要做几何一致性校验,才能避免错误匹配。

为何常见:初学阶段接触的示例通常只有坐标,容易忽略语义信息在关联中的约束作用。

误区我以为地图建完之后,物体位置和类别就固定了,机器人直接用就行,不用再管。

正解真实环境是动态的——椅子被挪走、门被打开、新箱子放进来。语义地图必须支持增量更新:通过持续的数据关联识别“旧物体消失了”“新物体出现了”,并用贝叶斯更新维护类别置信度。静态语义地图在真实场景中很快就会“过时”。

为何常见:实验环境总是静止的,让大家误以为部署环境也一样静止;一旦遇到真实动态场景就措手不及。

面试题

Q1. 语义地图与几何地图的本质区别是什么?

单选题 · easy

  • A.几何地图是二维的,语义地图是三维的
  • B.语义地图额外含物体类别与属性← 正确答案
  • C.语义地图只用于导航避障任务
  • D.几何地图不需要任何传感器数据

答案:B。几何地图只描述空间的形状与可通行性,相当于毛坯图纸;语义地图在此基础上叠加物体类别、属性与关系,相当于生活说明书。A项维度不是本质区别,C项表述过窄,D项违背常识。

Q2. 语义地图三层结构中,“桌子在椅子旁边”属于哪一层?

单选题 · easy

  • A.几何层
  • B.物体层
  • C.关系层← 正确答案
  • D.传感器层

答案:C。三层结构分别是几何层(形状位置)、物体层(类别实例)、关系层(空间联系)。“桌子在椅子旁边”描述的是两个物体之间的空间关系,属于关系层。传感器层不在语义地图的静态结构里。

Q3. 语义SLAM与传统SLAM的核心区别是什么?

单选题 · mid

  • A.传统SLAM必须用激光雷达不能相机
  • B.语义SLAM同时估计物体类别空间关系← 正确答案
  • C.传统SLAM不需要任何地图数据
  • D.语义SLAM完全放弃几何定位功能

答案:B。语义SLAM在传统SLAM的定位与几何建图基础上,新增物体检测、数据关联与语义标注,并且联合优化几何与语义。传统SLAM同样可以使用相机,也需要地图数据;语义SLAM并没有放弃定位,反而是通过语义增强定位。

Q4. 数据关联中“最近邻方法”的工作方式是什么?

单选题 · mid

  • A.将观测分配给距离最近的地图物体← 正确答案
  • B.将所有观测求平均后再分配
  • C.从地图物体中随机挑选配对
  • D.只根据类别标签进行匹配

答案:A。最近邻方法逐帧处理:每个观测计算与所有地图物体的距离,取最小值对应的物体作为关联结果。B项会抹掉单帧细节,C项完全随机,D项忽视了位置信息,都不是最近邻的语义。

Q5. 语义分割与实例分割的核心差异是什么?

单选题 · mid

  • A.语义分割只适用于室内场景
  • B.语义分割不区分同类不同个体← 正确答案
  • C.实例分割无法标记物体类别
  • D.两种方法本质上是完全相同的

答案:B。语义分割给每个像素一个类别标签,但同类的多个物体共享同一标签;实例分割进一步给每个物体独立编号,能区分“椅子1”和“椅子2”。A项场景限制不存在,C项错误,D项忽略了两者的层次差异。

Q6. 动态物体对语义地图的主要影响是什么?

单选题 · hard

  • A.使几何地图永远无法建立
  • B.可能导致语义标签位置漂移← 正确答案
  • C.能显著提高检测推理的速度
  • D.让地图更新不再需要传感器

答案:B。移动的人或物会让同一位置在不同时刻出现不同的检测结果,若数据关联不及时更新,地图里会出现“幽灵物体”或标签位置漂移。动态物体与几何建图可以共存但会增加难度,不会带来推理加速,也无法替代传感器。

Q7. 贝叶斯置信度更新中“先验”指的是什么?

单选题 · extreme

  • A.传感器出厂时的标定参数
  • B.更新前已有的类别概率估计← 正确答案
  • C.地图的几何坐标范围大小
  • D.观测噪声的方差协方差矩阵

答案:B。贝叶斯更新的核心是“旧知识 × 新证据 = 新知识”。先验就是上一轮融合历史观测后得到的类别概率,也就是“旧笔记”;本轮观测是“新观察”,两者相乘归一化后得到后验,成为下一轮的先验。A/C/D都与类别概率无关。

Q8. 语义标注通常包含哪些层次的信息?

多选题 · mid

  • A.物体类别标签← 正确答案
  • B.物体属性描述← 正确答案
  • C.物体空间关系← 正确答案
  • D.相机内参矩阵参数

答案:ABC。语义标注三层次:类别标定回答“是什么”,属性描述回答“什么样”,空间关系回答“在哪、和谁相邻”。相机内参是传感器标定参数,属于相机模型而非物体语义,因此不选。

Q9. 以下哪些属于语义地图的典型应用场景?

多选题 · easy

  • A.家庭机器人执行口语指令取物← 正确答案
  • B.仓储机器人按类别检索货物← 正确答案
  • C.自动驾驶路口语义要素感知← 正确答案
  • D.纯数学公式的推导与证明

答案:ABC。语义地图让机器人理解“语义标签+几何位置”,从而支撑口语指令映射、按类别取货和路口要素感知。纯数学推导不涉及环境理解,不属于语义地图应用范畴。

Q10. 常用的语义地图表征形式有哪些?

多选题 · hard

  • A.语义栅格地图← 正确答案
  • B.语义点云地图← 正确答案
  • C.物体级列表地图← 正确答案
  • D.拓扑语义地图← 正确答案

答案:ABCD。四种都是成熟表征:栅格适合导航避障,点云保留精细三维几何,物体列表轻量适合长期查询,拓扑语义强调物体与区域间的连接关系。实际系统常按任务混合使用多种表征。