基于faster-rcnn的目标物体检测_传统的目标检测算法

基于faster-rcnn的目标物体检测_传统的目标检测算法继RCNN,fastRCNN之后,目标检测界的领军人物RossGirshick在2015年提出fasterRCNN。目标检测速度达到15fps。

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

Ren, Shaoqing, et al. “Faster R-CNN: Towards real-time object detection with region proposal networks.” Advances in Neural Information Processing Systems. 2015.

本文是继RCNN[1],fast RCNN[2]之后,目标检测界的领军人物Ross Girshick团队在2015年的又一力作。简单网络目标检测速度达到17fps,在PASCAL VOC上准确率为59.9%;复杂网络达到5fps,准确率78.8%。

作者在github上给出了基于matlab和python的源码。对Region CNN算法不了解的同学,请先参看这两篇文章:《RCNN算法详解》,《fast RCNN算法详解》。

思想

从RCNN到fast RCNN,再到本文的faster RCNN,目标检测的四个基本步骤(候选区域生成,特征提取,分类,位置精修)终于被统一到一个深度网络框架之内。所有计算没有重复,完全在GPU中完成,大大提高了运行速度。
这里写图片描述

faster RCNN可以简单地看做“区域生成网络+fast RCNN“的系统,用区域生成网络代替fast RCNN中的Selective Search方法。本篇论文着重解决了这个系统中的三个问题:

  1. 如何设计区域生成网络
  2. 如何训练区域生成网络
  3. 如何让区域生成网络和fast RCNN网络共享特征提取网络

区域生成网络:结构

基本设想是:在提取好的特征图上,对所有可能的候选框进行判别。由于后续还有位置精修步骤,所以候选框实际比较稀疏。
这里写图片描述

特征提取

原始特征提取(上图灰色方框)包含若干层conv+relu,直接套用ImageNet上常见的分类网络即可。本文试验了两种网络:5层的ZF[3],16层的VGG-16[[^-4]],具体结构不再赘述。
额外添加一个conv+relu层,输出5139256维特征(feature)。

候选区域(anchor)

特征可以看做一个尺度5139的256通道图像,对于该图像的每一个位置,考虑9个可能的候选窗口:三种面积 { 12 8 2 , 25 6 2 , 51 2 2 } × \{128^2, 256^2, 512^2 \}\times {
1282,2562,5122}×
三种比例 { 1 : 1 , 1 : 2 , 2 : 1 } \{ 1:1, 1:2, 2:1\} {
1:
1,1:2,2:1}
。这些候选窗口称为anchors。下图示出51
39个anchor中心,以及9种anchor示例。
这里写图片描述

在整个faster RCNN算法中,有三种尺度。
原图尺度:原始输入的大小。不受任何限制,不影响性能。
归一化尺度:输入特征提取网络的大小,在测试时设置,源码中opts.test_scale=600。anchor在这个尺度上设定。这个参数和anchor的相对大小决定了想要检测的目标范围。
网络输入尺度:输入特征检测网络的大小,在训练时设置,源码中为224*224。

窗口分类和位置精修

分类层(cls_score)输出每一个位置上,9个anchor属于前景和背景的概率;窗口回归层(bbox_pred)输出每一个位置上,9个anchor对应窗口应该平移缩放的参数。
对于每一个位置来说,分类层从256维特征中输出属于前景和背景的概率;窗口回归层从256维特征中输出4个平移缩放参数。

就局部来说,这两层是全连接网络;就全局来说,由于网络在所有位置(共51*39个)的参数相同,所以实际用尺寸为1×1的卷积网络实现。

实际代码中,将51399个候选位置根据得分排序,选择最高的一部分,再经过Non-Maximum Suppression获得2000个候选结果。之后才送入分类器和回归器。
所以Faster-RCNN和RCNN, Fast-RCNN一样,属于2-stage的检测算法。

区域生成网络:训练

样本

考察训练集中的每张图像:
a. 对每个标定的真值候选区域,与其重叠比例最大的anchor记为前景样本
b. 对a)剩余的anchor,如果其与某个标定重叠比例大于0.7,记为前景样本;如果其与任意一个标定的重叠比例都小于0.3,记为背景样本
c. 对a),b)剩余的anchor,弃去不用。
d. 跨越图像边界的anchor弃去不用

代价函数

同时最小化两种代价:
a. 分类误差
b. 前景样本的窗口位置偏差
具体参看fast RCNN中的“分类与位置调整”段落。

超参数

原始特征提取网络使用ImageNet的分类样本初始化,其余新增层随机初始化。
每个mini-batch包含从一张图像中提取的256个anchor,前景背景样本1:1.
前60K迭代,学习率0.001,后20K迭代,学习率0.0001。
momentum设置为0.9,weight decay设置为0.0005。[4]

共享特征

区域生成网络(RPN)和fast RCNN都需要一个原始特征提取网络(下图灰色方框)。这个网络使用ImageNet的分类库得到初始参数 W 0 W_0 W0​,但要如何精调参数,使其同时满足两方的需求呢?本文讲解了三种方法。
这里写图片描述

轮流训练

a. 从 W 0 W_0 W0​开始,训练RPN。用RPN提取训练集上的候选区域
b. 从 W 0 W_0 W0​开始,用候选区域训练Fast RCNN,参数记为 W 1 W_1 W1​
c. 从 W 1 W_1 W1​开始,训练RPN…
具体操作时,仅执行两次迭代,并在训练时冻结了部分层。论文中的实验使用此方法。
如Ross Girshick在ICCV 15年的讲座Training R-CNNs of various velocities中所述,采用此方法没有什么根本原因,主要是因为”实现问题,以及截稿日期“。

近似联合训练

直接在上图结构上训练。在backward计算梯度时,把提取的ROI区域当做固定值看待;在backward更新参数时,来自RPN和来自Fast RCNN的增量合并输入原始特征提取层。
此方法和前方法效果类似,但能将训练时间减少20%-25%。公布的python代码中包含此方法。

联合训练

直接在上图结构上训练。但在backward计算梯度时,要考虑ROI区域的变化的影响。推导超出本文范畴,请参看15年NIP论文[5]。

实验

除了开篇提到的基本性能外,还有一些值得注意的结论

  • 与Selective Search方法(黑)相比,当每张图生成的候选区域从2000减少到300时,本文RPN方法(红蓝)的召回率下降不大。说明RPN方法的目的性更明确。
    这里写图片描述

  • 使用更大的Microsoft COCO库[6]训练,直接在PASCAL VOC上测试,准确率提升6%。说明faster RCNN迁移性良好,没有over fitting。
    这里写图片描述


  1. Girshick, Ross, et al. “Rich feature hierarchies for accurate object detection and semantic segmentation.” Proceedings of the IEEE conference on computer vision and pattern recognition. 2014. ↩︎

  2. Girshick, Ross. “Fast r-cnn.” Proceedings of the IEEE International Conference on Computer Vision. 2015. ↩︎

  3. M. D. Zeiler and R. Fergus, “Visualizing and understanding convolutional neural networks,” in European Conference on Computer Vision (ECCV), 2014. ↩︎

  4. learning rate-控制增量和梯度之间的关系;momentum-保持前次迭代的增量;weight decay-每次迭代缩小参数,相当于正则化。 ↩︎

  5. Jaderberg et al. “Spatial Transformer Networks”
    NIPS 2015 ↩︎

  6. 30万+图像,80类检测库。参看http://mscoco.org/。 ↩︎

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/182304.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • ttl低电平接大电阻_3.4 TTL门电路

    ttl低电平接大电阻_3.4 TTL门电路3.4TTL门电路1.双极性三极管的开关特性(静态)图1在数字电路中,三极管作为开关元件,主要工作在饱和和截止两种开关状态,放大区只是极短暂的过渡状态。2.三极管的开关时间(动态特性)图2(1)开启时间ton:三极管从截止到饱和所需的时间。ton=td+trtd:延迟时间tr:上升时间(2)关闭时间toff:三极管从饱和到截止所需的时间。toff=ts+tf…

    2022年10月30日
  • php将字符串内的指定字符全部替换,php中如何替换字符串中的某个字符[通俗易懂]

    php将字符串内的指定字符全部替换,php中如何替换字符串中的某个字符[通俗易懂]在PHP中,可以使用strtr()函数实现字符串替换。首先我们简单了解下strtr()函数的定义及语法。语法:stringstrtr(string$str,string$from,string$to)第一个参数表示待转换的字符串。第二个参数表示字符串中与将要被转换的目的字符to相对应的源字符。第三个参数表示字符串中与将要被转换的字符from相对应的目的字符。实例:…

    2022年5月23日
  • POSTMAN自动生成接口文档_swagger自动生成接口文档

    POSTMAN自动生成接口文档_swagger自动生成接口文档介绍drf-spectacular是为DjangoRESTFramework生成合理灵活的OpenAPI3.0模式。它可以自动帮我们提取接口中的信息,从而形成接口文档,而且内容十分详细,再也不

    2022年7月29日
  • 一小伙使用 python爬虫来算命?

    一小伙使用 python爬虫来算命?文章目录前言1.网站分析2.获取内容3.代码4.实操5.代码整合前言相信在日常生活中,平常大家聚在一起总会聊聊天,特别是女生(有冒犯的doge)非常喜欢聊星座,这个男生什么星座呀,那个男生什么星座呀…今天我就来满足各位的需求,通过爬虫来知晓上天的安排:开搞!1.网站分析第一步呢,咋们先打开这个网站:https://www.horoscope.com/us/index.aspx大家就能看到这个页面了我们今天呢,就先做一个通过星座来得知三天的运势的小玩意,这里有十二个星座,我点了第一个和第二个

    2022年7月25日
  • 并查集类的c++封装,比較union_find algorithm四种实现方法之间的性能区别

    并查集类的c++封装,比較union_find algorithm四种实现方法之间的性能区别

    2021年11月17日
  • 五子棋人机对战完整代码大全_一个完整的html代码

    五子棋人机对战完整代码大全_一个完整的html代码目录〇,前言一,五子棋棋盘二,五子棋比赛规则1,行棋顺序2,判断胜负三,重要棋型解释1,五连:2,活四:3,冲四:4,活三:四,禁手规则1,三三禁手2,四四禁手3,长连禁手五,代码解释1,棋子表示2,棋盘表示3,flat技术4,棋型判断和禁手判断4.1活四4.2冲四4.3活35,AI算法6,AI的………

    2022年10月21日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号