TF版的Faster-RCNN代码分析

记录一下学习TF版的Faster-RCNN代码过程。本文将持续更新。如果有大家觉得不对的地方欢迎大家指出。谢谢大家!

环境:Windows10+Tensorflow1.13+python3.5
首先Faster-RCNN的论文很多网站上都有讲。也有汉化版的。大家可以多去看看。本文主要从代码切入。描述一下重点的代码细节。

首先程序从这里入口
在这里插入图片描述
这里第一个train=Train() 是关于数据读取方面的。关于这个我也看了好多遍。哈哈哈但是还是好难看懂。大神很多Python用法都太厉害了。所以说我觉得如果大家有兴趣可以去研究研究。我们主要还是看train.train()从这里我们就可以进入模型的搭建和训练过程了。我们在这里加入断点跳入。
首先一个核心函数就是
在这里插入图片描述
跳入该函数。发现其初始化了input图像的尺寸,锚点的尺寸,锚点长宽的比例,一个feature map上的一个像素点对应多少个anchor等等。下一个核心
在这里插入图片描述
跳入该函数。可以看到模型终于出来了,作者将其分为了四大块,我们来看看每一块分别干了什么
在这里插入图片描述

head层

head层也就对应了VGG16这个网络
在这里插入图片描述
一共有2+2+3+3+3个卷积层,4个Pooling层。其中网络最前面的四个卷积层是"冻结"的,后面几个卷积层都进行了fine tining。真正改变feature map大小的是Pooling层且都是2*2的Pooling,所以最终得到的feature map和原图是一个16倍的的一个关系。

rpn层

rpn层是Faster-RCNN中核心中的核心。所以这里会篇幅稍微大一点。第一句就是
在这里插入图片描述
这个函数就是生成咱们的锚了,跳入该函数
在这里插入图片描述
height和width就是用原图大小(原图会resize到800600)去除以feat_stride(16)得到的就是feature map的一个大小分别是38和50。这里的话有一个tf.py_func函数。其实就是仿的caffe版本做的一个自定义函数。咱们直接跳入看看是如何生成anchor的
在这里插入图片描述上面这句代码就是去生成一个基准的锚点。也就是说feature map第一个f像素点对应原图中那9个框的坐标值。也就是原图中(0,0,15,15)吧,(0,0)左上角角标,(15,15)右下角坐标。然后根据长宽比1:1,1:2,2:1以及面积为128✖128,256✖256,512✖512的面积共生成9个坐标。如下图所示
在这里插入图片描述
这九个坐标值返回到
在这里插入图片描述
最后generate_anchors_pre就是根据那九个Base anchor坐标值进行平移依次生成共38
50*9=17100个锚框了。那么返回到build_rpn函数。生成锚点后接着就是构建RPN层网络结构了。在这里插入图片描述
首先进入了一个3✖3的卷积,可以看到通道数是没变的,仍然是512,而且图片的尺寸也未变。那么这个3✖3的卷积主要就是让卷积核融合周围9邻域的的一个特征吧。
rpn_cls_score shape:(1,38,50,18)
rpn_cls_score_reshape:(1,38✖9,50,2)---->(1,342,50,2)为什么要这样变,个人看法是第一TF版就是caffe版的一个复现 ,caffe是这么做的,它也这么做。第二方便softmax训练,在self._softmax_layer函数里将rpn_cls_score_reshape变为(1×342×50,2)即(17100 2),再增加softmax的
rpn_cls_prob.shape :(1,38,50,18)这里又变回来了
rpn_bbox_pred:(1,38,50,36)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值