Exemple #1
0
    num_classes=num_classes,
    nms=nms,
    flip_test=flip_test,
    freeze_bn=True,
    score_threshold=score_threshold)
prediction_model.load_weights(model_path, by_name=True, skip_mismatch=True)
for i in range(10):
    image = generator.load_image(i)
    src_image = image.copy()

    c = np.array([image.shape[1] / 2., image.shape[0] / 2.], dtype=np.float32)
    s = max(image.shape[0], image.shape[1]) * 1.0

    tgt_w = generator.input_size
    tgt_h = generator.input_size
    image = generator.preprocess_image(image, c, s, tgt_w=tgt_w, tgt_h=tgt_h)
    if flip_test:
        flipped_image = image[:, ::-1]
        inputs = np.stack([image, flipped_image], axis=0)
    else:
        inputs = np.expand_dims(image, axis=0)
    # run network
    start = time.time()
    detections = prediction_model.predict_on_batch(inputs)[0]
    print(time.time() - start)
    scores = detections[:, 4]
    # select indices which have a score above the threshold
    indices = np.where(scores > score_threshold)[0]

    # select those detections
    detections = detections[indices]
Exemple #2
0
def main():

    generator = PascalVocGenerator(cfg.IMAGE_DIR,
                                   cfg.ANNOTATION_DIR,
                                   cfg.TEST_TEXT,
                                   classes=cfg.CLASSES,
                                   skip_difficult=True,
                                   train_data=False)

    num_classes = generator.num_classes()
    classes = list(generator.classes.keys())
    colors = [
        np.random.randint(0, 256, 3).tolist() for i in range(num_classes)
    ]
    model = centernet(num_classes,
                      score_threshold=cfg.SCORE_THRESHOLD,
                      nms=cfg.NMS,
                      flip_test=cfg.FLIP_TEST,
                      training=False)
    model.load_weights(model_path, by_name=True, skip_mismatch=True)

    for i in range(10):
        image = generator.load_image(i)
        #cv2.imwrite("./results/{}_o.jpg".format(i), image)
        src_image = image.copy()

        c = np.array([image.shape[1] / 2., image.shape[0] / 2.],
                     dtype=np.float32)
        s = max(image.shape[0], image.shape[1]) * 1.0

        tgt_w = generator.input_size
        tgt_h = generator.input_size
        image = generator.preprocess_image(image,
                                           c,
                                           s,
                                           tgt_w=tgt_w,
                                           tgt_h=tgt_h)

        if cfg.FLIP_TEST:
            flipped_image = image[:, ::-1]
            inputs = np.stack([image, flipped_image], axis=0)
        else:
            inputs = np.expand_dims(image, axis=0)

        detections = model.predict_on_batch(inputs)[0]

        scores = detections[:, 4]

        indices = np.where(scores > cfg.SCORE_THRESHOLD)[0]

        detections = detections[indices]
        detections_copy = detections.copy()
        detections = detections.astype(np.float64)
        trans = get_affine_transform(c, s, (tgt_w // 4, tgt_h // 4), inv=1)

        for j in range(detections.shape[0]):
            detections[j, 0:2] = affine_transform(detections[j, 0:2], trans)
            detections[j, 2:4] = affine_transform(detections[j, 2:4], trans)

        detections[:, [0, 2]] = np.clip(detections[:, [0, 2]], 0,
                                        src_image.shape[1])
        detections[:, [1, 3]] = np.clip(detections[:, [1, 3]], 0,
                                        src_image.shape[0])

        for detection in detections:
            xmin = int(round(detection[0]))
            ymin = int(round(detection[1]))
            xmax = int(round(detection[2]))
            ymax = int(round(detection[3]))
            score = '{:.4f}'.format(detection[4])
            class_id = int(detection[5])
            color = colors[class_id]
            class_name = classes[class_id]
            label = '-'.join([class_name, score])
            ret, baseline = cv2.getTextSize(label, cv2.FONT_HERSHEY_SIMPLEX,
                                            0.5, 1)

            cv2.rectangle(src_image, (xmin, ymin), (xmax, ymax), color, 1)
            cv2.rectangle(src_image, (xmin, ymax - ret[1] - baseline),
                          (xmin + ret[0], ymax), color, -1)
            cv2.putText(src_image, label, (xmin, ymax - baseline),
                        cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 0), 1)
        #cv2.imwrite("./results/{}_r.jpg".format(i), src_image)
        cv2.imshow('image', src_image)
        cv2.waitKey(0)
model_path = 'checkpoints/2019-12-03/pascal_05_0.6283_1.1975_0.8029.h5'
num_classes = generator.num_classes()
classes = list(generator.classes.keys())
score_threshold = 0.5
colors = [np.random.randint(0, 256, 3).tolist() for i in range(num_classes)]
model, prediction_model = efficientdet(phi=phi,
                                       weighted_bifpn=weighted_bifpn,
                                       num_classes=num_classes,
                                       score_threshold=score_threshold)
prediction_model.load_weights(model_path, by_name=True)
for i in range(10):
    image = generator.load_image(i)
    h, w = image.shape[:2]
    src_image = image[:, :, ::-1].copy()

    image, scale, offset_h, offset_w = generator.preprocess_image(image)
    inputs = np.expand_dims(image, axis=0)
    anchors = generator.anchors
    # run network
    start = time.time()
    boxes, scores, labels = prediction_model.predict_on_batch(
        [np.expand_dims(image, axis=0),
         np.expand_dims(anchors, axis=0)])
    print(time.time() - start)
    boxes[0, :, [0, 2]] = boxes[0, :, [0, 2]] - offset_w
    boxes[0, :, [1, 3]] = boxes[0, :, [1, 3]] - offset_h
    boxes /= scale
    boxes[0, :, 0] = np.clip(boxes[0, :, 0], 0, w - 1)
    boxes[0, :, 1] = np.clip(boxes[0, :, 1], 0, h - 1)
    boxes[0, :, 2] = np.clip(boxes[0, :, 2], 0, w - 1)
    boxes[0, :, 3] = np.clip(boxes[0, :, 3], 0, h - 1)