Feature Extraction
特征提取将图像等原始数据转换为紧凑且信息丰富的特征,可使用手工设计的方法或预训练神经网络。
特征提取是将原始数据转换为较小的一组数值特征,同时保留任务所需信息的过程。一张 640×480 的 RGB 照片包含 921,600 个像素值,其中大部分是冗余的;特征提取器可以将其缩减为由几百个数字组成、描述图像内容的向量。传统机器学习依赖针对每种数据类型手工设计的提取器,而深度学习模型会在骨干网络中学习自己的特征提取器,其输出可重复用于搜索、聚类和新的分类器。更少且信息量更高的维度也能缓解维度灾难,让更简单的模型用更少的数据也能实现良好的泛化。
手工设计的特征与学习得到的特征#
在深度学习出现之前,工程师会针对每种数据分别构建特征提取器:
- SIFT:在图像中查找关键点,并使用 128 维的梯度方向直方图描述每个关键点;这种描述在尺度和旋转变化下保持稳定,因此 SIFT 成为图像匹配和全景拼接的标准工具。
- HOG:在网格单元上计算方向梯度直方图;HOG 与线性支持向量机结合后,于 2005 年被引入行人检测,并成为传统目标检测中的常用方法。
- 主成分分析(PCA):将数据投影到方差最大的方向上,是一种适用于表格数据、人脸和光谱的通用方法。
- 梅尔频率倒谱系数(MFCCs):按照符合人类听觉特点的尺度概括音频的短时频谱,长期以来一直是语音识别的默认输入。
对于图像、音频和文本,学习得到的特征已经取代了其中大多数手工特征。卷积神经网络(CNN)或视觉 Transformer(ViT)在数百万张图像上训练后,会自行构建层级结构:早期层检测边缘和颜色斑块,中间层检测纹理和部件,最后几层则编码对象级概念。这些存储在特征图中的表示可以迁移到新任务,这也是预训练骨干网络成为迁移学习默认起点的原因。
特征提取与相关术语#
- 特征工程:更广泛地创建、转换和选择模型输入的实践,通常会运用领域知识,例如根据价格和面积计算每平方英尺价格。特征提取是其中一部分;在深度学习中,这一过程完全自动化。
- 特征选择:保留原始特征的一个子集,不做修改并舍弃其余特征。特征提取则通过转换或组合原始特征来创建新特征。
- 降维:与特征提取有很大重叠,PCA 同时属于这两者。为绘图设计的方法(例如 t-SNE)会降低维度以便人工检查,很少用作模型输入。
- 嵌入:学习得到的特征提取器输出的特征向量。在深度学习中,“提取的特征”和“嵌入”通常指同一组向量。
将预训练网络用作特征提取器#
常见做法是使用预训练网络,移除其任务头,让数据通过冻结的层,并将最后一个特征图池化为每个输入对应的一个向量。如果有标签,只在这些向量上训练线性分类器(称为线性探测),就能以远低于训练整个网络的成本,获得强有力的基线结果。没有标签时,向量搜索可以查找视觉上相似的图像,k-means 聚类可以将数据集分组以便整理和去重;在异常检测中,正常样例的距离也可用于标记缺陷。特征提取期间,骨干网络的权重始终不变,这一点使它有别于微调。
YOLO26 模型通过 model.embed() 提供此功能:它会让网络运行到指定层,并将该层的特征图进行平均池化,为每张图像生成一个向量;embed=[10] 则会在 YOLO26 骨干网络的最后一层停止。
from ultralytics import YOLO
# 加载预训练的 YOLO26 模型;其骨干网络在第 10 层结束
model = YOLO("yolo26n.pt")
# 对骨干网络的最终特征图进行平均池化,为每张图像生成一个向量
embeddings = model.embed("https://ultralytics.com/images/bus.jpg", embed=[10])
vector = embeddings[0]
print(vector.shape)它会输出 torch.Size([256]):将整张公交车照片缩减为 256 个数字,每个数字对应 YOLO26n 步幅为 32 的骨干网络输出中的一个通道,可用于向量搜索或聚类。










