faster rcnn根目录下
1、caffe-fast-rcnn文件夹
这是caffe框架目录
2、data文件夹
用来存放pretrained模型,比如imagenet上的,以及读取文件的cache缓存
3、experiments文件夹
(1)logs
(2)scripts/faster_rcnn_alt_opt.sh
(3)cfgs/faster_rcnn_alt_opt.yml
存放配置文件以及运行的log文件,另外这个目录下有scripts可以用end2end或者alt_opt两种方式训练。
4、tools文件夹
里面存放的是训练和测试的Python文件。
(1)_init_paths.py
用来初始化路径的,也就是之后的路径会join(path,*)
(2)compress_net.py
用来压缩参数的,使用了SVD来进行压缩,这里可以发现,作者对于fc6层和fc7层进行了压缩,也就是两个全连接层。
(3)demo.py
通常,我们会直接调用这个函数,如果要测试自己的模型和数据,这里需要修改。这里调用了fast_rcnn中的test、config、nums_wrapper函数。vis_detections用来做检测,parse_args用来进行参数设置,以及damo和主函数。
(4)eval_recall.py
评估函数
(5)reval.py
re-evaluate,这里调用了fast_rcnn以及dataset中的函数。其中,from_mats函数和from_dets函数分别loadmat文件和pkl文件。
(6)rpn_genetate.py
这个函数调用了rpn中的genetate函数,之后我们会对rpn层做具体的介绍。这里,主要是一个封装调用的过程,我们在这里调用配置的参数、设置rpn的test参数,以及输入输出等操作。
(7)test_net.py
测试fast rcnn网络。主要就是一些参数配置。
(8)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进行初始化参数,
(9)train_net.py
使用fast rcnn,训练自己数据集的网络模型。
(10)train_svms.py
使用最原始的RCNN网络训练post-hoc SVMs。
5、lib文件夹
用来存放一些python接口文件,如其下的datasets主要负责数据库读取,config负责cnn一些训练的配置选项。
lib/rpn
这就是RPN的核心代码部分,有生成proposals和anchor的方法
(1)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固定。
(2)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,非极大值抑制)
(3)anchor_target_layer.py
生成每个锚点的训练目标和标签,将其分类为1 (object), 0 (not object) , -1 (ignore).当label>0,也就是有object时,将会进行box的回归。其中,forward函数功能:在每一个cell中,生成9个锚点,提供这9个锚点的细节信息,过滤掉超过图像的锚点,测量同GT的overlap。
(4)proposal_target_layer.py
对于每一个object proposal 生成训练的目标和标签,分类标签从0-k,对于标签>0的box进行回归。(注意,同anchor_target_layer.py不同,两者一个是生成anchor,一个是生成proposal)
(5)generate.py
使用一个rpn生成object proposals。
lib/nms文件夹
做非极大抑制的部分,有gpu和cpu两种实现方式
(1)py_cpu_nms.py
核心函数
lib/datasets文件夹
在这里修改读写数据的接口主要是datasets目录下
(1)factory.py
(2)imdb.py
(3)pascal_voc.py
(4)voc_eval.py
lib/fast_rcnn文件夹
主要存放的是python的训练和测试脚本,以及训练的配置文件config.py
(1)config.py
(2)nms_wrapper.py
(3)test.py
(4)train.py
lib/roi_data_layer文件夹
主要是一些ROI处理操作
(1)layer.py
(2)minibatch.py
(3)roidb.py
lib/utils文件夹
(1)blob.py
(2)timer.py
lib/transform文件夹
6、models/pascal_voc/VGG16/faster_rcnn_alt_opt文件夹
里面存放了三个模型文件,小型网络的ZF,大型网络VGG16,中型网络VGG_CNN_M_1024。推荐使用VGG16,如果使用端到端的approximate joint training方法,开启CuDNN,只需要3G的显存即可。
(1)fast_rcnn_test.pt
(2)rpn_test.pt
(3)stage1_rpn_train.pt
(4)stage1_fast_rcnn_train.pt
(5)stage2_rpn_train.pt
(6)stage2_fast_rcnn_train.pt
7、output
这里存放的是训练完成后的输出目录,默认会在faster_rcnn_end2end文件夹下