예제 #1
0
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))
예제 #2
0
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)
예제 #3
0
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))
예제 #4
0
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)
예제 #5
0
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