前言:
关于faster rcnn的训练网络,哪怕你一直很努力,死磕代码。就会像这图一样智商不够用啊,这边看了那边忘。所以希望大家能体系的学习faster rcnn。因为走了很多弯路,总结一下自己的理解。本篇关于Faster rcnn 的训练是基于tensorflow版本的,因为最近一直在搞这个,也为了巩固一下知识点,在此写个博客,也希望能帮助到大家。废话不多说,我们直接开始。
第一点:首先要明白faster rcnn目录下都有哪些文件夹,都有什么用处。如下截图:
文件夹:
data--------->存放的是用于训练的数据集,一般我们用的都是voc2007的数据集,知道就行了,还有一个很重要的是文件夹是pretrain_model,必不可少的,这里面存放的VGG_imagenet.npy也就是VGG模型,这个大家在网上找找就能找到。还有一个cache文件夹是随着训练的进行,用来存放训练数据的,为了下次加载数据方便。
experiments---->下面有个scripts文件夹里面存放的是faster_rcnn_end2end.sh,算是起始指令吧,我们是通过运行这个文件,加载参数来调用其他各个文件的。
lib------------>该文件夹里面存放的东西很多,主要是一些python接口文件及运行的log文件。所以说程序运行之前先make一下。关于里面各个作用,下面我会根据训练流程一一讲解。
output-------->存放当然是你的输出结果了,你的训练结束后所训练好的模型。
tools------->里面的是训练、测试的加载起始文件。demo.py是一个简单的测试文件。
好了,关于各个文件的说明已经结束。
第二点:faster rcnn训练流程开始
1.数据加载
通过./experiments/scripts/faster_rcnn_end2end.sh gpu 0 VGG16 pascal_voc命令,调用tools/train_net.py加载完参数后 imdb = get_imdb(args.imdb_name)调用了get_imdb()函数(该函数来于lib/datasets/factory.py)返回的是一个lambda表达式(其实是通过pascal_voc()函数来创建imdb数据的,通过该表达式,进入了pascal_voc函数,初始化了imdb数据,此时,数据加载完成。---->self._roidb_handler = self.gt_roidb并设置了gt_r