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