深度学习中最令人兴奋的领域之一就是计算机视觉。通过卷积神经网络CNN(Convolutional Neural Networks),我们已经能够创建自动驾驶系统、面部检测系统和自动医学图像分析等。但如果不是专业的数据工程师与行业人员,您几乎没有机会了解CNN。今天,本文将从理论与实践两种方式,带领各位来了解CNN的内部构造,以及CNN是如何实现具体功能的。
01
第一部分:卷积神经网络CNN
什么是卷积神经网络
我们常常听说的神经网络,全名人工神经网络ANN(Artificial Neural Network),是一种模仿生物神经网络的结构和功能的数学模型或计算模型。而卷积神经网络CNN是一种前馈神经网络,在图像处理方面CNN的表现十分出色。
为什么使用卷积神经网络?
全连接神经网络不适合用于处理图像,因为会有以下三方面的问题:没有利用像素之间位置信息;参数过多效率低下,训练困难;大量的参数导致网络过拟合。
使用卷积神经网络CNN可以解决上面的问题。CNN在原来的全连接层前面加入多个卷积层、激活函数与池化层,其中每层的神经元将只与前一层中的一小块区域连接,而不是采取全连接方式,避免参数爆炸的同时扩展了神经网络的层数,使深度学习成为可能。
传统神经网络(左)与卷积神经网络CNN(右)
工作原理
卷积神经网络CNN中主要由输入层、卷积层、激活函数、池化层以及全连接层组成。CNN的工作原理类似大脑识别图像的过程,不同的大脑区域可以识别图像不同维度的特征。CNN中的每个卷积层都包含多个卷积核。这些卷积核从左到右,从上到下扫描整个图像以得到特征图。在经过多个卷积层的计算后可以得到图像在不同维度的抽象表示,从而获取图像特征以识别图像。
卷积计算示意图(图片来源:github mlonotebook)
为了让各位对CNN有一个具体的印象,接下来本文将对CNN的每一层进行讲解。
卷积层
通过卷积层,我们可以完成对图像的去噪、锐化、边缘检测、模糊等操作,从而达到提取图像不同特征的目的。
在卷积层中,包含多个可学习的卷积核,让上一层输出的特征图与卷积核进行卷积操作,即输入项与卷积核之间进行点积运算,然后将结果送入激活函数,就可以得到输出特征图。
以下图为例。图中输入图像大小为32*32*3,3是它的深度(RGB),卷积层的卷积核大小为5*5*3。通过一个卷积核与输入图像的卷积就可以得到一个28*28*1的特征图。
卷积计算示例
第一层卷积层只能提取一些低级的特征,如边缘、线条和角等层级,而更多层的网路就能从低级特征中迭代提取更复杂的特征。
下图是输入图像分别经过1个/2个/3个卷积核卷积后输出的特征图,可以看到经过迭代后我们获得了更深层次的特征图。
卷积特征图
通过卷积核,CNN可以提取图片的一部分,相当于传统神经网络的一个特征。多个卷积核对应多个特征,产生多个特征的同时使用卷积的方式避免了参数爆炸。
激活函数
激活函数又称非线性映射。若干线性操作层(卷积层)的堆叠只能起到线性映射的作用,无法形成复杂的函数。激活函数可以引入非线性因素,增加整个网络的表达能力。因此每次卷积完成后,都需要使用激活函数对结果进行处理。
常见的激活函数有Sigmoud、tanh、Maxout以及我们最常用的Relu等。
常见的激活函数
以ReLu为例,该函数可以将图片中的负像素值替换为零,以此对特征提取的结果进行修正。
ReLu处理特征图像
池化层
池化层又称下采样层,主要的作用是对激活函数处理后的结果进行降维,压缩数据和参数的量来保留最显著的特征,防止过拟合。
以常用的最大池化为例,在最大池化过程中,输入图像大小为4*4,在每2*2的区域中计算最大值。最后输出的池化特征大小为2*2,这个过程中分辨率变为原来的一半。
最大池化示例
全连接层
全连接层可以把所有局部特征通过权值矩阵重新整合为一个完整的特征视图,其输出值可以采用softmax分类器进行分类。
全连接层示意图
Softmax分类器常用于多分类任务,它可以将多个神经元的输出映射到(0,1)的区间中,以概率的形式完成多分类。
Dropout函数
Dropout函数是指在深度学习网络的训练过程中,让某个神经元的激活值以一定的概率p停止工作。这样可以使模型泛化性更强,因为它不会太依赖某些局部的特征。
Dropout函数示例
02
第二部分:实验
实验——手写数字识别
读完了上面的内容,相信您对卷积神经网络CNN有了初步的了解。接下来,本文将通过实验的方式直观地展现CNN的搭建,训练以及测试过程。
本实验将在Sophon Base中构建一个简单的卷积神经网络,并使用一部分MNIST数据集训练它识别手写数字。
1. 数据集介绍
MNIST数据集包含60000个训练集和10000测试数据集。分为图片和标签,图片是28*28的像素矩阵,标签为0~9共10个数字。
MINST数据集
本次实验使用的数据集为Sophon Base平台提供的images_small_minst数据集,该数据集选取了MINST数据集的一小部分图片,训练集加测试集总共500个。具体字段如下所示:
small_minst数据集
2. 实验环境
星环科技Sophon Base数据科学平台
3. 开始实验
在创建项目之前,本文默认您的sophon平台及各种配置文件已经成功安装,正常运行,并且您已成功注册sophon 用户。
进入项目首页,点击 “+新建项目” 以新建一个项目。
在项目首页,点击创建好的项目。点击左侧的实验,点击实验以新建空白实验。实验创建后会自动进入该实验界面。
从左侧将算子“images_small_minst”、“字符串索引”、“设置角色”、“人工神经网络”、“应用模型”、“性能(分类)”拖动至右侧工作区并按照下图进行连接:
算子连接示意图
算子的连接也可以参考下方视频进行操作:
,时长00:59
主流程算子连接
算子参数设置如下:“字符串索引” 算子
算子的参数配置也可以参考下方视频进行操作:
,时长01:06
主流程参数配置
可以选择 “人工神经网络” 算子,右键菜单点击 “重命名”,重命名该算子为 “卷积神经网络CNN”:
右键菜单
重命名后双击该算子,进入子流程:
神经网络算子子流程
可以看到子流程中空无一物,需要您自己搭建子流程。
4. 搭建模型
从左侧将多个 “2D卷积层” 算子与 “最大池化层2D” 算子拖动至右侧并按照下图连接:
子流程算子连接1
子流程中算子的连接也可以参考下方视频进行操作:
,时长01:13
子流程算子连接
参数设置如下:“2D卷积层” 算子
所有的 “2D卷积层” 算子与 “最大池化层2D” 算子都沿用以上参数设置。
至此,我们已经在神经网络算子中设立了三层。最开始的 “2D卷积层” 算子与 “最大池化层2D” 算子作为第一层;第二个 “2D卷积层” 算子作为第二层;最后的 “2D卷积层” 算子与 “最大池化层2D” 算子作为第三层。
神经网络前三层
接下来,将“压平”算子拖动至右侧,将“最大池化层2D”算子的输出连接至“压平”算子的输入。“压平”算子可以将多维的输出一维化:
“压平”算子连接
然后,从左侧将多个 “Dense层” 算子(全连接层算子)与 “Dropout层” 算子拖动至右侧并按照下图连接:
子流程算子连接2
参数设置如下:“Dense层” 算子
所有的 “Dense层” 算子与 “Dropout层” 算子都沿用以上参数设置。
以上算子的参数也可以参考下方视频进行操作:
,时长00:25
子流程算子参数配置
至此,我们已经在神经网络算子中设立了五层。最开始的 “Dense层” 算子与 “Dropout层” 算子作为第四层;最后的 “Dense层” 作为第五层。
神经网络后2层
最后,从左侧将 “Softmax函数” 算子、“交叉熵(Sparse vs login)” 算子与 “ReduceMean函数” 算子拖动至右侧并按照下图连接:
子流程算子连接3
这三个算子可以帮助模型计算模型损失和多分类概率。至此,子流程搭建完成。
5. 运行实验
退出后回到主流程,我们可以直接点击上方的执行按钮运行实验。运行过程需要一段时间。
运行完成后,可以跳转到实验结果:
混淆矩阵
正确率与召回率
由于平台提供的样例数据集中数据量较少,训练出的模型正确率较低。如果有需要,您可以自己准备数据集导入。Sophon Base除了跟Transwarp Data Hub做深度对接以外,还支持多种数据源,包括RDBS、HDFS、ORC、Parquet、本地CSV等。另外,本文中算子的参数设置与模型搭建仅供演示使用,您可以根据自己的需要改进模型或调整参数以求得到更优秀的模型。
您也可以在实验结果页面查看到模型对每个测试数据的预测结果:
测试结果
关于Sophon
Sophon是一款一站式人工智能平台。该平台包含3个主要模块:Sophon Base,Sophon Edge,Sophon KG。其中Sophon Base 数据科学基础平台具备完整的数据探索、多数据源接入、实验调度、智能分析、用户资产以及平台管理等功能;为用户提供完整的模型上线闭环,全流程图形化帮助用户更加便捷地对线上服务进行管理,实现模型价值。
如果想要使用sophon实际操作,可以登录网址https://cloud.transwarp.cn/home 进行查看。
进入首页-下拉至Sophon查看详情-点击申请试用-即可免费获得7天使用权限
03
第三部分:其他选择
“我觉得训练模型太麻烦了,有没有可以拿过来直接用的产品,而且要多场景,高效率,高准确度!”
对于这些客户,Sophon OCR可以完美满足需求。
Sophon OCR是星环科技人工智能产品Sophon旗下的一款企业级轻量化OCR平台。Sophon OCR基于自主研发的高性能算法,可以实现全行业、多场景的高效OCR识别,并确保极高的识别效率。它提供全文识别、自定义识别以及标准识别三种识别模式,满足不同场景的识别需要。
在金融领域,Sophon OCR可以对身份证、银行卡等金融相关卡证类进行精确识别、提取、录入,解决用户信息快速录入与认证;也能够对财险、医疗保险、车险等所需的多场景固定版式单据和信息进行自动识别,实现快速核保。
银行卡识别
保险单据识别
在财务领域,Sophon OCR支持扫描并自动识别各种票据,如发票、支票、银行票据等,提取票据上的文字、数字及出现频率较高的印章覆盖文本等信息匹配到凭证模板,并在系统中生成凭证;扫描的纸质票据在生成凭证时自动存储为凭证的电子附件,并上传至云端存储,实现财务附件的电子化管理。
单据识别1
单据识别2
在法务领域,Sophon OCR支持对企业内部法务合同的扫描件、司法行业卷宗管理系统的卷宗进行OCR识别、分类、在线校对与电子化存储。对固定版式的文本和表格混合的复杂卷宗,使用自定义识别提取版式模板,获取更为精确的识别结果,使用作业流审校功能保证识别结果的绝对准确,有效提升办公效率。
合同审核
卷宗管理
在其他领域Sophon OCR也能发挥作用,Sophon OCR可以对实时流媒体数据进行解析,准确识别出图像中车牌位置,输出车牌位置坐标、车牌类型、车牌号码、车牌号码置信度、车牌置信度等字段信息,处理为结构化数据后对接到业务系统。
车牌识别
另外,Sophon OCR可以辅助人工录入,规避如设备型号、序列码是较长的数字、字母序列,人工录入出错的风险,辅助完成资产信息化,高效管理企业资产。
资产入库