基本知识
卷积操作 即为 一系列 滤波操作 之和 。 有关卷积的概念,具体可参加我的这篇文章:深度学习: convolution (卷积) 。
现有研究
Zeiler 和 Fergus 两位大佬在他们获得ECCV2014最佳论文提名奖的论文《Visualizing and Understanding Convolutional Networks》中,就对各卷积层 生成的 feature map(特征图) 展开了 可视化探究 。
缺陷
但是他们却没有对 各卷积层的 卷积核 展开 功能规律性 总结 。
观察
初始化后的深度学习模型的训练就像一个婴孩。
在训练过程中,各网络层 总数不变,但在梯度下降的 引导 下,不断 分化 成各种 功能层 。各功能层 协作 ,使得模型成熟而强大。
而每个神经网络层的 卷积核,其实就是 一系列的 filter(滤波器)集合 。
(关于不同类型的filter,可参见我之前在github上开源的一个repo:Image_Filter )
思考
训练好的模型中,各层 的 卷积核 参数 初看起来像是一块乱序的tensor。
但是,通过某种卷积操作(即滤波操作)以实现 该特征 的 抽取功能,那么所用到的卷积核(即filter集合)一定会 近似于 某种filter集合。
通俗点讲,既然他们能 分化 成各种 功能层 ,意味着他们一定会长得越来越像 该功能 所对应的 filter集合 。
举例
例如,如果该功能层80%的功能是实现边缘提取,那么它的卷积核一定 长得像 加长版的边缘滤波器。
而 各种边缘滤波器,长得又都极其类似(代码截取自Image_Filter):
def Edge_Detection_360_degree_Filter():
# Edge_Detection_360° Filter 360°边缘检测 滤波 (抽取 边缘特征)
filter_0 = np.array([[[-1,0,0],[-1,0,0],[-1,0,0]],
[[-1,0,0],[8,0,0],[-1,0,0]],
[[-1,0,0],[-1,0,0],[-1,0,0]]],
dtype=np.int16)
filter_1 = np.array([[[0,-1,0],[0,-1,0],[0,-1,0]],
[[0,-1,0],[0,8,0],[0,-1,0]],
[[0,-1,0],[0,-1,0],[0,-1,0]]],
dtype=np.int16)
filter_2 = np.array([[[0,0,-1],[0,0,-1],[0,0,-1]],
[[0,0,-1],[0,0,8],[0,0,-1]],
[[0,0,-1],[0,0,-1],[0,0,-1]]],
dtype=np.int16)
return filter_0, filter_1, filter_2
def Edge_Detection_45_degree_Filter():
# Edge_Detection_45° Filter 45°边缘检测 滤波 (抽取 边缘特征)
filter_0 = np.array([[[-1,0,0],[0,0,0],[0,0,0]],
[[0,0,0],[2,0,0],[0,0,0]],
[[0,0,0],[0,0,0],[-1,0,0]]],
dtype=np.int16)
filter_1 = np.array([[[0,-1,0],[0,0,0],[0,0,0]],
[[0,0,0],[0,2,0],[0,0,0]],
[[0,0,0],[0,0,0],[0,-1,0]]],
dtype=np.int16)
filter_2 = np.array([[[0,0,-1],[0,0,0],[0,0,0]],
[[0,0,0],[0,0,2],[0,0,0]],
[[0,0,0],[0,0,0],[0,0,-1]]],
dtype=np.int16)
return filter_0, filter_1, filter_2
Idea
各 相同功能 的网络层,所对应的 卷积核 一定 长得彼此类似 。
通过总结出 各类 功能层 对应的 “卷积核 大众脸”(即该类型卷积核的参数惯常分布),即可找出规律。
用途
可用于对 训练好的 神经网络层 进行 功能识别 。
网络层 功能识别 具体步骤
首先,总结出常用的几类功能滤波器(例如颜色特征抽取、边缘特征抽取、纹理特征抽取、肢干特征抽取、整体特征抽取)。
其次,对要进行识别的网络层,输入该层训练好的卷积核。
接着,对 维度 进行 归一化 ,以保证要识别的 tensor 有一致的size。
然后,将预处理过的 待识别卷积核 与 常用的 几类功能滤波器 进行 相似度比较 (比如通过 l2 损失函数,求得各位置上对应参数值的距离损失)。
通过比较各损失情况,得出该卷积核的 功能分类概率 。
举例如下图:
颜色特征提取 | 边缘特征提取 | 纹理特征提取 | 肢干特征提取 | 整体特征提取 |
---|---|---|---|---|
2% | 10% | 80% | 8% | 2% |
最后,通过最大概率, 判定 该功能层为 纹理特征提取层 (或通过 大于10%概率阈值 的筛选方法,判定其为 80%纹理+10%边缘 的 特征提取层 )。