04目标检测-Two-stage的目标检测算法

这篇具有很好参考价值的文章主要介绍了04目标检测-Two-stage的目标检测算法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、 深度学习目标检测算法介绍

二、 基于Two-stage的目标检测算法

 三、Two-stage基本流程

四、Two-stage常见算法

五、Two-stage核心组件 

1、Two-stage的两个核心组件

2、主干CNN网络设计原则

3、RPN网络

3.1 Faster R-CNN 网络结构

3.2 RPN(Region Proposal Networks)网络结构

3.2.1 整体理解:

3.2.2 详细介绍 :

A、利用区域推荐生成anchor

B、分类和边框回归

C、生成Proposal

D、ROI Pooling(可以理解为抠图+resize的操作)


一、 深度学习目标检测算法介绍

       在目标检测-传统检测方法中,我们介绍了目标检测中传统的算法和目标检测的方式,在目标检测-传统方法与深度学习算法对比中,我们对传统的目标检测算法和深度学习目标检测算法简单做了比较,此篇记录了深度学习目标检测算法内容,深入讲述一下深度学习算法在目标检测的原理和效果。而目标检测深度学习算法分为类两个阶段: 

  • One-stage(YOLO和SSD系列):直接回归目标位置。
  • Two-stage(Faster RCNN系列):利用RPN网络对候选区域进行推荐,即通过一个完整的卷积神经网完成检测过程。

       我们首先对Two-stage进行介绍。

二、 基于Two-stage的目标检测算法

       Two-stage的目标检测算法主要是通过一个完整的卷积神经网络
来完成目标检测的过程,进行目标检测时用到的特征就是CNN的特征,也就是通过一个CNN卷积神经网来提取对候选区域目标的特征的描述。

        对于Two-stage的目标检测算法最典型的代表就是2014年提出的提出R-CNN到faster RCNN的一系列算法。

       在训练过程中需要两个步骤:训练RPN网络、目标区域的网络训练。相对于传统的目标检测算法,不需要再进行训练分类器,不需要再做特征表示这个过程。整个过程都是从A到B的一个完整的卷积神经网络完成,同时精度得到提升。不过相比于one-stage慢些。

        上述描述可以总结为以下几点:

  • CNN卷积特征
  • R. Girshick et al., 2014提出R-CNN到faster RCNN
  • 端到端的目标检测(RPN网络)
  • 准确度高、速度相对one-stage慢

 三、Two-stage基本流程

04目标检测-Two-stage的目标检测算法,人工智能方面,深度学习,目标检测,人工智能

       输入图片------对图片进行深度特征的提取(主干神经网络)------RPN网络完成滑动窗口所完成的任务,也就是产生候选区域,完成候选区域分类(背景和目标)对目标的位置进行初步定位-------为了不重复的计算CNN特征,通过roi_pooling完成抠图操作-----fc全连接层对候选区域进行表示----分类和回归对候选目标的类别判定和位置精修(得到物体的真实类别)
 

详细流程:

       首先输入一张图片,然后图片进行深度特征提取,也就是一幅图作为输入经过一个卷积神经网络,通常将其称为主干网络,典型的主干网络包括VGG、ResNet等一些经典的卷积神经网络,再然后通过一个RPN网络来完成传统目标检测算法中滑动窗口所完成的任务,也就是产生候选区域。在进行候选框区域提取的同时对候选框区域分类(分类过程中将候选框区域分类为背景和目标两种不同类别。在RPN网络产生候选区域的时候也会对目标的位置进行初步的预测,意味着RPN网络同时完成区域分类和位置精修两个环节。在得到候选区域之后,通过roi_pooling层对候选区域进一步精确进行位置回归和修正,可以将roi_pooling理解为抠图,接下来得到候选目标对应到feature map上的特征后,会通过一个fc层,来进一步对候选区域的特征进行表示,接下来通过分类和回归来分别完成对候选目标的类别的判定以及候选目标位置的精修,这里的类别不同于RPN网络的类别,这里通常会得到物体真实的类别,回归主要得到当前目标具体的坐标位置,通常表示为一个矩形框,即四个值(x,y,w,h)。

四、Two-stage常见算法

  • RCNN
  • Fast RCNN
  • Faster RCNN
  • Faster RCNN变种

04目标检测-Two-stage的目标检测算法,人工智能方面,深度学习,目标检测,人工智能

五、Two-stage核心组件 

1、Two-stage的两个核心组件

       Two-stage有两个重要的核心组件是:

  • CNN网络(主干网络)
  • RPN网络

2、主干CNN网络设计原则

  • 从简单到复杂,再从复杂到简单的卷积神经网络

        简单的网络结构:比较经典的就是LeNet(具有一个输入层,两个卷积层,两个池化层,3个全连接层,但LeNet在大规模的任务中网络表达能力和抽象能力就相对弱一些)

       复杂的网络结构:经过LeNet又出现了LSNet、Resnet、Vgg等复杂的网络结构,这些网路结构往往是用来增加网络的深度,因为网络越深,非线性表达能力越强,得到物体更加抽象的表达,对于图像的变化敏感度越不敏感,鲁棒性越强,解决非线性任务能力越强,同时也会导致梯度消失或梯度弥散。其中最典型的是Resnet可是达到100多层的深度,再经典的就是GoogleNet。

  • 多尺度特征融合的网络
  • 更轻量级的CNN网络

       在设计时候考虑性能和模型大小,此时就需要用到轻量级的CNN网络,如经典的ShuffleNet、MobileNet等。

3、RPN网络

       在了解RPN网络前我们先了解一些相关概念区域推荐(Anchor机制)

       在了解了上述的Anchor机制后,我们详解讲解一下RPN网络。

       SPPnet、Fast R-CNN等目标检测算法已经大幅降低了目标检测网络的运行时间。可是尽管如此,仍然不能在工程上做到实时检测,这主要是因为region proposal computation耗时在整个网络用时中的占比较高。比如,Fast R-CNN如果忽略提取region proposals所花费的时间,就几乎可以做到实时性。为此,本文介绍了Region Proposal Network(RPN)用以解决该问题。经实验证实,应用该算法的系统在GPU上的处理速度可以达到5fps的帧率。

3.1 Faster R-CNN 网络结构

     04目标检测-Two-stage的目标检测算法,人工智能方面,深度学习,目标检测,人工智能

04目标检测-Two-stage的目标检测算法,人工智能方面,深度学习,目标检测,人工智能

      上图展示了网络的大致结构。可以发现,Fast R-CNN网络分为两部分,一部分是Region Proposal Network(RPN),另一部分是Fast R-CNN。其中RPN包括图中proposals和conv layers,而detection network包括conv layers、ROI pooling及后面全连接层等部分。另外,conv layers被RPN和Fast R-CNN object detection network两部分共享。

3.2 RPN(Region Proposal Networks)网络结构

04目标检测-Two-stage的目标检测算法,人工智能方面,深度学习,目标检测,人工智能

      RPN,从字面上理解区域候选网络,是用来生成候选区域的网络。

3.2.1 整体理解:
  • 区域推荐(Anchor机制)
  • 分类和回归
  • ROI Pooling
  • 04目标检测-Two-stage的目标检测算法,人工智能方面,深度学习,目标检测,人工智能

04目标检测-Two-stage的目标检测算法,人工智能方面,深度学习,目标检测,人工智能

        图中原始图像(600*1000)经过主干网络(如ResNet、VGG16:它有13层可共享的卷积层、ZF:Zeiler and Fergus model 它有5层可共享的卷积层)共享卷积层后生成通道数为256的40x60的feature maps(也称共享Feature Maps)。这些feature maps被RPN网络和Fast R-CNN detector共享

        RPN网络的输入是对主干网络输出的通道数为256的40x60的feature maps,在这个特征参数的基础上,使用一个size为nxn(二维,一般是3x3)的空间滑动窗口feature maps(40x60x256)进行非标准的卷积运算strides=1,padding=(n-1)/2,单通道卷积核,运算和标准池化类似,运算前后通道数不变,计算结果仍然是40x60x256,即仍然是256个40x60的特征图。可以发现,每个位置通过卷积求得的特征是256-d(256维度),这就将每个滑动窗口都映射到一个256-d的低维特征。

       假如通过一个3×3的滑动窗口,在40x60的区域上进行滑动,可以产生40×60个3×3个可能含有目标的建议区域窗口,每个3×3的窗口的中心点都对应原始图片中一个目标区域的中心点,即滑动窗口的中心在image上对应一片区域(相当于中心位置的神经元在image上的感受野),计算出该区域的中心位置后以该位置为中心,以Faster R-CNN为例,设置了三种尺寸为(128x128,256x256,512x512)面积的box,每一个面积取三种不同的长宽比例(1:1,1:2,2:1),也就是每一个点会有9个anchor box。此时每个滑动窗口的中心点都对应9个anchor box,所以 40x60个3x3的滑动窗口的中心点对应的 anchor box 有 40x60x9 个anchor box。

        然后对每个特征向量做两次全连接操作,一个分支得到2个分数(前景和背景的置信度),
另一个分支得到4个坐标(目标的坐标框信息),4个坐标是指针对原图坐标的偏移。由于要对每个向量做同样的全连接操作,等同于对整个特征图做两次1 × 1的卷积,得到一个2 × 40 × 60和一个4 × 40 × 60大小的特征图。最终再结合预先定义的Anchors,完成后处理操作,得到候选框。 

3.2.2 详细介绍 :

      RPN网络可以分为这么几部分:

  • 利用区域推荐生成anchor
  • 对anchor进行二分类
  • 边框回归
  • 生成最终的Proposal
  • ROI pooling
A、利用区域推荐生成anchor

       anchor可以翻译为锚,这个anchor指的是输入图像上的点,是生成候选框的基础,有了anchor后就可以为每个anchor即每个锚点生成不同大小和长宽比的box,这些box就是anchor box,用这些box来覆盖输入图片中要检测的物体(当然,会生成很多很多的box, 在图片上密密麻麻的,需要后续的操作进行筛选)。筛选过后剩下的就是最终的Proposal。Proposal会给ROIPooling然后进行分类和回归(后面介绍)

       生成anchor box分为两步:

  • 第一先从Feature map的点对应回输入图像感受野的中心点;
  • 第二以该点为中心点创建不同面积和长宽比的box,这个也是输入图像上的box。
     

       从Feature map到图像中的anchor:FPN会用一个大小为3x3,padding=2,stride=1的卷积核遍历特征图(只取一个维度为例),这样就会将backbone输出的特征图中每一个点(也就是每一个值)都作为3x3的中心点遍历了一遍。

       遍历过程中会找到3x3窗口的中心点对应到输入图片的感受野的中心点,该点就是anchor。

       为什么可以对应会输入图片中的点呢?因为backbone中都是卷积和池化的操作。所以是可以将特征图中的点对应到原图的,也就是该点的感受野,感受野的计算这里就不再描述了。

       有了anchor点后就可以为每个点生成anchor box了,Faster R-CNN中设置了三种尺寸为(128^2,256^2,51^2)面积的box,每一个面积取三种不同的长宽比例(1:1,1:2,2:1),也就是每一个点会有9个anchor box。

B、分类和边框回归

       在第一步生成了很多很多的anchor box,后面就是要对这些anchor box进行分类和边框回归的操作。

       分类操作就是上图中上面的那个分支,首先通过一个1x1的卷积,将维度降为18(因为是9个框,每个框进行二分类),通过softmax进行二分类(框中有没有目标,也就是前景和背景),来生成后面的正负样本。

       边框回归的目的是使anchor box更接近ground truth。首先也会通过一个1x1的卷积,维度降为36(和之前的类似每个框四个值来确定)。

C、生成Proposal

       有了前面生成的anchor box后,下一步就是利用各种方法剔除我们不需要的那些box,主要分一下几步:

  • 第一步:先将anchor box利用feat_stride和im_info(这个里面保存了原始图像的大小,注意这个不是网络输入的图像,是原始图像)将box映射会原始图像,将严重超出边界的box剔除;
  • 第二步:按照上面说的二分类的分支得到的score得分进行排序,提取前2000个;
  • 第三步:对得到的2000个box执行NMS(非极大值抑制);
  • 第四步:将得到的结果再进行排序,取前300个作为最终的Proposal,给后面进行分类和回归。

D、ROI Pooling(可以理解为抠图+resize的操作)
  1. 根据输入image,将 ROI 映射到 feature map 对应位置;
  2. 将映射后的区域划分为相同大小的 sections(sections数量与输出的维度相同);
  3. 对每个 sections 进行 max pooling 操作;

       ROI Pooling是RPN网络中的一个层,对于这个层它的输入包括:特征图、rois(1×5×1×1)区域的坐标 以及 ROI参数(尺度标识,比如当前图像下采样了8倍,需要设置为1/8表示为原始的1/8,计算时就会按照这个比例从原始的feature map中进行抠图),rois这个坐标区域为什么是5个值呢?正常表示一个矩形四个值就够了(x,y,w,h)。第5个值放在第一个位置,表示当前的roi的信息所对应到的当前的batchsize中的哪一个图片,实际它是一个索引,这个索引表示了当前这个roi所对应到的特征图这个一整个的batchsize数据的第几个图片。因为对网络训练时通常会处理n张图,对于这样一个batchsize的数据,每一个roi需要知道对应的特征图是哪一张。  在经过了ROIPooling后会输出一个固定尺寸的feature map,这个固定尺寸具体是多大也由ROI参数来决定,比如将ROI参数设置为8*8,最终输出的feature map就为 m*c*8*8.     为什么要固定到同样的大小呢?因为如果后面要使用fc的话,如果特征图的大小是不一致的,在使用fc时会出错,因为fc的参数量是定的。

上一篇:03目标检测-传统方法与深度学习算法对比

下一篇:06目标检测-One-stage的目标检测算法文章来源地址https://www.toymoban.com/news/detail-733071.html

到了这里,关于04目标检测-Two-stage的目标检测算法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 毕业设计-计算机视觉:刨花板表面小目标缺陷检测系统 人工智能 算法 python

      目录  前言 设计思路 一、课题背景与意义 二、算法理论原理 2.1 自适应空间特征融合模块 2.2 Ghost 模块 三、检测的实现 3.1 数据集 3.2 实验环境搭建 3.3 实验及结果分析 实现效果图样例 最后        📅大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临

    2024年01月16日
    浏览(43)
  • 毕业设计-基于深度学习玉米叶病虫害识别系统 YOLO python 机器学习 目标检测 人工智能 算法

    目录 前言 设计思路 一、课题背景与意义 二、算法理论原理 2.1 卷积神经网络 2.2 YOLOv5算法 三、检测的实现 3.1 数据集 3.2 实验环境搭建 3.3 实验及结果分析 实现效果图样例 最后        📅大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准

    2024年02月03日
    浏览(46)
  • 毕业设计-基于深度学习的水面漂浮物目标检测算法系统 YOLO python 卷积神经网络 人工智能

    目录 前言 设计思路 一、课题背景与意义 二、算法理论原理 2.1 Faster RCNN 2.2 YOLOv5算法 三、检测的实现 3.1 数据集 3.2 实验环境搭建 3.3 实验及结果分析 实现效果图样例 最后        📅大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备

    2024年02月19日
    浏览(39)
  • 迈向多模态AGI之开放世界目标检测 | 人工智能

    作者: 王斌 谢春宇 冷大炜 引言 目标检测是计算机视觉中的一个非常重要的基础任务,与常见的的图像分类/识别任务不同,目标检测需要模型在给出目标的类别之上,进一步给出目标的位置和大小信息,在CV三大任务(识别、检测、分割)中处于承上启下的关键地位。当前

    2024年02月16日
    浏览(34)
  • 人工智能 - 目标检测:发展历史、技术全解与实战

    本文全面回顾了目标检测技术的演进历程,从早期的滑动窗口和特征提取方法到深度学习的兴起,再到YOLO系列和Transformer的创新应用。通过对各阶段技术的深入分析,展现了计算机视觉领域的发展趋势和未来潜力。 关注TechLead,分享AI全维度知识。作者拥有10+年互联网服务架

    2024年02月05日
    浏览(29)
  • 人工智能TensorFlow PyTorch物体分类和目标检测合集【持续更新】

    1. 基于TensorFlow2.3.0的花卉识别 基于TensorFlow2.3.0的花卉识别Android APP设计_基于安卓的花卉识别_lilihewo的博客-CSDN博客 2. 基于TensorFlow2.3.0的垃圾分类 基于TensorFlow2.3.0的垃圾分类Android APP设计_def model_load(img_shape=(224, 224, 3)_lilihewo的博客-CSDN博客   3. 基于TensorFlow2.3.0的果蔬识别系统的

    2024年02月09日
    浏览(37)
  • AI一叶知秋:从目标检测部署浅谈人工智能发展

    笔者写这篇文章也有讨巧之嫌,仅以个人视角分享一些看法,主要从实践部署来谈谈近两年来计算机视觉模型的变化,不过AI是一个宏大的话题,每个人定义的人工智能就不一样,我们先来探讨一下何为人工智能。百度百科中是这样定义的: 人工智能是研究、开发用于模拟、

    2024年02月02日
    浏览(79)
  • 人工智能学习与实训笔记(三):神经网络之目标检测问题

    人工智能专栏文章汇总:人工智能学习专栏文章汇总-CSDN博客 目录 三、目标检测问题 3.1 目标检测基础概念 3.1.1 边界框(bounding box) 3.1.2 锚框(Anchor box) 3.1.3 交并比 3.2 单阶段目标检测模型YOLOv3 3.2.1 YOLOv3模型设计思想 3.2.2 YOLOv3模型训练过程 3.2.3 如何建立输出特征图与预

    2024年02月20日
    浏览(36)
  • YOLO目标检测——真实和人工智能生成的合成图像数据集下载分享

    YOLO真实和人工智能生成的合成图像数据集,真实场景的高质量图片数据,图片格式为jpg,数据场景丰富。可用于检测图像是真实的还是由人工智能生成。 数据集点击下载 :YOLO真实和人工智能生成的合成图像数据集+120000图片+数据说明.rar

    2024年02月10日
    浏览(34)
  • 基于人工智能与边缘计算Aidlux的鸟类检测驱赶系统(可修改为coco 80类目标检测)

    ●项目名称 基于人工智能与边缘计算Aidlux的鸟类检测驱赶系统(可修改为coco 80类目标检测) ●项目简介 本项目在Aidlux上部署鸟类检测驱赶系统,通过视觉技术检测到有鸟类时,会进行提示。并可在源码上修改coco 80类目标检测索引直接检测其他79类目标,可以直接修改、快速

    2024年02月12日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包