CNN 特征图可视化能帮助我们理解什么?
简化版
特征图可视化展示某层各通道在空间位置上的激活,可用于发现边缘、纹理、语义区域以及死通道;但单张特征图不等于通道语义,必须结合多样本、激活统计和梯度/遮挡验证。
详细版
-
浅层通常响应边缘与颜色,深层空间分辨率更低、语义组合更强。
-
可视化前要明确是在 ReLU 前还是后,并采用一致归一化,避免颜色尺度制造假差异。
-
通道很多时可按最大激活、均值、稀疏度或与目标类别的相关性筛选。
-
特征图适合调试死 ReLU、异常边界响应和背景捷径,不应被当成因果解释。
-
若要回答某类别关注哪里,应使用 Grad-CAM;若要寻找最大激活输入,可做 activation maximization。
完整版教学
一、中间激活是 CNN 的调试窗口
输入和最终预测之间隔着大量卷积,错误可能来自预处理、数值范围或某一层失活。
直接观察中间张量,能定位信息在哪一阶段被放大、丢失或偏向背景。
不过通道表征具有分布式特征,一个概念可能由多个通道共同编码,一个通道也可能响应多种纹理。
给单通道贴上“眼睛检测器”标签往往过度解读。
二、底层机制与关键公式
对于 N×C×H×W 张量,通常固定一个样本,把 C 个二维矩阵排成网格。
ReLU 后零值比例揭示稀疏程度,通道均值和标准差可以发现恒零或爆炸激活。
跨层比较时不能直接使用各图自己的最小最大值。
应保留原值范围或使用统一分位数,否则数值仅为 0.001 的噪声也会被拉伸成强响应。
sparsity_c = count(A_c == 0) / (H*W)
energy_c = sum(A_c^2) / (H*W)
示例张量: [1, 64, 56, 56] -> 64 张 56×56 热图
三、带数字的推演
某通道有 56×56=3136 个位置,其中 3040 个在 ReLU 后为 0,稀疏度约 96.9%。
若这个比例在 1000 张图上都接近 100%,它可能是死通道;只看一张图则不能下结论。
四、方案对比与选择
| 方案/场景 | 机制或优势 | 主要代价 |
|---|---|---|
| 浅层特征图 | 边缘、颜色、局部纹理 | 分辨率高、语义弱 |
| 深层特征图 | 部件与类别相关模式 | 语义强、定位粗 |
| Grad-CAM | 类别条件化区域 | 回答“该类别依据哪里” |
五、实际执行流程
注册 forward hook -> 输入代表性样本 -> 保存指定层张量
-> 统计通道分布 -> 统一色标画网格 -> 跨样本核验异常
六、边界条件与工程代价
Hook 需要及时移除,并在 no_grad 下调试,否则保存计算图会造成显存泄漏。
大模型不要把所有层、所有 batch 的激活长期留在 GPU。
训练态的 Dropout 和 BN 会让同一输入的特征变化;用于对比时一般切到 eval,并记录预处理、层名、激活前后位置。
记忆钩子:特征图回答“这一层产生了什么空间响应”,Grad-CAM 回答“某类别借助了哪些区域”。
七、常见误区与追问
-
误区:一个亮通道就对应一个明确物体概念。 表征通常由多通道协同,需跨样本验证。
-
追问:为什么要固定色标? 逐图拉伸会抹掉绝对幅值差异,使弱噪声看起来与强响应相同。
-
误区:特征图越稀疏越差。 ReLU 稀疏是常见现象,只有长期全零或信息丢失才值得警惕。
-
追问:可视化应选 ReLU 前还是后? 两者回答不同问题;前者看正负证据,后者看实际传给下一层的响应。
-
追问:如何确认背景捷径? 结合多样本热图、背景替换或遮挡实验观察预测是否随背景变化。
八、加强记忆
特征图回答“这一层产生了什么空间响应”,Grad-CAM 回答“某类别借助了哪些区域”。
检查时沿着浅层到深层看分辨率、幅值和稀疏度,并坚持统一色标与跨样本验证。