2.1 感知与输入


2.1 感知与输入

本节摘要:感知与输入是智能体的「眼睛和耳朵」,是一切行动的信息入口。本节拆解感知系统的四个组成部分——传感器、数据预处理、特征提取、输入表示,并沿图像、文本、音频三条链路各走一遍完整处理流程(OpenCV+ResNet、NLTK+Word2Vec、Librosa+MFCC),最后讨论多模态融合、实时性、隐私等挑战。

核心问题

阅读完本节,你应当能够:

  1. 说出感知系统的四个组成部分及各自职责
  2. 列举七类常见传感器及对应感知任务
  3. 描述图像、文本、音频三条感知链路每一步在做什么
  4. 区分手工特征与深度学习特征,以及四种输入表示方式
  5. 说出感知系统面临的五项挑战与四项趋势

问题与直觉

设想一个无人驾驶系统:摄像头拍到了路牌,但它「看见」的只是一堆像素矩阵。要让系统真正「知道」前方是限速标志,需要把像素变成特征、把特征变成语义、把语义交给决策。感知模块干的就是这条链路。SOURCE 原文打了个比方:感知与输入是智能体的眼睛和耳朵,是智能体与环境交互的桥梁,也是智能水平高低的关键决定因素之一

为什么感知这么要紧?因为它的输出直接决定决策质量。感知给的是脏数据,后面的推理、规划、行动全跟着错。经典的「garbage in, garbage out」在智能体上体现得尤其彻底——感知错误会沿着整个闭环放大。反过来,感知质量上去了,即使决策算法朴素一点,整体表现也可能不错。这就是为什么这两年大家反复强调「多模态感知」——单一的视觉或文本,对复杂环境的理解始终有天花板。

核心原理

感知系统的四个组成部分

  • 传感器:采集环境原始数据。七大类:视觉(摄像头,物体识别/场景理解)、听觉(麦克风,语音识别/声源定位)、文本(文本输入接口,自然语言理解)、深度(激光雷达/RGB-D,距离测量/三维重建)、触觉(压力/力传感器,抓取/纹理识别)、位置(GPS/IMU,导航定位/运动控制)、环境(温度/湿度/气体,智能家居/环境监测)。
  • 数据预处理:原始数据噪声大、冗余多。常见操作:噪声消除(图像去噪、音频降噪)、数据清洗(处理缺失/异常/重复值)、归一化/标准化(消除量纲差异)、数据增强(旋转/裁剪/同义词替换,提升泛化)、格式转换(图像转像素矩阵、文本转词向量)。
  • 特征提取:把低层次信号变成有代表性的高层次特征。手工特征靠领域知识设计(图像 SIFT/SURF/HOG,音频 MFCC,文本 TF-IDF/N-gram);深度学习特征由神经网络自动学(CNN 学图像、RNN 学序列、Transformer 学文本与多模态);特征选择则从已有特征里挑最相关的子集降维。
  • 输入表示:把特征组织成模型可吃的形式。四种:向量表示(图像/音频/词向量)、图表示(场景图/知识图谱,适合关系理解)、序列表示(语音/文本/传感器时间序列)、多模态表示(图像与文本联合、视觉与听觉融合)。

这四个部分不是独立流水线,而是有反馈的关系。比如「输入表示」选得好,会反过来降低「特征提取」的压力——用词向量表示文本,就省去了手工构造语法树的工作。再比如「数据增强」不只是预处理技巧,它在数据不足时直接决定感知模型的泛化能力。设计感知系统时,常见顺序是:先定「输入表示」要什么形式,再倒推「特征提取」该用深度还是手工,最后选传感器和预处理手段——表示决定下游,越早定越好。

图像感知链路

SOURCE 原文用 OpenCV + 预训练 ResNet50 走了一遍图像感知:

import cv2 import numpy as np from tensorflow.keras.applications.resnet50 import ResNet50, preprocess_input img = cv2.imread('image.jpg') # 采集 img = cv2.resize(img, (224, 224)) # 预处理:缩放 img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # 预处理:BGR→RGB img = np.expand_dims(np.array(img), axis=0) # 预处理:加 batch 维 img = preprocess_input(img) # 预处理:归一化 model = ResNet50(weights='imagenet', include_top=False, pooling='avg') features = model.predict(img).flatten() # 特征提取 + 向量表示

这条链路的工程要点都在注释里:缩放对齐模型输入尺寸(224×224);BGR 转 RGB 因为预训练模型在 RGB 上训练;加 batch 维是因为模型按批量处理;include_top=False 丢掉分类层只留特征表示;pooling='avg' 把卷积输出平均池化成固定长度向量。每一步的错误都会在下一环节放大——比如忘记颜色空间转换,识别精度立刻崩。

为什么用预训练模型而不是自己训?答案在数据量和成本。ImageNet 上训一个 ResNet50 需要数百万张图和多块 GPU 跑数天;而 weights='imagenet' 一行代码就把学好的特征搬过来。这种「迁移」思维是感知工程的核心效率杠杆——你的任务通常只需要在通用特征之上做一层微调。SOURCE 里 preprocess_input 与模型权重配套,这也提醒我们:预训练模型自带「输入规矩」,换库换模型时预处理逻辑要跟着换,不能张冠李戴。

特征向量拿来做相似度比较也是常见用途。两个图像各自抽成向量,算余弦相似度,就能判断「像不像」——这是图像检索、重复检测、姿态估计下游任务的地基。SOURCE 强调「向量维度较高,一般不直接打印内容」,意思是特征向量是机器之间交流的语言,人类看不看都行,重要的是它在向量空间里的位置关系。

感知结果如何进入决策

感知输出的形式决定了后续决策模块的接法。向量表示直接进神经网络决策器;图表示进图神经网络或符号推理;序列表示进 RNN/Transformer;多模态表示要设计专门的融合层。SOURCE 原文用一句话点透:感知结果被传递给智能体的其他模块进行后续处理——它画的那张感知流程图(环境→传感器→采集→预处理→特征→情境理解→感知结果→智能体内部)里,最后一环是「智能体内部」,意思就是感知到决策之间还有一段「情境理解」的过渡:把特征和上下文信息结合,判断「当前环境状态是什么、意味着什么」。这一段衔接在 2.2 节知识表示与推理里会正式展开,这里先留个接口——感知的职责是「把物理信号变成可计算的语义」,至于「语义之后怎么用」,是后面几节的事。

文本感知链路

import nltk from nltk.corpus import stopwords from nltk.tokenize import word_tokenize import gensim.downloader as api text = "This is an example sentence for text perception." tokens = word_tokenize(text.lower()) # 预处理:小写+分词 stop_words = set(stopwords.words('english')) # 预处理:停用词 filtered = [w for w in tokens if w not in stop_words and w.isalnum()] model = api.load('word2vec-google-news-300') # 特征:预训练词向量 vecs = [model[w] if w in model else np.zeros(model.vector_size) for w in filtered] text_vec = np.mean(vecs, axis=0) # 表示:向量平均

词不在词汇表时用零向量兜底、最后取平均——这是「把所有词压成一个固定长度向量」的最简做法。真实系统会换成 RNN/Transformer 做上下文编码,但「分词→去停用词→向量化→池化」的四步骨架不变。

这条链路里最容易忽略的细节是「为什么先小写再去停用词」——顺序是有讲究的。先小写统一形态,再分词,再去停用词(the、a、is 这类高频但无实义的词),最后过滤掉非字母数字字符。顺序反了会出现「The」和「the」被当成两个词、标点干扰分词的问题。word2vec-google-news-300 这个模型名里藏着两个信息:训练语料是 Google News(领域匹配很重要,新闻里的词义和医学文本里的词义不一样),维度是 300(词向量维度是超参数,太大过拟合、太小信息不足)。换领域时,直接复用新闻语料的词向量可能效果不佳——这和图像里「预训练权重要匹配领域」是同一个道理。

音频感知链路

import librosa y, sr = librosa.load('audio.wav') # 采集:波形+采样率 mfccs = librosa.feature.mfcc(y=y, sr=sr, n_mfcc=20) # 特征:梅尔频率倒谱系数 audio_features = mfccs # 表示:特征矩阵直接使用

MFCC 是音频信号处理最经典的特征,n_mfcc=20 表示取 20 维系数。它把「每一帧的声音长什么样」压缩成一组系数,语音识别、声纹识别都离不开它。

工程实践要点

三类感知的选型对照

模态 常用库 关键特征 典型任务
图像 OpenCV, TensorFlow/PyTorch ResNet 特征、Canny 边缘 物体识别、场景理解
文本 NLTK, spaCy, gensim 词向量、TF-IDF 意图识别、情感分析
音频 Librosa, 深度学习框架 MFCC 语音识别、声源定位
多模态 Transformer 家族 跨模态融合向量 视频理解、人机交互

实际项目的选择原则是「先保采集质量,再谈特征」。传感器分辨率低、噪声大,再好的特征工程也救不回来;传感器数据干净,朴素特征也可能够用。预训练模型的取舍也很关键:weights='imagenet' 的 ResNet 直接可用,省训练成本,但领域差异大(比如医学影像)时需要微调。SOURCE 里 cv2.Canny(gray_img, 100, 200) 的边缘检测用阈值 100/200,这类超参数在不同光照下要重新调——没有「一次调好到处用」的万能参数。

⚠️ 常见坑:把原始数据直接喂模型,跳过归一化。图像不归一化、文本不做小写和去停用词,模型训练不稳定、推理结果波动大。SOURCE 的三个示例无一例外都做了预处理——这是有意为之的示范。
💡 关键直觉:感知链路的四个环节本质是「从物理信号到语义的逐级抽象」。能理解每一步在「抽象什么」,就能迁移到任何新模态——新传感器无非是「采集→清洗→提特征→换表示」的重演。

五大挑战与四项趋势

SOURCE 明确列出了感知面临的挑战:噪声与不确定性(图像模糊、音频失真、文本歧义)、多模态融合(怎么利用模态互补性)、实时性与效率(自动驾驶/机器人必须低延迟)、泛化与适应(未知环境也要能用)、隐私与安全(摄像头、麦克风采集涉个人数据)。

对应的趋势:更强的传感器(更高分辨率、更低功耗)、深度学习驱动(更深网络、更强预训练)、自监督/无监督学习(降低对标注数据的依赖)、神经符号结合(感知+推理)、边缘计算与分布式感知(降延迟、护隐私)。这些趋势会在第 5、6 章反复出现——比如对话系统的多模态感知(5.3 节)、具身智能的感知-行动循环(6.2 节)。感知不是独立模块,它的每一次进步都会传导到整个智能体链条。

做工程时建议把「感知质量评估」当一道独立工序来做:不只看最终任务指标,还要单独验证感知输出的质量(识别准确率、特征区分度、表示稳定性)。很多智能体「决策看起来笨」,根因其实在感知——决策算法再好,喂进来的特征是错的也白搭。把感知和决策分开评测,问题定位会快得多。

重点提炼

  • 四部件:传感器采集、预处理清洗、特征提取抽象、输入表示定型
  • 七类传感器:视觉/听觉/文本/深度/触觉/位置/环境
  • 三条链路:图像 ResNet、文本 Word2Vec、音频 MFCC,骨架都是「采集→预处理→特征→表示」
  • 四表示:向量/图/序列/多模态,按任务选择
  • 手工 vs 深度特征:手工可解释但费人工,深度自动学但需数据
  • 五大挑战:噪声、多模态、实时、泛化、隐私
  • 核心教训:感知质量决定决策质量,先保采集再谈特征

感知拿到了「环境是什么」,下一节看智能体怎么把感知结果存成知识、并从中推出新结论。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U