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]
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)