detectron2默认打印所有的预测结果,有时为了效果,要设置阈值,操作如下 1.修改源码 from detectron2.utils.visualizer import Visualizer def draw_instance_predictions(self, predictions,score_threshold=0.5): """ Draw instance-level prediction results on an image. Args: predictions (Instances): the output of an instance detection/segmentation model. Following fields will be used to draw: "pred_boxes", "pred_classes", "scores", "pred_masks" (or "pred_masks_rle"). Returns: output (VisImage): image object with visualizations. """ boxes = predictions.pred_boxes if predictions.has("pred_boxes") else None scores = predictions.scores if predictions.has("scores") else None masks=predictions.pred_masks if predictions.has("pred_masks") else None classes = predictions.pred_classes.tolist() if predictions.has("pred_classes") else None labels = _create_text_labels(classes, self.metadata.get("thing_classes", None)) keypoints = predictions.pred_keypoints if predictions.has("pred_keypoints") else None if score_threshold != None: top_id = np.where(scores.numpy() > score_threshold)[0].tolist() scores = torch.tensor(scores.numpy()[top_id]) masks=torch.tensor(masks.numpy()[top_id]) boxes.tensor = torch.tensor(boxes.tensor.numpy()[top_id]) classes = [classes[ii] for ii in top_id] labels = [labels[ii] for ii in top_id] if predictions.has("pred_masks"): masks = np.asarray(masks) masks = [GenericMask(x, self.output.height, self.output.width) for x in masks] else: masks = None if self._instance_mode == ColorMode.SEGMENTATION and self.metadata.get("thing_colors"): colors = [ self._jitter([x / 255 for x in self.metadata.thing_colors[c]]) for c in classes ] alpha = 0.8 else: colors = None alpha = 0.5 if self._instance_mode == ColorMode.IMAGE_BW: self.output.reset_image( self._create_grayscale_image( (predictions.pred_masks.any(dim=0) > 0).numpy() if predictions.has("pred_masks") else None ) ) alpha = 0.3 self.overlay_instances( masks=masks, boxes=boxes, labels=labels, keypoints=keypoints, assigned_colors=colors, alpha=alpha, ) return self.output
2重写from detectron2.utils.visualizer import Visualizer
class kd(Visualizer): def draw_instance_predictions(self, predictions, score_threshold=0.5): """ Draw instance-level prediction results on an image. Args: predictions (Instances): the output of an instance detection/segmentation model. Following fields will be used to draw: "pred_boxes", "pred_classes", "scores", "pred_masks" (or "pred_masks_rle"). Returns: output (VisImage): image object with visualizations. """ boxes = predictions.pred_boxes if predictions.has("pred_boxes") else None scores = predictions.scores if predictions.has("scores") else None masks = predictions.pred_masks if predictions.has("pred_masks") else None classes = predictions.pred_classes.tolist() if predictions.has("pred_classes") else None labels = _create_text_labels(classes, self.metadata.get("thing_classes", None)) keypoints = predictions.pred_keypoints if predictions.has("pred_keypoints") else None if score_threshold != None: top_id = np.where(scores.numpy() > score_threshold)[0].tolist() scores = torch.tensor(scores.numpy()[top_id]) masks = torch.tensor(masks.numpy()[top_id]) boxes.tensor = torch.tensor(boxes.tensor.numpy()[top_id]) classes = [classes[ii] for ii in top_id] labels = [labels[ii] for ii in top_id] if predictions.has("pred_masks"): masks = np.asarray(masks) masks = [GenericMask(x, self.output.height, self.output.width) for x in masks] else: masks = None if self._instance_mode == ColorMode.SEGMENTATION and self.metadata.get("thing_colors"): colors = [ self._jitter([x / 255 for x in self.metadata.thing_colors[c]]) for c in classes ] alpha = 0.8 else: colors = None alpha = 0.5 if self._instance_mode == ColorMode.IMAGE_BW: self.output.reset_image( self._create_grayscale_image( (predictions.pred_masks.any(dim=0) > 0).numpy() if predictions.has("pred_masks") else None ) ) alpha = 0.3 self.overlay_instances( masks=masks, boxes=boxes, labels=labels, keypoints=keypoints, assigned_colors=colors, alpha=alpha, ) return self.output