• 凉风有兴,秋月无边, 亏我思娇的情绪好比度日如年。
  • 虽然我不是玉树临风,潇洒倜傥, 可是我有我广阔的胸襟,加强健的臂腕!

Faster rcnn代码理解(1)

网站推广 villain 2个月前 (01-08) 109次浏览 未收录 0个评论

这段时间看了不少论文,回头看看,感觉还是有必要将Faster rcnn的源码理解一下,毕竟后来很多方法都和它有相近之处,同时理解该框架也有助于以后自己修改和编写自己的框架。好的开始吧~

这里我们跟着Faster rcnn的训练流程来一步一步梳理,进入tools\train_faster_rcnn_alt_opt.py中:

首先从__main__入口处进入,如下:

Faster rcnn代码理解(1)

上图中首先对终端中的命令行进行解析,获取相关的命令参数;然后利用mp.Queue()创建一个多线程的对象,再利用get_solvers()获得solvers等信息;然后就开始了论文中的 四步训练 :

第一步,首先训练RPN网络:

Faster rcnn代码理解(1)

上图中,先开始子进程训练RPN,训练函数是train_rpn(),那么我们就进入这个函数一探究竟:

Faster rcnn代码理解(1)

这里首先使用cfg设置训练时的一些设置参数(cfg类是一个字典,其定义在config.py中,属于网络训练时的配置文件)(注意这里的cfg.TRAIN.PROPOSAL_METHOD = ‘gt’这在后面会用到),然后是初始化caffe,这里主要是设置了随机数种子,以及使用caffe训练时的模式(gpu/cpu);之后就是第一个重头戏–获取imdb和roidb格式的训练数据:

进入get_roidb()函数,如下:

Faster rcnn代码理解(1)

首先通过get_imdb()函数获得imdb数据,那我们就再进入get_imdb()函数一探究竟,如下:

Faster rcnn代码理解(1)

这里其实也是调用了pascal_voc()函数来创建imdb数据,pascal_voc类见pascal_voc.py文件中,如下:

Faster rcnn代码理解(1)

这里只截取了一部分,可以发现,pascal_voc这个类主要用来组织输入的图片数据,存储图片的相关信息,但并不存储图片;而实际上,pascal_voc类是imdb类的一个子类;好了现在imdb数据已经获得了,再回到get_roidb()中,紧接着set_proposal_method()函数设置了产生proposal的方法,实际也是向imdb中添加roidb数据,进入set_proposal_method()这个函数:

Faster rcnn代码理解(1)

首先用eval()对这个方法进行解析,使其有效,再传入roidb_handler中,这里就要回到之前的train_rpn()函数中了,它里面设置了cfg.TRAIN.PROPOSAL_METHOD=’gt’(默认值是selective search,先前用于fast rcnn的),先进入gt_roidb()函数中:

Faster rcnn代码理解(1)

这里gt_roidb()中实际是使用_load_pascal_annotation()通过解析XML文件获得gt的roi的,进入该解析函数:

Faster rcnn代码理解(1)

Faster rcnn代码理解(1)

可以发现,roidb的结构是一个包含有5个key的字典,具体值见上面代码

这个时候就从imdb获得了最初的roidb格式的数据,但这还不是训练时的roidb数据,再回到get_roidb()函数中,通过get_training()函数得到最终用于训练的roidb数据,进入该函数:

Faster rcnn代码理解(1)

先根据cfg.TRAIN.USE_FLIPPED判断是否需要对roi进行水平镜像翻转(注意这里的镜像的对称轴是图片的中心线),然后使用append_flipped_images()添加镜像roi,作者认为这样子能提高最终网络的训练结果(这应该算是一种简单的数据增强吧),进入该函数:

Faster rcnn代码理解(1)

添加之后还没结束呢,回到get_training_roidb()中,最后还要再经过一步prepare_roidb(),进入该函数:

Faster rcnn代码理解(1)

向roidb中再添加一些额外的信息就可以用来进行训练了(注意这还只是第一步,训练总共四步),好了,到这儿,关于获取roidb和imdb的代码就介绍到这儿了~

(转载请注明出处)


Villain博客 , 版权所有丨如有问题请联系客服QQ:1004619丨
转载请注明Faster rcnn代码理解(1)
喜欢 (0)
[gqakcom@126.com]
分享 (0)

您必须 登录 才能发表评论!