0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

深度学习在目标检测中的应用

新机器视觉 来源:CV算法恩仇录 作者:CV算法恩仇录 2022-10-31 10:08 次阅读

二阶段目标检测算法(RCNN 家族)是目标检测中最经典的算法之一,有 R-CNN -> Fast R-CNN -> Faster R-CNN,每一代的变化以及目的性都明确,也是目标检测领域二阶段检测必会的算法之一。

如果想对目标检测有粗略的了解请查看这两篇文章:

目标检测综述

目标检测快速入门(含YOLO V1原理详解)

深度学习在目标检测应用

R-CNN 算法在 2014 年提出,可以说是历史性的算法,将深度学习应用于目标检测领域,相较于之前的目标检测方法,提升多达 30% 以上,大大提高了目标检测效果,改变了目标检测领域的研究方向。

早在 2010 年,深度学习已经初露锋芒,为什么在 2014 年目标检测才可以说正式应用深度学习技术呢?

这要从目标检测的场景以及目的上来分析。将问题简化一下,假设现在在做猫和狗的检测,要从图片中找到猫和狗的位置并且知道是什么分类。对于人工智能问题,往下细分可以分到 2 个方向,分类问题和回归问题。识别一张图片是猫还是狗是比较容易的事情,也可以准确的说是分类问题。

但是寻找到图片中不确定是否含有以及不确定具体数量的猫和狗的具体位置,这样的一个问题算作哪个类别呢?分类和回归问题都不好往上面靠,下面再把问题拆分一下。

目标检测中的分类与回归问题

假设,现在已经有框了,如图 1 所示,根据 4 个检测框内是否包含狗做分类,包含待检测目标越完整、背景越少则概率越高,下图中显然蓝色更加合适。

462c7556-5852-11ed-a3b6-dac502259ad0.png

图1 目标检测示意

用蓝色的检测框来代表检测的物体还有个问题,就是这个框还有些许的偏差,离“完美”的检测框还是有一些距离,下面可以对我们的检测框进行矫正回归,如图 2 所示。白色的框是“完美检测框”,我们希望蓝色的检测框向白色的检测框从形状和位置上靠近,在某些特殊条件下,这种变换满足线性的变化,将边框的矫正问题转变成一个回归问题。

46e4309c-5852-11ed-a3b6-dac502259ad0.png

图2 边框矫正示意图

现在目标检测问题得到了解决,前提是已经存在可能存在待检测物体的预选框,剩下的问题是如何产生这些预选框。

R-CNN 算法就是采用上面所述的解决思路,采用的是选择性搜索 (Selective Search) 算法来选择预选框。

选择性搜索 (Selective Search) 提取候选区域

选择性搜索 (Selective Search) 是对上文中的选择区域过程进行的一个优化。Selective Search 算法在 13 年提出,这个算法其实是借鉴了层次聚类的思想,将层次聚类的思想应用到区域的合并上面。

首先使用 Felzenszwalb 等人在其论文 “Efficient Graph-Based Image Segmentation ” 中描述的方法生成输入图像的初始子候选区域。

然后将较小的相似区域递归组合为较大的相似区域。这里使用贪婪算法将相似的区域组合成更大的区域。

所谓贪婪算法就是从一组区域中,选择两个最相似的区域,将它们合并为一个较大的区域,重复上述步骤进行多次迭代,直至数量为我们想得到的候选区域数量。

选择性搜索的思想是基于图像中物体可能具有某些相似性或者连续性,因此采用子区域合并的方法进行提取候选边界框,合并过程根据子区域之间的颜色、纹理、体积等相似性进行区域合并,最后合并成我们想要的数量,然后再对子区域做外切矩形,得到的矩形就是候选区域。

471ad48a-5852-11ed-a3b6-dac502259ad0.png

图3 Selective Search示意图

R-CNN:Region with CNN feature (Region proposals + CNN)

R-CNN 算法流程可以分为 4 步:

使用选择性搜索 (Selective Search) 从图像中提取 1k-2k 个区域,将其称为候选区域。

将这 2000 个大小可能不同的候选区域处理成固定大小 (227,227),然后输入到卷积神经网络中做图像特征提取,生成 4096 维特征图作为第二步输出。

将特征图输入到一组 SVM 中,对候选区域是否存在要检测的目标进行分类,每个 SVM 都是一个二分类器,负责判断是否是存在某一个类 (yes/no),也就是说有多少个分类就有多少个SVM分类器。

除了预测候选区域内是否包含检测目标,该算法还预测四个值,这些值是偏移值,以提高边界框的精度。

47e3c3e0-5852-11ed-a3b6-dac502259ad0.png

图4 RCNN示意图

统一候选区域尺寸

通过前面的内容,可以在图片中找出想得到的候选区域,这个候选区域不一定都是同样的大小,如果进行简单的缩放到同一尺寸,会造成不同的拉扯程度,同一张图片选出的候选框进行了不同程度的变形会对结果造成影响。

选择性搜索最终产出的是矩形,论文中对矩形的缩放尝试了两种方式:各向同性缩放、各向异性缩放。

4873cdbe-5852-11ed-a3b6-dac502259ad0.png

图5 RCNN-图像尺寸统一处理示意图

上图 5 中 B 列,直接在原始图片中,把边界扩展延伸成正方形,然后再进行裁剪;如果已经延伸到了原始图片的外边界,那么就用候选框中的颜色进行填充;C 列,先沿边框进行剪裁,然后用固定颜色填充成正方形,这个固定颜色为候选框内颜色均值;D 列方法很简单,不管候选区域的宽高比,直接进行缩放。

在此基础上,作者还尝试了加入 padding 处理,示意图中第一、三行是使用了padding=0 的效果,第二、四行使用了 padding=16 的效果。经过测试发现,使用各向异性缩放结合 padding=16 的精度最高,使 mAp 提高了 3 到 5 个百分点。

网络结构方面,R-CNN 对比现在流行的网络显得略微“单薄”。方案选择上面有 2 个选择:Alexnet 与 VGG16。从表现来说 VGG16 的表现效果会更好一些,VGG16 有较小的卷积核以及较小的步长,泛化能力更强,但是计算量是 Alexnet 的 7 倍。

Fast R-CNN:Towards Real-Time Object Detection with Region Proposal Networks

站在现在的目标检测技术角度去看 R-CNN,可能会觉得这个模型表现的并不是很好,设计的也不够合理,但是在当时 R-CNN 将深度学习引入检测领域,一举将 PASCAL VOC 上的检测率从 35.1% 提升到 53.7%。

R-CNN 也存在着非常大的问题,首先三个模型在训练的方面会是个比较大的挑战,其次也是最主要的就是效率问题,计算 Region Proposals 和 features 平均所花时间:13s/image on a GPU;53s/image on a CPU。最后 2000 个左右的候选区域都需要经过网络处理,这就加大了计算代价。

已经定位了 R-CNN 的计算瓶颈,那么解决方法也就应运而生,R-CNN 的同一作者解决了R-CNN 的一些缺点并提出了新的算法,该算法称为 Fast R-CNN。

Fast R-CNN 算法发表于 2015 年,在同样使用 VGG16 网络作为 Backbone 的情况下,与 R-CNN 相比训练速度快 9 倍,推理时间快了 200 多倍,在 Pascal VOC 数据集上准确率也从 62% 提升到了66%。

整体思路类似于 R-CNN 算法,与之不同的是,不再用候选区域选出来再传入网络中,Fast R-CNN 将输入图像直接提供给 CNN 结构来生成卷积特征图,在原图中使用 SS(Selective Search) 算法提取候选区域,映射到特征图上形成特征矩阵,这样看似简单的调整顺序,从需要对 1k-2k 张图像提取特征转变成只需要对一张图像提取特征,极大的减少了执行时间。

但是新的问题也出来了,对特征图进行预选区域选择后产出的“小特征图”大小不一,无法一下放入网络中进行处理与预测。Fast R-CNN 借鉴了 SPP Net 的设计来解决这个问题。

SPP:Spatial Pyramid Pooling(空间金字塔池化)

SPP-Net 是出自 2015 年发表在 IEEE 上的论文:《Spatial Pyramid Pooling in Deep ConvolutionalNetworks for Visual Recognition》,SPP 是其中核心的设计。

CNN 一般都有卷积部分和全连接部分,其中,卷积层不需要固定尺寸的图像,而全连接层是需要固定大小的输入。

所以当全连接层面对各种尺寸的输入数据时,就需要对输入数据进行 crop(crop 就是从一个大图抠出网络输入大小的 patch,比如 227×227),或 warp(把一个边界框 bounding box 的内容 resize 成 227×227)等一系列操作以统一图片的尺寸大小,比如 224×224(ImageNet)、32×32(LenNet)等。

在 R-CNN 中,因为取出的区域大小各自不同,所以需要将每个 Region Proposal 缩放(warp)成统一的 227x227 的大小并输入到 CNN。但 warp/crop 这种预处理,导致的问题要么被拉伸变形、要么物体不全,限制了识别精确度。如图 6 所示,原本“瘦高”的灯塔,warp 之后体型“发福”了。

48ede8ec-5852-11ed-a3b6-dac502259ad0.png

图6 图像伸缩示意图

SPP Net 开拓了新的思路,原来的思路是在进入 CNN 中之前,将图像统一尺寸,而 CNN 本身可以适应任何尺寸,那么何不尝试在 CNN 结构之后再加入某种结构使后面的全连接层可以接收到固定的输出呢?

下图便是 R-CNN 与 SPP Net 检测流程的对比:

490c0692-5852-11ed-a3b6-dac502259ad0.png

图7 R-CNN与SPP Net流程对比

在卷积结构与 FC 层之间介入金字塔池化层,保证下一层全连接层的输入固定。换句话说,在普通的 CNN 结构中,输入图像的尺寸往往是固定的(比如 224×224 像素),输出则是一个固定维数的向量。SPP Net 在普通的 CNN 结构中加入了 ROI 池化层(ROI Pooling),使得网络的输入图像可以是任意尺寸的,输出则不变,同样是一个固定维数的向量。

Fast R-CNN 中的 ROI Pooling

Fast R-CNN 使用 ROI Pooling 结构将 CNN 结构输出统一成 7×7 的结构,这个过程并不复杂,如图 8 所示,左面假设是特征图(为了可视化使用图像代替),将特征图划分成 7×7 的网格 ,对每一个网格用 Max Pooling 得到 7×7的 结构,图中使用一个 channel 数据示例,实际计算中对每个 channel 做如下处理。

492ff69c-5852-11ed-a3b6-dac502259ad0.png

图8 ROI Pooling示意图

在训练过程中,并不是所有 SS 算法获取的候选框都被使用,相对于选择的 1k-2k 个候选框,只需要其中的一小部分, 从中选择正样本和负样本,正样本指包含需要检测的目标,而负样本不包含需要检测的目标,也就是背景。

为什么要分正样本与负样本,对于选择出的 1k-2k 个候选区域,绝大部分只会有很小的一部分里面包含需要检测的物体,大部分都是背景,如果全部使用包含图像的样本进行训练,会对网络产生不好的影响。区分正负样本的条件是与 GT 的 IOU 大于 0.5 的为正样本,反之为负样本。

Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks

Faster R-CNN 的设计思路

经过前面两个网络的积累 (Fast R-CNN 与 R-CNN),Ross B.Girshick 在 2016 年提出了新的改进版算法 Faster R-CNN,尽管 Fast R-CNN 已经对 R-CNN 的速度进行了大幅度的优化,但是在其结构中还是有明显的瓶颈,Fast R-CNN 的整体结构并不紧凑,先使用卷积神经网络结构进行特征提取,筛选候选区域再进行预测。

在 Faster R-CNN 中,引入了 Region Proposal Network(RPN),RPN 网络与检测网络共享完整的图像卷积特征,从而大大降低了 region proposal 的代价。RPN 是一个 FCN 结构的网络,可以同时预测每个位置上的对象范围和对象得分。RPN 网络不是单独的网络而是融合在整个网络之中,这样更容易训练出好的效果。

4acbe768-5852-11ed-a3b6-dac502259ad0.jpg

图9 Faster R-CNN结构图

代码结构

除了 RPN 结构,Faster R-CNN 与 Fast R-CNN 结构一致,这里不再过多的介绍基础,在前期对 Faster R-CNN 有初步的认识即可,下面给出 Faster R-CNN 实现的代码结构图。

4ae0563a-5852-11ed-a3b6-dac502259ad0.png


图10 Faster R-CNN代码结构






审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • SVM
    SVM
    +关注

    关注

    0

    文章

    154

    浏览量

    32187
  • 分类器
    +关注

    关注

    0

    文章

    152

    浏览量

    13113
  • voc
    voc
    +关注

    关注

    0

    文章

    90

    浏览量

    15572

原文标题:通俗易懂详解二阶段目标检测

文章出处:【微信号:vision263com,微信公众号:新机器视觉】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    深度解析深度学习下的语义SLAM

    随着深度学习技术的兴起,计算机视觉的许多传统领域都取得了突破性进展,例如目标检测、识别和分类等领域。近年来,研究人员开始在视觉SLAM算法中引入
    发表于 04-23 17:18 60次阅读
    <b class='flag-5'>深度</b>解析<b class='flag-5'>深度</b><b class='flag-5'>学习</b>下的语义SLAM

    FPGA深度学习应用或将取代GPU

    硬件公司供货的不断增加,GPU 深度学习的市场需求还催生了大量公共云服务,这些服务为深度学习
    发表于 03-21 15:19

    深度学习在植物病害目标检测研究进展

    关注。 中国农业科学院农业信息研究所/农业农村部农业大数据重点实验室联手甘肃农业大学机电工程学院,组成科研团队,针对深度学习在植物叶部病害检测与识别展开研究, 植物病害目标
    的头像 发表于 11-20 17:19 283次阅读

    基于深度学习的道路小目标检测优化方法

    在使用卷积神经网络进行特征提取时,不同的网络深度对应不同层次的特征。低层特征的分辨率更高,像素更丰富,包含更多的细节信息和位置信息,对于目标的定位有极大帮助,但包含的语义信息较少。
    发表于 11-07 12:33 387次阅读
    基于<b class='flag-5'>深度</b><b class='flag-5'>学习</b>的道路小<b class='flag-5'>目标</b><b class='flag-5'>检测</b>优化方法

    深度学习在工业缺陷检测中的应用

    工业制造领域中,产品质量的保证是至关重要的任务之一。然而,人工的检测方法不仅费时费力,而且容易受到主观因素的影响,从而降低了检测的准确性和一致性。近年来,基于深度学习的技术在工业缺陷
    的头像 发表于 10-24 09:29 610次阅读
    <b class='flag-5'>深度</b><b class='flag-5'>学习</b>在工业缺陷<b class='flag-5'>检测</b>中的应用

    瑞萨电子深度学习算法在缺陷检测领域的应用

    浪费大量的人力成本。因此,越来越多的工程师开始将深度学习算法引入缺陷检测领域,因为深度学习在特征提取和定位方面取得了非常好的效果。
    的头像 发表于 09-22 12:19 504次阅读
    瑞萨电子<b class='flag-5'>深度</b><b class='flag-5'>学习</b>算法在缺陷<b class='flag-5'>检测</b>领域的应用

    深度学习医学图像分割与病变识别的应用实战

    来源:易百纳技术社区 基于深度学习的医学图像分割与病变识别随着人工智能技术的不断发展,其医疗领域的应用越来越受到关注。其中,基于深度学习
    发表于 09-04 11:11

    深度学习框架和深度学习算法教程

    深度学习框架和深度学习算法教程 深度学习是机器学习
    的头像 发表于 08-17 16:11 719次阅读

    什么是深度学习算法?深度学习算法的应用

    什么是深度学习算法?深度学习算法的应用 深度学习算法被认为是人工智能的核心,它是一种模仿人类大脑
    的头像 发表于 08-17 16:03 1482次阅读

    ​2023年十大目标检测模型介绍

    目标检测是计算机视觉中最令人兴奋和具有挑战性的问题之一,深度学习已经成为解决该问题的强大工具。”
    的头像 发表于 08-17 11:49 591次阅读

    基于强化学习目标检测算法案例

    摘要:基于强化学习目标检测算法在检测过程中通常采用预定义搜索行为,其产生的候选区域形状和尺寸变化单一,导致目标
    发表于 07-19 14:35 0次下载

    如何学习基于Tansformer的目标检测算法

    ,也是近年来理论研究的热点。作为计算机视觉中的基础算法,目标检测对后续的人脸识别、目标跟踪、实例分割等任务都起着至关重要的作用。 基于深度学习
    的头像 发表于 06-25 10:37 398次阅读
    如何<b class='flag-5'>学习</b>基于Tansformer的<b class='flag-5'>目标</b><b class='flag-5'>检测</b>算法

    基于 FPGA 的目标检测网络加速电路设计

    用的天网系统等都可以应用本项目的设计,加速目 标检测算法的运算速度以及降低系统的功耗。 本次项目的设计开发过程,我们参考 DAC 2019 低功耗目标
    发表于 06-20 19:45

    康耐视深度学习实现高效血清质量检测

    本期就为大家详细介绍一则康耐视深度学习技术,在样品前处理以及血液检测仪器上所涉及到的血清质量检测应用案例。当异常血液样本(黄疸、溶血、脂血)等不良血液误入到正常样本测试中,可能会出现污
    的头像 发表于 05-26 16:21 611次阅读
    康耐视<b class='flag-5'>深度</b><b class='flag-5'>学习</b>实现高效血清质量<b class='flag-5'>检测</b>

    如何在OpenCV中使用基于深度学习的边缘检测

    在这篇文章中,我们将学习如何在OpenCV中使用基于深度学习的边缘检测,它比目前流行的canny边缘检测器更精确。
    的头像 发表于 05-19 09:52 1676次阅读
    如何在OpenCV中使用基于<b class='flag-5'>深度</b><b class='flag-5'>学习</b>的边缘<b class='flag-5'>检测</b>?