损失寻找
大佬github项目地址:点击
从train_net_step.py文件开始,
main()
main从line 138开始,这里重点关注损失,
line 256 调用了一个类,来源于
maskRCNN = Generalized_RCNN()
from modeling.model_builder import Generalized_RCNN
类的定义在lib/modeling/model_builder.py文件 line 71处
class Generalized_RCNN(nn.Module):
要计算损失的框从model_builder.py
line 189处传入
loss_rpn_cls, loss_rpn_bbox = rpn_heads.generic_rpn_losses(**rpn_kwargs)
generic_rpn_losses()会再调用下一子计算过程
rpn_kwargs数据来源于
rpn_kwargs.update(dict(
(k, rpn_ret[k]) for k in rpn_ret.keys()
if (k.startswith('rpn_cls_logits') or k.startswith('rpn_bbox_pred'))
))
然后找 rpn_ret,它来自于line 157的
rpn_ret = self.RPN(blob_conv, im_info, roidb)
RPN()是来自于
rpn_heads.generic_rpn_outputs(
self.Conv_Body.dim_out, self.Conv_Body.spatial_scale)
Conv_Body来自于
self.Conv_Body = get_func(cfg.MODEL.CONV_BODY)()
它是用来选择模型进行卷积神经网络的backbone类型,这个在敲train命令时指定的文件里有,类似于:
CONV_BODY: FPN.fpn_ResNet50_conv5_body
这个 spatial_scale来自于 self.Conv_Body.spatial_scale = self.Conv_Body.spatial_scale[-self.num_roi_levels:]
也就是:
self.num_roi_levels = cfg.FPN.ROI_MAX_LEVEL - cfg.FPN.ROI_MIN_LEVEL + 1
5-2+1等于4