2021-03-26

**

CNN一些算法与应用

**

尽可能地总结了些东西,文章最后放了参考的博客。可能没有放全,如若哪位读者发现,没有放全,请私聊我,我加上,尊重他人的劳动成果。

众所周知,CNN在影像识别方便特别强大,许多影像识别的模型都是以CNN的框架为基础去做延伸。CNN可以应用在场景分类、图像分类、目标检测、NLP等领域。
选用不同的卷积层滤波器进行卷积操作,可得到不同效果的图像,提取到图像的不同特征,比如,可以做到:边缘检测、锐化以及模糊操作。使用多的滤波器,可提取多的图像特征,进行不同的特征映射。最后,结合所有的特征图作为卷积层的最终输出。
距今为止,CNN在深度学习领域取得了巨大的成功。我的观点:这些成功,一是来自于更强大的硬件、更多的数据集、更大的模型;二是由新的想法和算法以及优化的网络结构共同带来的结果(Google)。

经典的CNN网络架构:
1.LeNet 1998 年 论文:Gradient-based learning applied to document recognition
2.AlexNet 2012 年 论文:ImageNet Classification with Deep Convolutional Neural Networks
3.VGG 2014.09 论文:Very Deep Convolutional Networks for Large-Scale Image Recognition
4.Inception Net V1 2014.09 论文:Going Deeper with Convolutions
5.Inception Net V2 2015.02 论文:Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift
6.Inception Net V3 2015.12 论文:Rethinking the Inception Architecture for Computer Vision
7.Inception Net V4 2016.02 论文:Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning
8.ResNet 2015.12 论文:Deep Residual Learning for Image Recognition
9.DenseNet 2016.08 论文:Densely Connected Convolutional Networks
10.MobileNet V1 2017.04 论文:MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications 11.MobileNet V2 2018.01 论文:MobileNetV2: Inverted Residuals and Linear Bottlenecks
12.MobileNet V3 2019.05 论文:Searching for MobileNetV3
13.ShuffleNet v1 2017.07 论文:ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices
14.ShuffleNet v2 2018.07 论文:ShuffleNet V2: Practical Guidelines for Efficient CNN Architecture Design

LeNet-5:
该网络用到的结构至今仍非常常用,即先使用一层或几层卷积层,再使用一层池化层;然后在使用一层或几层卷积层,再使用一层池化层;最后再使用几层全连接层,最后输出结果,这种架构已经成为标准的模板“叠加卷积层和池化层”。
在这里插入图片描述

(1)输入层
3232的图片,也就是相当于1024个神经元。
(2)C1层(卷积层)
选择6个5
5的卷积核,得到6个大小为332-5+1=28的特征图,神经元个数为62828=4704。
(3)S2层(下采样层)
每个下抽样节点的4个输入节点求和后取平均(平均池化),均值 乘上一个权重参数加上一个偏置参数作为激活函数的输入,激活函 数的输出即是下一层节点的值。池化核大小选择22,得到6个 1414大小特征图。
(4)C3层(卷积层)
用55的卷积核对S2层输出的特征图进行卷积后,得到6张1010新 图片,然后将这6张图片相加在一起,然后加一个偏置项b,然后用 激活函数进行映射,就可以得到1张1010的特征图。我们希望得到 16 张 1010 的 特 征 图 , 因 此 我 们 就 需 要 参 数 个 数 为 16*(6*(55))=166*(55)个参数。
(5)S4层(下采样层)
对C3的16张10
10特征图进行最大池化,池化核大小为22,得到16 张大小为55的特征图。神经元个数已经减少为:1655=400。
(6)C5层(卷积层)
用5*5的卷积核进行卷积,然后我们希望得到120个特征图,特征图 大小为5-5+1=1。神经元个数为120。
(7)F6层(全连接层)
有84个节点,该层的训练参数和连接数都是(120 + 1)x84=10164。
(8)Output层
共有10个节点,分别代表数字0到9,如果节点i的输出值为0,则网络识别的结果是数字1。采用的是径向基函数(RBF)的网络连接方式:

计算机视觉:
通俗的认为吧,计算机视觉的主要任务是图像识别与处理这一块。对应的主要任务有图像分类、定位、检测、分割。也就是给出一个图,分别解决了图上的东西,是什么?在哪里?标出来?也就对应了当今利用CNN进行图像处理的几个火热的方向,就是ppt上写的这几个。由分类到回归,任务逐步细化。
在这里插入图片描述

这副图片,也更能向大家展示CNN在图像处理方向的各个任务的呈现结果。
近几年来,目标检测算法取得了很大的突破。比较流行的算法可以分为两类,一类是基于Region Proposal的R-CNN系算法(R-CNN,Fast R-CNN, Faster R-CNN等),它们是two-stage的,需要先算法产生目标候选框,也就是目标位置,然后再对候选框做分类与回归;而另一类是Yolo,SSD这类one-stage算法,其仅仅使用一个卷积神经网络CNN直接预测不同目标的类别与位置。第一类方法是准确度高一些,但是速度慢,但是第二类算法是速度快,但是准确性要低一些。算法的更新,也离不开以下几步:
(1)提取候选区域
(2)提取特征向量
(3)SVM等方法分类
(4)边框修正

**R-CNN:**Region-CNN,主要用于目标检测。
其实现过程分为:
(1)区域划分:采用Selective Serarch算法在给定图片中提取2000个类别独立的候选区域;
(2)特征提取:对于每个区域用CNN的AlexNet架构抽取一个固定长度的特征向量;
(3)目标分类:在对每个区域利用SVM进行目标分类;
(4)边框回归:Bbox回归进行边框坐标偏移优化和调整。RCNN所提取的特征拿给SVM进行训练。

Selective Search算法
核心思想:图像中物体可能存在的区域应该有某些相似性或者连续性的,选择搜索基于上面这一想法采用子区域合并的方法提取 bounding boxes候选边界框
首先,通过图像分割算法将输入图像分割成许多小的子区域
其次,根据这些子区域之间的相似性(主要考虑颜色、纹理、尺寸和 空间交叠4个相似) 进行区域迭代合并。每次迭代过程中对这些合并 的子区域做bounding boxes(外切矩形),这些子区域的外切矩形就是 通常所说的候选框

Bbox回归:
核心思想:找到一个函数,通过平移和缩放方法对物体边框进行调整和修正。结合标定和预测的去寻找一个最好的Proposal。但是每一个Proposal都是的离去的提取CNN特征,分布训练。

Fast-RCNN:
采用了联合学习,把SVM、Bbox回归和CNN阶段一起训练,最后一层的Softmax换成两个:一个是对区域的分类Softmax, 另一个是对Bounding box的微调。训练时所有的特征不再存到硬盘 上,提升了速度。

Faster R-CNN-RPN(Region Proposal Network):
使用全卷积神经网络来生成区域建 议(Region proposal),替代之前的Selective search

滑窗+CNN
滑动窗口(Sliding Windows,简称滑窗)法是进行目标检测的主流方法。对于某输入图像,由于其对象尺度形状等因素的不确定性,导致直接套用预训练好的模型进行识别效率低下。通过设计滑窗来遍历图像,将每个窗口对应的局部图像进行检测,能有效克服尺度、位置、形变等带来的输入异构问题,提升检测效果。下图展示了某种大小的滑窗在待检测图像上滑动的过程:
下图展示了采用滑窗(size=8×8, stride=2)对图片(10×10)进行对象检测的全过程示意。图示的输出为2×2的网格,每个格子对应一个输出标签向量,给出了原图对应的窗口区域图像的检测结果(置信度、边框位置、各类别概率等)
在这里插入图片描述

要实现对象检测,需要有相应的目标识别模型(如上图中的Classifier),卷积神经网络(CNN)是其中的主流模型之一。但是,按照上图所示,采用CNN对每个窗口图像进行检测,会产生大量的重复计算(如卷积操作),为了提高检测效率,通过合理设计CNN模型,可以仅需一次前向传播而得出整个图像的滑窗检测结果。下图展示了相关的模型设计实现过程:
在这里插入图片描述

上图的三步描述了采用14×14大小的窗口进行滑动卷积时的CNN设计实现过程。采用(2)所设计的CNN对(3)中的输入图像进行检测,可以一次性得出最终的结果网格,其相应位置的网格映射了滑动窗口在原图像上的相应区域(如图中输出2×2网格左上角向量即为第一个窗口的CNN检测结果,图中的阴影标注了该窗口信息在CNN中的流动)。

YOLO系列
YOLO系列的CNN算法主要应用于目标检测与识别。是一种端到端(end-to-end)的对象检测方法。虽然是端到端模型,其实也可以粗略地分解为回归预测与边框筛选两部分。首先,采用回归模型(如滑窗+CNN)一次得出全图像的边框标注,同时将图像进行网格化分,每个格子负责中心点落于其上的对象的边框(boxes);然后,采用非最大抑制基于每个格子得出经过筛选之后的边框输出。该过程示意如下:
在这里插入图片描述

上图中,标注预测(Boxes Prediction)环节负责得出大量候选边框,该部分可采用的模型多种多样(如上文介绍的滑窗CNN);边框筛选(Boxes Filtering)过程则采用非最大抑制来实现。这里先给出YOLO边框筛选的两个重要基础概念:交并比(IoU)与非最大抑制(NMS)。
YOLO的边框筛选过程可举例描述为:如经过滑窗CNN检测后,每个输出网格(cell)负责检测出中心点落在其中的多个边框(boxes),然后采用非最大抑制对这些边框中属于同一类的进行筛选,从而得出最终的输出结果。
步骤:
(1)我们把要找的目标先用SVM或者CNN训练一个分类器,输入一个固定大小图片,输出类别概率。
(2)用很多不同大小的窗口进行移动,把图片分成很多个小窗口,然后把每个窗口喂给分类器,如果给出较高的分类分数,那就说明这个窗口有物体,那就留着,这样处理完所有窗口。
(3)处理完的窗口当然会有很多重叠的啦,我们当然希望处理一些比较像我们标注的窗口啦,然后我们就使用 非极大抑制,留下合适的框,丢弃其他的框。
(4)得到各种窗口和对应的类别,此时可以拿标注的数据框来进行回归,让窗口更加精确点,当然不回归也可以,可能不是很精确啦。

**交并比:**交并比用来描述两个边框(bounding **boxes)的重合程度。
非最大抑制比:**非最大抑制的基本思想是,对于表示同一个对象的多个边框,仅保留其中置信度最大的框,而将其他筛除。

车辆检测:
首先创建一个标签训练集,标注好正负样本,然后开始训练卷积网络了,输入这些适当剪切过的图片,卷积网络输出y,0或1表示图片中有汽车或没有汽车。训练完这个卷积网络,就可以用它来实现滑动窗口目标检测,
假设这是一张测试图片,首先选定一个特定大小的窗口,比如图片下方这个窗口,将这个红色小方块输入卷积神经网络,卷积网络开始进行预测,即判断红色方框内有没有汽车。
滑动窗口目标检测算法接下来会继续处理第二个图像,即红色方框稍向右滑动之后的区域,并输入给卷积网络,因此输入给卷积网络的只有红色方框内的区域,再次运行卷积网络,然后处理第三个图像,依次重复操作,直到这个窗口滑过图像的每一个角落。
为了滑动得更快,我这里选用的步幅比较大,
缺点:步幅小,计算成本高;步幅大,粗糙的间隔尺寸影响性能。

手写数字识别+数字增强:
CNN可以快速有效提取二维图像的特征。
手写数字识别,即是把图像的特征与标准标本的特征进行模式匹配。其关键是特征的选择提取与分类器的设计。
Lenet-5,这个网络主要进行手写体数字识别和英文字母识别的任务,输入一张大小为32X32的灰度图,最终输出对图中数字的预测,其中池化层用的是均值化,而目前最常用的最大池化。另外,现在输出,通常使用softmax函数,而当时使用的是另外一种函数。在输出层,采用的是径向基函数的连接方式。
手写数字具备一定的模糊性,可以采用数据增强,提高模型性能可靠性。通过创建训练图像的轻微变化,可以为模型创建正则化。我们将使用Scipy的ndimage模块将图像向右、向左、向上和向下移动1个像素。这不仅提供了更多种类的例子,而且还会大大增加我们训练集的大小。还可以使用cv2库创建图像的水平翻转。我们还需要为这些翻转图像创建新标签,这与复制原始标签一样简单。

车牌识别:
LPR技术是计算机视觉与模式识别技术在交通领域应用的重要研究课题之一,是实现交通管理能够智能化的重要环节,其任务是分析、处理汽车图像,自动识别汽车牌号。
LPR系统中的两个关键子系统是车牌定位系统和车牌字符识别系统。
整个处理过程分为预处理、边缘提取、车牌定位、车牌矫正,字符分割、字符识别六大模块,

语音识别:
通常情况下,语音识别都是基于时频分析后的语音谱完成的,而其中语音时频谱是具有结构特点的。大家可以将CNN理解成一个类似下采样的一个过程,它可以忽略掉一些特别的特征值,只提取比较重要的特征值。我们说话的时候,不可避免的会带有各种各样的口音,这些口音的话,我们要尽量忽略他的不同。CNN则可以提供在时间和空间上的平移不变性。将CNN应用到语音识别的声学建模中,可以克服语言本身的多样性,将频谱当作一张图像来处理。同时,Tensorflow,caffe等提供CNN的并行化加速。

在CLDNN中有两层CNN的应用,算是浅层CNN应用的代表。CNN 和 LSTM 在语音识别任务中可以获得比DNN更好的性能提升,对建模能力来说,CNN擅长减小频域变化,LSTM可以提供长时记忆,所以在时域上有着广泛应用,而DNN适合将特征映射到独立空间。而在CLDNN中,将CNN,LSTM和DNN串起来融合到一个网络中,获得比单独网络更好的性能。
CLDNN网络的通用结构是输入层是时域相关的特征,连接几层CNN来减小频域变化,CNN的输出灌入几层LSTM来减小时域变化,LSTM最后一层的输出输入到全连接DNN层,目的是将特征空间映射到更容易分类的输出层。之前也有将CNN LSTM和DNN融合在一起的尝试,不过一般是三个网络分别训练,最后再通过融合层融合在一起,而CLDNN是将三个网络同时训练。实验证明,如果LSTM输入更好的特征其性能将得到提高,用CNN来减小频域上的变化使LSTM输入自适应性更强的特征,加入DNN增加隐层和输出层之间的深度获得更强的预测能力。
在这里插入图片描述

IBM DeepCNN的框架更是经典。非常深的卷积神经网络的灵感来自2014ImageNet参赛的VGG网络,中心思想是使用较小的33卷积核来取代较大的卷积核,通过在池化层之前叠加多层卷积网络,采取ReLU激活函数,可以获得相同的感知区域,同时具备参数数目较少和更多非线性的优点。
如上图所示,左1为最经典的卷积神经网络,只使用了两个卷积层,并且之间包含一个池化层,卷积层的卷积核也较大,99和43,而卷积的特征面也较多,512张卷积特征面。
左2、左3、左4均为深度卷积神经网络的结构,可以注意到与经典的卷积神经网络所不同的是,卷积的特征面由64个增加到128个再增加到256个,而且池化层是放在卷积的特征面数增加之前的;卷积核均使用的是较小的33卷积核,池化层的池化大小由21增加到2
2。
最右边10-conv的参数数目与最左边的经典卷积神经网络参数数目相同,但是收敛速度却足足快了5倍,尽管计算复杂度提高了一些。
在这里插入图片描述

NLP:

将文本表示成二维矩阵,使用长度不同的filter 对文本矩阵进行卷积,filter的宽度等于词向量的长度,然后使用max-pooling 对每一filter提取的向量进行操作,最后每一个filter对应一个数字,把这些filter拼接起来,就得到了一个表征该句子的向量。最后的预测都是基于该句子的。

AlphaGo
AlphaGo的胜利,其实是卷积神经网络与蒙特卡洛搜索树(MCTS)结合的胜利
围棋的 CNN 模型和图像分类模型本质上是一样的,输入是19x19分辨率的棋局“图像”,输出是361维概率分布向量。其中,概率最大的那个位置就是最佳落子位置。
围棋问题抽象成纯粹的数学问题,是AlphaGo的核心问题。AlphaGo很聪明,把该问题抽象成了CNN网络模型,这是令人拍案叫绝的地方。
我们可以这样设想,围棋的所有可能的局面和落子方法如果全部展开,是一个无比庞大的决策树。每个节点对应一个棋局,每个棋局都有一个最佳落子推荐位置。这样围棋问题就搞定了。由于这棵决策树过于庞大,我们可以构造其一部分,用这一部分做训练样本,然后其余的部分,通过训练卷积神经网络模型来进行预测计算。
MCTS开始构造搜索树之前,首先假定任何棋局在任何位置落子,取胜的机会都是相同的。也就是说,当出现一个新的棋局时,MCTS会为该棋局构造一个初始的19x19阶落子决策权重矩阵,每个落子位置的权重被初始化成相同的值。
从空白棋局开始,随机落子,直至对弈结束。把对弈过程中出现的棋局放入决策树,各个棋局根据最终胜负调整其决策矩阵权重。接下来下第二盘时,我们就有了一个稍微有一点点经验的的落子参考权重指导。如此下去,对弈10万盘,我们将构造出一个有一定”智力“的决策树。

CSDN:
https://www.jianshu.com/p/8bba86b03691
https://blog.csdn.net/weixin_30443813/article/details/96263558
https://blog.csdn.net/u014380165/article/details/75142664
https://www.cnblogs.com/skyfsm/p/6806246.html
https://blog.csdn.net/Katherine_hsr/article/details/80119120
https://blog.csdn.net/wangwei19871103/article/details/97514825
https://blog.csdn.net/Snoopy_Yuan/article/details/80021504

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秃头工科女

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值