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