• 对faster rcnn 中rpn层的理解


    1.介绍 


    图为faster rcnn的rpn层,接自conv5-3


    图为faster rcnn 论文中关于RPN层的结构示意图

    2 关于anchor:

    一般是在最末层的 feature map 上再用3*3的窗口去卷积特征。当3*3的卷积核滑动到特征图的某一个位置时,以当前滑动窗口中心为中心映射到原图的一个区域(注意 feature map 上的一个点是可以映射到原图的一个区域的,这个很好理解,感受野起的作用啊~...),以原图上这个区域的中心对应一个尺度和长宽比,就是一个anchor了。fast rcnn 使用3种尺度和3种长宽比(1:1;1:2;2:1),则在每一个滑动位置就有 3*3 = 9 个anchor。

    3 关于结构  如图1所示:

    以VGG-16改造的faster r-cnn为例。py-faster r-cnn的/model/pascal-voc/VGG16/faster_rcnn_alt_opt/faster_rcnn_test.pt的RPN部分。
    具体结构可以将网络结构输入ethereon.github.io/netscope/#/editor查看
    RPN是在原来的VGG16的conv5_3之后添加的。
    1、conv5_3->rpn_conv/3*3->rpn_relu对应于文中进行n*n的卷积。这里输出的维数(output)为512,高H和宽W为输入的图像原始大小的1/16。(1,512,H,W)(前面有四个池化层)
    2、rpn_relu->rpn_cls_score->rpn_cls_score_reshape->rpn_cls_prob->rpn_cls_prob_reshape
    这里是预测每个点的前景和背景概率。rpn_cls_score实际上就是一个1*1的卷积层而已。(相当于是一个全连接层)
    如果有A个anchor,每个anchor都有一个前景概率一个背景概率(2*A),输出的大小为(1,2*A,H,W)。
    这里的reshape只是为了利用softmax层进行概率的计算而已。(反向传播只是应用于前景)(这里的softmax就是为了看某个anchor更倾向与前景和背景哪一个)
    3、rpn_relu->rpn_bbox_pred
    这里就是预测每个点的boundingbox。同样的,rpn_bbox_pred也是一个1*1的卷积层而已。输出大小为(1,4*A,H,W) 。

     关键在此,这里输出的并不是一个boundingbox的左上右下坐标,而是一个修改量(boundingbox regression)。在r-cnn的supplementary material中,给出了下面几个公式


    这里面的P就是的anchor(高、宽、中心),而里面的d_{x} d_{y}d_{w}d_{h}是rpn_bbox层输出的四个值,G就是修改之后的高、宽、中心。
    4、(rpn_bbox_pred+rpn_cls_prob_reshape)->proposal_layer
    这里的proposal_layer就完成了上述修正,并且进行NMS(非极大抑制)以及概率排序等获得最终的boundingbox。这样就完成了在同一个点上获得不同尺度不同比例的包围盒。
    输出大小为:(N,4),这里的 N与NMS以及概率排序阈值有关,得到的就是boundingbox的四个坐标。测试时proposal_layer做到了取所有rpn_cls_prob_reshape结果为1的anchor,同时得到他们的修正参数,进行非极大值抑制,输出可能的前景区域。

    4 关于FRCNN box回归为什么采用smooth L1 loss

    对于边框的预测是一个回归问题。通常可以选择平方损失函数(L2损失)$f(x)=x^2$。但这个损失对于比较大的误差的惩罚很高。我们可以采用稍微缓和一点绝对损失函数(L1损失)$f(x)=|x|$,它是随着误差线性增长,而不是平方增长。

    但这个函数在0点处不可导,因此可能会影响收敛。一个通常的解决办法是在0点附近使用平方函数使得它更加平滑。它被称之为平滑L1损失函数。它通过一个参数$sigma$来控制平滑的区域。

    5 为什么要区分前景和背景

    RPN网络做的事情就是,把一张图片中,我不感兴趣的区域——花花草草、大马路、天空之类的区域忽视掉,只留下一些我可能感兴趣的区域——车辆、行人、水杯、闹钟等等,然后我之后只需要关注这些感兴趣的区域,进一步确定它到底是车辆、还是行人、还是水杯(分类问题)。。。。

    你可能会看到另一对通俗易懂的词语,前景(车、人、杯)背景(大马路、天空)


    天空和草地都属于背景

     

     

    天空和马路也都是背景

    到此为止,RPN网络的工作就完成了,即我们现在得到的有:在输入RPN网络的feature map上,所有可能包含80类物体的Region区域的信息,其他Region(非常多)我们可以直接不考虑了(不用输入后续网络)。

    6 Region Proposal有什么作用?

    1、COCO数据集上总共只有80类物体,如果不进行Region Proposal,即网络最后的classification是对所有anchor框定的Region进行识别分类,会严重拖累网络的分类性能,难以收敛。原因在于,存在过多的不包含任何有用的类别(80类之外的,例如各种各样的天空、草地、水泥墙、玻璃反射等等)的Region输入分类网络,而这些无用的Region占了所有Region的很大比例。换句话说,这些Region数量庞大,却并不能为softmax分类器带来有用的性能提升(因为无论怎么预测,其类别都是背景,对于主体的80类没有贡献)。

    2、大量无用的Region都需要单独进入分类网络,而分类网络由几层卷积层和最后一层全连接层组成,参数众多,十分耗费计算时间,Faster R-CNN本来就不能做到实时,这下更慢了。



  • 相关阅读:
    通过系统配置来提高ASP.NET应用程序的稳定性
    设置localhost文件
    打击啊,看过的东西怎么就记不住呢???
    用.Net开发Windows服务初探
    在项目中设立里程碑有哪些好处&基础架构的开发任务&试运行的部署
    C#中构造函数和析构函数的用法
    ASP.NET1.0升级ASP.NET2.0的问题总结
    误删Oracle数据库实例的控制文件
    Embedding Google Earth in a C# Application (转载)
    教你如何克隆Oracle 10g数据库,冷备份方式(图文版)(转载)
  • 原文地址:https://www.cnblogs.com/MY0213/p/9542578.html
Copyright © 2020-2023  润新知