深度学习是一个目前非常火热的机器学习分支,而卷积神经网络(CNN)就是深度学习的一个代表性算法。CNN主要用来解决图像相关的问题,目前,单张图片的识别问题已基本被攻克,CNN的下一个战场将是视频识别。
那么为什么卷积神经网络在图片任务上表现这么好呢?一大原因就是其中的卷积操作。那么什么是卷积操作呢?
卷积这一概念来源于物理领域,但在图像领域又有所不同。在图像处理中,卷积操作就是使用一个滑动窗口,在图像上从上到下,从左到右滑动,并对窗口里的像素进行加权平均。每滑动一下,就得出一个加权平均的结果,因此滑动的结果也是一个二维数组。
下面是一个图示。
二维图像上的卷积操作
上图中,Input为一个二维的3*4的图像(当然实际图像不会这么小,例如ImageNet上面的图像是224*224的),而Kernel称为卷积核,也就是上面提到的滑动窗口,此处是一个2*2的卷积核,它里面包含了4个实数,表示四个位置上的权重,用来对窗口里的像素进行加权平均。Output表示卷积操作之后的结果,这个窗口经过从上到下从左到右的滑动之后,得到了6个加权平均结果,构成了一个2*3的二维数组。
上面的例子是黑白图像的例子,那么彩色图像如何进行卷积呢?我们知道,彩色图像有三个颜色通道:红绿蓝,通常,在卷积神经网络中,是对这三个通道分别进行卷积操作的,而且各通道之间的卷积核也各不相同。
卷积操作有什么好处呢?
首先,卷积操作可以模拟图像里面的各种算子,例如边缘检测、锐化、模糊算子等,这些算子之间的区别只在于卷积核的不同,操作是一样的。而且在卷积神经网络中,卷积核是算法从数据中学习出来的,因此具有很大的自由度,不再需要人工的设计图像算子,因此CNN算法相当强大。
下面是一些图像算子的卷积核,详细信息可以参见 https://en.wikipedia.org/wiki/Kernel_(image_processing)。
其次,卷积操作大大地降低了参数数量,从而可以避免过拟合问题。在神经网络中,待学习的参数往往数量十分庞大,因此十分容易就“记住”了训练数据,而在测试数据上表现很差,也就是说,发生了过拟合。而卷积操作中,只需要学习卷积核,而卷积核往往很小(通常在5*5以内),因此参数的数量也很小,这就可以有效的避免过拟合。
三维卷积
以上是针对单张图片的卷积操作,那么对于视频,又该如何进行卷积呢?
3D卷积图示
单张图片的输入是一个二维数组,而视频的输入就是一串二维数组,这些二维数组就组成了一个三维立方体,而相应的卷积核也扩展为三维,这样,可以自然地将卷积操作扩展到三维。在进行滑动时,就是从左到右、从上到下、从前到后了。
领取专属 10元无门槛券
私享最新 技术干货