예제 #1
0
 def _suppress(self, raw_cls_bbox, raw_prob, nms_thresh, score_thresh):
     # bbox = list()
     # score = list()
     mask = raw_prob > score_thresh
     bbox = raw_cls_bbox[mask]
     scores = raw_prob[mask]
     keep = non_maximum_suppression(cp.array(bbox), nms_thresh, scores)
     keep = cp.asnumpy(keep)
     bbox = bbox[keep]
     scores = scores[keep]
     #         bbox.append(cls_bbox_l[keep])
     #         score.append(prob_l[keep])
     #         bbox = np.concatenate(bbox, axis=0).astype(np.float32)
     #         score = np.concatenate(score, axis=0).astype(np.float32)
     return bbox, scores
    def __call__(self, loc, score, anchor, img_size, scale=1.):

        if self.parent_model.training:
            n_pre_nms = self.n_train_pre_nms
            n_post_nms = self.n_train_post_nms
        else:
            n_pre_nms = self.n_test_pre_nms
            n_post_nms = self.n_test_post_nms

        roi = loc2bbox(anchor, loc)

        roi[:, slice(0, 4, 2)] = np.clip(roi[:, slice(0, 4, 2)], 0,
                                         img_size[0])
        roi[:, slice(1, 4, 2)] = np.clip(roi[:, slice(1, 4, 2)], 0,
                                         img_size[1])

        min_size = self.min_size * scale
        hs = roi[:, 2] - roi[:, 0]
        ws = roi[:, 3] - roi[:, 1]

        min_size = np.array(min_size)
        hs = np.array(hs)
        ws = np.array(ws)
        keep = np.where((hs >= min_size) & (ws >= min_size))[0]
        roi = roi[keep, :]
        score = score[keep]

        order = score.ravel().argsort()[::-1]
        if n_pre_nms > 0:
            order = order[:n_pre_nms]
        roi = roi[order, :]
        score = score[order]

        keep = non_maximum_suppression(cp.ascontiguousarray(cp.asarray(roi)),
                                       thresh=self.nms_thresh)
        if n_post_nms > 0:
            keep = keep[:n_post_nms]
        roi = roi[keep, :]
        score = score[keep]
        return roi, score