2.1 传统的图像分类算法
? ? ? ?图像分类是根据图像的原始信息将不同类别图像区分开来,是计算机视觉中重要的基本问题,也是图像检测、图像分割、物体跟踪、行为分析等其他高层视觉任务的基础。图像分类在很多领域有广泛应用,包括安防领域的人脸识别和智能视频分析,交通领域的交通场景识别,互联网领域基于内容的图像检索和相册子宫归类,医学领域的图像识别等。
? ? ? ? 在CNN出现之前,图像分类算法依赖于复杂的特征工程。常用的特征提取方法包括SIFT(Scale-Invariant Feature Transform,尺度不变特征转换)、HOG(Histogram of Oriented Gradient,方向梯度直方图)、LBP(Local Bianary Pattern,局部二值模式)等,常用的分类算法为SVM。
2.2 基于CNN的图像分类算法
? ? ? ? 人们尝试直接把原始图像作为输入,通过深度学习算法直接进行图像分类,从而绕过复杂的特征工程。
2.2.1 局部连接?
? ? ? ? 常见的深度学习算法都是全连接形式,所谓全连接,就是第n-1层的任意一个节点,都和第n层所有节点有连接。同时,临近输入层的隐藏层的任意节点与输入层的全部节点都有连接。但是巨大的计算量阻碍了深度学习在图像分类方向的应用。
? ? ? ? 类比猫的视觉神经细胞,将隐藏层的一个节点只处理10*10大小的数据,也就是说每个隐藏层的节点只与输入层的100个节点连接,这样在隐藏层节点数量和输入层节点数量不变的情况下,输入层与隐藏层的连接可以大幅减少,但是依然十分巨大。局部连接不会减少隐藏层的节点数量,减少的是隐藏层和输入层之间的连接数。
2.2.2 参数共享
? ? ? ? 本质上隐藏层的一个节点与输入层一个节点的连接,对应的就是一个连接参数,大量的连接也就意味着大量的参数需要计算,仅仅依靠局部连接技术是无法进一步减少计算量的,于是人们又提出了参数共享的方法。
? ? ? ? 所谓的参数共享是基于这样一个假设:一部分图像的统计特性与完整图像的特性相同。即使处理更大的图像,只要单一隐藏层节点与输入层连接的个数不变,全部隐藏层的参数个数也不变。这种共享参数的机制,可以理解为针对图像的卷积操作。
2.2.3 池化
? ? ? ?通过局部连接和参数共享后,计算量还是太大。使用卷积后的特征是因为图像具有一种“静态性”的属性,这也就意味着在一个图像区域有用的特征极有可能在另一个区域同样适用。因此,为了描述大的图像,一个很自然的想法就是对不同位置的特征进行聚合统计,例如,人们可以计算图像一个区域上的某个特定特征的平均值(或最大值)。这种聚合操作叫做池化。
2.2.4 典型的CNN结构及实现
? ? ? ? 典型的CNN包含组件如下。
- 卷积层:执行卷积操作提取底层到高层的特征,发掘图片局部关联性质和空间不变性质。
- 池化层:通过抽取卷积输出特征图中局部区块的最大值或均值,执行降采样操作。降采操作也是图像处理中常见的一种操作,可以过滤掉一些不重要的高频信息。
- 全连接层:输入层到隐藏层的神经元是全部连接的。
- 非线性变化层:卷积层、全连接层后面一般都会接非线性变化层,例如Sigmoid、Tanh、ReLu等来增强网络的表达能力,在CNN里最常使用的是ReLu激活函数。
- Dropout:在模拟训练阶段随机让一些隐层节点不工作,提高神经网络的泛化能力,一定程度上可防止过拟合。
2.2.5 AlexNet的结构及实现
? ? ? ? AlexNet是在2012年发表的一个经典之作,并在当年取得了ImageNet最好成绩,其官方提供的数据模型,准确率达57.1%,top1-5达到80.2%。与传统的机器学习分类算法相比,这个结果已经相当出色。
? ? ? ?AlexNet一共有8层组成,其中3个卷积层5个全连接层。
2.2.6 VGG的结构及实现
? ? ? ? 牛津大学VGG(Visual Geometry Group)组在2014年ILSVRC提出的模型被称作VGG模型,跟以往模型相比,该模型进一步加宽和加深了网络结构,它的核心是5组卷积操作,每两组之间做Max-Pooling空间降维。同一组内采用多次连续的3*3卷积,卷积核的数目由较浅组的64增多到最深组的512,同一组内的卷积核数目是一样的。卷积之后接两层全连接层,之后是分类层。由于每组内卷积层的不同,有11、13、16、19层这几种模型。VGG模型结构相对简洁,提出之后也有很多文章基于此模型进行研究,如在ImageNet上首次公开超过人眼识别的模型就是借鉴VGG模型的结构。
2.3 基于CNN的文本处理
? ? ? ? CNN的诞生是为了解决图像处理领域计算量巨大而无法进行深度学习的问题,CNN通过卷积计算、池化等大大降低了计算量,同时识别效果满足需求。图像通常是二维数组,文字通常都是一维数据,是否可以通过某种转换后,也是用CNN对文字进行处理呢?答案是肯定的。
2.3.1 典型的CNN结构
2.3.2 典型的CNN代码实现
|