1. 痛点与解决
1.1 图像识别的挑战
虽然图片识别对于人来说是一件轻松的事情,但是对于计算机来说,由于接受的是一串数字,对于同一个物体,表示这个物体的数字可能会有很大的不同,所以使用算法来实现这一任务还是有很多挑战的,具体来说:
- 观察角度的变化 Viewpoint variation:一句诗可以很好概括,“不识庐山真面目,只缘身在此山中”。
- 尺度变换 Scale variation:图片大小比例的变化也会使得数据发生改变。
- 变形 Deformation:很多物体的外形不是一成不变的,比如众所周知,猫是液体。
- 遮挡 Occlusion:要被识别的物体可能被遮挡,只露出一部分。
- 光线条件 illumination conditions:环境光线的变化对物体的图片也会有很大的影响。
- 背景干扰 Background clutter:如果物体和背景有很相似的颜色和纹路,那么就很难被识别。
- 物种变异 Intra-class variation:同一物种可能也有差异很大的形态。
除了上述的问题外,图像识别任务还有一个巨大的挑战——运算量巨大。如下图所示,对于一张100 * 100 的RGB图像,有3个通道,那么就一共有30000个像素,如果使用前馈神经网络,首先将这30000个像素拉直成一个向量,那么假设下一层有1000个神经元,那么单单这一层网络就会有 个权重,如果神经网络层数更多,每层神经元个数更多,输入图片更大,那么参数量将会变得十分庞大。并且参数越多,模型也越容易出现过拟合的问题,这也是我们不想看到的。
1.2 人类视觉系统
1981 年的诺贝尔医学奖,颁发给了 David Hubel(出生于加拿大的美国神经生物学家) 和TorstenWiesel,以及 Roger Sperry。前两位的主要贡献,是“发现了视觉系统的信息处理”,可视皮层是分级的。他们发现人类的视觉原理如下:从原始信号摄入开始(瞳孔摄入像素 Pixels),接着做初步处理(大脑皮层某些细胞发现边缘和方向),然后抽象(大脑判定,眼前的物体的形状),然后进一步抽象(大脑进一步判定该物体)。下面是人脑进行人脸识别的一个示例:
我们可以看到,在最底层特征就是各种边缘,越往上,越能提取出此类物体的一些特征(眼睛、鼻子、嘴巴等),到最上层,不同的高级特征最终组合成相应的图像,从而能够让人类准确的区分不同的物体。那么我们可以很自然的想到:可以不可以模仿人类大脑的这个特点,构造多层的神经网络,较低层的识别初级的图像特征,若干底层特征组成更上一层特征,最终通过多个层级的组合,最终在顶层做出分类呢?受此影响,便出现了卷积神经网络。
2. 发展历史
1986年 Rumelhart和Hinton等人提出反向传播(BP)算法
【论文连接】LeNet: 1998年 LeCun利用BP算法训练LeNet5网络,包括卷积层、pooling层、全连接层,标志CNN真正面世,其在手写数字识别问题上达到了99.2%的准确率,结构如下:
2006年 Hinton在Science Paper 首次提出Deep Learning的概念。
【论文连接】AlexNet: 2012年 Hinton的学生Alex Krizhevsky 在ImageNet的竞赛中使用AlexNet,刷新了image classification的记录。
【论文连接】VGG: 来自 Andrew Zisserman 教授的组 (Oxford),在2014年的 ILSVRC localization and classification 两个问题上分别取得了第一名和第二名。
【论文连接】GoogLeNet: 提出Inception结构是主要的创新点,其使用使得之后整个网络结构的宽度和深度都可扩大,能够带来2-3倍的性能提升。
【论文连接】ResNet: 深度残差网络,是由中国广东的何凯明大神在2015年CVPR上提出来的,就在ImageNet中斩获图像分类、检测、定位三项冠军,解决了CNN网络深度的重大问题。这位大佬Google引用30w+,目前在Facebook AI研究所。
下图展示了一些经典模型的准确率和参数数量。