maskrcnn_benchmark 代码详解之 modeling/rpn/loss.py

前言:

  在maskrcnn_benchmark的RPN层,选取预测边框(proposal)的过程和计算边框目标得分(objectiveness)以及边框回归(box regression)的损失值的过程不是同步的,过程也有偏差。选取边框(proposal)是从多个特征层分别选取若干个目标得分高的边框,然后再从这些边框里选出若干预测边框(proposal)或者单个特征层(非FPN)提取目标得分(objectiveness)高的若干边框。而对于计算损失函数(loss)的过程则不同,首先要得到与所有的锚点(anchor)与基准边框(ground truth box)两者之间互相的IoU,相对应的基准边框(ground truth box), 然后再计算每个锚点所对应的基准边框。

  得到每个锚点和其对应的基准边框后,就可以从所有的锚点中选择合适的锚点计算损失函数(loss)了。首先是给所有的锚点打标签,将不采纳的标签赋值为-1,内容为背景的锚点标签为0,内容含有目标的锚点赋值为1。这一就可以从标签为0和1的锚点里随机的筛选出符合一定个数和比例的背景锚点与含目标锚点,以这些锚点为基础就可以计算损失函数(loss)。

  loss分为两部分,第一部分为锚点评分的损失函数,他的比较对象是锚点的标签,为1的情况表示该锚点含有目标的概率为1,因此用网络模型得到的锚点目标得分(objectiveness)与锚点的标签(label)对比得到损失值;第二部分为边框回归损失,通过锚点的边框回归层(box regression)与实际计算出来的锚点(anchor)与基准框(ground truth box)的偏差值对比得到损失值。

  其代码详解如下:

# Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
"""
This file contains specific functions for computing losses on the RPN
file
"""

import torch
from torch.nn import functional as F

from .utils import concat_box_prediction_layers

from ..balanced_positive_negative_sampler import BalancedPositiveNegativeSampler
from ..utils import cat

from maskrcnn_benchmark.layers import smooth_l1_loss
from maskrcnn_benchmark.modeling.matcher import Matcher
from maskrcnn_benchmark.structures.boxlist_ops import boxlist_iou
from maskrcnn_benchmark.structures.boxlist_ops import cat_boxlist


class RPNLossComputation(object):
    """
    This class computes the RPN loss.
    """

    def __init__(self, proposal_matcher, fg_bg_sampler, box_coder,
                 generate_labels_func):
  
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值