此代码位于 lib/model/faster_rcnn
这个文件夹下的resnet.py和vgg16.py是用训练好的模型提取图片特征。
重点看一下faster_rcnn.py 代码
1,初始化
1,classes ,具体什么作用还不知道
2,class_agnostic,是否专类
def init(self, classes, class_agnostic):
super(_fasterRCNN, self).init()
self.classes = classes
//类别的数量
self.n_classes = len(classes)
self.class_agnostic = class_agnostic
# 初始化分类loss和边框偏移loss
self.RCNN_loss_cls = 0
self.RCNN_loss_bbox = 0
# 定义rpn网络
self.RCNN_rpn = _RPN(self.dout_base_model)
self.RCNN_proposal_target = _ProposalTargetLayer(self.n_classes)
self.RCNN_roi_pool = _RoIPooling(cfg.POOLING_SIZE, cfg.POOLING_SIZE, 1.0/16.0)
self.RCNN_roi_align = RoIAlignAvg(cfg.POOLING_SIZE, cfg.POOLING_SIZE, 1.0/16.0)
self.grid_size = cfg.POOLING_SIZE * 2 if cfg.CROP_RESIZE_WITH_MAX_POOL else cfg.POOLING_SIZE
self.RCNN_roi_crop = _RoICrop()
2,第二个函数是:_init_weights
主要初始化参数,RCNN_cls_score roi分类的打分。RCNN_bbox_pred,偏移的打分。
3,forward:
输入:
1, im_data,图片
2,im_info,图片信息(宽高)
3,gt_boxes,标注信息
4,num_boxes分类数目
输出:
1,rois,预测框 测试条件下,通过rpn中的proposal_layer 拿到
训练条件下,通过rpn中proproposal_target_layer 拿到
2,cls_prob 对cls_core 进行一个softmax
3,bbox_pred bbox的offset
4,RCNN_loss_cls(cls_score和rois_label 的交叉熵.
5,RCNN_loss_bbox,预测偏差和实际偏差的偏移的误差
6,rpn_loss_cls cls的loss,rpn中获得
7,rpn_loss_bbox(),rpn中获得
8,rois_label,每个rois的分类
后续需要在对代码详细理解的基础上,学习normal_init是如何生成各项数据的。
之后的代码我准备在阅读论文之后,再进行解析。