深度学习 --- CNN的变体在图像分类、图像检测、目标跟踪、语义分割和实例分割的简介(附论文链接)

版权声明:转载请注明出处: https://blog.csdn.net/weixin_42398658/article/details/84846935

以上就是卷积神经网络的最基础的知识了,下面我们一起来看看CNN都是用在何处并且如何使用,以及使用原理,本人还没深入研究他们,等把基础知识总结完以后开始深入研究这几个方面,然后整理在写成博客,最近的安排是后面把自然语言处理总结一下,强化学习的总结就先往后推一下。再往后是系统的学习一下算法和数据结构,因为这些是基础,必须把这些的基础打扎实了。因为本人还在学校所以还有时间系统的梳理这方面的知识,然后在好好研究这些前言的应用技术。这里需要说明的一下是,本篇的博客主要参考外国的一篇博客的介绍,这里简单的介绍一下,一方面为大家提供实战时的方向,另一方面也为自己实战时提供有力的理论依据(论文),原始博客在末尾注明。好,废话不多说,下面开始:

计算机视觉是目前深度学习领域最热门的研究领域之一。它位于许多学术科目的交汇点,如计算机科学(图形学,算法,理论,系统,建筑),数学(信息检索,机器学习),工程学(机器人学,语音,NLP,图像处理),物理学(光学) ),生物学(神经科学)和心理学(认知科学)。由于计算机视觉代表了对视觉环境及其背景的相对理解,许多科学家认为,由于其跨域掌握,该领域为人工智能铺平了道路。

那么什么是计算机视觉?以下是一些正式的教科书定义:

  • “从图像中构建明确,有意义的物理对象描述”(Ballard&Brown,1982)
  • “从一个或多个数字图像计算3D世界的属性”(Trucco&Verri,1998)
  • “根据感知的图像做出有关真实物体和场景的有用决策”(Sockman&Shapiro,2001)

为何学习计算机视觉?最明显的答案是,从这一研究领域衍生出的快速增长的有用应用程序集合。以下是其中的一小部分:

  • 面部识别:Snapchat和Facebook使用面部检测算法来应用滤镜并在图片中识别您。
  • 图像检索:Google图像使用基于内容的查询来搜索相关图像。算法分析查询图像中的内容,并根据最匹配的内容返回结果。
  • 游戏和控制:使用立体视觉的游戏中的一个很好的商业产品是Microsoft Kinect。
  • 监视:监控摄像机在公共场所无处不在,用于检测可疑行为。
  • 生物识别:指纹,虹膜和面部匹配仍然是生物识别中的一些常用方法。
  • 智能汽车:Vision仍然是检测交通标志和灯光以及其他视觉特征的主要信息来源。

下面开始介绍五中计算机视觉的任务即图像分类、对象检测、目标跟踪、语义分割和实例分割:

1 - 图像分类

图像分类的问题是这样的: 给定一组都标记为单个类别的图像, 我们被要求为一组新的测试图像预测这些类别, 并测量预测的准确性。与此任务相关的挑战有很多, 包括视点变化、比例变化、类内变化、图像变形、图像遮挡、照明条件和背景杂波。

我们如何编写一种算法, 可以将图像分类为不同的类别?计算机视觉研究人员已经提出了一种数据驱动的方法来解决这个问题。它们没有试图直接在代码中指定每个图像类别的外观, 而是为计算机提供了每个图像类的许多示例, 然后开发了学习算法, 查看这些示例并了解视觉对象每个类的外观。换句话说, 他们首先积累标记图像的训练数据集, 然后将其输入计算机处理数据。

鉴于这一事实, 完整的图像分类管道可以形式化如下:

  • 我们的输入是一个训练数据集, 由n个图像组成, 每个图像都用 k 不同的之一标记。
  • 然后, 我们使用此训练集训练一个分类器, 以了解每个类的外观。
  • 最后, 我们通过要求分类器预测一组以前从未见过的新图像的标签来评估分类器的质量。然后, 我们将这些图像的真实标签与分类器预测的标签进行比较。

最流行的图像分类体系结构是卷积神经网络 (cnn).cnn 的一个典型用例是您提供网络映像, 网络对数据进行分类。cnn 倾向于从输入 "扫描仪" 开始, 该扫描仪并不打算同时解析所有的训练数据。例如, 要输入 100 x 100 像素的图像, 您不希望有一个包含 10, 000个节点的图层。相反, 您创建一个扫描输入图层, 例如 10 x 10, 您将图像的前 10 x 10 像素提供。通过该输入后, 您可以通过向右移动扫描仪一个像素来将其输入接下来的 10 x 10 像素。这种技术被称为滑动窗口。(这是我们前面讲CNN时的卷积核)

然后通过卷积层而不是正常层馈送该输入数据。每个节点仅关注相邻的相邻小区。这些卷积层也随着它们变得更深而趋于收缩,主要是通过输入的易分解因素。除了这些卷积层,它们通常还具有池化层。池化是一种过滤细节的方法:常见的池化技术是最大池化,我们采用2 x 2像素,并传递具有最大量特定属性的像素。

第一届 ImageNet 竞赛的获奖者是 Alex Krizhevsky(NIPS 2012) ,他在 Yann LeCun 开创的神经网络类型基础上,设计了一个深度卷积神经网络。该网络架构除了一些最大池化层外,还包含 7 个隐藏层,前几层是卷积层,最后两层是全连接层。在每个隐藏层内,激活函数为线性的,要比逻辑单元的训练速度更快、性能更好。除此之外,当附近的单元有更强的活动时,它还使用竞争性标准化来压制隐藏活动,这有助于强度的变化。



 

在硬件要求方面,Alex在2个Nvidia GTX 580 GPU(超过1000个快速小内核)上使用了非常有效的卷积网络实现。GPU非常适合矩阵矩阵乘法,并且具有非常高的存储器带宽。这使他能够在一周内训练网络,并在测试时快速的从10个块中组合出结果。如果我们能够足够快地传达状态,我们可以在多个核心上传播网络。随着核心变得越来越便宜而数据集越来越大,大型神经网络的改进速度将超过老式的计算机视觉系统。自AlexNet以来,已有多种新型号使用CNN作为其骨干架构,并在ImageNet中取得了出色的成果:ZFNet(2013),GoogLeNet(2014),VGGNet(2014),ResNet(2015),DenseNet(2016)等

2 - 物体检测

在处理图像中的对象这一任务,通常会涉及到为各个对象输出边界框和标签。这不同于分类/定位任务——对很多对象进行分类和定位,而不仅仅是对个主体对象进行分类和定位。在对象检测中,你只有 2 个对象分类类别,即对象边界框和非对象边界框。例如,在汽车检测中,你必须使用边界框检测所给定图像中的所有汽车。

如果使用图像分类和定位图像这样的滑动窗口技术,我们则需要将卷积神经网络应用于图像上的很多不同物体上。由于卷积神经网络会将图像中的每个物体识别为对象或背景,因此我们需要在大量的位置和规模上使用卷积神经网络,但是这需要很大的计算量!

为了应对这种情况,神经网络的研究人员已经提出使用区域(region代替,在那里我们找到可能包含对象的“blobby”图像区域。运行起来相对较快。第一个引人注目的模型是R-CNN(基于区域的卷积神经网络)。在R-CNN中,我们首先使用称为选择性搜索的算法扫描输入图像以寻找可能的对象,生成约2,000个区域提议。然后我们在每个区域提案的基础上运行CNN。最后,我们获取每个CNN的输出并将其输入SVM以对区域进行分类,并使用线性回归来收紧对象的边界框。

基本上,我们将对象检测转变为图像分类问题。但是,存在一些问题 - 训练缓慢,需要大量磁盘空间,推理也很慢。

R-CNN的直接后代是Fast R-CNN,它通过2次增强提高了检测速度:

1)在提出区域之前执行特征提取,因此仅在整个图像上运行一个CNN

2)用softmax层替换SVM ,从而扩展神经网络的预测,而不是创建一个新的模型。

Fast R-CNN在速度方面表现得更好,因为它只为整个图像训练一个CNN。但是,选择性搜索算法仍然需要花费大量时间来生成区域提议。

因此,发现了Faster R-CNN,其现在是用于基于深度学习的对象检测的规范模型。它通过插入区域提议网络(RPN)来预测来自特征的提议,从而用快速神经网络取代慢选择性搜索算法。RPN用于决定“在哪里”以减少整个推理过程的计算要求。RPN快速有效地扫描每个位置,以评估是否需要在给定区域中进行进一步处理。它通过输出k个边界框提议来做到这一点,每个提议具有2个值---代表每个位置包含目标对象和不包含目标对象的概率。

一旦我们获得了我们的区域提案,我们就会直接将它们提供给基本上是Fast R-CNN的内容。我们添加了一个池化层,一些完全连接的层,最后是一个softmax分类层和边界框回归器。

总而言之,Faster R-CNN实现了更快的速度和更高的精度。值得注意的是,尽管未来的模型在提高检测速度方面做了很多工作,但很少有模型能够以更高的优势超越更快的R-CNN。换句话说,更快的R-CNN可能不是最简单或最快的对象检测方法,但它仍然是表现最好的方法之一。

近年来的主要物体检测趋势已转向更快,更有效的检测系统。这在诸如You Only Look Once(YOLO),Single Shot MultiBox Detector(SSD)和基于区域的完全卷积网络(R-FCN)等方法,这三种算法转向在整个图像上共享计算。因此,这三种算法和上述的3种造价较高的R-CNN 技术有所不同。这些趋势背后的主要原因是避免让单独的算法孤立地关注各自的子问题,因为这通常会增加训练时间并降低网络准确性。

3-对象跟踪

对象跟踪是指在给定场景中跟踪特定感兴趣对象或多个对象的过程。传统上,它在视频和现实世界的交互中具有应用,其中在初始对象检测之后进行观察。现在,它对自动驾驶系统至关重要,例如优步和特斯拉等公司的自动驾驶车辆。

物体跟踪方法可以根据观察模型分为两类:生成方法和判别方法。生成方法使用生成模型来描述表观特征并最小化重建误差以搜索对象,例如PCA。判别方法可用于区分对象和背景,其性能更加稳健,逐渐成为跟踪的主要方法。判别方法也称为检测跟踪(Tracking-by-Detection),深度学习属于这一类。为了通过检测实现跟踪,我们检测所有帧的候选对象,并使用深度学习从候选者中识别所需对象。可以使用两种基本网络模型:堆叠式自动编码器(SAE)卷积神经网络(CNN)。

使用SAE跟踪任务的最流行的深度网络是深度学习跟踪器Deep Learning Tracker它提出了离线预训练和在线微调网络。这个过程是这样的:

  • 离线无监督预训练使用大规模自然图像数据集的堆叠去噪自动编码器以获得一般对象表示。通过在输入图像中添加噪声并重建原始图像,堆叠去噪自动编码器可以获得更强大的特征表达能力。
  • 将预训练网络的编码部分与分类器组合以获得分类网络,然后使用从初始帧获得的正样本和负样本来微调网络,这可以区分当前对象和背景。DLT(Deep Learning Tracker)使用粒子滤波器作为运动模型来产生当前帧的候选补丁。分类网络输出这些补丁的概率分数,表示其分类的置信度,然后选择这些补丁中最高的补丁作为对象。
  • 在模型更新中,DLT使用限制阈值的方式。

由于其在图像分类和物体检测方面的优越性,CNN已成为计算机视觉和视觉跟踪的主流深度模型。一般而言,大规模CNN既可以作为分类器也可以作为跟踪器进行训练。2个代表性的基于CNN的跟踪算法是完全卷积网络跟踪器(FCNT)多域CNN (MD Net)。

FCNT成功分析并利用VGG模型的特征图,这是一个经过预先训练的ImageNet,并产生以下观察结果:

  • CNN特征图可用于定位和跟踪。
  • 许多CNN特征图对于区分特定对象与其背景的任务是嘈杂的或不相关的。
  • 较高层捕获对象类别的语义概念,而较低层编码更多的判别特征以捕获类内变异。

由于这些观察,FCNT设计了特征选择网络,以在VGG网络的conv4-3和conv5-3层上选择最相关的特征映射。然后,为了避免在噪声上过度拟合,它还分别为两个层的选定特征图设计了额外的两个通道(称为SNet和GNet)。在主干网络捕获对象的类别信息,而SNET将对象与具有类似外观的背景区分开。使用第一帧中的给定边界框初始化两个网络以获得对象的热图,并且对于新帧,以最后一帧中的对象位置为中心的感兴趣区域(ROI)被裁剪和传播。最后,通过SNet和GNet,分类器获得两个用于预测的热图,并且跟踪器根据是否存在干扰物来决定将使用哪个热图来生成最终跟踪结果。FCNT的管道如下所示。

与FCNT的想法不同,MD Net使用视频的所有序列来跟踪其中的移动。上述网络使用不相关的图像数据来减少跟踪数据的训练需求,这种想法与跟踪有一些偏差。此视频中一个类的对象可以是另一个视频中的背景,因此MD Net提出了多域的概念,以独立区分每个域中的对象和背景。域表示包含相同类型对象的一组视频。

如下所示,MD Net分为两部分:共享层和特定于域的层的K分支。每个分支包含一个具有softmax损失的二进制分类层,用于区分每个域中的对象和背景,共享层与所有域共享以确保一般表示。

 近年来, 深度学习研究人员尝试了不同的方法来适应视觉跟踪任务的特点。探索的方向有很多: 应用复发神经网络、深信念网等其他网络模型, 设计适应视频处理和端到端学习的网络结构, 优化过程、结构, 参数, 甚至将深度学习与传统的计算机视觉方法或语言处理和语音识别等其他领域的方法结合起来。

4 - 语义分段

计算机视觉的核心是分割过程,它将整个图像按像素分组,然后可以对其进行标记和分类。特别是,语义分割试图在语义上理解图像中每个像素的作用(例如,它是汽车,摩托车还是其他类型的类?)。例如,在上图中,除了识别人,道路,汽车,树木等之外,我们还必须描绘每个物体的边界。因此,与分类不同,我们需要从模型中进行密集的逐像素预测。

与其他计算机视觉任务一样,CNN在分割问题上取得了巨大成功。其中一种流行的初始方法是通过滑动窗口进行块分类,其中每个像素使用其周围的图像分别分类。然而,这在计算上是非常低效的,因为我们不重用重叠块之间的共享特征。

相反,该解决方案是加州大学伯克利分校的全卷积网络 (FCN),它推广了端到端的CNN架构,用于密集预测而无需任何完全连接的层。这允许为任何大小的图像生成分割图,并且与块分类方法相比也快得多。几乎所有后续的语义分割方法都采用了这种范式。

但是,这也仍然存在一个问题:在原始图像分辨率上进行卷积运算非常昂贵。为了解决这个问题, FCN 在网络内部使用了下采样和上采样:下采样层被称为条纹卷积( striped convolution );而上采样层被称为反卷积( transposed convolution )。

尽管采用了上采样和下采样层,但由于池化期间的信息丢失, FCN 会生成比较粗糙的分割映射。 SegNet 是一种比 FCN (使用最大池化和编码解码框架)更高效的内存架构。在 SegNet 解码技术中,从更高分辨率的特征映射中引入了 shortcut/skip connections ,以改善上采样和下采样后的粗糙分割映射。

最近的语义分割研究在很大程度上依赖于完全卷积网络,例如扩张卷积DeepLabRefineNet

5 、实例分割

除了语义分段之外,实例分段将不同的类实例分段,例如用5种不同颜色标记5辆汽车。在分类中,通常有一个图像,其中一个对象作为焦点,任务是说该图像是什么。但是为了分割实例,我们需要执行更复杂的任务。我们看到复杂的景点有多个重叠的物体和不同的背景,我们不仅要对这些不同的物体进行分类,还要确定它们之间的界限,差异和关系!

到目前为止,我们已经看到了如何以许多有趣的方式使用CNN功能来有效地定位带有边界框的图像中的不同对象。我们可以扩展这些技术来定位每个对象的精确像素而不仅仅是边界框吗?使用称为Mask R-CNN的架构在Facebook AI上探索该实例分割问题。

就像Fast R-CNN和Faster R-CNN一样,Mask R-CNN的潜在直觉很简单鉴于更快的R-CNN在物体检测中运行得非常好,我们是否可以扩展它以进行像素级分割?

Mask R-CNN 通过向 Faster R-CNN 添加一个分支来进行像素级分割,该分支输出一个二进制掩码,该掩码表示给定像素是否为目标对象的一部分:该分支是基于卷积神经网络特征映射的全卷积网络。将给定的卷积神经网络特征映射作为输入,输出为一个矩阵,其中像素属于该对象的所有位置用 1 表示,其他位置则用 0 表示,这就是二进制掩码。

另外,当在原始 Faster R-CNN 架构上运行且没有做任何修改时,感兴趣池化区域( RoIPool ) 选择的特征映射区域或原始图像的区域稍微错开。由于图像分割具有像素级特性,这与边界框不同,自然会导致结果不准确。 Mas R-CNN 通过调整 RoIPool 来解决这个问题,使用感兴趣区域对齐( Roialign )方法使其变的更精确。本质上, RoIlign 使用双线性插值来避免舍入误差,这会导致检测和分割不准确。

一旦生成这些掩码, Mask R-CNN 将 RoIAlign 与来自 Faster R-CNN 的分类和边界框相结合,以便进行精确的分割:

结论

这5种主要的计算机视觉技术可以帮助计算机从单个或一系列图像中提取,分析和理解有用的信息。我还没有涉及许多其他先进技术,包括样式转移,着色,动作识别,3D对象,人体姿势估计等。事实上,计算机视觉领域的成本太高而无法深入探讨,我鼓励您进一步探索,无论是通过在线课程,博客教程还是正式文档。作为奖励,您可以从我的GitHub存储库获取所有演讲幻灯片和作业指南。我希望它能指导你改变如何看世界!

从上面可以看出大多数都是基于卷积神经网络的改进和应用,因此深入理解前面的CNN有多重要,因此我们要学会学习,去学习最本质的东西,一旦深入理解了CNN,学习上面的算法会很快理解,而且很快可以实现,这就是理论基础的重要性,好上面的都附有相关论文,想深入的请查阅原始论文,卷积神经网络就到这里,下一篇是RNN。

原始博客地址,需要翻墙

猜你喜欢

转载自blog.csdn.net/weixin_42398658/article/details/84846935