def generalInference(model, im_names, predictor):
    # num_devices = get_world_size()
    with inference_context(model), torch.no_grad():
        for im_name in tqdm(im_names):
            im = Image.open(im_name)
            w, h = im.size
            # imSize = (h, w)
            # mode = im.mode
            im_data = np.array(im)
            # Convert RGB to BGR
            open_cv_image = im_data[:, :, ::-1].copy()

            xml_name = os.path.join(
                save_dir,
                os.path.splitext(osp.basename(im_name))[0] + ".xml")
            if os.path.exists(xml_name):
                print("exists:", xml_name)
            else:
                output = predictor(open_cv_image)
                v = Visualizer(im_data, scale=0.5)
                out = v.draw_instance_predictions(
                    output["instances"].to("cpu"))
                cv2.imshow("show_instances", out.get_image()[:, :, ::-1])
                if "instances" in output:
                    instances = output["instances"]  #.to(self.cpu_device)
                    prediction = instances.get_fields()
                    boxes = prediction['pred_boxes']
                    scores = prediction['scores']
                    classes = prediction['pred_classes']
                    # select_top() 选出top预测结果
                    boxes = boxes.tensor.cpu().numpy()
                    scores = scores.cpu().numpy()
                    classes = classes.cpu().numpy()

                    # wbf() weighted boxes fusion调用

                    saveGaofenXMLFormat(xml_name, im_name, boxes, scores)
Esempio n. 2
0
def do_prediction_and_visualization(dataset, cfg):
    dataset_dicts = DatasetCatalog.get(dataset)
    metadata = MetadataCatalog.get(dataset)
    # label=MetadataCatalog.get('cuboid_dataset_val').thing_classes
    predictor = get_predictor(dataset, cfg)
    # for d in random.sample(dataset_dicts, 50):
    for d in dataset_dicts:
        # if d['annotations']: #display +ve images only
        im = cv2.imread(d["file_name"])
        outputs = predictor(im)
        # print(outputs)
        v = Visualizer(
            im[:, :, ::-1],
            metadata=metadata,
            scale=1,
        )
        output_instances = outputs['instances'].to('cpu')
        pred = output_instances.pred_classes
        # print(pred.tolist())
        classes = []
        for i in range(len(pred.tolist())):
            classes.append('cuboid')
        scores = output_instances.scores
        labels = [
            "{} {:.0f}%".format(l, s * 100) for l, s in zip(classes, scores)
        ]
        # gt = v.draw_dataset_dict(d) #display ground truth annotation
        out = v.overlay_instances(boxes=output_instances.pred_boxes,
                                  labels=labels,
                                  keypoints=output_instances.pred_keypoints)
        final_img = cv2.resize(out.get_image()[:, :, ::-1], (900, 900))
        cv2.imshow('Predication:   ' + d['image_id'] + '.jpg', final_img)
        k = cv2.waitKey(0)
        if k == 27:  #esc key for stop
            cv2.destroyAllWindows()
            break
        cv2.destroyAllWindows()
def detect_items_in_image(img, predictor, item_metadata):
    target_items_dict = {}

    s_time = time.time()
    outputs = predictor(img)
    instances = outputs["instances"].to("cpu")
    # format is documented at
    # https://detectron2.readthedocs.io/tutorials/models.html # model-output-format
    v = Visualizer(
        img[:, :, ::-1],
        metadata=item_metadata,
        scale=0.5,
        instance_mode=ColorMode.IMAGE_BW
        # remove the colors of unsegmented pixels.
        # This option is only available for segmentation models
    )
    out = v.draw_instance_predictions(instances)
    masks_arr = instances.pred_masks.numpy()
    item_classes = instances.pred_classes.numpy()
    e_time = time.time()
    print('detectron2 using : ',
          int(round(e_time * 1000)) - int(round(s_time * 1000)))

    if item_classes.any():
        for i, item_num in enumerate(item_classes):
            print(CLASS_NAMES[item_num])
            arr_h, arr_w = np.nonzero(masks_arr[i])
            mask_points = np.array([arr_h, arr_w]).T
            print(f"mask_points:{mask_points.shape}")
            target_items_dict[CLASS_NAMES[item_num]] = [mask_points]

    res_img = out.get_image()
    plt.imshow(res_img)
    plt.savefig("result/0.jpg")
    plt.show()

    return target_items_dict
Esempio n. 4
0
def checkout_dataset_annotation(save_path="/root/data/gvision/dataset/train_all_annos/s0.3_t0.7_all/pv_image_in_annos",subdata_name="pv_train",showwidth=640):
    """
    Create configs and perform basic setups.  
    DATASETS:person(vehicle or pv)_VAL(TRAIN or train) or 查看融合的结果
    """
    os.makedirs(save_path,exist_ok=True)
    metadata_dicts= MetadataCatalog.get(subdata_name)
    print("checkout_dataset_annotation------------------------------------------------start")
    dataset_dicts = DatasetCatalog.get(subdata_name)
    # random.seed(0)
    # for d in dataset_dicts:
    for d in random.sample(dataset_dicts, 10):
        img = cv2.imread(d["file_name"])
        visualizer = Visualizer(img[:, :, ::-1], metadata=metadata_dicts, scale=1)#font sacle
        vis = visualizer.draw_dataset_dict(d)
        save_name=os.path.join(save_path,"visual_{}".format(os.path.basename(d["file_name"])))
        print(save_name)
        img=vis.get_image()[:, :, ::-1]
        imgheight, imgwidth = img.shape[:2]
        scale = showwidth / imgwidth
        img = cv2.resize(vis.get_image()[:, :, ::-1], (int(imgwidth * scale), int(imgheight * scale)),interpolation=cv2.INTER_AREA)
        cv2.imwrite(save_name,img ,[int(cv2.IMWRITE_PNG_COMPRESSION), 9])
    print("checkout_dataset{}_annotation------------------------------------------------end".format(subdata_name))
    """
    def inference(self, file):

        predictor = DefaultPredictor(self.cfg)
        im = cv.imread(file)
        outputs = predictor(im)

        # with open(self.curr_dir+'/data.txt', 'w') as fp:
        # 	json.dump(outputs['instances'], fp)
        # 	# json.dump(cfg.dump(), fp)

        # get metadata
        metadata = MetadataCatalog.get(self.cfg.DATASETS.TRAIN[0])

        # visualise
        v = Visualizer(im[:, :, ::-1], metadata=metadata, scale=1.2)
        v = v.draw_instance_predictions(outputs["instances"].to("cpu"))

        # get image
        img = Image.fromarray(np.uint8(v.get_image()[:, :, ::-1]))

        # write to jpg
        # cv.imwrite('img.jpg',v.get_image())

        return img
Esempio n. 6
0
def create_dataset_files():
    img_dicts_train = get_image_dicts(image_folder='dataset/train/',
                                      annotation_file="dataset/" +
                                      config.ANNOTATION_TRAIN_CSV,
                                      target_classes=["Parrot"])

    img_dicts_validate = get_image_dicts(image_folder='dataset/validate/',
                                         annotation_file="dataset/" +
                                         config.ANNOTATION_VALIDATE_CSV,
                                         target_classes=["Parrot"])
    loaded_train_img_dicts = load_json_labels('dataset/train')
    register_parrot_dataset()
    # Setup metadata variable
    parrot_metadata = MetadataCatalog.get("parrot_train")
    for label in random.sample(img_dicts_train, 3):
        img = cv2.imread(label["file_name"])
        visualizer = Visualizer(
            img[:, :, ::-1],  # revervse the image pixel order (BGR -> RGB)
            metadata=
            parrot_metadata,  # use the metadata variable we created about
            scale=0.5)
        vis = visualizer.draw_dataset_dict(label)
        cv2.imshow('predicted', vis.get_image()[:, :, ::-1])
        cv2.waitKey(0)
Esempio n. 7
0
def plot_segmentation_masks_beauty(result, image):
    # We extract the segments info and the panoptic result from DETR's prediction
    segments_info = deepcopy(result["segments_info"])
    # Panoptic predictions are stored in a special format png
    panoptic_seg = Image.open(io.BytesIO(result['png_string']))
    final_w, final_h = panoptic_seg.size
    # We convert the png into an segment id map
    panoptic_seg = np.array(panoptic_seg, dtype=np.uint8)
    panoptic_seg = torch.from_numpy(rgb2id(panoptic_seg))
        
    # Detectron2 uses a different numbering of coco classes, here we convert the class ids accordingly
    meta = MetadataCatalog.get("coco_2017_val_panoptic_separated")
    for i in range(len(segments_info)):
        c = segments_info[i]["category_id"]
        segments_info[i]["category_id"] = meta.thing_dataset_id_to_contiguous_id[c] if segments_info[i]["isthing"] else meta.stuff_dataset_id_to_contiguous_id[c]

    # Finally we visualize the prediction
    v = Visualizer(np.array(image.copy().resize((final_w, final_h)))[:, :, ::-1], meta, scale=1.0)
    v._default_font_size = 20
    v = v.draw_panoptic_seg_predictions(panoptic_seg, segments_info, area_threshold=0)
    
    return v.get_image()

# ----------------------------------------------------------------------------------
    def get_keypoints(self, frame):
        outputs = self.predictor(frame)
        v = Visualizer(frame,
                       MetadataCatalog.get(self.cfg.DATASETS.TRAIN[0]),
                       scale=1)
        out = v.draw_instance_predictions(outputs["instances"].to("cpu"))
        instances = outputs["instances"].to("cpu")
        bbox = []
        keypoints = []
        pred_boxes = instances._fields["pred_boxes"].tensor.numpy()
        pred_keypoints = instances._fields["pred_keypoints"].numpy()
        for i in range(len(instances._fields["scores"])):
            if instances._fields["scores"][i] > 0.99 and pred_keypoints[
                    i].shape[0] == 17:
                bbox.append(pred_boxes[i])
                keypoints.append(pred_keypoints[i])

        keypoints = np.array(keypoints)
        bbox = np.array(bbox)
        eyes = Detectron2Keypoints.keypoints_to_eyes(
            keypoints) if len(keypoints) > 0 else []
        head_bbox = Detectron2Keypoints.bbox_keypoints_head_bbox(
            bbox, keypoints) if len(keypoints) > 0 else []
        return out.get_image(), head_bbox, eyes
def predictDataset(datasetName, dataset_data, dataset_metadata):
    """
    :param datasetName: name of the registered dataset
    :param dataset_data: DatasetCatalog of the registered dataset
    :param dataset_metadata: MetadatasetCatalog of the registerd data
    :return: shows 10 randomly selected pictures using opencv2. the ungemented portions are greyed out.
            press 0 key to see next image
    """
    cfg = get_cfg()
    cfg.merge_from_file(
        model_zoo.get_config_file(
            "COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x.yaml"))
    cfg.MODEL.WEIGHTS = os.path.join(cfg.OUTPUT_DIR, "model_final.pth")
    cfg.DATALOADER.NUM_WORKERS = 2
    cfg.SOLVER.IMS_PER_BATCH = 2
    cfg.SOLVER.BASE_LR = 0.02
    cfg.SOLVER.MAX_ITER = 300
    cfg.MODEL.ROI_HEADS.BATCH_SIZE_PER_IMAGE = 64
    cfg.MODEL.ROI_HEADS.NUM_CLASSES = 3
    cfg.MODEL.ROI_HEADS.SCORE_THRESH_TEST = 0.5  # set the testing threshold for this model
    cfg.DATASETS.TEST = (datasetName, )
    predictor = DefaultPredictor(cfg)

    for d in random.sample(dataset_data, 10):
        im = cv2.imread(d["file_name"])
        outputs = predictor(im)
        v = Visualizer(
            im[:, :, ::-1],
            metadata=dataset_metadata,
            scale=0.8,
            instance_mode=ColorMode.
            IMAGE_BW  # remove the colors of unsegmented pixels
        )
        v = v.draw_instance_predictions(outputs["instances"].to("cpu"))
        cv2.imshow("image", v.get_image()[:, :, ::-1])
        cv2.waitKey(0)
Esempio n. 10
0
def visualize_element_prediction(img,
                                 metadata,
                                 predictions,
                                 shown_categories,
                                 score_cutoff=0):
    vis = Visualizer(img, metadata)

    # get targeted annotations to show
    boxes = []
    labels = []
    # get the specific categories to show
    for idx in range(len(predictions)):
        if float(predictions.iloc[idx]
                 ["score"]) >= score_cutoff and predictions.iloc[idx][
                     "category_id"] in shown_categories:
            boxes.append(predictions.iloc[idx]["bbox"])
            labels.append(predictions.iloc[idx]["category_id"])
    names = metadata.get("thing_classes", None)
    if names:
        labels = [names[i] for i in labels]
    boxes = np.array(boxes, np.float).reshape((-1, 4))
    vis_gt = vis.overlay_instances(labels=labels, boxes=boxes).get_image()
    del boxes, labels
    return vis_gt[:, :, ::-1]
Esempio n. 11
0
def image_predict(imgfile):
    from PIL import Image
    import numpy
    from detectron2.utils.visualizer import ColorMode
    import time

    image = Image.open(imgfile)
    bgr_img = cv2.cvtColor(numpy.asarray(image), cv2.COLOR_RGB2BGR)

    num_class = len(class_list)
    # MetadataCatalog.get(regist_train_name).thing_classes = class_list
    MetadataCatalog.get(regist_train_name)
    train_metadata = MetadataCatalog.get(regist_train_name)

    start_time = time.time()
    print('预测开始')
    outputs = PREDICTOR(bgr_img)
    print('预测完成', time.time() - start_time)

    pred_scores = outputs["instances"].scores.tolist()
    pred_classes = outputs["instances"].pred_classes.data.cpu().numpy().tolist(
    ) if outputs["instances"].get_fields()["pred_boxes"] else None
    pred_bboxes = outputs["instances"].pred_boxes.tensor.tolist(
    ) if outputs["instances"].get_fields()["pred_boxes"] else None

    v = Visualizer(bgr_img[:, :, ::-1],
                   metadata=train_metadata,
                   scale=1,
                   instance_mode=ColorMode.IMAGE_BW
                   )  # remove the colors of unsegmented pixels)
    v = v.draw_instance_predictions(outputs["instances"].to("cpu"))

    print(pred_classes)
    savr_dir = "./test_out2/"
    save_file = os.path.join(savr_dir, os.path.basename(imgfile) + "_pre.png")
    cv2.imwrite(save_file, v.get_image()[:, :, ::-1])
Esempio n. 12
0
def predict(photo_name):
    """
    photo_name - Сылка на фото.
    return - bio -> фото с отмеченными линиями
    return - Аннотации к линиям
    """
    im = cv2.imread(photo_name)
    outputs = predictor(im)
    v = Visualizer(
        im[:, :, ::-1],
        metadata=clothesnet,
        scale=0.8,
    )

    outputs["instances"].remove('pred_boxes')
    v = v.draw_instance_predictions(outputs["instances"].to("cpu"))
    is_success, buffer = cv2.imencode(".jpg", v.get_image()[:, :, ::-1])
    bio = io.BytesIO(buffer)
    bio.name = 'image.jpeg'
    bio.seek(0)
    text = sorted(set(np.array(outputs["instances"].pred_classes)),
                  reverse=True)

    return bio, boxes(text)
Esempio n. 13
0
    def segmentate(image_path, mode='box'):
        image = cv2.imread(image_path)
        outputs = predictor(image)

        # return None if no fashion objects found on picture
        if not outputs['instances'].pred_boxes:
            return None

        v = Visualizer(image[:, :, ::-1], metadata=fashion_metadata)
        vis_full = v.draw_instance_predictions(outputs['instances'].to('cpu'))

        result_images_dir = Path(FILES_DIR, str(uuid.uuid4()))
        result_images_dir.mkdir(exist_ok=True, parents=True)

        full_image_path = Path(result_images_dir,
                               f"full_{uuid.uuid4()}.jpg").as_posix()

        cv2.imwrite(full_image_path, vis_full.get_image()[:, :, ::-1])
        if mode == 'box':
            crop_image_and_save(image=image,
                                outputs=outputs,
                                result_images_dir=result_images_dir)
        elif mode == 'mask':
            crop_image_mask_and_save(image=image,
                                     outputs=outputs,
                                     result_images_dir=result_images_dir,
                                     vis=v)

        # make archive to send many pictures
        shutil.make_archive(
            result_images_dir,
            'zip',
            root_dir=Path(FILES_DIR, result_images_dir),
        )
        shutil.rmtree(Path(FILES_DIR, result_images_dir))
        return result_images_dir
Esempio n. 14
0
def process_single(metadata, dic, args, queue:Queue=None):
    masks = BorderMasks([x['segmentation'] for x in dic['annotations']
                         if not isinstance(x['segmentation'], dict)])
    img = utils.read_image(dic["file_name"], "RGB")
    borders, centers, sizes = masks.masks(mask_size=img.shape[:2])

    if args.show:
        visualizer = Visualizer(img, metadata=metadata)
        vis = visualizer.draw_dataset_dict(dic)
        webcv2.imshow(dic["file_name"], vis.get_image()[:, :, ::-1])
        webcv2.imshow(dic["file_name"] + "-border", borders * 255)
        webcv2.imshow(dic["file_name"] + "-centers", centers * 255)
        webcv2.imshow(dic["file_name"] + "-sizes", (sizes / sizes.max()).sum(-1) * 255)
        webcv2.waitKey()
    else:
        file_name = os.path.basename(dic["file_name"])
        if queue:
            queue.put(("borders", borders.tostring(), file_name))
            queue.put(("centers", centers.tostring(), file_name))
            queue.put(("sizes", sizes.tostring(), file_name))
        else:
            save(borders, cfg.MASK_DIRECTORY, split_name, "borders", file_name)
            save(centers, cfg.MASK_DIRECTORY, split_name, "centers", file_name)
            save(sizes, cfg.MASK_DIRECTORY, split_name, "sizes", file_name)
Esempio n. 15
0
def inference(im, predictor, data_metadata, threshold):
    # Convert PIL image to array
    im = np.asarray(im)

    outputs = predictor(im)
    v = Visualizer(im[:, :, ::-1], metadata=data_metadata, scale=0.5)

    # take only predictions with 25% confidence only for RetinaNet as they tend to overdraw
    filtered = outputs['instances'].to("cpu")._fields
    filtered_idx = []
    for i in range(len(filtered['scores'])):
        if filtered['scores'][i] >= threshold:
            filtered_idx.append(i)

    filt_instance = Instances(
        image_size=(im.shape[0], im.shape[1]),
        pred_boxes=outputs['instances']._fields['pred_boxes'][filtered_idx],
        pred_classes=outputs['instances']._fields['pred_classes']
        [filtered_idx],
        scores=outputs['instances']._fields['scores'][filtered_idx])

    v = v.draw_instance_predictions(filt_instance.to("cpu"))

    return v.get_image(), filt_instance
Esempio n. 16
0
    def run_on_image(self, image):
        """
        Args:
            image (np.ndarray): an image of shape (H, W, C) (in BGR order).
                This is the format used by OpenCV.

        Returns:
            predictions (dict): the output of the model.
            vis_output (VisImage): the visualized image output.
        """
        vis_output = None
        predictions = self.predictor(image)
        # Convert image from OpenCV BGR format to Matplotlib RGB format.
        image = image[:, :, ::-1]
        visualizer = Visualizer(image,
                                self.metadata,
                                instance_mode=self.instance_mode)

        if "instances" in predictions:
            instances = predictions["instances"].to(self.cpu_device)
            vis_output = visualizer.draw_instance_predictions(
                predictions=instances)

        return predictions, vis_output
Esempio n. 17
0
    model_zoo.get_config_file(
        "COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x.yaml"))
cfg.MODEL.ROI_HEADS.SCORE_THRESH_TEST = 0.5  # set threshold for this model
# Find a model from detectron2's model zoo. You can use the https://dl.fbaipublicfiles... url as well
cfg.MODEL.WEIGHTS = model_zoo.get_checkpoint_url(
    "COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x.yaml")
predictor = DefaultPredictor(cfg)
outputs = predictor(im)

# look at the outputs. See https://detectron2.readthedocs.io/tutorials/models.html#model-output-format for specification
print(outputs["instances"].pred_classes)
print(outputs["instances"].pred_boxes)

# We can use `Visualizer` to draw the predictions on the image.
v = Visualizer(im[:, :, ::-1],
               MetadataCatalog.get(cfg.DATASETS.TRAIN[0]),
               scale=1.2)
out = v.draw_instance_predictions(outputs["instances"].to("cpu"))
plt.imshow(out.get_image()[:, :, ::-1])
# plt.show()
'''
dataset
'''
from detectron2.structures import BoxMode


def get_balloon_dicts(img_dir):
    json_file = os.path.join(img_dir, "via_region_data.json")
    with open(json_file) as f:
        imgs_anns = json.load(f)
Esempio n. 18
0
cfg.DATASETS.TEST = ("cats_val", )
cfg.MODEL.WEIGHTS = os.path.join(cfg.OUTPUT_DIR, "model_final.pth")
cfg.MODEL.ROI_HEADS.NUM_CLASSES = 2
cfg.MODEL.ROI_HEADS.SCORE_THRESH_TEST = 0.7

predictor = DefaultPredictor(cfg)

dataset_dicts = get_data_dicts("../data/validation")

for idx, d in enumerate(random.sample(dataset_dicts, 3)):
    im = cv2.imread(d["file_name"])
    outputs = predictor(im)

    v = Visualizer(im[:, :, ::-1],
                   metadata=MetadataCatalog.get("cats_val").set(
                       thing_classes=classes,
                       thing_colors=[(177, 205, 223), (223, 205, 177)]),
                   scale=0.8,
                   instance_mode=ColorMode.IMAGE_BW)

    pred_class = (outputs['instances'].pred_classes).detach()[0]
    pred_score = (outputs['instances'].scores).detach()[0]

    print(f"File: {d['file_name']}")
    print(f"--> Class: {classes[pred_class]}, {pred_score * 100:.2f}%")

    # Save image predictions
    v = v.draw_instance_predictions(outputs["instances"].to("cpu"))
    image_name = f"inference_{idx}.jpg"
    cv2.imwrite(image_name, v.get_image()[:, :, ::-1])
Esempio n. 19
0
drive.mount('/content/drive')

# Commented out IPython magic to ensure Python compatibility.
# %cd /content/drive/My Drive/STAT6000/ResearchProject/train2

#if your dataset is in COCO format, this cell can be replaced by the following three lines:
from detectron2.data.datasets import register_coco_instances
register_coco_instances("pods_train", {}, "instances_default.json", "/content/drive/My Drive/STAT6000/ResearchProject/train2")
register_coco_instances("pods_test", {}, "instances_default2.json", "/content/drive/My Drive/STAT6000/ResearchProject/train2")

pods_metadata = MetadataCatalog.get("pods_train")
dataset_dicts = DatasetCatalog.get("pods_train")

for d in random.sample(dataset_dicts, 3):
    img = cv2.imread(d["file_name"])
    visualizer = Visualizer(img[:, :, ::-1], metadata=pods_metadata, scale=0.5) 
    out = visualizer.draw_dataset_dict(d)
    cv2_imshow(out.get_image()[:, :, ::-1])

from detectron2.engine import DefaultTrainer

cfg = get_cfg()
cfg.merge_from_file(model_zoo.get_config_file("COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x.yaml"))
cfg.DATASETS.TRAIN = ("pods_train",)
cfg.DATASETS.TEST = ()
cfg.DATALOADER.NUM_WORKERS = 2
cfg.MODEL.WEIGHTS = model_zoo.get_checkpoint_url("COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x.yaml")
cfg.SOLVER.IMS_PER_BATCH = 2
cfg.SOLVER.BASE_LR = 0.0025
cfg.SOLVER.MAX_ITER = 300    
cfg.MODEL.ROI_HEADS.BATCH_SIZE_PER_IMAGE = 128   
Esempio n. 20
0
    j = 0
    categories = {
        1: "date",
        2: "from",
        3: "invoice_number",
        4: "product_name",
        5: "product_price",
        6: "product_quantity",
        7: "to",
        8: "total_amount"
    }
    for i in output_pred_classes.__iter__():
        classes.append(i.cpu().numpy())

    for i in output_pred_boxes.__iter__():
        coords = i.cpu().numpy()
        x1 = int(coords[0])
        y1 = int(coords[1])
        x2 = int(coords[2])
        y2 = int(coords[3])
        crop_img = im[y1:y2, x1:x2]
        key = int(classes[j])
        cv2.imwrite("./cropped images/croppedIm_" + categories[key] + ".jpg",
                    crop_img)
        j += 1

    v = Visualizer(im[:, :, ::-1], metadata=test_metadata, scale=0.8)
    out = v.draw_instance_predictions(outputs["instances"].to("cpu"))
    cv2_imshow(out.get_image()[:, :, ::-1])
    cv2.imwrite("predictions_detectron.jpg", out.get_image()[:, :, ::-1])
Esempio n. 21
0
exsample_frames = rgb_train.load_frames(exsample_segment)

dataloader = torch.utils.data.DataLoader(dataset, batch_size=8, shuffle=True)

for batch_num, (data, label) in enumerate(dataloader):
    frame = data[0].to('cpu').detach().numpy().copy()
    frame = frame.transpose(1, 2, 3, 0)
    frame = np.squeeze(frame)
    break
im = frame
cfg = get_cfg()
# add project-specific config (e.g., TensorMask) here if you're not running a model in detectron2's core library
cfg.merge_from_file(
    model_zoo.get_config_file("COCO-Detection/faster_rcnn_R_101_FPN_3x.yaml"))
cfg.MODEL.ROI_HEADS.SCORE_THRESH_TEST = 0.5  # set threshold for this model
# Find a model from detectron2's model zoo. You can use the https://dl.fbaipublicfiles... url as well
cfg.MODEL.WEIGHTS = model_zoo.get_checkpoint_url(
    "COCO-Detection/faster_rcnn_R_101_FPN_3x.yaml")
predictor = DefaultPredictor(cfg)
outputs = predictor(im)

# look at the outputs. See https://detectron2.readthedocs.io/tutorials/models.html#model-output-format for specification
print(outputs["instances"].pred_classes)
print(outputs["instances"].pred_boxes)
# We can use `Visualizer` to draw the predictions on the image.
v = Visualizer(im[:, :, ::-1],
               MetadataCatalog.get(cfg.DATASETS.TRAIN[0]),
               scale=1.2)
v = v.draw_instance_predictions(outputs["instances"].to("cpu"))
cv2.imwrite("./output.jpg", v.get_image()[:, :, ::-1])
Esempio n. 22
0
    def draw_panoptic_seg_predictions(self,
                                      frame,
                                      panoptic_seg,
                                      segments_info,
                                      area_threshold=None,
                                      alpha=0.5):
        frame_visualizer = Visualizer(frame, self.metadata)
        pred = _PanopticPrediction(panoptic_seg, segments_info)

        if self._instance_mode == ColorMode.IMAGE_BW:
            frame_visualizer.output.img = frame_visualizer._create_grayscale_image(
                pred.non_empty_mask())

        # draw mask for all semantic segments first i.e. "stuff"
        for mask, sinfo in pred.semantic_masks():
            category_idx = sinfo["category_id"]
            try:
                mask_color = [
                    x / 255 for x in self.metadata.stuff_colors[category_idx]
                ]
            except AttributeError:
                mask_color = None

            frame_visualizer.draw_binary_mask(
                mask,
                color=mask_color,
                text=self.metadata.stuff_classes[category_idx],
                alpha=alpha,
                area_threshold=area_threshold,
            )

        all_instances = list(pred.instance_masks())
        if len(all_instances) == 0:
            return frame_visualizer.output
        # draw mask for all instances second
        masks, sinfo = list(zip(*all_instances))
        num_instances = len(masks)
        masks_rles = mask_util.encode(
            np.asarray(np.asarray(masks).transpose(1, 2, 0),
                       dtype=np.uint8,
                       order="F"))
        assert len(masks_rles) == num_instances

        category_ids = [x["category_id"] for x in sinfo]
        detected = [
            _DetectedInstance(category_ids[i],
                              bbox=None,
                              mask_rle=masks_rles[i],
                              color=None,
                              ttl=8) for i in range(num_instances)
        ]
        colors = self._assign_colors(detected)
        labels = [self.metadata.thing_classes[k] for k in category_ids]

        frame_visualizer.overlay_instances(
            boxes=None,
            masks=masks,
            labels=labels,
            keypoints=None,
            assigned_colors=colors,
            alpha=alpha,
        )
        return frame_visualizer.output
Esempio n. 23
0
    def draw_instance_predictions(self, frame, predictions):
        """
        Draw instance-level prediction results on an image.

        Args:
            frame (ndarray): an RGB image of shape (H, W, C), in the range [0, 255].
            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.
        """
        frame_visualizer = Visualizer(frame, self.metadata)
        num_instances = len(predictions)
        if num_instances == 0:
            return frame_visualizer.output

        boxes = predictions.pred_boxes.tensor.numpy() if predictions.has(
            "pred_boxes") else None
        scores = predictions.scores if predictions.has("scores") else None
        classes = predictions.pred_classes.numpy() if predictions.has(
            "pred_classes") else None
        keypoints = predictions.pred_keypoints if predictions.has(
            "pred_keypoints") else None

        if predictions.has("pred_masks"):
            masks = predictions.pred_masks
            # mask IOU is not yet enabled
            # masks_rles = mask_util.encode(np.asarray(masks.permute(1, 2, 0), order="F"))
            # assert len(masks_rles) == num_instances
        else:
            masks = None

        detected = [
            _DetectedInstance(classes[i],
                              boxes[i],
                              mask_rle=None,
                              color=None,
                              ttl=8) for i in range(num_instances)
        ]
        colors = self._assign_colors(detected)

        labels = _create_text_labels(classes, scores,
                                     self.metadata.get("thing_classes", None))

        if self._instance_mode == ColorMode.IMAGE_BW:
            # any() returns uint8 tensor
            frame_visualizer.output.img = frame_visualizer._create_grayscale_image(
                (masks.any(dim=0) > 0).numpy() if masks is not None else None)
            alpha = 0.3
        else:
            alpha = 0.5

        frame_visualizer.overlay_instances(
            boxes=None
            if masks is not None else boxes,  # boxes are a bit distracting
            masks=masks,
            labels=labels,
            keypoints=keypoints,
            assigned_colors=colors,
            alpha=alpha,
        )

        return frame_visualizer.output
Esempio n. 24
0
def train_detectron():
    setup_logger()

    """
    Register dataset
    """
    from detectron2.data.datasets import register_coco_instances

    for d in ["train", "test"]:
        register_coco_instances(f"bladder_masked_{d}", {}, f"Data/Vezica/Tumor_Masked/{d}.json",
                                f"Data/Vezica/Tumor_Masked/{d}")


    """
    Display 3 random images from the dataset
    """
    import random
    from detectron2.data import DatasetCatalog, MetadataCatalog

    dataset_dicts = DatasetCatalog.get("bladder_masked_train")
    bladder_masked_metadata = MetadataCatalog.get("bladder_masked_train")

    # for d in random.sample(dataset_dicts, 1):
    #     img = cv2.imread(d["file_name"])
    #     v = Visualizer(img[:, :, ::-1], metadata=bladder_masked_metadata, scale=0.5)
    #     v = v.draw_dataset_dict(d)
    #     plt.figure(figsize = (14, 10))
    #     plt.imshow(cv2.cvtColor(v.get_image()[:, :, ::-1], cv2.COLOR_BGR2RGB))
    #     plt.show()


    """
    Train
    """

    cfg = get_cfg()
    cfg.merge_from_file(model_zoo.get_config_file("COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x.yaml"))
    cfg.DATASETS.TRAIN = ("bladder_masked_train",)
    cfg.DATASETS.TEST = ()
    cfg.DATALOADER.NUM_WORKERS = 1
    cfg.OUTPUT_DIR = "./Output/Bladder_Masked"
    cfg.MODEL.WEIGHTS = os.path.join(cfg.OUTPUT_DIR, "model_final.pth")
    # cfg.MODEL.WEIGHTS = model_zoo.get_checkpoint_url("COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x.yaml")
    cfg.SOLVER.IMS_PER_BATCH = 1
    cfg.SOLVER.BASE_LR = 0.00025
    cfg.SOLVER.MAX_ITER = 1500
    cfg.MODEL.ROI_HEADS.NUM_CLASSES = 1

    os.makedirs(cfg.OUTPUT_DIR, exist_ok=True)
    trainer = DefaultTrainer(cfg)
    # trainer.resume_or_load(resume=False)
    trainer.train()

    cfg.MODEL.WEIGHTS = os.path.join(cfg.OUTPUT_DIR, "model_final.pth")
    cfg.MODEL.ROI_HEADS.SCORE_THRESH_TEST = 0.5
    cfg.DATASETS.TEST = ("bladder_masked_test",)
    predictor = DefaultPredictor(cfg)

    from detectron2.utils.visualizer import ColorMode
    from detectron2.evaluation.sem_seg_evaluation import SemSegEvaluator

    dataset_dicts = DatasetCatalog.get("bladder_masked_test")
    bladder_masked_metadata = MetadataCatalog.get("bladder_masked_test")

    # evaluator = SemSegEvaluator("bladder_masked_test", False, 2)
    # evaluator.evaluate()

    k = 1

    for d in dataset_dicts:
        im = cv2.imread(d["file_name"])
        outputs = predictor(im)
        v = Visualizer(im[:, :, ::-1],
                       metadata=bladder_masked_metadata,
                       scale=0.8,
                       instance_mode=ColorMode.IMAGE_BW  # remove the colors of unsegmented pixels
                       )
        v = v.draw_instance_predictions(outputs["instances"].to("cpu"))
        plt.figure(figsize=(14, 10))
        plt.imsave("test" + str(k) + ".png", cv2.cvtColor(v.get_image()[:, :, ::-1], cv2.COLOR_BGR2RGB))
        k+=1
Esempio n. 25
0
    scale = 2.0 if args.show else 1.0
    if args.source == "dataloader":
        train_data_loader = build_detection_train_loader(cfg)
        for batch in train_data_loader:
            for per_image in batch:
                # Pytorch tensor is in (C, H, W) format
                img = per_image["image"].permute(1, 2, 0)
                if cfg.INPUT.FORMAT == "BGR":
                    img = img[:, :, [2, 1, 0]]
                else:
                    img = np.asarray(
                        Image.fromarray(img,
                                        mode=cfg.INPUT.FORMAT).convert("RGB"))

                visualizer = Visualizer(img, metadata=metadata, scale=scale)
                target_fields = per_image["instances"].get_fields()
                labels = [
                    metadata.thing_classes[i]
                    for i in target_fields["gt_classes"]
                ]
                vis = visualizer.overlay_instances(
                    labels=labels,
                    boxes=target_fields.get("gt_boxes", None),
                    masks=target_fields.get("gt_masks", None),
                    keypoints=target_fields.get("gt_keypoints", None),
                )
                output(vis, str(per_image["image_id"]) + ".jpg")
    else:
        dicts = list(
            chain.from_iterable(
Esempio n. 26
0
    """
    Test the COCO json dataset loader.

    Usage:
        python -m detectron2.data.datasets.coco \
            path/to/json path/to/image_root dataset_name

        "dataset_name" can be "coco_2014_minival_100", or other
        pre-registered ones
    """
    from detectron2.utils.logger import setup_logger
    from detectron2.utils.visualizer import Visualizer
    import detectron2.data.datasets  # noqa # add pre-defined metadata
    import sys

    logger = setup_logger(name=__name__)
    assert sys.argv[3] in DatasetCatalog.list()
    meta = MetadataCatalog.get(sys.argv[3])

    dicts = load_coco_json(sys.argv[1], sys.argv[2], sys.argv[3])
    logger.info("Done loading {} samples.".format(len(dicts)))

    dirname = "coco-data-vis"
    os.makedirs(dirname, exist_ok=True)
    for d in dicts:
        img = np.array(Image.open(d["file_name"]))
        visualizer = Visualizer(img, metadata=meta)
        vis = visualizer.draw_dataset_dict(d)
        fpath = os.path.join(dirname, os.path.basename(d["file_name"]))
        vis.save(fpath)
Esempio n. 27
0
    def draw_instance_predictions(self, frame, predictions):
        """
        Draw instance-level prediction results on an image.

        Args:
            frame (ndarray): an RGB image of shape (H, W, C), in the range [0, 255].
            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.
        """
        frame_visualizer = Visualizer(frame, self.metadata)
        num_instances = len(predictions)
        if num_instances == 0:
            return frame_visualizer.output

        boxes = predictions.pred_boxes.tensor.numpy() if predictions.has(
            "pred_boxes") else None
        scores = predictions.scores if predictions.has("scores") else None
        classes = predictions.pred_classes.numpy() if predictions.has(
            "pred_classes") else None
        keypoints = predictions.pred_keypoints if predictions.has(
            "pred_keypoints") else None
        colors = predictions.COLOR if predictions.has(
            "COLOR") else [None] * len(predictions)
        durations = predictions.ID_duration if predictions.has(
            "ID_duration") else None
        duration_threshold = self.metadata.get("duration_threshold", 0)
        visibilities = None if durations is None else [
            x > duration_threshold for x in durations
        ]

        if predictions.has("pred_masks"):
            masks = predictions.pred_masks
            # mask IOU is not yet enabled
            # masks_rles = mask_util.encode(np.asarray(masks.permute(1, 2, 0), order="F"))
            # assert len(masks_rles) == num_instances
        else:
            masks = None

        detected = [
            _DetectedInstance(classes[i],
                              boxes[i],
                              mask_rle=None,
                              color=colors[i],
                              ttl=8) for i in range(num_instances)
        ]
        if not predictions.has("COLOR"):
            colors = self._assign_colors(detected)

        labels = _create_text_labels(classes, scores,
                                     self.metadata.get("thing_classes", None))

        if self._instance_mode == ColorMode.IMAGE_BW:
            # any() returns uint8 tensor
            frame_visualizer.output.reset_image(
                frame_visualizer._create_grayscale_image((masks.any(
                    dim=0) > 0).numpy() if masks is not None else None))
            alpha = 0.3
        else:
            alpha = 0.5

        labels = (
            None if labels is None else
            [y[0] for y in filter(lambda x: x[1], zip(labels, visibilities))]
        )  # noqa
        assigned_colors = (
            None if colors is None else
            [y[0] for y in filter(lambda x: x[1], zip(colors, visibilities))]
        )  # noqa
        frame_visualizer.overlay_instances(
            boxes=None if masks is not None else
            boxes[visibilities],  # boxes are a bit distracting
            masks=None if masks is None else masks[visibilities],
            labels=labels,
            keypoints=None if keypoints is None else keypoints[visibilities],
            assigned_colors=assigned_colors,
            alpha=alpha,
        )

        return frame_visualizer.output
Esempio n. 28
0
    DatasetCatalog.register(
        "products_" + d,
        lambda d=d: get_product_page_dicts(
            "/home/kevin/bin/scraping_engine/data/export-2020-10-22T19_24_01.639Z.json",
            "/home/kevin/bin/scraping_engine/data/product_images_2"))
    MetadataCatalog.get("products_" + d).set(
        thing_classes=["title", "rating", "ratings", "price", "description"])
products_metadata = MetadataCatalog.get("products_train")
dicts = get_product_page_dicts(
    "/home/kevin/bin/scraping_engine/data/export-2020-10-22T19_24_01.639Z.json",
    "/home/kevin/bin/scraping_engine/data/product_images_2")
for i, d in enumerate(random.sample(dicts, 3)):
    img = cv2.imread(d["file_name"])
    visualizer = Visualizer(img[:, :, ::-1],
                            metadata=products_metadata,
                            scale=0.5)
    out = visualizer.draw_dataset_dict(d)
    print(out)
    cv2.imwrite(f"test-img{i}.png", out.get_image()[:, :, ::-1])

    # DatasetCatalog.register("balloon_" + d, lambda d=d: get_balloon_dicts("balloon/" + d))
    # MetadataCatalog.get("balloon_" + d).set(thing_classes=["balloon"])
balloon_metadata = MetadataCatalog.get("balloon_train")

from detectron2.engine import DefaultTrainer

cfg = get_cfg()
cfg.merge_from_file(
    model_zoo.get_config_file(
        "COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_1x.yaml"))
Esempio n. 29
0
img = cv2.imread("./jua.jpg")
# img = cv2.resize(img,(0,0),fx=0.5,fy=0.5)
print(img.shape)

# %% key point
# create config for Keypoints detection
_cfg = get_cfg()
_cfg.merge_from_file(
    model_zoo.get_config_file("COCO-Keypoints/keypoint_rcnn_R_50_FPN_3x.yaml"))
_cfg.MODEL.ROI_HEADS.SCORE_THRESH_TEST = 0.5
_cfg.MODEL.WEIGHTS = model_zoo.get_checkpoint_url(
    "COCO-Keypoints/keypoint_rcnn_R_50_FPN_3x.yaml")
_cfg.MODEL.DEVICE = 'cpu'  # device를 cpu로 선택
# Keypoints predictor
_predictor = DefaultPredictor(_cfg)
#%%
start_tick = time.time()
outputs = _predictor(img)
print(f'delay { time.time() - start_tick }')

#%%
# using `Visualizer` to draw the predictions on the image.
v = Visualizer(cv2.cvtColor(img, cv2.COLOR_BGR2RGB),
               MetadataCatalog.get(_cfg.DATASETS.TRAIN[0]),
               scale=1.2)
out = v.draw_instance_predictions(outputs["instances"].to("cpu"))

display(Image.fromarray(out.get_image()))

# %%
Esempio n. 30
0
# Register data inside detectron
# With DATASET_SIZES one can limit the size of these datasets
d = "inference"
inference_dict = get_lofar_dicts(
    os.path.join(DATASET_PATH, "VIA_json_inference.pkl"))
DatasetCatalog.register(d, lambda d=d: inference_dict)
MetadataCatalog.get(d).set(thing_classes=["radio_source"])
lofar_metadata = MetadataCatalog.get(d)

print("Sample and plot input data as sanity check")
#"""
for i, dic in enumerate(random.sample(inference_dict, 3)):
    print(dic["file_name"])
    img = imread(dic["file_name"])
    visualizer = Visualizer(img[:, :, ::-1], metadata=lofar_metadata, scale=1)
    vis = visualizer.draw_dataset_dict(dic)
    a = vis.get_image()[:, :, ::-1]
    plt.figure(figsize=(10, 10))
    plt.imshow(a)
    plt.savefig(
        os.path.join(cfg.OUTPUT_DIR,
                     f"random_input_example_for_sanity_check_{i}.jpg"))
    plt.close()
#"""

# Inference mode

# To implement the LOFAR relevant metrics I changed
# DefaultTrainer into LOFARTrainer
# where the latter calls LOFAREvaluator within build_hooks instead of the default evaluator