Faster RCNN 代码文件夹说明
来源:互联网 发布:windows7 软件中文乱码 编辑:程序博客网 时间:2024/06/05 16:47
转自:faster rcnn 源码解读
转自: Faster RCNN代码理解(Python)
- tools
- RPN
- nms
- 参考
tools
在tools文件夹中,是我们直接调用的最外层的封装文件。其中主要包含的文件为:
- _init_paths.py :用来初始化路径的,也就是之后的路径会join(path,*)
- compress_net.py:用来压缩参数的,使用了SVD来进行压缩,这里可以发现,作者对于fc6层和fc7层进行了压缩,也就是两个全连接层。
- demo.py :通常,我们会直接调用这个函数,如果要测试自己的模型和数据,这里需要修改。这里调用了-fast_rcnn中的test、config、nums_wrapper函数。vis_detections用来做检测,parse_args用来进行参数设置,以及damo和主函数。
- eval_recall.py:评估函数
- reval.py:re-evaluate,这里调用了fast_rcnn以及dataset中的函数。其中,from_mats函数和from_dets函数分别loadmat文件和pkl文件。
- rpn_genetate.py:这个函数调用了rpn中的genetate函数,之后我们会对rpn层做具体的介绍。这里,主要是一个封装调用的过程,我们在这里调用配置的参数、设置rpn的test参数,以及输入输出等操作。
- test_net.py:测试fast rcnn网络。主要就是一些参数配置。
- train_faster_rcnn_alt_opt.py:训练faster rcnn网络使用交替的训练,这里就是根据faster rcnn文章中的具体实现。可以在主函数中看到,其包括的步骤为:
- RPN 1,使用imagenet model进行初始化参数,生成proposal,这里存储在mp_kwargs
- fast rcnn 1,使用 imagenet model 进行初始化参数,使用刚刚生成的proposal进行fast rcnn的训练
- RPN 2使用 fast rcnn 中的参数进行初始化(这里要注意哦),并生成proposal
- fast rcnn 2,使用RPN 2 中的 model进行初始化参数
- 值得注意的是:在我们训练时,我们可以在get_solvers中的max_iters中设置迭代次数,在不确定网络是否可以调通时,减少迭代次数可以减少测试时间。
- 我们在训练faster rcnn网络时,就是调用这个文件训练的
- train_net.py:使用fast rcnn,训练自己数据集的网络模型
- train_svms.py:使用最原始的RCNN网络训练post-hoc SVMs
RPN
里我们主要看lib/rpn文件夹下的代码。这里主要介绍了rpn的模型,其中,包含的主要文件如下:
- generate_anchors.py: 生成多尺度和多比例的锚点。这里由generate_anthors函数主要完成,可以看到,使用了 3 个尺度( 128, 256, and 512)以及 3 个比例(1:1,1:2,2:1)。一个锚点由w, h, x_ctr, y_ctr固定,也就是宽、高、x center和y center固定。
- proposal_layer.py:这个函数是用来将RPN的输出转变为object proposals的。作者新增了ProposalLayer类,这个类中,重新了set_up和forward函数,其中forward实现了:生成锚点box、对于每个锚点提供box的参数细节、将预测框切成图像、删除宽、高小于阈值的框、将所有的(proposal, score) 对排序、获取 pre_nms_topN proposals、获取NMS 、获取 after_nms_topN proposals。(注:NMS,nonmaximum suppression,非极大值抑制)
- anchor_target_layer.py:生成每个锚点的训练目标和标签,将其分类为1 (object), 0 (not object) , -1 (ignore).当label>0,也就是有object时,将会进行box的回归。其中,forward函数功能:在每一个cell中,生成9个锚点,提供这9个锚点的细节信息,过滤掉超过图像的锚点,测量同GT的overlap。
- proposal_target_layer.py:对于每一个object proposal 生成训练的目标和标签,分类标签从0-k,对于标签>0的box进行回归。(注意,同anchor_target_layer.py不同,两者一个是生成anchor,一个是生成proposal)
generate.py:使用一个rpn生成object proposals。
nms
lib/nms文件夹下是非极大值抑制,这部分大家应该已经非常熟悉了,其python版本的核心函数为py_cpu_nms.py,具体实现以及注释如下:
def py_cpu_nms(dets, thresh): """Pure Python NMS baseline.""" #x1、y1、x2、y2、以及score赋值 x1 = dets[:, 0] y1 = dets[:, 1] x2 = dets[:, 2] y2 = dets[:, 3] scores = dets[:, 4] #每一个op的面积 areas = (x2 - x1 + 1) * (y2 - y1 + 1) #order是按照score排序的 order = scores.argsort()[::-1] keep = [] while order.size > 0: i = order[0] keep.append(i) xx1 = np.maximum(x1[i], x1[order[1:]]) yy1 = np.maximum(y1[i], y1[order[1:]]) xx2 = np.minimum(x2[i], x2[order[1:]]) yy2 = np.minimum(y2[i], y2[order[1:]]) #计算相交的面积 w = np.maximum(0.0, xx2 - xx1 + 1) h = np.maximum(0.0, yy2 - yy1 + 1) inter = w * h #计算:重叠面积/(面积1+面积2-重叠面积) ovr = inter / (areas[i] + areas[order[1:]] - inter) inds = np.where(ovr <= thresh)[0] order = order[inds + 1]
参考
在这里,没有贴出代码的注释,只是梳理了下Faster RCNN训练的流程,因为代码的注释网络上已经有很多,需要看代码的注释可以参考下面几个博客,我看代码的时候也有参考:
[1] Faster R-CNN教程
[2] 野孩子1991
[3] sunyiyou_hit
[4] faster rcnn 源码解读
阅读全文
0 0
- Faster RCNN 代码文件夹说明
- faster rcnn文件夹说明
- Faster rcnn代码解析
- 代码阅读:Faster RCNN
- faster rcnn代码解读
- faster rcnn代码阅读
- 跑py-faster-rcnn代码
- tf-faster-rcnn代码理解
- faster rcnn学习之rpn、fast rcnn数据准备说明
- Faster RCNN 代码阅读 - Matlab版本
- faster-rcnn代码调试(MATLAB版)
- MATLAB版Faster-RCNN代码解析
- Faster RCNN代码理解(Python)
- Faster RCNN代码理解(Python)
- Faster RCNN代码理解(Python)
- Faster RCNN代码理解(Python)
- Faster RCNN代码理解(Python)
- Faster RCNN代码理解(Python)
- ouput文件不覆盖
- 什么是光学生物传感器存储?第1部分---凯利讯半导体
- getColor过时方法替代
- win7x64下的redis安装与使用
- php 常用原生函数
- Faster RCNN 代码文件夹说明
- Windows下使用python pymysql查询中文表头MySQL表
- thinkpad如何禁用触摸板(触控板)或指点杆
- python excel文件的append data (不覆盖之添加操作)
- 百度下拉框
- DefaultTableModel
- Spring Boot之Spring Data JPA自定义ID策略
- ARM汇编指令集
- 将springboot项目部署为war项目