def test_closing(dir, thresh): print('Evaluating at {}...'.format(thresh)) # data prepare step Data = rsrClassData(flags.rsr_data_dir) (collect_files_test, meta_test) = Data.getCollectionByName(flags.test_data_dir) iou = [] for (image_name, label_name) in collect_files_test: c_names = flags.city_name.split(',') for c_name in c_names: if c_name in image_name: city_name = re.findall('[a-z\-]*(?=[0-9]+\.)', image_name)[0] tile_id = re.findall('[0-9]+(?=\.tif)', image_name)[0] pred_labels = scipy.misc.imread( os.path.join(dir, '{}_{}.png'.format(city_name, tile_id))) pred_labels = img_closing(thresh, pred_labels) * 255 # evaluate truth_label_img = scipy.misc.imread( os.path.join(flags.rsr_data_dir, label_name)) iou.append(sis_utils.iou_metric(truth_label_img, pred_labels)) print('{}_{} th={} iou={}'.format(city_name, tile_id, thresh, iou[-1])) print(np.mean(iou))
def get_fusion_ious(model_dirs): model_name = [a.split('/')[-1] for a in model_dirs] iou_record = {} print('Evaluating using {}...'.format('+'.join(model_name))) # data prepare step Data = rsrClassData(flags.rsr_data_dir) (collect_files_test, meta_test) = Data.getCollectionByName(flags.test_data_dir) for (image_name, label_name) in collect_files_test: c_names = flags.city_name.split(',') for c_name in c_names: if c_name in image_name: city_name = re.findall('[a-z\-]*(?=[0-9]+\.)', image_name)[0] tile_id = re.findall('[0-9]+(?=\.tif)', image_name)[0] preds = np.zeros((5000, 5000, 2)) for dir in model_dirs: preds += np.load(os.path.join(dir, '{}_{}.npy'.format(city_name, tile_id))) pred_labels = sis_utils.get_pred_labels(preds) # evaluate truth_label_img = scipy.misc.imread(os.path.join(flags.rsr_data_dir, label_name)) iou = sis_utils.iou_metric(truth_label_img, pred_labels * 255) iou_record[image_name] = iou print('{}_{}: iou={:.2f}'.format(city_name, tile_id, iou * 100)) if len(model_name) <= 3: np.save(os.path.join(task_dir, '{}.npy').format('_'.join(model_name)), iou_record) else: np.save(os.path.join(task_dir, 'fusion_{}_{}.npy').format(len(model_name), '_'.join([a[:4] for a in model_name])), iou_record) iou_mean = [] for _, val in iou_record.items(): iou_mean.append(val) print(np.mean(iou_mean)) return np.mean(iou_mean)
def main(flags): # set gpu os.environ['CUDA_DEVICE_ORDER'] = 'PCI_BUS_ID' os.environ['CUDA_VISIBLE_DEVICES'] = flags.GPU # environment settings np.random.seed(flags.random_seed) tf.set_random_seed(flags.random_seed) # data prepare step Data = rsrClassData(flags.rsr_data_dir) (collect_files_test, meta_test) = Data.getCollectionByName(flags.test_data_dir) # image reader coord = tf.train.Coordinator() # define place holder X = tf.placeholder(tf.float32, shape=[None, flags.input_size[0], flags.input_size[1], 3], name='X') y = tf.placeholder(tf.int32, shape=[None, flags.input_size[0], flags.input_size[1], 1], name='y') mode = tf.placeholder(tf.bool, name='mode') # initialize model model = unet.UnetModel({'X':X, 'Y':y}, trainable=mode, model_name=flags.model_name, input_size=flags.input_size) model.create_graph('X', flags.num_classes) model.make_update_ops('X', 'Y') # set ckdir model.make_ckdir(flags.ckdir) # set up graph and initialize config = tf.ConfigProto() # run training start_time = time.time() with tf.Session(config=config) as sess: init = tf.global_variables_initializer() sess.run(init) saver = tf.train.Saver(var_list=tf.global_variables(), max_to_keep=1) if os.path.exists(model.ckdir) and tf.train.get_checkpoint_state(model.ckdir): latest_check_point = tf.train.latest_checkpoint(model.ckdir) saver.restore(sess, latest_check_point) threads = tf.train.start_queue_runners(coord=coord, sess=sess) try: for (image_name, label_name) in collect_files_test: if flags.city_name in image_name: city_name = re.findall('[a-z\-]*(?=[0-9]+\.)', image_name)[0] tile_id = re.findall('[0-9]+(?=\.tif)', image_name)[0] # load reader iterator_test = image_reader.image_label_iterator( os.path.join(flags.rsr_data_dir, image_name), batch_size=flags.batch_size, tile_dim=meta_test['dim_image'][:2], patch_size=flags.input_size, overlap=0) # run result = model.test('X', sess, iterator_test) pred_label_img = sis_utils.get_output_label(result, meta_test['dim_image'], flags.input_size, meta_test['colormap']) # evaluate truth_label_img = scipy.misc.imread(os.path.join(flags.rsr_data_dir, label_name)) iou = sis_utils.iou_metric(truth_label_img, pred_label_img) print('{}_{}: iou={:.2f}'.format(city_name, tile_id, iou*100)) finally: coord.request_stop() coord.join(threads) duration = time.time() - start_time print('duration {:.2f} minutes'.format(duration/60))
def test(flags, ep, ds, lr, save_dir): # set gpu os.environ['CUDA_DEVICE_ORDER'] = 'PCI_BUS_ID' os.environ['CUDA_VISIBLE_DEVICES'] = flags.GPU # environment settings np.random.seed(flags.random_seed) tf.set_random_seed(flags.random_seed) # data prepare step Data = rsrClassData(flags.rsr_data_dir) (collect_files_test, meta_test) = Data.getCollectionByName(flags.test_data_dir) # image reader coord = tf.train.Coordinator() # define place holder X = tf.placeholder(tf.float32, shape=[None, flags.input_size[0], flags.input_size[1], 3], name='X') y = tf.placeholder(tf.int32, shape=[None, flags.input_size[0], flags.input_size[1], 1], name='y') mode = tf.placeholder(tf.bool, name='mode') # initialize model flags.model_name = 'ResUnetShrinkInria_fr_resample_mean_reduced_EP-{}_DS-{}.0_LR-{}'.format(ep, ds, lr) model = unet.ResUnetModel_shrink({'X':X, 'Y':y}, trainable=mode, model_name=flags.model_name, input_size=flags.input_size) model.create_graph('X', flags.num_classes) model.make_update_ops('X', 'Y') # set ckdir model.make_ckdir(flags.ckdir) # set up graph and initialize config = tf.ConfigProto() # run training start_time = time.time() with tf.Session(config=config) as sess: init = tf.global_variables_initializer() sess.run(init) saver = tf.train.Saver(var_list=tf.global_variables(), max_to_keep=1) if os.path.exists(model.ckdir) and tf.train.get_checkpoint_state(model.ckdir): latest_check_point = tf.train.latest_checkpoint(model.ckdir) saver.restore(sess, latest_check_point) print('loaded {}'.format(latest_check_point)) threads = tf.train.start_queue_runners(coord=coord, sess=sess) try: iou_record = {} for (image_name, label_name) in collect_files_test: c_names = flags.city_name.split(',') for c_name in c_names: if c_name in image_name: city_name = re.findall('[a-z\-]*(?=[0-9]+\.)', image_name)[0] tile_id = re.findall('[0-9]+(?=\.tif)', image_name)[0] # load reader iterator_test = image_reader.image_label_iterator( os.path.join(flags.rsr_data_dir, image_name), batch_size=flags.batch_size, tile_dim=meta_test['dim_image'][:2], patch_size=flags.input_size, overlap=0, padding=0, image_mean=IMG_MEAN) # run result = model.test('X', sess, iterator_test) pred_label_img = sis_utils.get_output_label(result, meta_test['dim_image'], flags.input_size, meta_test['colormap'], overlap=0, output_image_dim=meta_test['dim_image'], output_patch_size=flags.input_size, make_map=False) # evaluate truth_label_img = scipy.misc.imread(os.path.join(flags.rsr_data_dir, label_name)) iou = sis_utils.iou_metric(truth_label_img, pred_label_img * 255) '''plt.subplot(121) plt.imshow(truth_label_img) plt.subplot(122) plt.imshow(pred_label_img) plt.show()''' iou_record[image_name] = iou print('{}_{}: iou={:.2f}'.format(city_name, tile_id, iou*100)) finally: coord.request_stop() coord.join(threads) duration = time.time() - start_time print('duration {:.2f} minutes'.format(duration/60)) np.save(os.path.join(save_dir, '{}.npy').format(model.model_name), iou_record) iou_mean = [] for _, val in iou_record.items(): iou_mean.append(val) print('{}: {}'.format(flags.model_name, np.mean(iou_mean))) return np.mean(iou_mean)
def test_real_across_city(flags, MODEL_NAME, patch_size): # set gpu os.environ['CUDA_DEVICE_ORDER'] = 'PCI_BUS_ID' os.environ['CUDA_VISIBLE_DEVICES'] = flags.GPU tf.reset_default_graph() # environment settings np.random.seed(flags.random_seed) tf.set_random_seed(flags.random_seed) result_dict = {} for city in ['austin', 'chicago', 'kitsap', 'tyrol-w', 'vienna']: if not os.path.exists('./temp'): os.makedirs('./temp') flags.city_name = city for m_name in MODEL_NAME: tf.reset_default_graph() # data prepare step Data = rsrClassData(flags.rsr_data_dir) (collect_files_test, meta_test) = Data.getCollectionByName(flags.test_data_dir) # image reader coord = tf.train.Coordinator() # define place holder X = tf.placeholder(tf.float32, shape=[None, patch_size[0], patch_size[1], 3], name='X') y = tf.placeholder(tf.int32, shape=[None, patch_size[0], patch_size[1], 1], name='y') mode = tf.placeholder(tf.bool, name='mode') # initialize model model = unet.UnetModel_Origin({ 'X': X, 'Y': y }, trainable=mode, model_name=m_name, input_size=patch_size) model.create_graph('X', flags.num_classes) model.make_update_ops('X', 'Y') # set ckdir model.make_ckdir(flags.ckdir) # set up graph and initialize config = tf.ConfigProto() # run training start_time = time.time() with tf.Session(config=config) as sess: init = tf.global_variables_initializer() sess.run(init) saver = tf.train.Saver(var_list=tf.global_variables(), max_to_keep=1) if os.path.exists( model.ckdir) and tf.train.get_checkpoint_state( model.ckdir): print('loading model from {}'.format(model.ckdir)) latest_check_point = tf.train.latest_checkpoint( model.ckdir) saver.restore(sess, latest_check_point) threads = tf.train.start_queue_runners(coord=coord, sess=sess) for (image_name, label_name) in collect_files_test: if flags.city_name in image_name: city_name = re.findall('[a-z\-]*(?=[0-9]+\.)', image_name)[0] tile_id = re.findall('[0-9]+(?=\.tif)', image_name)[0] print('Evaluating {}_{} at patch size: {}'.format( city_name, tile_id, patch_size)) # load reader iterator_test = image_reader.image_label_iterator( os.path.join(flags.rsr_data_dir, image_name), batch_size=flags.batch_size, tile_dim=meta_test['dim_image'][:2], patch_size=patch_size, overlap=184, padding=92) # run result = model.test('X', sess, iterator_test) raw_pred = patch_extractor.un_patchify_shrink( result, (meta_test['dim_image'][0] + 184, meta_test['dim_image'][1] + 184), tile_dim_output=meta_test['dim_image'], patch_size=patch_size, patch_size_output=(patch_size[0] - 184, patch_size[1] - 184), overlap=184) file_name = '{}_{}_{}.npy'.format( m_name.split('/')[-1], city_name, tile_id) np.save(os.path.join('./temp', file_name), raw_pred) coord.request_stop() coord.join(threads) duration = time.time() - start_time print('duration {:.2f} minutes'.format(duration / 60)) for tile_num in range(5): output = np.zeros((5000, 5000, 2)) for m_name in MODEL_NAME: raw_pred = np.load( os.path.join( './temp', '{}_{}_{}.npy'.format( m_name.split('/')[-1], city, tile_num + 1))) output += raw_pred # combine results pred_label_img = sis_utils.get_pred_labels(output) output_pred = sis_utils.make_output_file(pred_label_img, meta_test['colormap']) # evaluate truth_label_img = scipy.misc.imread( os.path.join(flags.rsr_data_dir, 'inria', 'truth', '{}{}.tif'.format(city, tile_num + 1))) iou = sis_utils.iou_metric(truth_label_img, output_pred) print('{}_{}: iou={:.2f}'.format(city, tile_id, iou * 100)) result_dict['{}{}'.format(city, tile_id)] = iou shutil.rmtree('./temp') return result_dict