From da0a8d5ebaad8e958bb2d6642744bf6fc9683f9d Mon Sep 17 00:00:00 2001 From: Aman Sharma <46420566+amancodeblast@users.noreply.github.com> Date: Sun, 15 Jan 2023 23:20:03 -0500 Subject: [PATCH 1/5] Changed the code for multiple channel input image compatibility --- d2/detr/detr.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/d2/detr/detr.py b/d2/detr/detr.py index 95f89dff3..8e097b6b5 100644 --- a/d2/detr/detr.py +++ b/d2/detr/detr.py @@ -150,8 +150,8 @@ def __init__(self, cfg): ) self.criterion.to(self.device) - pixel_mean = torch.Tensor(cfg.MODEL.PIXEL_MEAN).to(self.device).view(3, 1, 1) - pixel_std = torch.Tensor(cfg.MODEL.PIXEL_STD).to(self.device).view(3, 1, 1) + pixel_mean = torch.Tensor(cfg.MODEL.PIXEL_MEAN).to(self.device).view(len(cfg.MODEL.PIXEL_MEAN), 1, 1) + pixel_std = torch.Tensor(cfg.MODEL.PIXEL_STD).to(self.device).view(len(cfg.MODEL.PIXEL_STD), 1, 1) self.normalizer = lambda x: (x - pixel_mean) / pixel_std self.to(self.device) From 1cbfb29e53fd754480163c33c1faee75ef30ebb5 Mon Sep 17 00:00:00 2001 From: Aman Sharma <46420566+amancodeblast@users.noreply.github.com> Date: Sun, 15 Jan 2023 23:21:59 -0500 Subject: [PATCH 2/5] Changed the code to incorporate Mask Thresholds using the config file. --- d2/configs/detr_segm_256_6_6_torchvision.yaml | 1 + d2/detr/detr.py | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/d2/configs/detr_segm_256_6_6_torchvision.yaml b/d2/configs/detr_segm_256_6_6_torchvision.yaml index ade490e6d..15972562b 100644 --- a/d2/configs/detr_segm_256_6_6_torchvision.yaml +++ b/d2/configs/detr_segm_256_6_6_torchvision.yaml @@ -4,6 +4,7 @@ MODEL: PIXEL_MEAN: [123.675, 116.280, 103.530] PIXEL_STD: [58.395, 57.120, 57.375] MASK_ON: True + MASK_THRESHOLD: 0.5 RESNETS: DEPTH: 50 STRIDE_IN_1X1: False diff --git a/d2/detr/detr.py b/d2/detr/detr.py index 8e097b6b5..210eda4c3 100644 --- a/d2/detr/detr.py +++ b/d2/detr/detr.py @@ -242,7 +242,7 @@ def inference(self, box_cls, box_pred, mask_pred, image_sizes): result.pred_boxes.scale(scale_x=image_size[1], scale_y=image_size[0]) if self.mask_on: mask = F.interpolate(mask_pred[i].unsqueeze(0), size=image_size, mode='bilinear', align_corners=False) - mask = mask[0].sigmoid() > 0.5 + mask = mask[0].sigmoid() > cfg.MODEL.MASK_THRESHOLD B, N, H, W = mask_pred.shape mask = BitMasks(mask.cpu()).crop_and_resize(result.pred_boxes.tensor.cpu(), 32) result.pred_masks = mask.unsqueeze(1).to(mask_pred[0].device) From d3841befff4d7eff6c45d7ba0b40d188b80e932f Mon Sep 17 00:00:00 2001 From: Aman Sharma <46420566+amancodeblast@users.noreply.github.com> Date: Sun, 15 Jan 2023 23:33:59 -0500 Subject: [PATCH 3/5] Added an easier way to deal with bitmask using the cfg.INPUT.MASK_FORMAT as "bitmask" --- d2/detr/detr.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/d2/detr/detr.py b/d2/detr/detr.py index 210eda4c3..6f954ede2 100644 --- a/d2/detr/detr.py +++ b/d2/detr/detr.py @@ -210,7 +210,8 @@ def prepare_targets(self, targets): new_targets.append({"labels": gt_classes, "boxes": gt_boxes}) if self.mask_on and hasattr(targets_per_image, 'gt_masks'): gt_masks = targets_per_image.gt_masks - gt_masks = convert_coco_poly_to_mask(gt_masks.polygons, h, w) + if cfg.INPUT.MASK_FORMAT!="BITMASK" or cfg.INPUT.MASK_FORMAT!="bitmask": + gt_masks = convert_coco_poly_to_mask(gt_masks.polygons, h, w) new_targets[-1].update({'masks': gt_masks}) return new_targets From fb95cd9aa2ab51b76dc7bb654e48f915fa5d3970 Mon Sep 17 00:00:00 2001 From: Aman Sharma <46420566+amancodeblast@users.noreply.github.com> Date: Sun, 15 Jan 2023 23:50:06 -0500 Subject: [PATCH 4/5] changed the format for lint error --- d2/detr/detr.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/d2/detr/detr.py b/d2/detr/detr.py index 6f954ede2..597fc0028 100644 --- a/d2/detr/detr.py +++ b/d2/detr/detr.py @@ -210,7 +210,7 @@ def prepare_targets(self, targets): new_targets.append({"labels": gt_classes, "boxes": gt_boxes}) if self.mask_on and hasattr(targets_per_image, 'gt_masks'): gt_masks = targets_per_image.gt_masks - if cfg.INPUT.MASK_FORMAT!="BITMASK" or cfg.INPUT.MASK_FORMAT!="bitmask": + if cfg.INPUT.MASK_FORMAT != "BITMASK" or cfg.INPUT.MASK_FORMAT != "bitmask": gt_masks = convert_coco_poly_to_mask(gt_masks.polygons, h, w) new_targets[-1].update({'masks': gt_masks}) return new_targets From 93722884a435ecd1592a561c186f425bf1d61af7 Mon Sep 17 00:00:00 2001 From: Aman Sharma <46420566+amancodeblast@users.noreply.github.com> Date: Wed, 1 Feb 2023 18:12:47 -0500 Subject: [PATCH 5/5] init config input format variable --- d2/detr/detr.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/d2/detr/detr.py b/d2/detr/detr.py index 597fc0028..cb9ff226f 100644 --- a/d2/detr/detr.py +++ b/d2/detr/detr.py @@ -79,6 +79,7 @@ def __init__(self, cfg): self.num_classes = cfg.MODEL.DETR.NUM_CLASSES self.mask_on = cfg.MODEL.MASK_ON + self.input_format = cfg.INPUT.MASK_FORMAT hidden_dim = cfg.MODEL.DETR.HIDDEN_DIM num_queries = cfg.MODEL.DETR.NUM_OBJECT_QUERIES # Transformer parameters: @@ -210,7 +211,7 @@ def prepare_targets(self, targets): new_targets.append({"labels": gt_classes, "boxes": gt_boxes}) if self.mask_on and hasattr(targets_per_image, 'gt_masks'): gt_masks = targets_per_image.gt_masks - if cfg.INPUT.MASK_FORMAT != "BITMASK" or cfg.INPUT.MASK_FORMAT != "bitmask": + if self.input_format != "BITMASK" or self.input_format != "bitmask": gt_masks = convert_coco_poly_to_mask(gt_masks.polygons, h, w) new_targets[-1].update({'masks': gt_masks}) return new_targets