这个也可以参考:
https://blog.youkuaiyun.com/LEILEI18A/article/details/80389229
这篇博客主要记录了如何提取特定层的特征,然后对它进行可视化
二 主要的实现思路:
- 处理单张图片作为网络输入。
- 根据给定的layer层,获取该层的输出结果
features
。 - 考虑到
features
的形状为:[batch_size, filter_nums, H, W] 提取其中的第一个过滤器得到的结果feature
。 - 以一张图片作为输入的情况下,我们得到的
feature
即为[H,W]大小的tensor。 - 将tensor转为numpy,然后归一化到[0,1],最后乘255,使得范围为[0,255]
- 得到灰度图像并保存。
三 具体实现过程
了解实现流程之后整个代码没有什么难度,对其中的关键点进行简单说明一下:
- 模型我用了在ImageNet预先训练好的vgg16作为示例。
- 打印模型结构可以看到每一层对应的id是什么。
- 通常选择
conv
后面的特征进行可视化。 - 整个的实现放在类
FeatureVisualization
中实现。