当前位置: 首页 > 新闻中心 > 快速图文理解卷积神经网络(cnn) | public library of bioinformatics

快速图文理解卷积神经网络(cnn) | public library of bioinformatics

发布时间:2024-03-30 0:52:51

  1. 卷积神经网络CNN在图像识别问题应用综述(20191219)
  2. 如何通过人工神经网络实现图像识别
  3. 请描述一下卷积神经网络是如何识别图像的

一、卷积神经网络CNN在图像识别问题应用综述(20191219)

   这两天在公司做pm实习,主要是自学一些cv的知识,以了解产品在解决一些在图像识别、图像搜索方面的问题,学习的主要方式是在知网检索了6.7篇国内近3年计算机视觉和物体识别的硕博士论文。由于时间关系,后面还会继续更新图片相似度计算(以图搜图)等方面的学习成果

   将这两天的学习成果在这里总结一下。你将会看到计算机视觉在解决特定物体识别问题(主要是卷积神经网络cnns)的基础过程和原理,但这里不会深入到技术的实现层面。

  计算机视觉(computer vision)是一门研究如何使机器“看”的科学,更进一步的说,就是指用摄影机和计算机代替人眼对目标进行识别、跟踪和测量等机器视觉,并进一步做图像处理,用计算机处理成为更适合人眼观察或传送给仪器检测的图像。

                                         ————维基百科

  通常而言,计算机视觉的研究包括三个层次:

(1)底层特征的研究:

  这一层次的研究主要聚焦如何高效提取出图像对象具有判别性能的特征,具体的研究内容通常包括:物体识别、字符识别等

(2)中层语义特征的研究:

   该层次的研究在于在识别出对象的基础上,对其位置、边缘等信息能够准确区分。现在比较热门的:图像分割;语义分割;场景标注等,都属于该领域的范畴

(3)高层语义理解:

  这一层次建立在前两层的基础上,其核心在于“理解”一词。 目标在于对复杂图像中的各个对象完成语义级别的理解。这一层次的研究常常应用于:场景识别、图像摘要生成及图像语义回答等。

  而我研究的问题主要隶属于底层特征和中层语义特征研究中的物体识别和场景标注问题。

人类的视觉工作模式是这样的:

   首先,我们大脑中的神经元接收到大量的信息微粒,但我们的大脑还并不能处理它们。

   于是接着神经元与神经元之间交互将大量的微粒信息整合成一条又一条的线。

   接着,无数条线又整合成一个个轮廓。

   最后多个轮廓累加终于聚合我们现在眼前看到的样子。

  计算机科学受到神经科学的启发,也采用了类似的工作方式。具体而言,图像识别问题一般都遵循下面几个流程

  (1)获取底层信息。获取充分且清洁的高质量数据往往是图像识别工作能否成功的关键所在

  (2)数据预处理工作,在图像识别领域主要包括四个方面的技术:去噪处理(提升信噪比)、图像增强和图像修复(主要针对不够清晰或有破损缺失的图像);归一化处理(一方面是为了减少开销、提高算法的性能,另一方面则是为了能成功使用深度学习等算法,这类算法必须使用归一化数据)。

  (3)特征提取,这一点是该领域的核心,也是本文的核心。图像识别的基础是能够提取出足够高质量,能体现图像独特性和区分度的特征。

  过去在10年代之前我们主要还是更多的使用传统的人工特征提取方法,如pca\lca等来提取一些人工设计的特征,主要的方法有(hog、lbp以及十分著名的sift算法)。但是这些方法普遍存在(a)一般基于图像的一些提层特征信息(如色彩、纹理等)难以表达复杂的图像高层语义,故泛化能力普遍比较弱。(b)这些方法一般都针对特定领域的特定应用设计,泛化能力和迁移的能力大多比较弱。

  另外一种思路是使用bp方法,但是毕竟bp方法是一个全连接的神经网络。这以为这我们非常容易发生过拟合问题(每个元素都要负责底层的所有参数),另外也不能根据样本对训练过程进行优化,实在是费时又费力。

  因此,一些研究者开始尝试把诸如神经网络、深度学习等方法运用到特征提取的过程中,以十几年前深度学习方法在业界最重要的比赛imagenet中第一次战胜了sift算法为分界线,由于其使用权重共享和特征降采样,充分利用了数据的特征。几乎每次比赛的冠军和主流都被深度学习算法及其各自改进型所占领。其中,目前使用较多又最为主流的是cnn算法,在第四部分主要也研究cnn方法的机理。

  上图是一个简易的神经网络,只有一层隐含层,而且是全连接的(如图,上一层的每个节点都要对下一层的每个节点负责。)具体神经元与神经元的作用过程可见下图。

  在诸多传统的神经网络中,bp算法可能是性能最好、应用最广泛的算法之一了。其核心思想是:导入训练样本、计算期望值和实际值之间的差值,不断地调整权重,使得误差减少的规定值的范围内。其具体过程如下图:

  一般来说,机器学习又分成浅层学习和深度学习。传统的机器学习算法,如svm、贝叶斯、神经网络等都属于浅层模型,其特点是只有一个隐含层。逻辑简单易懂、但是其存在理论上缺乏深度、训练时间较长、参数很大程度上依赖经验和运气等问题。

  如果是有多个隐含层的多层神经网络(一般定义为大于5层),那么我们将把这个模型称为深度学习,其往往也和分层训练配套使用。这也是目前ai最火的领域之一了。如果是浅层模型的问题在于对一个复杂函数的表示能力不够,特别是在复杂问题分类情况上容易出现分类不足的弊端,深度网络的优势则在于其多层的架构可以分层表示逻辑,这样就可以用简单的方法表示出复杂的问题,一个简单的例子是:

  如果我们想计算sin(cos(log(exp(x)))),

  那么深度学习则可分层表示为exp(x)—>log(x)—>cos(x)—>sin(x)

  图像识别问题是物体识别的一个子问题,其鲁棒性往往是解决该类问题一个非常重要的指标,该指标是指分类结果对于传入数据中的一些转化和扭曲具有保持不变的特性。这些转化和扭曲具体主要包括了:

(1)噪音(2)尺度变化(3)旋转(4)光线变化(5)位移

  该部分具体的内容,想要快速理解原理的话推荐看[知乎相关文章] ( https://www.zhihu.com/search?type=content&q=cnn ),

  特别是其中有些高赞回答中都有很多动图和动画,非常有助于理解。

  但核心而言,cnn的核心优势在于 共享权重 以及 感受野 ,减少了网络的参数,实现了更快的训练速度和同样预测结果下更少的训练样本,而且相对于人工方法,一般使用深度学习实现的cnn算法使用无监督学习,其也不需要手工提取特征。

cnn算法的过程给我的感觉,个人很像一个“擦玻璃”的过程。其技术主要包括了三个特性:局部感知、权重共享和池化。

  cnn中的神经元主要分成了两种:

(a)用于特征提取的s元,它们一起组成了卷积层,用于对于图片中的每一个特征首先局部感知。其又包含很关键的阈值参数(控制输出对输入的反映敏感度)和感受野参数(决定了从输入层中提取多大的空间进行输入,可以简单理解为擦玻璃的抹布有多大)

(b)抗形变的c元,它们一起组成了池化层,也被称为欠采样或下采样。主要用于特征降维,压缩数据和参数的数量,减小过拟合,同时提高模型的容错性。

(c*)激活函数,及卷积层输出的结果要经过一次激励函数才会映射到池化层中,主要的激活函数有sigmoid函数、tanh函数、relu、leaky relu、elu、maxout等。

  也许你会抱有疑问,cnn算法和传统的bp算法等究竟有什么区别呢。这就会引出区域感受野的概念。在前面我们提到,一个全连接中,较高一层的每个神经元要对低层的每一个神经元负责,从而导致了过拟合和维度灾难的问题。但是有了区域感受野和,每个神经元只需要记录一个小区域,而高层会把这些信息综合起来,从而解决了全连接的问题。

  了解区域感受野后,你也许会想,区域感受野的底层神经元具体是怎么聚合信息映射到上一层的神经元呢,这就要提到重要的卷积核的概念。这个过程非常像上面曾提到的“神经元与神经元的联系”一图,下面给大家一个很直观的理解。

  上面的这个过程就被称为一个卷积核。在实际应用中,单特征不足以被系统学习分类,因此我们往往会使用多个滤波器,每个滤波器对应1个卷积核,也对应了一个不同的特征。比如:我们现在有一个人脸识别应用,我们使用一个卷积核提取出眼睛的特征,然后使用另一个卷积核提取出鼻子的特征,再用一个卷积核提取出嘴巴的特征,最后高层把这些信息聚合起来,就形成了分辨一个人与另一个人不同的判断特征。

  现在我们已经有了区域感受野,也已经了解了卷积核的概念。但你会发现在实际应用中还是有问题:

  给一个100 100的参数空间,假设我们的感受野大小是10 10,那么一共有squar(1000-10+1)个,即10的六次方个感受野。每个感受野中就有100个参数特征,及时每个感受野只对应一个卷积核,那么空间内也会有10的八次方个次数,,更何况我们常常使用很多个卷积核。巨大的参数要求我们还需要进一步减少权重参数,这就引出了权重共享的概念。

   用一句话概括就是,对同一个特征图,每个感受野的卷积核是一样的,如这样操作后上例只需要100个参数。

  池化是cnn技术的最后一个特性,其基本思想是: 一块区域有用的图像特征,在另一块相似的区域中很可能仍然有用。即我们通过卷积得到了大量的边缘edge数据,但往往相邻的边缘具有相似的特性,就好像我们已经得到了一个强边缘,再拥有大量相似的次边缘特征其实是没有太大增量价值的,因为这样会使得系统里充斥大量冗余信息消耗计算资源。 具体而言,池化层把语义上相似的特征合并起来,通过池化操作减少卷积层输出的特征向量,减少了参数,缓解了过拟合问题。常见的池化操作主要包括3种:

分别是最大值池化(保留了图像的纹理特征)、均值池化(保留了图像的整体特征)和随机值池化。该技术的弊端是容易过快减小数据尺寸,目前趋势是用其他方法代替池化的作用,比如胶囊网络推荐采用动态路由来代替传统池化方法,原因是池化会带来一定程度上表征的位移不变性,传统观点认为这是一个优势,但是胶囊网络的作者hinton et al.认为图像中位置信息是应该保留的有价值信息,利用特别的聚类评分算法和动态路由的方式可以学习到更高级且灵活的表征,有望冲破目前卷积网络构架的瓶颈。

  cnn总体来说是一种结构,其包含了多种网络模型结构,数目繁多的的网络模型结构决定了数据拟合能力和泛化能力的差异。其中的复杂性对用户的技术能力有较高的要求。此外,cnn仍然没有很好的解决过拟合问题和计算速度较慢的问题。

   该部分的核心参考文献:

《深度学习在图像识别中的应用研究综述》郑远攀,李广阳,李晔.[j].计算机工程与应用,2019,55(12):20-36.

  深度学习技术在计算机图像识别方面的领域应用研究是目前以及可预见的未来的主流趋势,在这里首先对深度学习的基本概念作一简介,其次对深度学习常用的结构模型进行概述说明,主要简述了深度信念网络(dbn)、卷积神经网络(cnn)、循环神经网络(rnn)、生成式对抗网络(gan)、胶囊网络(capsnet)以及对各个深度模型的改进模型做一对比分析。

  深度学习按照学习架构可分为生成架构、判别架构及混合架构。

其生成架构模型主要包括:

  受限波尔兹曼机、自编码器、深层信念网络等。判别架构模型主要包括:深层前馈网络、卷积神经网络等。混合架构模型则是这两种架构的集合。深度学习按数据是否具有标签可分为非监督学习与监督学习。非监督学习方法主要包括:受限玻尔兹曼机、自动编码器、深层信念网络、深层玻尔兹曼机等。

  监督学习方法主要包括:深层感知器、深层前馈网络、卷积神经网络、深层堆叠网络、循环神经网络等。大量实验研究表明,监督学习与非监督学习之间无明确的界限,如:深度信念网络在训练过程中既用到监督学习方法又涉及非监督学习方法。

[1]周彬. 多视图视觉检测关键技术及其应用研究[d].浙江大学,2019.

[2]郑远攀,李广阳,李晔.深度学习在图像识别中的应用研究综述[j].计算机工程与应用,2019,55(12):20-36.

[3]逄淑超. 深度学习在计算机视觉领域的若干关键技术研究[d].吉林大学,2017.

[4]段萌. 基于卷积神经网络的图像识别方法研究[d].郑州大学,2017.

[5]李彦冬. 基于卷积神经网络的计算机视觉关键技术研究[d].电子科技大学,2017.

[6]李卫. 深度学习在图像识别中的研究及应用[d].武汉理工大学,2014.

[7]许可. 卷积神经网络在图像识别上的应用的研究[d].浙江大学,2012.

[8]csdn、知乎、机器之心、维基百科

二、如何通过人工神经网络实现图像识别

神经网络实现图像识别的过程很复杂。但是大概过程很容易理解。我也是节选一篇图像识别技术的文章,大概说一下。

图像识别技术主要是通过卷积神经网络来实现的。这种神经网络的优势在于,它利用了“同一图像中相邻像素的强关联性和强相似度”这一原理。具体而言就是,在一张图像中的两个相邻像素,比图像中两个分开的像素更具有关联性。但是,在一个常规的神经网络中,每个像素都被连接到了单独的神经元。这样一来,计算负担自然加重了。卷积神经网络通过削减许多不必要的连接来解决图像识别技术中的这一问题。运用图像识别技术中的术语来说就是,卷积神经网络按照关联程度筛选不必要的连接,进而使图像识别过程在计算上更具有可操作性。卷积神经网络有意地限制了图像识别时候的连接,让一个神经元只接受来自之前图层的小分段的输入(假设是3×3或5×5像素),避免了过重的计算负担。因此,每一个神经元只需要负责处理图像的一小部分。大大加快了速度和准确率。

卷积神经网络在实施的过程中,实际上是分为两层,一个是卷积层,一个是汇聚层,简单理解就是

卷积层将图片分散成一个一个或者3*3/5*5的小像素块,然后把这些输出值排列在图组中,用数字表示照片中各个区域的内容,数轴分别代表高度、宽度和颜色。那么,我们就得到了每一个图块的三维数值表达。汇聚层是将这个三维(或是四维)图组的空间维度与采样函数结合起来,输出一个仅包含了图像中相对重要的部分的联合数组。这一联合数组不仅能使卷积神经网络计算负担最小化,还能有效避免过度拟合的问题。

以上大概就是使用卷积神经网络进行图像识别的过程。具体可以关注atyun人工智能平台的文章:揭秘图像识别技术,机器如何利用卷积神经网络“看见”这个世界

三、请描述一下卷积神经网络是如何识别图像的

利用同一图像中相邻像素的强关联性和强相似度来识别的

神经网络实现图像识别的过程很复杂。但是大概过程很容易理解。我也是节选一篇图像识别技术的文章,大概说一下。

图像识别技术主要是通过卷积神经网络来实现的。这种神经网络的优势在于,它利用了“同一图像中相邻像素的强关联性和强相似度”这一原理。具体而言就是,在一张图像中的两个相邻像素,比图像中两个分开的像素更具有关联性。但是,在一个常规的神经网络中,每个像素都被连接到了单独的神经元。这样一来,计算负担自然加重了。卷积神经网络通过削减许多不必要的连接来解决图像识别技术中的这一问题。运用图像识别技术中的术语来说就是,卷积神经网络按照关联程度筛选不必要的连接,进而使图像识别过程在计算上更具有可操作性。卷积神经网络有意地限制了图像识别时候的连接,让一个神经元只接受来自之前图层的小分段的输入(假设是3×3或5×5像素),避免了过重的计算负担。因此,每一个神经元只需要负责处理图像的一小部分。大大加快了速度和准确率。

卷积神经网络在实施的过程中,实际上是分为两层,一个是卷积层,一个是汇聚层,简单理解就是

卷积层将图片分散成一个一个或者3*3/5*5的小像素块,然后把这些输出值排列在图组中,用数字表示照片中各个区域的内容,数轴分别代表高度、宽度和颜色。那么,我们就得到了每一个图块的三维数值表达。汇聚层是将这个三维(或是四维)图组的空间维度与采样函数结合起来,输出一个仅包含了图像中相对重要的部分的联合数组。这一联合数组不仅能使卷积神经网络计算负担最小化,还能有效避免过度拟合的问题。