目标检测算法:faster-rcnn

前言

由于之前fast-rcnn的tensorflow版本较少,没有认真调试,所以本来准备在faster-rcnn上找一些tensorflow版本好好研读调试,不过因为faster-rcnn对环境的要求比较高,github上绝大多数项目都要求在linux环境下进行编译,同时代码量有点大,全部看完有点费时间,而且没有必要,所以,还是把训练部分用到的代码看了一下,对faster-rcnn的网络结构和工作原理有个比较清晰的认识就可以了。

参考

论文和解释

论文的翻译可以参考:
https://blog.csdn.net/quincuntial/article/details/79132243

论文的详细的解释和说明可以参考:
https://blog.csdn.net/zziahgf/article/details/79311275

参考程序

tensorflow版本的程序有很多,大多数需要linux下编译,这个大家在github上随便都能找得到,这里提供一个可以在windows下安装运行的项目,不过这个项目要求python版本必须是3.5:
https://github.com/dBeker/Faster-RCNN-TensorFlow-Python3.5

faster-rcnn详解

fast-rcnn存在的问题

region proposal花费了大量的时间,并且region proposal采用的selective search是一种纯算法,无法在gpu上实现,优化的难度很大。

faster-rcnn的创新点

针对selective search无法在gpu上实现的问题,作者提出了用region proposal network(RPN)来代替selective search来完成region proposal(产生候选框)的工作。
RPN使得region proposal这部分的工作也可以在gpu上运行,大大提升了运行的速度,减少了产生候选框所花费的时间,达到几乎实时的处理速度。

网络架构

在这里插入图片描述

  1. 特征提取层(head层)
    采用vgg16中的卷积部分(13conv+13relu+4pooling)作为特征提取部分(head层),用来输出feature map(特征图)。
    在这里插入图片描述
  2. RPN层产生anchors

在这里插入图片描述
(1)卷积:n(256)个3x3卷积核。用于将之前得到的feature map(≈40x60x512)降维40x60xn(256)。
(2)卷积:(9x2)个1x1卷积核,用于预测feature map中每个点产生9个anchor的2分类情况(前景/背景)。卷积:(9x4)个1x1卷积核,用于预测feature map中每个点产生9个anchor的bbox参数。
由于vgg中有4个2步长pooling层,所以featuremap中每个点(1x1)对应原始图像的(16x16),每个16x16(尺寸:1,宽高比:1)区域产生9个anchors(尺寸:0.5,1,2;宽高比:0.5,1,2)。
在这里插入图片描述
在这里插入图片描述
(3)anchors 标注

  • 对产生的约2w个anchors,选择其中不越界的anchors。与这张图片中所有类别的groundtruth(20个,最终分20类)计算iou,其中max_iou>0.7的为前景,<0.3的为背景。
  • 前景anchors中随机选取256x50%=128个,标注label=1。背景anchors中随机选取剩下128个,标注label=0。其他anchors标注label=-1。得到anchors实际的2分类结果。
  • 根据这张图片标注文件中groundtruth的坐标,计算anchors实际的bbox参数。
  1. proposal层筛选anchors,得到rois(每个batch一张图,256个roi)
    (1)用2(2)中RPN预测的anchors的bbox参数,对anchors位置进行调整精修,对越界部分修剪。
    (2)按2(2)中RPN预测的2分类前景得分排序,选择top-n(12000)
    (3)对剩下的12000个anchors进行非极大抑制,选择top-n(2000)
    (4)把groundtruth加入这2000个anchors
    (5)计算这些anchors与groundtruth(20个,假设20分类)的iou,max_iou>0.5的标记为前景anchors,0.1<max_iou<0.5的为背景anchors。
    (6)前景anchors中随机选择256x25%=64个,剩下的192个用背景随机选择,得到了256个roi。
    (7)前景rois标注label为与其iou最大的groundtruth序号(即分类情况),背景rois标注label=0。得到筛选出的256个roi实际n分类结果。
    (8)根据这张图片标注文件中groundtruth的坐标,计算256rois实际的bbox参数。

  2. prediction层(产生最终分类和定位的预测结果)
    (1)将筛选出的256rois映射到feature map
    (2)256个rois经过roi-pooling生成固定长度的特征向量
    (3)经过全连接层后分别产生softmax分类预测和bbox回归预测。

损失函数

参考程序中采用的近似联合训练,即把RPN和fast-rcnn中4种损失放在一起训练。这种训练方式实验效果比较好,训练比较块。而论文中讲解的交替训练方法,没怎么看懂,以后有机会再去详细了解。
loss = rpn_cross_entropy + rpn_loss_bbox + cross_entropy + loss_bbox
(1)rpn_cross_entropy,rpn层的分类误差。是由2(3)中的anchors实际2分类结果,和2(2)中预测的anchors2分类结果,产生的误差。
(2)rpn_loss_bbox,rpn层的定位误差。是由2(3)中anchors实际的bbox参数,和2(2)中预测的bbox参数,产生的误差。
(3)cross_entropy,最终prediction层的分类误差。4(3)中256个rois的n分类预测,和3(7)的rois实际n分类结果,产生的误差。
(4)loss_bbox,最终prediction层的定位误差。4(3)中256rois的bbox预测,和3(8)的rois实际bbox参数,产生的误差。

训练

  1. 在ImageNet上预训练vgg16。
  2. 将预训练的网络参数加载到faster-rcnn中特征提取对应层,其他参数初始化。
  3. 训练集图片输入到faster-rcnn网络。根据损失函数进行迭代。

总结

faster-rcnn总体的网络结构实际和fast-rcnn非常相似,不过把selective search用RPN网络代替,所以faster-rcnn可以看作是RPN网络和fast-rcnn的结合。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值