• 回答数

    3

  • 浏览数

    118

甜田心ttx
首页 > 论文发表 > maskrcnn论文发表时间

3个回答 默认排序
  • 默认排序
  • 按时间排序

小肚巨肥

已采纳

姓名:王咫毅 学号: 【嵌牛导读】机器学习成为现在研究的一大热门,而机器学习所应用到的领域图像处理 目标检测 图像分割都已经日趋成熟,而cnn是如何应用到图像分割里边的呢?而其发展过程又有哪些呢? 【嵌牛鼻子】机器学习 cnn  【嵌牛提问】r-cnn和mask r-cnn有什么区别?两者又是怎么形成的? 【嵌牛正文】 在 Athelas (Athelas 通过深度学习进行血液诊断),我们使用卷积神经网络(CNN)不仅仅是分类!在这篇文章中,我们将看到如何在图像实例分割中使用CNN,效果很好。 自从 Alex Krizhevsky,Geoff Hinton和Ilya Sutskever在2012年赢得ImageNet以来 ,卷积神经网络(CNNs)已经成为图像分类的黄金标准。事实上,从那时起,CNN已经改进到现在他们在ImageNet挑战中胜过人类的程度! need-to-insert-img CNN现在在ImageNet挑战中胜过人类。上图中的y轴是ImageNet上的错误率。 虽然这些结果令人印象深刻,但图像分类远比真人类视觉理解的复杂性和多样性简单得多。 need-to-insert-img 分类挑战中使用的图像示例。请注意图像是如何构图良好的,并且只有一个对象。 在分类中,通常有一个图像,其中一个对象作为焦点,任务是说该图像是什么(见上文)。但是,当我们观察周围的世界时,我们会执行更复杂的任务。 need-to-insert-img 现实生活中的景点通常由许多不同的,重叠的物体,背景和动作组成。 我们看到复杂的景点有多个重叠的物体和不同的背景,我们不仅要对这些不同的物体进行分类,还要确定它们之间的界限,差异和关系! need-to-insert-img CNN可以帮助我们完成这些复杂的任务吗?也就是说,给定一个更复杂的图像,我们可以使用CNN来识别图像中的不同对象及其边界吗?正如Ross Girshick和他的同龄人在过去几年所表明的那样,答案是肯定的。 这篇文章的目标 通过这篇文章,我们将介绍在对象检测和分割中使用的一些主要技术背后的直觉,并了解它们是如何从一个实现发展到下一个实现的。特别是,我们将介绍R-CNN(地区CNN),这是CNN对此问题的原始应用,以及其后代Fast R-CNN和Faster R-CNN。最后,我们将介绍最近由Facebook Research发布的一篇文章Mask R-CNN,它扩展了这种对象检测技术以提供像素级分割。以下是本文中引用的论文: R-CNN: https : //arxiv.org/abs/1311.2524 Fast R-CNN: https : //arxiv.org/abs/1504.08083 Faster R-CNN: https : //arxiv.org/abs/1506.01497 Mask R-CNN: https : //arxiv.org/abs/1703.06870 2014年:R-CNN - CNN在物体检测中的早期应用 need-to-insert-img 诸如R-CNN的对象检测算法接收图像并识别图像中主要对象的位置和分类。 受多伦多大学Hinton实验室研究的启发,由Jitendra Malik教授领导的加州大学伯克利分校的一个小团队问自己,今天看来是一个不可避免的问题: 在多大程度上[Krizhevsky等。al的结果]推广到物体检测? 对象检测的任务是在图像中查找不同的对象并对其进行分类(如上图所示)。由Ross Girshick(我们将再次看到的名字),Jeff Donahue和Trevor Darrel组成的团队发现,通过测试PASCAL VOC Challenge,这是一种类似于ImageNet的流行物体检测挑战,Krizhevsky的结果可以解决这个问题。他们写, 本文首次表明,与基于简单HOG类功能的系统相比,CNN可以在PASCAL VOC上实现更高的物体检测性能。 现在让我们花一点时间来了解他们的架构,CNNs区域(R-CNN)是如何工作的。 了解R-CNN R-CNN的目标是接收图像,并正确识别图像中主要对象(通过边界框)的位置。 输入 :图像 输出 :图像中每个对象的边界框+标签。 但是我们如何找出这些边界框的位置?R-CNN做了我们可能直观地做的事情 - 在图像中 提出 一堆框,看看它们中的任何一个是否实际上对应于一个对象 。 need-to-insert-img 选择性搜索查看多个比例的窗口,并查找共享纹理,颜色或强度的相邻像素 R-CNN使用称为选择性搜索的过程创建这些边界框或区域提议,您可以在 此处 阅读。在较高的层次上,选择性搜索(如上图所示)通过不同大小的窗口查看图像,并且对于每个尺寸,尝试通过纹理,颜色或强度将相邻像素组合在一起以识别对象。 need-to-insert-img 在创建一组区域提议后,R-CNN通过AlexNet的修改版本传递图像,以确定它是否是有效区域。 一旦提出建议,R-CNN将该区域变为标准的方形大小,并将其传递给AlexNet的修改版本(ImageNet 2012的获奖提交,启发了R-CNN),如上所示。 在CNN的最后一层,R-CNN增加了一个支持向量机(SVM),它简单地分类这是否是一个对象,如果是的话,是什么对象。这是上图中的第4步。 改进边界框 现在,在盒子里找到了这个物体,我们可以收紧盒子以适应物体的真实尺寸吗?我们可以,这是R-CNN的最后一步。R-CNN对区域提议运行简单的线性回归,以生成更紧密的边界框坐标以获得最终结果。以下是此回归模型的输入和输出: 输入 :与对象对应的图像的子区域。 输出 :子区域中对象的新边界框坐标。 总而言之,R-CNN只是以下步骤: 1.为边界框生成一组提议。 2.通过预先训练的AlexNet运行边界框中的图像,最后运行SVM,以查看框中图像的对象。 3.通过线性回归模型运行该框,一旦对象被分类,就为框输出更紧密的坐标。 2015年:快速R-CNN - 加速并简化R-CNN need-to-insert-img Ross Girshick写了R-CNN和Fast R-CNN。他继续在Facebook Research推动计算机视觉的界限。 R-CNN效果很好,但由于一些简单的原因,它确实很慢: 它需要CNN(AlexNet)的正向传递,用于每个单个图像的每个区域建议(每个图像大约2000个前向传递!)。 它必须分别训练三个不同的模型 - 用于生成图像特征的CNN,用于预测类的分类器,以及用于收紧边界框的回归模型。这使得管道极难训练。 2015年,R-CNN的第一作者Ross Girshick解决了这两个问题,导致了我们短暂历史中的第二个算法 - 快速R-CNN。现在让我们回顾一下它的主要见解。 Fast R-CNN洞察力1:RoI(感兴趣区域)池 对于CNN的前向传递,Girshick意识到对于每个图像,图像的许多建议区域总是重叠,导致我们一次又一次地运行相同的CNN计算(~2000次!)。他的洞察力很简单 - 为什么不在每张图像上运行CNN一次,然后找到一种方法来分享〜2000个提案中的计算? need-to-insert-img 在RoIPool中,创建图像的完整前向传递,并从所得到的前向传递中提取每个感兴趣区域的conv特征。 这正是Fast R-CNN使用称为RoIPool(感兴趣区域池)的技术所做的事情。在其核心,RoIPool分享CNN的前向传递,以在其子区域中形成图像。在上图中,请注意如何通过从CNN的要素图中选择相应的区域来获取每个区域的CNN要素。然后,汇集每个区域中的要素(通常使用最大池)。所以我们所需要的只是原始图像的一次传递而不是~2000! 快速R-CNN洞察力2:将所有模型组合到一个网络中 need-to-insert-img 快速R-CNN将CNN,分类器和边界框回归器组合成一个单一网络 Fast R-CNN的第二个见解是在单个模型中联合训练CNN,分类器和边界框回归器。之前我们有不同的模型来提取图像特征(CNN),分类(SVM)和收紧边界框(回归量),而 快速R-CNN则使用单个网络来计算所有三个。 您可以在上图中看到这是如何完成的。快速R-CNN用在CNN顶部的softmax层替换SVM分类器以输出分类。它还添加了一个与softmax图层平行的线性回归图层,以输出边界框坐标。这样,所需的所有输出都来自一个网络!以下是此整体模型的输入和输出: 输入 :带有区域提案的图像。 输出 :每个区域的对象分类以及更严格的边界框。 2016年:更快的R-CNN - 加速地区提案 即使有了所有这些进步,快速R-CNN过程仍然存在一个瓶颈 - 区域提议者。正如我们所看到的,检测对象位置的第一步是生成一堆潜在的边界框或感兴趣的区域进行测试。在Fast R-CNN中,这些提议是使用 选择性搜索 创建的,这是一个相当缓慢的过程,被发现是整个过程的瓶颈。 need-to-insert-img 微软研究院的首席研究员孙健带领团队领导更快的R-CNN。 在2015年中期,由Shaoqing Ren,Kaiming He,Ross Girshick和Jian Sun组成的微软研究团队找到了一种方法,通过他们(创造性地)命名为快速R-CNN的架构,使该区域提案步骤几乎免费。 更快的R-CNN的见解是区域建议取决于已经通过CNN的前向传递(分类的第一步)计算的图像的特征。 那么为什么不为区域提案重用那些相同的CNN结果而不是运行单独的选择性搜索算法呢? need-to-insert-img 在Faster R-CNN中,单个CNN用于区域提议和分类。 实际上,这正是R-CNN团队更快取得的成就。在上图中,您可以看到单个CNN如何用于执行区域提议和分类。这样, 只有一个CNN需要接受培训 ,我们几乎可以免费获得地区建议!作者写道: 我们的观察结果是,基于区域的探测器(如Fast R-CNN)使用的卷积特征图也可用于生成区域提议[从而实现几乎无成本的区域提议]。 以下是其模型的输入和输出: 输入 :图像(注意不需要区域提议)。 输出 :图像中对象的分类和边界框坐标。 如何生成区域 让我们花点时间看看R-CNN如何通过CNN功能更快地生成这些区域提案。Faster R-CNN在CNN的功能之上增加了一个完全卷积网络,创建了所谓的 区域提案网络 。 need-to-insert-img 区域提案网络在CNN的功能上滑动窗口。在每个窗口位置,网络输出每个锚点的分数和边界框(因此4k框坐标,其中k是锚的数量)。 区域提议网络通过在CNN特征映射和每个窗口上传递滑动窗口来工作,输出 k个 潜在的边界框以及每个框预期有多好的分数。这些 k 盒代表什么? need-to-insert-img 我们知道人们的边界框往往是矩形和垂直的。我们可以通过创建这样的维度锚来利用这种直觉来指导我们的区域提案网络。 直觉上,我们知道图像中的对象应该适合某些常见的宽高比和大小。例如,我们知道我们想要一些类似于人类形状的矩形盒子。同样,我们知道我们不会看到很多非常薄的盒子。以这种方式,我们创建 k 这样的常见宽高比,我们称之为 锚盒 。对于每个这样的锚箱,我们输出一个边界框并在图像中的每个位置得分。 考虑到这些锚框,我们来看看这个区域提案网络的输入和输出: 输入 :CNN功能图。 输出 :每个锚点的边界框。表示该边界框中图像成为对象的可能性的分数。 然后,我们将可能是对象的每个这样的边界框传递到Fast R-CNN,以生成分类和收紧的边界框。 2017:Mask R-CNN - 扩展更快的R-CNN以实现像素级分割 need-to-insert-img 图像实例分割的目标是在像素级别识别场景中不同的对象是什么。 到目前为止,我们已经看到我们如何能够以许多有趣的方式使用CNN功能来有效地定位带有边界框的图像中的不同对象。 我们是否可以扩展这些技术以进一步找到每个对象的精确像素而不仅仅是边界框?这个问题被称为图像分割,是Kaiming He和包括Girshick在内的一组研究人员在Facebook AI上使用一种名为 Mask R-CNN 的架构进行探索的。 need-to-insert-img Facebook AI的研究员Kaiming He是Mask R-CNN的主要作者,也是Faster R-CNN的合着者。 就像Fast R-CNN和Faster R-CNN一样,Mask R-CNN的潜在直觉也是直截了当的。鉴于Faster R-CNN在物体检测方面的效果非常好,我们是否可以扩展它以进行像素级分割? need-to-insert-img 在掩码R-CNN中,在快速R-CNN的CNN特征之上添加完全卷积网络(FCN)以生成掩码(分段输出)。注意这与Faster R-CNN的分类和边界框回归网络并行。 Mask R-CNN通过向更快的R-CNN添加分支来完成此操作,该分支输出二进制掩码,该Mask 表示给定像素是否是对象的一部分。与以前一样,分支(上图中的白色)只是基于CNN的特征映射之上的完全卷积网络。以下是其输入和输出: 输入 :CNN功能图。 输出 :矩阵在像素属于对象的所有位置上为1,在其他位置为0(这称为 二进制掩码 )。 但Mask R-CNN的作者不得不进行一次小调整,以使这条管道按预期工作。 RoiAlign - 重新调整RoIPool更准确 need-to-insert-img 而不是RoIPool,图像通过RoIAlign传递,以便RoIPool选择的特征图的区域更精确地对应于原始图像的区域。这是必需的,因为像素级分割需要比边界框更细粒度的对齐。 当在原始的快速R-CNN架构上运行而没有修改时,Mask R-CNN作者意识到由RoIPool选择的特征图的区域与原始图像的区域略微不对准。由于图像分割需要像素级特异性,与边界框不同,这自然会导致不准确。 作者能够通过巧妙地调整RoIPool来解决这个问题,使用一种称为RoIAlign的方法进行更精确的对齐。 need-to-insert-img 我们如何准确地将感兴趣的区域从原始图像映射到特征图? 想象一下,我们有一个大小为 128x128 的图像和一个大小为 25x25 的特征图。让我们想象一下,我们想要的特征区域对应于原始图像中左上角的 15x15 像素(见上文)。我们如何从要素图中选择这些像素? 我们知道原始图像中的每个像素对应于特征图中的~25 / 128像素。要从原始图像中选择15个像素,我们只选择15 * 25 / 128~ = 2.93 像素。 在RoIPool中,我们将它向下舍入并选择2个像素,导致轻微的错位。但是,在RoIAlign中, 我们避免了这种舍入。 相反,我们使用 双线性插值 来准确了解像素2.93处的内容。这在很大程度上是允许我们避免RoIPool引起的错位的原因。 生成这些掩模后,Mask R-CNN将它们与Faster R-CNN中的分类和边界框组合在一起,生成如此精确的分割: need-to-insert-img Mask R-CNN能够对图像中的对象进行分段和分类。 期待 在短短3年时间里,我们已经看到研究界如何从Krizhevsky等进步。al的原始结果是R-CNN,最后一直到Mask R-CNN这样强大的结果。孤立地看,像面具R-CNN这样的结果看起来像天才的难以置信的飞跃,是无法接近的。然而,通过这篇文章,我希望你已经看到这些进步如何通过多年的努力和合作实现直观,渐进的改进。R-CNN,Fast R-CNN,Faster R-CNN以及最后的Mask R-CNN提出的每个想法都不一定是量子跳跃,但它们的总和产品已经产生了非常显着的结果,使我们更接近人类水平了解视力。 让我特别兴奋的是,R-CNN和Mask R-CNN之间的时间只有三年!通过持续的资金,关注和支持,未来计算机视觉能够进一步提升?

109 评论

如颖随心

深度学习目前已经应用到了各个领域,应用场景大体分为三类:物体识别,目标检测,自然语言处理。  目标检测可以理解为是物体识别和物体定位的综合 ,不仅仅要识别出物体属于哪个分类,更重要的是得到物体在图片中的具体位置。 2014年R-CNN算法被提出,基本奠定了two-stage方式在目标检测领域的应用。它的算法结构如下图 算法步骤如下: R-CNN较传统的目标检测算法获得了50%的性能提升,在使用VGG-16模型作为物体识别模型情况下,在voc2007数据集上可以取得66%的准确率,已经算还不错的一个成绩了。其最大的问题是速度很慢,内存占用量很大,主要原因有两个 针对R-CNN的部分问题,2015年微软提出了Fast R-CNN算法,它主要优化了两个问题。 R-CNN和fast R-CNN均存在一个问题,那就是 由选择性搜索来生成候选框,这个算法很慢 。而且R-CNN中生成的2000个左右的候选框全部需要经过一次卷积神经网络,也就是需要经过2000次左右的CNN网络,这个是十分耗时的(fast R-CNN已经做了改进,只需要对整图经过一次CNN网络)。这也是导致这两个算法检测速度较慢的最主要原因。 faster R-CNN 针对这个问题, 提出了RPN网络来进行候选框的获取,从而摆脱了选择性搜索算法,也只需要一次卷积层操作,从而大大提高了识别速度 。这个算法十分复杂,我们会详细分析。它的基本结构如下图 主要分为四个步骤: 使用VGG-16卷积模型的网络结构: 卷积层采用的VGG-16模型,先将PxQ的原始图片,缩放裁剪为MxN的图片,然后经过13个conv-relu层,其中会穿插4个max-pooling层。所有的卷积的kernel都是3x3的,padding为1,stride为1。pooling层kernel为2x2, padding为0,stride为2。 MxN的图片,经过卷积层后,变为了(M/16) x (N/16)的feature map了。 faster R-CNN抛弃了R-CNN中的选择性搜索(selective search)方法,使用RPN层来生成候选框,能极大的提升候选框的生成速度。RPN层先经过3x3的卷积运算,然后分为两路。一路用来判断候选框是前景还是背景,它先reshape成一维向量,然后softmax来判断是前景还是背景,然后reshape恢复为二维feature map。另一路用来确定候选框的位置,通过bounding box regression实现,后面再详细讲。两路计算结束后,挑选出前景候选框(因为物体在前景中),并利用计算得到的候选框位置,得到我们感兴趣的特征子图proposal。 卷积层提取原始图像信息,得到了256个feature map,经过RPN层的3x3卷积后,仍然为256个feature map。但是每个点融合了周围3x3的空间信息。对每个feature map上的一个点,生成k个anchor(k默认为9)。anchor分为前景和背景两类(我们先不去管它具体是飞机还是汽车,只用区分它是前景还是背景即可)。anchor有[x,y,w,h]四个坐标偏移量,x,y表示中心点坐标,w和h表示宽度和高度。这样,对于feature map上的每个点,就得到了k个大小形状各不相同的选区region。 对于生成的anchors,我们首先要判断它是前景还是背景。由于感兴趣的物体位于前景中,故经过这一步之后,我们就可以舍弃背景anchors了。大部分的anchors都是属于背景,故这一步可以筛选掉很多无用的anchor,从而减少全连接层的计算量。 对于经过了3x3的卷积后得到的256个feature map,先经过1x1的卷积,变换为18个feature map。然后reshape为一维向量,经过softmax判断是前景还是背景。此处reshape的唯一作用就是让数据可以进行softmax计算。然后输出识别得到的前景anchors。 另一路用来确定候选框的位置,也就是anchors的[x,y,w,h]坐标值。如下图所示,红色代表我们当前的选区,绿色代表真实的选区。虽然我们当前的选取能够大概框选出飞机,但离绿色的真实位置和形状还是有很大差别,故需要对生成的anchors进行调整。这个过程我们称为bounding box regression。 假设红色框的坐标为[x,y,w,h], 绿色框,也就是目标框的坐标为[Gx, Gy,Gw,Gh], 我们要建立一个变换,使得[x,y,w,h]能够变为[Gx, Gy,Gw,Gh]。最简单的思路是,先做平移,使得中心点接近,然后进行缩放,使得w和h接近。如下:我们要学习的就是dx dy dw dh这四个变换。由于是线性变换,我们可以用线性回归来建模。设定loss和优化方法后,就可以利用深度学习进行训练,并得到模型了。对于空间位置loss,我们一般采用均方差算法,而不是交叉熵(交叉熵使用在分类预测中)。优化方法可以采用自适应梯度下降算法Adam。 得到了前景anchors,并确定了他们的位置和形状后,我们就可以输出前景的特征子图proposal了。步骤如下: 1,得到前景anchors和他们的[x y w h]坐标。 2,按照anchors为前景的不同概率,从大到小排序,选取前pre_nms_topN个anchors,比如前6000个 3,剔除非常小的anchors。 4,通过NMS非极大值抑制,从anchors中找出置信度较高的。这个主要是为了解决选取交叠问题。首先计算每一个选区面积,然后根据他们在softmax中的score(也就是是否为前景的概率)进行排序,将score最大的选区放入队列中。接下来,计算其余选区与当前最大score选区的IOU(IOU为两box交集面积除以两box并集面积,它衡量了两个box之间重叠程度)。去除IOU大于设定阈值的选区。这样就解决了选区重叠问题。 5,选取前post_nms_topN个结果作为最终选区proposal进行输出,比如300个。 经过这一步之后,物体定位应该就基本结束了,剩下的就是物体识别了。 和fast R-CNN中类似,这一层主要解决之前得到的proposal大小形状各不相同,导致没法做全连接。全连接计算只能对确定的shape进行运算,故必须使proposal大小形状变为相同。通过裁剪和缩放的手段,可以解决这个问题,但会带来信息丢失和图片形变问题。我们使用ROI pooling可以有效的解决这个问题。 ROI pooling中,如果目标输出为MxN,则在水平和竖直方向上,将输入proposal划分为MxN份,每一份取最大值,从而得到MxN的输出特征图。 ROI Pooling层后的特征图,通过全连接层与softmax,就可以计算属于哪个具体类别,比如人,狗,飞机,并可以得到cls_prob概率向量。同时再次利用bounding box regression精细调整proposal位置,得到bbox_pred,用于回归更加精确的目标检测框。 这样就完成了faster R-CNN的整个过程了。算法还是相当复杂的,对于每个细节需要反复理解。faster R-CNN使用resNet101模型作为卷积层,在voc2012数据集上可以达到83.8%的准确率,超过yolo ssd和yoloV2。其最大的问题是速度偏慢,每秒只能处理5帧,达不到实时性要求。 针对于two-stage目标检测算法普遍存在的运算速度慢的缺点, yolo创造性的提出了one-stage。也就是将物体分类和物体定位在一个步骤中完成。 yolo直接在输出层回归bounding box的位置和bounding box所属类别,从而实现one-stage。通过这种方式, yolo可实现45帧每秒的运算速度,完全能满足实时性要求 (达到24帧每秒,人眼就认为是连续的)。它的网络结构如下图: 主要分为三个部分:卷积层,目标检测层,NMS筛选层。 采用Google inceptionV1网络,对应到上图中的第一个阶段,共20层。这一层主要是进行特征提取,从而提高模型泛化能力。但作者对inceptionV1进行了改造,他没有使用inception module结构,而是用一个1x1的卷积,并联一个3x3的卷积来替代。(可以认为只使用了inception module中的一个分支,应该是为了简化网络结构) 先经过4个卷积层和2个全连接层,最后生成7x7x30的输出。先经过4个卷积层的目的是为了提高模型泛化能力。yolo将一副448x448的原图分割成了7x7个网格,每个网格要预测两个bounding box的坐标(x,y,w,h)和box内包含物体的置信度confidence,以及物体属于20类别中每一类的概率(yolo的训练数据为voc2012,它是一个20分类的数据集)。所以一个网格对应的参数为(4x2+2+20) = 30。如下图 其中前一项表示有无人工标记的物体落入了网格内,如果有则为1,否则为0。第二项代表bounding box和真实标记的box之间的重合度。它等于两个box面积交集,除以面积并集。值越大则box越接近真实位置。 分类信息: yolo的目标训练集为voc2012,它是一个20分类的目标检测数据集 。常用目标检测数据集如下表: | Name | # Images (trainval) | # Classes | Last updated | | --------------- | ------------------- | --------- | ------------ | | ImageNet | 450k | 200 | 2015 | | COCO | 120K | 90 | 2014 | | Pascal VOC | 12k | 20 | 2012 | | Oxford-IIIT Pet | 7K | 37 | 2012 | | KITTI Vision | 7K | 3 | | 每个网格还需要预测它属于20分类中每一个类别的概率。分类信息是针对每个网格的,而不是bounding box。故只需要20个,而不是40个。而confidence则是针对bounding box的,它只表示box内是否有物体,而不需要预测物体是20分类中的哪一个,故只需要2个参数。虽然分类信息和confidence都是概率,但表达含义完全不同。 筛选层是为了在多个结果中(多个bounding box)筛选出最合适的几个,这个方法和faster R-CNN 中基本相同。都是先过滤掉score低于阈值的box,对剩下的box进行NMS非极大值抑制,去除掉重叠度比较高的box(NMS具体算法可以回顾上面faster R-CNN小节)。这样就得到了最终的最合适的几个box和他们的类别。 yolo的损失函数包含三部分,位置误差,confidence误差,分类误差。具体公式如下: 误差均采用了均方差算法,其实我认为,位置误差应该采用均方差算法,而分类误差应该采用交叉熵。由于物体位置只有4个参数,而类别有20个参数,他们的累加和不同。如果赋予相同的权重,显然不合理。故yolo中位置误差权重为5,类别误差权重为1。由于我们不是特别关心不包含物体的bounding box,故赋予不包含物体的box的置信度confidence误差的权重为0.5,包含物体的权重则为1。 Faster R-CNN准确率mAP较高,漏检率recall较低,但速度较慢。而yolo则相反,速度快,但准确率和漏检率不尽人意。SSD综合了他们的优缺点,对输入300x300的图像,在voc2007数据集上test,能够达到58 帧每秒( Titan X 的 GPU ),72.1%的mAP。 SSD网络结构如下图: 和yolo一样,也分为三部分:卷积层,目标检测层和NMS筛选层 SSD论文采用了VGG16的基础网络,其实这也是几乎所有目标检测神经网络的惯用方法。先用一个CNN网络来提取特征,然后再进行后续的目标定位和目标分类识别。 这一层由5个卷积层和一个平均池化层组成。去掉了最后的全连接层。SSD认为目标检测中的物体,只与周围信息相关,它的感受野不是全局的,故没必要也不应该做全连接。SSD的特点如下。 每一个卷积层,都会输出不同大小感受野的feature map。在这些不同尺度的feature map上,进行目标位置和类别的训练和预测,从而达到 多尺度检测 的目的,可以克服yolo对于宽高比不常见的物体,识别准确率较低的问题。而yolo中,只在最后一个卷积层上做目标位置和类别的训练和预测。这是SSD相对于yolo能提高准确率的一个关键所在。 如上所示,在每个卷积层上都会进行目标检测和分类,最后由NMS进行筛选,输出最终的结果。多尺度feature map上做目标检测,就相当于多了很多宽高比例的bounding box,可以大大提高泛化能力。 和faster R-CNN相似,SSD也提出了anchor的概念。卷积输出的feature map,每个点对应为原图的一个区域的中心点。以这个点为中心,构造出6个宽高比例不同,大小不同的anchor(SSD中称为default box)。每个anchor对应4个位置参数(x,y,w,h)和21个类别概率(voc训练集为20分类问题,在加上anchor是否为背景,共21分类)。如下图所示: 另外,在训练阶段,SSD将正负样本比例定位1:3。训练集给定了输入图像以及每个物体的真实区域(ground true box),将default box和真实box最接近的选为正样本。然后在剩下的default box中选择任意一个与真实box IOU大于0.5的,作为正样本。而其他的则作为负样本。由于绝大部分的box为负样本,会导致正负失衡,故根据每个box类别概率排序,使正负比例保持在1:3。SSD认为这个策略提高了4%的准确率 另外,SSD采用了数据增强。生成与目标物体真实box间IOU为0.1 0.3 0.5 0.7 0.9的patch,随机选取这些patch参与训练,并对他们进行随机水平翻转等操作。SSD认为这个策略提高了8.8%的准确率。 和yolo的筛选层基本一致,同样先过滤掉类别概率低于阈值的default box,再采用NMS非极大值抑制,筛掉重叠度较高的。只不过SSD综合了各个不同feature map上的目标检测输出的default box。 SSD基本已经可以满足我们手机端上实时物体检测需求了,TensorFlow在Android上的目标检测官方模型ssd_mobilenet_v1_android_export.pb,就是通过SSD算法实现的。它的基础卷积网络采用的是mobileNet,适合在终端上部署和运行。 针对yolo准确率不高,容易漏检,对长宽比不常见物体效果差等问题,结合SSD的特点,提出了yoloV2。它主要还是采用了yolo的网络结构,在其基础上做了一些优化和改进,如下 网络采用DarkNet-19:19层,里面包含了大量3x3卷积,同时借鉴inceptionV1,加入1x1卷积核全局平均池化层。结构如下 yolo和yoloV2只能识别20类物体,为了优化这个问题,提出了yolo9000,可以识别9000类物体。它在yoloV2基础上,进行了imageNet和coco的联合训练。这种方式充分利用imageNet可以识别1000类物体和coco可以进行目标位置检测的优点。当使用imageNet训练时,只更新物体分类相关的参数。而使用coco时,则更新全部所有参数。 YOLOv3可以说出来直接吊打一切图像检测算法。比同期的DSSD(反卷积SSD), FPN(feature pyramid networks)准确率更高或相仿,速度是其1/3.。 YOLOv3的改动主要有如下几点:不过如果要求更精准的预测边框,采用COCO AP做评估标准的话,YOLO3在精确率上的表现就弱了一些。如下图所示。 当前目标检测模型算法也是层出不穷。在two-stage领域, 2017年Facebook提出了mask R-CNN 。CMU也提出了A-Fast-RCNN 算法,将对抗学习引入到目标检测领域。Face++也提出了Light-Head R-CNN,主要探讨了 R-CNN 如何在物体检测中平衡精确度和速度。 one-stage领域也是百花齐放,2017年首尔大学提出 R-SSD 算法,主要解决小尺寸物体检测效果差的问题。清华大学提出了 RON 算法,结合 two stage 名的方法和 one stage 方法的优势,更加关注多尺度对象定位和负空间样本挖掘问题。 目标检测领域的深度学习算法,需要进行目标定位和物体识别,算法相对来说还是很复杂的。当前各种新算法也是层不出穷,但模型之间有很强的延续性,大部分模型算法都是借鉴了前人的思想,站在巨人的肩膀上。我们需要知道经典模型的特点,这些tricks是为了解决什么问题,以及为什么解决了这些问题。这样才能举一反三,万变不离其宗。综合下来,目标检测领域主要的难点如下: 一文读懂目标检测AI算法:R-CNN,faster R-CNN,yolo,SSD,yoloV2 从YOLOv1到v3的进化之路 SSD-Tensorflow超详细解析【一】:加载模型对图片进行测试  YOLO    https://pjreddie.com/darknet/yolo/      https://github.com/pjreddie/darknet    C#项目参考: 项目实践贴个图。

165 评论

sylviali1109

2018年5月19日提出来的,最新出版的《新创新指南》,人工智能能力的发展与突破,有望提高生产性能和生产效率。

237 评论

相关问答

  • 论文发表时间取得时间

    论文发表一般需要的时间如下: 1、普刊即省级国家级一般安排周期是1到3个月。 2、本科学报的安排周期一般为2到4个月。 3、北大核心以上级别期刊的安排周期

    Z黑暗中獨舞 6人参与回答 2023-12-09
  • maskrcnn论文发表时间

    姓名:王咫毅 学号: 【嵌牛导读】机器学习成为现在研究的一大热门,而机器学习所应用到的领域图像处理 目标检测 图像分割都已经日趋成熟,而cnn是如何应用

    甜田心ttx 3人参与回答 2023-12-07
  • 论文发表时间和出版时间

    刊期和出刊时间的区别是什么?刊期就是期刊的出版周期,常见的出版周期打击阿斗非常熟悉,半月刊、月刊、双月刊、季刊等,都是常见的期刊出版周期,出刊时间是一个更为具体

    养生达人帅帅 4人参与回答 2023-12-10
  • 论文发表时间是online时间

    关于刊出日期和检索日期怎么查方法如下sci期刊发表时间不一定看得到,哪怕看online时间、见刊时间或检索时间,一般也只能确定具体的年份和月份,甚至只能确定年份

    xiaxia910000 3人参与回答 2023-12-09
  • 论文发表时间和证书时间

    论文发表时间是指文章见刊时间。 首先如果论文发表纯属作者个人爱好,那么发表时间就是文章见刊时间。但是如果论文发表是用来评职称晋升的,就需要特别注意一下了,职称论

    candys0814 4人参与回答 2023-12-11