Пример #1
0
def inference_with_restored_model(net,
                                  image,
                                  label,
                                  bbox_gt=None,
                                  verbose=True,
                                  times=1,
                                  gt_prob=0.8):
    if verbose:
        print('Processing image with shape%s' % (image.shape, ))
    bbox_pred = net.inference_box(image)
    bbox_pred = my_utils.bbox_xy_to_tlwh(bbox_pred, size=image.shape[:2])

    prediction = crf.crf_from_bbox(image, bbox=bbox_pred, gt_prob=gt_prob)
    if times > 1:
        for i in range(times - 1):
            unary = crf.get_unary_term(prediction,
                                       unary_from='label',
                                       n_classes=2,
                                       gt_prob=gt_prob)
            prediction = crf.crf_post_process(image, unary)

    result = my_utils.count_many(prediction, label)
    prediction = {
        'label': prediction,
        'bbox': bbox_pred,
    }
    if bbox_gt is not None:
        prediction['IoU'] = my_utils.calc_bbox_iou(bbox_pred, bbox_gt)
    return result, prediction
def crf_eval_one(mm, image, label):
    out, prob = mm.inference(image, ['mask', 'prob'])
    out, prob = np.squeeze(out), np.squeeze(prob)
    unary = crf.get_unary_term(prob)
    crf_out = crf.crf_post_process(image, unary)
    result = my_utils.count_many(predictions=crf_out, labels=label)
    return result
Пример #3
0
def test_five():
    config = utils.load_config()
    dermis = inputs.SkinData(config['data_dir'], 'dermis')
    with tf.Graph().as_default():
        global_step = tf.train.get_or_create_global_step()
        image_ph = tf.placeholder(dtype=tf.float32, shape=(None, None, 3))
        images = tf.expand_dims(image_ph, axis=0)
        net = FCN(images, net_params=config['net_params'])

        h, w = tf.shape(image_ph)[0], tf.shape(image_ph)[1]
        upscore = tf.image.resize_images(net.endpoints['conv4'], size=(h, w))
        prob_one = tf.nn.sigmoid(upscore)
        prob_zero = 1 - prob_one
        probs = tf.concat([prob_zero, prob_one], axis=3)

        saver = tf.train.Saver()
        with tf.Session() as sess:
            saver.restore(sess,
                          tf.train.latest_checkpoint(config['train_dir']))
            logger.info('Model at step-%d restored successfully!' %
                        sess.run(global_step))
            utils.create_if_not_exists(config['save_path'])

            result_before = {'TP': 0, 'TN': 0, 'FP': 0, 'FN': 0}
            result_after = result_before.copy()

            def update_dict(d, to_update):
                for key in to_update:
                    d[key] += to_update[key]

            _, x_test, _, y_test = train_test_split(
                dermis.images,
                dermis.labels,
                random_state=config['split_seed'])
            for i, (image, label) in enumerate(zip(x_test, y_test)):
                prep_image = image_prep_for_test(image)
                probs_o = np.squeeze(
                    sess.run(probs, feed_dict={image_ph: prep_image}))
                cnn_result = np.argmax(probs_o, axis=2)
                cnn_crf_result = crf_post_process(image, probs_o)

                result_bi = count_many(cnn_result, label)
                result_ai = count_many(cnn_crf_result, label)
                update_dict(result_before, result_bi)
                update_dict(result_after, result_ai)
                result_bi.update(metric_many_from_counter(result_bi))
                result_ai.update(metric_many_from_counter(result_ai))

                if i % 5 == 0:
                    logger.info(
                        'Image-{}\nresult before\n{}\nresult after\n{}\n'.
                        format(i, result_bi, result_ai))

            result_before.update(metric_many_from_counter(result_before))
            result_after.update(metric_many_from_counter(result_after))
            logger.info('\nresult before\n{}\nresult after\n{}\n'.format(
                result_before, result_after))
Пример #4
0
def test_four():
    config = utils.load_config()
    dermis = inputs.SkinData(config['data_dir'], 'dermis')
    with tf.Graph().as_default():
        global_step = tf.train.get_or_create_global_step()
        image_ph = tf.placeholder(dtype=tf.float32, shape=(None, None, 3))
        images = tf.expand_dims(image_ph, axis=0)
        net = FCN(images, net_params=config['net_params'])

        h, w = tf.shape(image_ph)[0], tf.shape(image_ph)[1]
        upscore = tf.image.resize_images(net.endpoints['conv4'], size=(h, w))
        prob_one = tf.nn.sigmoid(upscore)
        prob_zero = 1 - prob_one
        probs = tf.concat([prob_zero, prob_one], axis=3)

        saver = tf.train.Saver()
        with tf.Session() as sess:
            saver.restore(sess,
                          tf.train.latest_checkpoint(config['train_dir']))
            logger.info('Model at step-%d restored successfully!' %
                        sess.run(global_step))
            utils.create_if_not_exists(config['save_path'])
            total_count = 0
            true_count = 0
            for i, (image,
                    label) in enumerate(zip(dermis.images, dermis.labels)):
                prep_image = image_prep_for_test(image)
                probs_o = np.squeeze(
                    sess.run(probs, feed_dict={image_ph: prep_image}))
                cnn_result = np.argmax(probs_o, axis=2)
                accuracy_before, _, _ = metric_accuracy(cnn_result, label)
                cnn_crf_result = crf_post_process(image, probs_o)
                accuracy_i, true_count_i, total_count_i = metric_accuracy(
                    cnn_crf_result, label)
                true_count += true_count_i
                total_count += total_count_i

                ss = 'DOWN' if accuracy_before > accuracy_i else 'UP'
                path = os.path.join(config['save_path'],
                                    dermis.listing[i].split('/')[-1])
                path = '{:<6} ({:.3f}) ({:.3f}) {}.jpg'.format(
                    path, accuracy_before, accuracy_i, ss)
                save_all_two(image, label, cnn_result, cnn_crf_result, path)

                if i % 5 == 0:
                    logger.info(
                        'Image-%d accuracy before(%.3f) after(%.3f) %s' %
                        (i, accuracy_before, accuracy_i, ss))

            accuracy = true_count * 1.0 / total_count
            logger.info('Accuracy after crf: %.3f' % accuracy)
Пример #5
0
def get_cnn_crf_result(image, bbox, lesion_prob):
    h, w, _ = image.shape
    p0 = np.ones((h, w))
    p1 = np.zeros((h, w))
    top, left, height, width = bbox
    lesion_prob = np.squeeze(lesion_prob)
    assert (height, width
            ) == lesion_prob.shape[:-1], "prob shape%s not equal to bbox%s" % (
                lesion_prob.shape[:-1], bbox)
    p0[top:top + height, left:left + width] = lesion_prob[:, :, 0]
    p1[top:top + height, left:left + width] = lesion_prob[:, :, 1]
    prob = np.stack([p0, p1], axis=2)
    result = crf_post_process(image, prob)
    return result