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

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

3天内不再提示

迅速了解目标检测的基本方法并尝试理解每个模型的技术细节

凌智机器视觉 来源:读芯术 作者:读芯术 2021-08-26 15:08 次阅读

本文将讨论目标检测的基本方法(穷尽搜索、R-CNN、Fast R-CNN和Faster R-CNN),并尝试理解每个模型的技术细节。为了让经验水平各不相同的读者都能够理解,文章不会使用任何公式来进行讲解。

开启目标检测的第一步

这是只鸟还是架飞机?—— 图像分类

目标检测(或识别)基于图像分类。图像分类是通过上图所示的像素网格,将图像分类为一个类类别。目标识别是对图像中的对象进行识别和分类的过程。

为了使模型能够学习图像中对象的类别和位置,目标必须是一个五维标签(类别,x, y,宽度,长度)。

对象检测方法的内部工作

一种费机器(奢侈计算)的方法:穷举搜索

最简单的目标检测方法是对图像的各个子部分使用图像分类器,让我们来逐个考虑:

· 首先,选择想要执行目标检测的图像。

· 然后将该图像分割成不同的部分,或者说“区域”。

· 把每个区域看作一个单独的图像。

· 使用经典的图像分类器对每幅图像进行分类。

· 最后,将检测到目标的区域的所有图像与预测标签结合。

这种方法存在一个问题,对象可能具有的不同纵横比和空间位置,这可能导致对大量区域进行不必要的昂贵计算。它在计算时间方面存在太大的瓶颈,从而无法用于解决实际问题。

区域提议方法和选择性搜索

最近有种方法是将问题分解为两个任务:首先检测感兴趣的区域,然后进行图像分类以确定每个对象的类别。

第一步通常是使用区域提议方法。这些方法输出可能包含感兴趣对象的边界框。如果在一个区域提议中正确地检测到目标对象,那么分类器也应该检测到了它。这就是为什么对这些方法而言,快速和高回应率非常重要。重要的是这两个方法不仅要是快速的,还要有着很高的回应率。

这两个方法还使用了一种聪明的体系结构,其中目标检测和分类任务的图像预处理部分相同,从而使其比简单地连接两个算法更快。选择性搜索是最常用的区域提议方法之一。

它的第一步是应用图像分割。

从图像分割输出中,选择性搜索将依次进行:

· 从分割部分创建边界框,然后将其添加到区域建议列表中。

· 根据四种相似度:颜色,纹理,大小和形状,将几个相邻的小片段合并为较大的片段。

· 返回到第一步,直到该部分覆盖了整个图像。

在了解了选择性搜索的工作原理后,接着看一些使用该法最常见的目标检测算法。

第一目标检测算法:R-CNN

Ross Girshick等人提出了区域CNN(R-CNN),允许选择性搜索与CNN结合使用。实际上,对于每个区域方案(如本文中的2000),一个正向传播会通过CNN生成一个输出向量。这个向量将被输入到one-vs-all分类器中。每个类别一个分类器,例如一个分类器设置为如果图像是狗,则标签=1,否则为0,另一个分类器设置为如果图像是猫,标签= 1,否则为0,以此类推。R-CNN使用的分类算法是SVM。

但如何将该地区标记为提议呢?当然,如果该区域完全匹配真值,可以将其标为1,如果给定的对象根本不存在,这个对象可以被标为0。

如果图像中存在对象的一部分怎么办?应该把这个区域标记为0还是1?为了确保训练分类器的区域是在预测一幅图像时可以实际获得的区域(不仅仅是那些完美匹配的区域),来看看选择性搜索和真值预测的框的并集(IoU)。

IoU是一个度量,用预测的框和真值框的重叠面积除以它们的并集面积来表示。它奖励成功的像素检测,惩罚误报,以防止算法选择整个图像。

回到R-CNN方法,如果IoU低于给定的阈值(0.3),那么相对应的标签将是0。

在对所有区域建议运行分类器后,R-CNN提出使用一个特定类的边界框(bbox)回归量来优化边界框。bbox回归量可以微调边界框的边界位置。例如,如果选择性搜索已经检测到一只狗,但只选择了它的一半,而意识到狗有四条腿的bbox回归量,将确保狗的整个身体被选中。

也多亏了新的bbox回归预测,我们可以使用非最大抑制(NMS)舍弃重叠建议。这里的想法是识别并删除相同对象的重叠框。NMS根据分类分数对每个类的建议进行排序,并计算具有最高概率分数的预测框与所有其他预测框(于同一类)的IoU。如果IoU高于给定的阈值(例如0.5),它就会放弃这些建议。然后对下一个最佳概率重复这一步。

综上所述,R-CNN遵循以下步骤:

· 根据选择性搜索创建区域建议(即,对图像中可能包含对象的部分进行预测)。

· 将这些地区带入到pre-trained模型,然后运用支持向量机分类子图像。通过预先训练的模型运行这些区域,然后通过SVM(支持向量机)对子图像进行分类。

· 通过边界框预测来运行正向预测,从而获得更好的边界框精度。

· 在预测过程中使用NMS去除重叠的建议。

不过,R-CNN也有一些问题:

· 该方法仍然需要分类所有地区建议,可能导致达到计算瓶颈——不可能将其用于实时用例。

· 在选择性搜索阶段不会学习,可能导致针对某些类型的数据集会提出糟糕的区域建议。

小小的改进:Fast R-CNN(快速R-CNN)

Fast R-CNN,顾名思义,比R-CNN快。它基于R-CNN,但有两点不同:

· 不再向CNN提供对每个地区的提议,通过对CNN提供整幅图像来生成一个卷积特性映射(使用一个过滤器将矢量的像素转换成另一个矢量,能得到一个卷积特性映射)。接下来,建议区域被识别与选择性搜索,然后利用区域兴趣池(RoI pooling)层将它们重塑成固定大小,从而能够作为全连接层的输入。

· Fast-RCNN使用更快,精度更高的softmax层而不是SVM来进行区域建议分类。

以下是该网络的架构:

如下所示,Fast R-CNN在训练和测试方面比R-CNN要快得多。但是,受选择性搜索方法的影响,该方法仍然存在瓶颈。

Faster R-CNN(更快的R-CNN)

虽然Fast R-CNN比R-CNN快得多,但其瓶颈仍然是选择性搜索,因为它非常耗时。因此,任少卿等人设计了更快R-CNN来解决这个问题,并提出用一个非常小的卷积网络区域提议网Region Proposal network(RPN)代替选择性搜索来寻找感兴趣的区域。

简而言之,RPN是一个直接寻找区域建议的小型网络。一种简单的方法是创建一个深度学习模型,输出x_min、y_min、x_max和x_max来获得一个区域建议的边界框(如果我们想要2000个区域,那么就需要8000个输出)。然而,有两个基本问题:

· 图像的大小和比例可能各不相同,所以很难创建一个能正确地预测原始坐标的模型。

· 在预测中有一些坐标排序约束(x_min 《 x_max, y_min 《 y_max)。

为了克服这个问题,我们将使用锚:锚是在图像上预设好不同比例和比例的框。(锚点是预定义的框,它们具有不同的比例,并在整个图像上缩放。)

例如,对于给定的中心点,通常从三组大小(例如,64px, 128px, 256px)和三种不同的宽高比(1/1,1/2,2/1)开始。在本例中,对于图像的给定像素(方框的中心),最终会有9个不同的方框。

那么一张图片总共有多少个锚点呢?

我们不打算在原始图像上创建锚点,而是在最后一个卷积层的输出特征图上创建锚点,这一点非常重要。例如,对于一个1000*600的输入图像,由于每个像素有一个锚点,所以有1000 *600*9=5400000个锚点,这是错误的。确实,因为要在特征图谱上创建它们,所以需要考虑子采样比率,即由于卷积层的大步移动,输入和输出维度之间的因子减少。

在示例中,如果我们将这个比率设为16(像在VGG16中那样),那么特征图谱的每个空间位置将有9个锚,因此“只有”大约20000个锚(5400000/ 16^2)。这意味着输出特征中的两个连续像素对应于输入图像中相距16像素的两个点。注意,这个下降采样比率是Faster R-CNN的一个可调参数

现在剩下的问题是如何从那20000个锚到2000个区域建议(与之前的区域建议数量相同),这是RPN的目标。

如何训练区域建议网络

要实现这一点,需要RPN告知框包含的是对象还是背景,以及对象的精确坐标。输出预测有作为背景的概率,作为前景的概率,以及增量Dx, Dy, Dw, Dh,它们是锚点和最终建议之间的差异。

1.第一,我们将删除跨边界锚(即因为图像边界而被减去的锚点),这给我们留下了约6000张图像。

2.如果存在以下两个条件中的任一,我们需要标签锚为正:

· 在所有锚中,该锚具有最高的IoU,并带有真值框。

· 锚点至少有0.7的IoU,并带有真值框。

3.如果锚的IoU在所有真值框中小于0.3,需要标签其为负。

4.舍弃所有剩下的锚。

5.训练二进制分类和边界框回归调整。

最后,关于实施的几点说明:

· 希望正锚和负锚的数量在小批处理中能够平衡。

· 因为想尽量减少损失而使用了多任务损失,这是有意义的——损失有错误预测前景或背景的错误,以及方框的准确性的错误。

· 使用预先训练好的模型中的权值来初始化卷积层。

如何使用区域建议网络

· 所有锚(20000)计入后得到新的边界框和成为所有边界框的前景(即成为对象)的概率。

· 使用non-maximum抑制。

· 建议选择:最后,仅保留按分数排序的前N个建议(当N=2000,回到2000个区域建议)。

像之前的方法一样,最终获得了2000个方案。尽管看起来更复杂,这个预测步骤比以前的方法更快更准确。

下一步是使用RPN代替选择性搜索,创建一个与Fast R-CNN相似的模型(即RoI pooling和一个分类器+bbox回归器)。然而,不像之前那样,把这2000个建议进行裁剪,然后通过一个预先训练好的基础网络进行传递。而是重用现有的卷积特征图。实际上,使用RPN作为提案生成器的一个好处是在RPN和主检测器网络之间共享权值和CNN。

· 使用预先训练好的网络对RPN进行训练,然后进行微调。

· 使用预先训练好的网络对检测器网络进行训练,然后进行微调。使用来自RPN的建议区域。

· 使用来自第二个模型的权重对RPN进行初始化,然后进行微调——这将是最终的RPN模型)。

· 最后,对检测器网络进行微调(RPN权值固定)。CNN的特色图将在两个网络之间共享。

综上所述,Faster R-CNN比之前的方法更准确,比Fast-R-CNN快10倍左右,这是一个很大的进步,也是实时评分的开始。

即便如此,区域建议检测模型对于嵌入式系统来说还是不够,因为这些模型太笨重,而且对于大多数实时评分案例来说速度也不够快——最后一例是大约每秒检测5张图像。

编辑:jq

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

    关注

    40

    文章

    3437

    浏览量

    128235
  • 分类器
    +关注

    关注

    0

    文章

    152

    浏览量

    13113
  • cnn
    cnn
    +关注

    关注

    3

    文章

    327

    浏览量

    21304

原文标题:深入了解目标检测深度学习算法的技术细节

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

收藏 人收藏

    评论

    相关推荐

    深入了解目标检测深度学习算法的技术细节

    本文将讨论目标检测的基本方法(穷尽搜索、R-CNN、FastR-CNN和FasterR-CNN),并尝试理解
    的头像 发表于 04-30 08:27 17次阅读
    深入<b class='flag-5'>了解</b><b class='flag-5'>目标</b><b class='flag-5'>检测</b>深度学习算法的<b class='flag-5'>技术细节</b>

    聊聊50G PON的技术细节

    今天给大家详细说说50GPON的一些技术细节。我尽量用通俗易懂的方式解释,相信大家看了一定会有收获。█50GPON的技术指标PON(无源光网络)是一个接入网技术。它的核心作用,就类似一个“有线”基站
    的头像 发表于 04-30 08:05 29次阅读
    聊聊50G PON的<b class='flag-5'>技术细节</b>

    【飞腾派4G版免费试用】第四章:部署模型到飞腾派的尝试

    本章记录这几天尝试将训练的佩奇检测模型部署到飞腾派的阶段总结。
    的头像 发表于 12-20 20:54 1215次阅读
    【飞腾派4G版免费试用】第四章:部署<b class='flag-5'>模型</b>到飞腾派的<b class='flag-5'>尝试</b>

    【飞腾派4G版免费试用】第三章:抓取图像,手动标注完成自定义目标检测模型训练和测试

    抓取图像,手动标注完成自定义目标检测模型训练和测试 在第二章中,我介绍了模型训练的一般过程,其中关键的过程是带有标注信息的数据集获取。训练
    发表于 12-16 10:05

    【KV260视觉入门套件试用体验】Vitis-AI加速的YOLOX视频目标检测示例体验和原理解

    本文将介绍如何使用Vitis-AI加速YOLOX模型实现视频中的目标检测对相关源码进行解读。由于演示的示例程序源码是Vitis-AI开源项目提供的,本文演示之前会介绍所需要的准备工
    发表于 10-06 23:32

    基于机器学习的车位状态预测方法

    每个车位在不同时间段停车状态的历史数据,形成停车状态历史数据集分别提取特征变量集和目标变量集;将所述特征变量集和所述目标变量集作为训练样本,初始化
    发表于 09-21 07:24

    TPU-Mlier在模型转换过程中使用的模型验证方法是什么?

    您好,请教一下模型转换中的验证方法用到的是什么,是否是通过比较模型输出使用数学函数来检测差异?使用了什么数学函数,是否以公差进行对比判断呢
    发表于 09-15 07:40

    MATLAB的行人目标检测方法有哪些?

    MATLAB的行人目标检测方法有哪些,就是主要的方法,基于背景的,基于目标的,还有其他的。都有哪些?
    发表于 08-23 16:30

    基于Transformer的目标检测算法

    掌握基于Transformer的目标检测算法的思路和创新点,一些Transformer论文涉及的新概念比较多,话术没有那么通俗易懂,读完论文仍然不理解算法的细节部分。
    发表于 08-16 10:51 434次阅读
    基于Transformer的<b class='flag-5'>目标</b><b class='flag-5'>检测</b>算法

    介绍一种基于分层聚类方法的木马通信行为检测模型

    一种基于分层聚类方法的木马通信行为检测模型
    的头像 发表于 07-30 11:51 998次阅读
    介绍一种基于分层聚类<b class='flag-5'>方法</b>的木马通信行为<b class='flag-5'>检测</b><b class='flag-5'>模型</b>

    目标检测EDA方法有哪些 eda和pcb的区别

    目标检测(Object Detection)是计算机视觉领域中的重要任务,用于在图像或视频中定位和识别出多个感兴趣的对象。EDA(Enhancement, Detection, and Augmentation)方法是一种综合的
    发表于 07-20 14:43 925次阅读

    如何区分图像分类和目标检测技术

    目标检测的问题定义是确定目标在给定图像中的位置,如目标定位,以及每个目标属于哪个类别,即
    发表于 07-11 12:50 348次阅读

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

    CNN 更容易满足实际应用场景中 的低功耗、实时性要求。而且目标检测算法发展迅速,针对 CNN 的硬件加速研究也大有可 为。所以本项目计划使用 PYNQ-Z2 开发板设计一个硬件电路来加速
    发表于 06-20 19:45

    目标检测模型集成方法总结

    模型集成是一种提升模型能力的常用方法,但通常也会带来推理时间的增加,在物体检测上效果如何,可以看看。
    的头像 发表于 06-07 17:39 800次阅读
    <b class='flag-5'>目标</b><b class='flag-5'>检测</b>多<b class='flag-5'>模型</b>集成<b class='flag-5'>方法</b>总结

    快速入门自动驾驶中目标检测算法

    现在目标检测算法总结 1. 目标检测算法在机动车和行人检测识别上应用较多,在非机动车上应用较少 2. 对于
    发表于 06-06 09:40 0次下载
    快速入门自动驾驶中<b class='flag-5'>目标</b><b class='flag-5'>检测</b>算法