目标检测算法:fast-rcnn

前言

在RCNN提出后,马上又提出了fast-rcnn,主要是在RCNN的基础上对训练和测试速度进行了优化。
由于它和RCNN有许多共同之处,并且网上大多数的程序是基于caffe,cython等其他一些环境,单纯的tensorflow版本的比较少,所以对于fast-rcnn的程序,我就只做了粗略的阅读,没有调试,准备把主要的精力还是放在之后的faster-rcnn上,毕竟现在faster-rcnn刚出来不久,比fast-rcnn性能更强,研究的人更多,代码资源更丰富。

fast-rcnn详解

RCNN存在的问题

  1. 训练分多布。需要经过预训练网络、finetune微调、训练svm分类器、训练boudingbox回归4个步骤,比较繁琐。
  2. 内存资源消耗大。svm分类器训练和boundingbox回归训练之前,不要保存网络训练得到的特征向量。
  3. 时间消耗比较大,测试比较慢。每张图片的每个region proposal都要进行一次卷积,重复操作太多。

fast-rcnn的创新点

针对以上RCNN存在的问题,fast-rcnn提出了以下创新点:

  1. 对整张图片卷积,减少重复卷积。
  2. 采用roi-pooling,使得不同region proposal得到固定尺寸的特征
  3. 用softmax代替svm分类器,把softmax和boundingbox放入网络一起训练,使用多任务损失。
  4. 采用SVD分解改进全连接层。

网络架构

在这里插入图片描述

  1. 通过选择搜索(selective search)得到图像中roi列表,和图像列表一起作为输入,经过卷积神经网络得到整张图片的卷积特征图。
  2. 通过roipooling把其中的roi都变成尺寸固定的roi特征向量,经过两个全连接层,最后输出softmax分类预测和boundingbox回归预测。

训练过程

  1. 预训练卷积神经网络。在大数据集上预训练alexnet。
  2. 更新网络结构。在原先alexnet的基础上,把alexnet最后一个卷积层conv5后面的最大池化层用roi-pooling代替,最后一个全连接层fc8改成两个同级层(softmax和bbox)。
  3. 微调与训练。
    (1)用预训练的alexnet网络结构参数来恢复新网络roi-pooling层之前的网络层参数。
    (2)获得一个batch的训练数据(2张图,每张600个roi)。每个batch图的数量要较少,这样可以尽可能的共享内存和计算,减少重复卷积。
    (3)根据多任务损失函数,训练roi-pooling层之后的网络参数。
    在这里插入图片描述

测试过程

  1. 获得测试数据(images,roises,labels)
  2. 根据images和roises,经过网络,获得所有roi的分类和定位预测。
  3. 保存预测为某目标(非背景)的概率>0.5的roi。
  4. 对保存下来的roi进行非极大抑制。
    在这里插入图片描述

参考

论文的翻译可以参考:
https://blog.csdn.net/ghw15221836342/article/details/79549500
算法的总结和解释,可以参考:
https://blog.csdn.net/u014380165/article/details/72851319
github项目参考:
https://github.com/Liu-Yicheng/Fast-RCNN

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值