大家好啊,我是董董灿。
之前写过很多关于卷积算法的文章:5分钟理解什么是卷积的特征提取。总的来说,卷积算法的本质是一个特征提取器。
那么既然卷积神经网络在图像分类、图像检测、图像分割以及其他领域有这么好的表现,卷积到底是提取了图像的什么特征呢?
1、卷积特征可视化
虽然有时候我们说神经网络是个黑盒,但是研究人员一直在探索,如何将卷积学习到的特征给分析出来。
其实就是想要一窥神经网络这个黑盒内部的逻辑:在 CNN 网络中,那些卷积到底提取了哪些特征。
我们可以通过一定的方法,将卷积的输出(也就是特征图)给劫持出来,在利用一些可视化的方法将其显示出来,便可以直观的看到卷积学到了什么特征了。
要做这一步需要做到一点,那就是将一个神经网络中卷积的输出(也就是特征图)可以获取到。
幸运的是,我做的一个开源项目:手写一个神经网络中已经把卷积输出特征图给劫持出来,并且可以很轻松的实现特征的可视化。
项目 github 链接为:https://github.com/dongtuoc/resnet50_zero。
在本篇文章中,我们先借助一个很牛的网站工具,来了解一下,卷积特征可视化之后的效果到底如何。
2、一个神奇的网站实现特征可视化
一个很著名的CNN可视化网站:https://poloclub.github.io/cnn-explainer/
在这个网站中,作者搭建了一个只有 10 层的神经网络,包含 4 层卷积,4 个 relu 的激活函数, 2 层最大池化。
这个神经网络的输入是一张 3 通道的 RGB 图片,然后每一层卷积对每个通道进行卷积运算,完成一些特征的提取。
在这个网站中,你可以非常清晰的看到,一张图片在神经网络中是如何进行特征提取,以及从前往后的每一层卷积各自关注到了什么特征。
网站另一个很友好的地方在于,你可以点击其中的每一个步骤来看计算过程。
比如,我点开一个最大池化的操作,就会出现一个动图来展示最大池化是如何运算的。
从这个网站中,我们可以粗略的看到,前几层卷积关注的特征大多还集中在形状、轮廓这种特征,而越往后特征就会变得越来越抽象,比如第 4 层就已经有点像热力图了。
强烈建议初学者去该网站玩一玩,会刷新你对神经网络的认识。