卷积神经网络(CNNs)
随着机器视觉硬件已经变得越来越强,训练多隐含层的神经网络现在已经成为可能,其就是我们已知的深度学习。在深度学习领域的一个主要工具就是卷积神经网络(CNNs)。
CNNs具有特征不必人工去选择的优势,相反,滤波器值在整个训练过程中都将被调整。基本上,在训练中采用带标签的图像,CNN尽力去找能够合理的区分类的特征。这就意味着,当训练一个CNN的时候,不像一些其他的分类方法,它不必要为分类器去指定特征。但是,神经网络架构,例如层的顺序和数量,超参数等,必须被指定。因为这个任务是相当复杂的,CNNs目前仅仅在HALCON中用于OCR的分类,仅仅用预训练的字体普遍性。也就是说,至今训练你自己的基于CNN的OCR分类器还是不可能的。CNNs不能用于一般特征的分类或者图像的分割。下面,一些CNN理论的基本概念被描述。
CNNs是受人类和许多动物的视觉皮质的启发。当我们看特定方向的边缘时,一些在大脑中单独的神经细胞就会有反应。当暴露在垂直边缘,一些神经元将被激活;当展示了水平或者对角边缘的时候,一些神经元将被激活。类似的,卷积神经网络通过寻找底层特征,如边缘或者曲线类执行分类,然后建立起更抽象的概念。这些概念可能类似于文本,logo或者机器部件。这些特征在训练的过程中被自动的选择。图像被传入到一系列层中得到一个输出。在下文,一些常用类型的层将被介绍。特别是卷积,池化,ReLU和全连接层。
卷积层
第一层通常是一个卷积层。这里,一个滤波器沿着图像移动,如下图:
图1:一个3x3的滤波器在5x5大小的图像上移动,移动在左上角开始,结果是一个3x3的特征映射。
滤波器(或者内核)是一个数组(或者权重)。一个例子如图2。图像的原始像素值同滤波器的权重进行相乘,这些相乘值被相加求总和。由于这代表了一个卷积,故这个层的名字被叫为“卷积层”。
图2: 一个5x5的滤波器在一张16x16大小的图像上移动。滤波器被设计去寻找水平边。如果被滤波的5x5区域内包含一个水平边,那么所求和是一个大的数。如果这没有水平边,和将相对较小。
这个卷积在整张图像上被执行,结果被称为特征映射。在图2中,滤波的结果是一个数组(特征映射),其提供了在图像中哪里找到水平边的信息。在实际中,许多不同的滤波器被用来去决定图像的特征。结果,单个滤波器产生2维的激活映射,其然后沿着第三维被叠加,产生了3维的输出容量(见图4)。
池化层
池化是一个非线性下采样的形式,其减少了图像表现的空间尺寸,同时还有神经网络中参数的数量,进而也减少了过拟合的风险。一个常用的方法被称为“最大池化”(见图3)。它将输入图像划分为小矩形,然后返回每个矩形的最大值。
图3:“最大池化”划分一个4x4的输入图像未4个不重叠的矩形,并返回每一个矩形的最大值
矫正的线性单元(ReLU)层
一个CNNN必须能够去接近非线性函数,从而,它需要至少一个非线性层。ReLU层已经变成了一个常用的方法,因为它们能够被很快的计算出来。
全连接的层
在一个CNN中,最后一层通常是一个全连接层。这个层类似于MLP的一个隐含层,其获得先前层的输出,其代表了更高层特征的特征映射。然后,基于这些特征,类别被选定。例如,如果图像展示了一个狗(类:狗),这可能是代表更高层特征的特征映射,如爪子,鼻子或者毛。这些特征映射被自动创建。
基本配置
一个简单CNN分类器的架构看起来是这样的:
输入图像->卷积层->矫正的线性单元(ReLU)->卷积层->ReLU->池化层->ReLU->卷积层->ReLU->池化层->全连接层
图4:一个卷积神经网络的简化配置。一个卷积层通常紧跟一个池化层。在最后,一个全连接层被用来计算输出。另外,ReLU层通常在这些层之间,来增加神经网络的非线性属性。
每一层用前边层的输出(见图4)。第一层检测底层特征,如边缘或者曲线。接下来层的特征映射描述了更高层特征。在一个CNN最后的滤波器感知来自原始图像更大区域的信息。这样的话,它就能够预测一个对象的类别。
基于CNN的OCR分类器的优势在于其泛化能力。这样,当开发已给OCR应用时候,推荐首先尝试用预训练的基于CNN的OCR字体普遍性,并且在尝试其他任何OCR分类方法之前去评估结果。
觉得有帮助?请转载分享给你们的朋友吧。
领取专属 10元无门槛券
私享最新 技术干货