コード例 #1
0
    def regress_by_class_rbbox(self, rois, label, bbox_pred, img_meta):
        """Regress the bbox for the predicted class. Used in Cascade R-CNN.

        Args:
            rois (Tensor): shape (n, 5) or (n, 6)
            label (Tensor): shape (n, )
            bbox_pred (Tensor): shape (n, 5*(#class+1)) or (n, 5)
            img_meta (dict): Image meta info.

        Returns:
            Tensor: Regressed bboxes, the same shape as input rois.
        """
        # import pdb
        # pdb.set_trace()
        assert rois.size(1) == 5 or rois.size(1) == 6

        if not self.reg_class_agnostic:
            label = label * 5
            inds = torch.stack(
                (label, label + 1, label + 2, label + 3, label + 4), 1)
            bbox_pred = torch.gather(bbox_pred, 1, inds)
        assert bbox_pred.size(1) == 5

        if rois.size(1) == 5:
            if self.with_module:
                # # 原先版本
                # new_rois = delta2dbbox(rois, bbox_pred, self.target_means,
                #                   self.target_stds, img_meta['img_shape'])

                # 替换为第二阶段相应的解码方案
                new_rois = delta2dbbox_v2(rois, bbox_pred, self.target_means,
                                          self.target_stds,
                                          img_meta['img_shape'])
            else:
                new_rois = delta2dbbox_v3(rois, bbox_pred, self.target_means,
                                          self.target_stds,
                                          img_meta['img_shape'])
            # choose best Rroi
            new_rois = choose_best_Rroi_batch(new_rois)
        else:
            if self.with_module:
                # bboxes = delta2dbbox(rois[:, 1:], bbox_pred, self.target_means,
                #                     self.target_stds, img_meta['img_shape'])

                # 替换为第二阶段相应的解码方案
                bboxes = delta2dbbox_v2(rois[:, 1:], bbox_pred,
                                        self.target_means, self.target_stds,
                                        img_meta['img_shape'])
            else:
                bboxes = delta2dbbox_v3(rois[:, 1:], bbox_pred,
                                        self.target_means, self.target_stds,
                                        img_meta['img_shape'])
            bboxes = choose_best_Rroi_batch(bboxes)
            new_rois = torch.cat((rois[:, [0]], bboxes), dim=1)

        return new_rois
コード例 #2
0
ファイル: rbbox_head.py プロジェクト: yawudede/mmd_rs
    def get_det_rbboxes(self,
                       rrois,
                       cls_score,
                       rbbox_pred,
                       img_shape,
                       scale_factor,
                       rescale=False,
                       cfg=None):
        if isinstance(cls_score, list):
            cls_score = sum(cls_score) / float(len(cls_score))
        scores = F.softmax(cls_score, dim=1) if cls_score is not None else None

        if rbbox_pred is not None:
            # bboxes = delta2dbbox(rois[:, 1:], bbox_pred, self.target_means,
            #                     self.target_stds, img_shape)
            dbboxes = delta2dbbox_v2(rrois[:, 1:], rbbox_pred, self.target_means,
                                     self.target_stds, img_shape)
        else:
            # bboxes = rois[:, 1:]
            dbboxes = rrois[:, 1:]
            # TODO: add clip here

        if rescale:
            # bboxes /= scale_factor
            # dbboxes[:, :4] /= scale_factor
            dbboxes[:, 0::5] /= scale_factor
            dbboxes[:, 1::5] /= scale_factor
            dbboxes[:, 2::5] /= scale_factor
            dbboxes[:, 3::5] /= scale_factor

        # ###########################################################
        from mmdet.MARK import PRINT_RBBOX_HEAD_RS_LOSS
        if PRINT_RBBOX_HEAD_RS_LOSS:
            # pos_inds = pos_inds[0:min(len(pos_inds), 10)]
            pred_score = scores
            pred_score, pred_label = torch.max(pred_score, dim=1)

            # 前景标签
            pred_f_indices = pred_label != 0

            if torch.sum(pred_f_indices) > 0:
                print('#' * 80)
                print('for pred score: ', pred_score[pred_f_indices])
                print('#' * 80)
        # ###########################################################
        if cfg is None:
            return dbboxes, scores
        else:
            c_device = dbboxes.device

            det_bboxes, det_labels = multiclass_nms_rbbox(dbboxes, scores,
                                                    cfg.score_thr, cfg.nms,
                                                    cfg.max_per_img)
            # det_bboxes = torch.from_numpy(det_bboxes).to(c_device)
            # det_labels = torch.from_numpy(det_labels).to(c_device)
            return det_bboxes, det_labels
コード例 #3
0
 def get_ori_rbboxes(self, rois, delta_rbboxes, img_shape, v2=False):
     if v2:
         ori_rbboxes = delta2dbbox_v2(rois[:, 1:], delta_rbboxes,
                                      self.target_means, self.target_stds,
                                      img_shape)
     else:
         ori_rbboxes = delta2dbbox_v3(rois[:, 1:], delta_rbboxes,
                                      self.target_means, self.target_stds,
                                      img_shape)
     return ori_rbboxes
コード例 #4
0
    def get_det_rbboxes(self,
                        rrois,
                        cls_score,
                        rbbox_pred,
                        img_shape,
                        scale_factor,
                        rescale=False,
                        cfg=None):
        if isinstance(cls_score, list):
            cls_score = sum(cls_score) / float(len(cls_score))
        scores = F.softmax(cls_score, dim=1) if cls_score is not None else None

        if rbbox_pred is not None:
            # bboxes = delta2dbbox(rois[:, 1:], bbox_pred, self.target_means,
            #                     self.target_stds, img_shape)
            dbboxes = delta2dbbox_v2(rrois[:,
                                           1:], rbbox_pred, self.target_means,
                                     self.target_stds, img_shape)
        else:
            # bboxes = rois[:, 1:]
            dbboxes = rrois[:, 1:]
            # TODO: add clip here
        # dbboxes[:, 4::5] = np.pi / 2
        if rescale:
            # bboxes /= scale_factor
            # dbboxes[:, :4] /= scale_factor
            dbboxes[:, 0::5] /= scale_factor
            dbboxes[:, 1::5] /= scale_factor
            dbboxes[:, 2::5] /= scale_factor
            dbboxes[:, 3::5] /= scale_factor
        if cfg is None:
            return dbboxes, scores
        else:
            c_device = dbboxes.device

            det_bboxes, det_labels = multiclass_nms_rbbox(
                dbboxes, scores, cfg.score_thr, cfg.nms, cfg.max_per_img)
            # det_bboxes = torch.from_numpy(det_bboxes).to(c_device)
            # det_labels = torch.from_numpy(det_labels).to(c_device)
            return det_bboxes, det_labels