本文所用代码gayhub的地址:https://github.com/chenyuntc/simple-faster-rcnn-pytorch (非本人所写,博文只是解释代码)
好长时间没有发博客了,感觉也没啥人读我的博客,不过我不能放弃啊,总会有人发现它的价值的,哈哈!最近一直在生啃目标检测的几篇论文,距离成为我想象中的大神还有很远的一段距离啊,刚啃完Faster-RCNN的论文的时候,觉得可能是语言的关系,自己看得一直是似懂非懂的,感觉没有掌握到里面的精髓,于是我决定撸代码来看,据说Ross Girshick大神的代码很健壮,看了下是基于caffe/caffe2写的,自己不太熟悉caffe的框架和环境,于是就心血来潮在网上找基于pytorch的Faster-RCNN的代码,最后还真被我找到了陈云写的simple-faster-rcnn-pytorch-master,能从头撸出Faster-RCNN的实现真的是十分的不容易,我光读就读了一个星期,真是惭愧,差距还是很大的!simple-faster-RCNN顾名思义就是简化版的faster-rcnn,作者说代码除去注释只有2000行左右,但是能达到和rgb大神差不多的精度,真的是很了不起了!为此我还特意买了作者一本书,就当是付费看代码吧~
具体的实现精度和相关的环境建议大家仔细阅读作者的README文件,上面讲的很清楚,本篇博客主要负责解释代码,以备日后重新读不用这么费力气。
本篇博客是整个Faster-rcnn系列的第四篇文章,主要解释/simple-faster-rcnn-pytorch-master/train.py 以及/simple-faster-rcnn-pytorch-master/trainer.py
前三章地址在:
1 Faster-RCNN的数据读取及预处理部分:(对应于代码的/simple-faster-rcnn-pytorch-master/data文件夹)
2 Faster-RCNN的模型准备部分:(对应于代码目录/simple-faster-rcnn-pytorch-master/model/utils/文件夹)
3 Faster-RCNN的模型正式介绍:(对应于代码目录/simple-faster-rcnn-pytorch-master/model/文件夹)
下面正式开始介绍Faster-rcnn的训练部分的代码
一:trainer.py部分代码:
首先来看trainer.py,因为trainer.py里面实现了很多函数供train.py调用,trainer.py文件里函数结构如下图:
然后我们开始一个函数一个函数的进行剖析,可能读着读着你就会发现原来晦涩难懂的问题突然就变得很直觉了!
1 __init__函数 代码如下:
1 def __init__(self, faster_rcnn): 2 super(FasterRCNNTrainer, self).__init__() 3 4 self.faster_rcnn = faster_rcnn 5 self.rpn_sigma = opt.rpn_sigma 6 self.roi_sigma = opt.roi_sigma 7 8 # target creator create gt_bbox gt_label etc as training targets. 9 self.anchor_target_creator = AnchorTargetCreator() 10 self.proposal_target_creator = ProposalTargetCreator() 11 12 self.loc_normalize_mean = faster_rcnn.loc_normalize_mean 13 self.loc_normalize_std = faster_rcnn.loc_normalize_std 14 15 self.optimizer = self.faster_rcnn.get_optimizer() 16 # visdom wrapper 17 self.vis = Visualizer(env=opt.env) 18 19 # indicators for training status 20 self.rpn_cm = ConfusionMeter(2) 21 self.roi_cm = ConfusionMeter(21) 22 self.meters = {k: AverageValueMeter() for k in LossTuple._fields}