CNN 最擅长的是处理图片。
图像由像素组成,每个像素又有颜色构成。比如,一张像素1000x1000x3的RGB图片,若用传统的神经网络(只有全连层),会有3百万的参数。这样处理起来,会非常费资源,又耗时,效率很低。
而 CNN 就是将问题‘复杂简单化’,通过卷积降低数据维度,再作全连层处理。在大部分场景下,降维并不会影响结果。比如,1000像素的图片缩小成200像素,并不影响肉眼认出来图片中是一只猫还是一只狗,机器也是如此。
保留图像特征
- 传统的图像数字化:
- 若有圆形是1,没有圆形是0,那么圆形的位置不同就会产生完全不同的数据表达。但是从视觉的角度来看,图像的内容(本质)并没有发生变化,只是位置发生了变化。所以当我们移动图像中的物体,用传统的方式的得出来的参数会差异很大!这是不符合图像处理的要求的。
- CNN 解决了这个问题,用类似视觉的方式保留了图像的特征,当图像做翻转,旋转或者变换位置时,它也能有效的识别出来是类似的图像。
灵感来源
- 人类的视觉原理如下:从原始信号摄入开始(瞳孔摄入像素 Pixels),接着做初步处理(大脑皮层某些细胞发现边缘和方向),然后抽象(大脑判定,眼前的物体的形状,是圆形的),然后进一步抽象(大脑进一步判定该物体是只气球)。下面是人脑进行人脸识别的一个示例:
- 对于不同的物体,人类的视觉的逐层分级:
- 我们可以看到,在最底层特征基本上是类似的,就是各种边缘。越往上,越能提取出此类物体的一些特征(轮子、眼睛、躯干等)。到最上层,不同的高级特征最终组合成相应的图像,从而能够让人类准确的区分不同的物体。那么我们可以很自然的想到:可以不可以模仿人类大脑的这个特点,构造多层的神经网络,较低层的识别初级的图像特征,若干底层特征组成更上一层特征,最终通过多个层级的组合,最终在顶层做出分类呢?这就是 CNN 的灵感来源。
基本构成
典型的 CNN 有3个部分构成:
- 卷积层
负责提取图像局部特征 - 池化层
用来大幅降低参数量级,以防过拟合 - 全连层
类似传统神经网络,用于输出结果
卷积层
- 卷积的计算过程(下面例子每次滑动1个):
- 这个过程相当于用一个过滤器(卷积核)来过滤图像的各个小区域,然后提取小区域的特征值。
- 具体应用中,有很多个卷积核(每个卷积核代表了一种图像模式)。图像的某个小区域与卷积核的卷积结果值越大,说明该小区域越接近卷积核的形状。
池化层
- 计算过程如下(下面例子每次滑动10个):
- 同样是作卷积,只不过滑动步数或卷积核大小会比在卷积层的大。而卷积层的卷积核太小,会导致卷积后的图像依然很大,因此在池化后,图像的数据维度会大大降低。
全连层
- 图示:
- 经过卷积层和池化层降维的数据,进入全连层,即进入到传统的神经网络,输出结果。
实际应用
-
图像分类、检索
典型场景:图像检索…
-
目标定位检测
典型场景:自动驾驶、安防、医疗…
-
目标分割
典型场景:美图秀秀、视频后期加工、图像生成…
-
人脸识别
典型场景:安防、电影、图像视频生成、游戏…