Feature Map(特征图) 是深度学习(尤其是卷积神经网络 CNN)中的一个核心概念,指通过卷积操作从输入数据中提取出的特征表示。它可以看作是对输入数据的某一层次的特征的可视化或数学表达。


1. 通俗理解

  • 类比:假设你有一张照片(输入图像),通过不同的“滤镜”(卷积核)处理后,会得到多张“特效图”(特征图),每张特效图突出原始照片的某些特征(如边缘、纹理、颜色等)。
  • 作用:特征图记录了输入数据中某些特定模式(如线条、形状、物体部分)的响应强度。

2. 技术定义

  • 数学表达
    特征图是输入数据(如前一层特征图或原始图像)与卷积核(kernel)进行卷积运算后得到的输出。
    计算公式(以2D卷积为例):
    $$
    \text{Feature Map}(i,j) = \sum_{m}\sum_{n} \text{Input}(i+m, j+n) \cdot \text{Kernel}(m,n)
    $$
  • 通道与深度
  • 单个卷积核生成一个单通道特征图
  • 多个卷积核(如 C_out 个)会生成多通道特征图(shape为 (C_out, H_out, W_out))。

3. 特征图的常见操作

  • 激活函数:对特征图进行非线性变换(如ReLU)。
  • 池化(Pooling):降低特征图的分辨率(如最大池化保留显著特征)。
  • 上采样(Upsampling):增大特征图尺寸(用于分割、生成任务)。

4. 代码示例(PyTorch)

1
2
3
4
5
6
7
8
9
10
11
12
import torch
import torch.nn as nn

# 输入:1张3通道的RGB图像 (1, 3, 256, 256)
input = torch.randn(1, 3, 256, 256)

# 卷积层:3输入通道,64输出通道,kernel_size=3
conv = nn.Conv2d(in_channels=3, out_channels=64, kernel_size=3, stride=1, padding=1)

# 输出特征图 (1, 64, 256, 256)
feature_map = conv(input)
print(feature_map.shape)# torch.Size([1, 64, 256, 256])

总结

  • 特征图是卷积操作提取的特征响应图,本质是输入数据的多层次抽象表示。
  • 其形状由输入尺寸、卷积核数量、步长(stride)、填充(padding)等决定。
  • 深度学习中,特征图逐步从低级特征(边缘)过渡到高级语义(物体类别)。