Exemplo n.º 1
0
def launch_action(parameters, verbose=True):
    """
    Function that set the step by step to train and predict the model 
    :INPUT:
        parameters: dict, 
            {   
                "gpu": integer, ID of the GPU to use 
                "mode": str, action to execute 'train', 'test' or 'kfold'  
                "model_path": str, Path to the model. This model if going to use for make the predictions ['mode'='test'] 
                              or to continue the training process [mode='train' and 'trainFromCKP'=True]. 
                "path2data":str, path to the folder  that contain the data [train/*.ply, test/*.ply, fold_x/*.ply]
                "path2output": str, path to the output folder, this is only use when the mode is set to train 
                "protocol":str, training protocol, 'xyz', 'field', 'kfold' 
                "trainFromCKP":bool, only use it if the models is going to be trained from a checkpoint
            }        
    """
    GPU_ID = parameters["gpu"]
    os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID"
    os.environ['CUDA_VISIBLE_DEVICES'] = str(GPU_ID)
    os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'

    Mode = parameters["mode"]

    dataset = AppleTree(protocol, path2dataset=inputDir)
    dataset.init_input_pipeline(mode=Mode)
    
    if Mode == 'train' and not parameters["trainFromCKP"]:
        model = Network(dataset, cfg)
        model.train(dataset)

    elif Mode == "train" and parameters["trainFromCKP"]:
        model = Network(dataset, cfg, restore_snap=parameters["model_path"])
        model.train(dataset)

    elif Mode == "validation":

        cfg.saving = False
        if parameters["model_path"] is not 'None':
            chosen_snap = parameters["model_path"]
        else:
            chosen_snapshot = -1
            # logs = np.sort([os.path.join('results', f) for f in os.listdir('results') if f.startswith('Log')])
            # chosen_folder = logs[-1]
            chosen_folder = parameters["outputDir"]
            snap_path = join(chosen_folder, 'snapshots')
            snap_steps = [int(f[:-5].split('-')[-1]) for f in os.listdir(snap_path) if f[-5:] == '.meta']
            chosen_step = np.sort(snap_steps)[-1]
            chosen_snap = os.path.join(snap_path, 'snap-{:d}'.format(chosen_step))
        
        model = Network(dataset, cfg, restore_snap=chosen_snap)
        model.evaluate(dataset)

    elif Mode == 'test':
        cfg.saving = False
        model = Network(dataset, cfg)
        if parameters["model_path"] is not 'None':
            chosen_snap = parameters["model_path"]
        else:
            chosen_snapshot = -1
            # logs = np.sort([os.path.join('results', f) for f in os.listdir('results') if f.startswith('Log')])
            # chosen_folder = logs[-1]
            chosen_folder = parameters["outputDir"]
            snap_path = join(chosen_folder, 'snapshots')
            snap_steps = [int(f[:-5].split('-')[-1]) for f in os.listdir(snap_path) if f[-5:] == '.meta']
            chosen_step = np.sort(snap_steps)[-1]
            chosen_snap = os.path.join(snap_path, 'snap-{:d}'.format(chosen_step))
        
        if(verbose):
            print("Test snap: ", chosen_snap)
        tester = ModelTester(model, dataset, restore_snap=chosen_snap)
        tester.test(model, dataset)

    else:
        ##################
        # Visualize data #
        ##################

        with tf.Session() as sess:
            sess.run(tf.global_variables_initializer())
            sess.run(dataset.train_init_op)
            while True:
                flat_inputs = sess.run(dataset.flat_inputs)
                pc_xyz = flat_inputs[0]
                sub_pc_xyz = flat_inputs[1]
                labels = flat_inputs[21]
                Plot.draw_pc_sem_ins(pc_xyz[0, :, :], labels[0, :])
                Plot.draw_pc_sem_ins(sub_pc_xyz[0, :, :], labels[0, 0:np.shape(sub_pc_xyz)[1]])
Exemplo n.º 2
0
                os.path.join('results', f) for f in os.listdir('results')
                if f.startswith('Log')
            ])
            chosen_folder = logs[-1]
            snap_path = join(chosen_folder, 'snapshots')
            snap_steps = [
                int(f[:-5].split('-')[-1]) for f in os.listdir(snap_path)
                if f[-5:] == '.meta'
            ]
            chosen_step = np.sort(snap_steps)[-1]
            chosen_snap = os.path.join(snap_path,
                                       'snap-{:d}'.format(chosen_step))
        tester = ModelTester(model, dataset, restore_snap=chosen_snap)
        tester.test(model, dataset)
    else:
        ##################
        # Visualize data #
        ##################

        with tf.Session() as sess:
            sess.run(tf.global_variables_initializer())
            sess.run(dataset.train_init_op)
            while True:
                flat_inputs = sess.run(dataset.flat_inputs)
                pc_xyz = flat_inputs[0]
                sub_pc_xyz = flat_inputs[1]
                labels = flat_inputs[17]
                Plot.draw_pc_sem_ins(pc_xyz[0, :, :], labels[0, :])
                Plot.draw_pc_sem_ins(sub_pc_xyz[0, :, :],
                                     labels[0, 0:np.shape(sub_pc_xyz)[1]])
Exemplo n.º 3
0
        original_data = read_ply(
            os.path.join(original_data_dir,
                         file_name.split('/')[-1][:-4] + '.ply'))
        labels = original_data['class']
        points = np.vstack(
            (original_data['x'], original_data['y'], original_data['z'])).T

        ##################
        # Visualize data #
        ##################
        if visualization:
            colors = np.vstack((original_data['red'], original_data['green'],
                                original_data['blue'])).T
            xyzrgb = np.concatenate([points, colors], axis=-1)
            Plot.draw_pc(xyzrgb)  # visualize raw point clouds
            Plot.draw_pc_sem_ins(points, labels)  # visualize ground-truth
            Plot.draw_pc_sem_ins(points, pred)  # visualize prediction

        correct = np.sum(pred == labels)
        # acc for 1 room
        print(
            str(file_name.split('/')[-1][:-4]) + '_acc:' +
            str(correct / float(len(labels))))
        test_total_correct += correct
        test_total_seen += len(labels)

        for j in range(len(labels)):
            gt_l = int(labels[j])
            pred_l = int(pred[j])
            gt_classes[gt_l] += 1
            positive_classes[pred_l] += 1
Exemplo n.º 4
0
        cfg.saving = False
        model = Network(dataset, cfg)
        chosen_snapshot = -1
        logs = np.sort([
            os.path.join('results', f) for f in os.listdir('results')
            if f.startswith('Log')
        ])
        chosen_folder = logs[-1]
        snap_path = join(chosen_folder, 'snapshots')
        snap_steps = [
            int(f[:-5].split('-')[-1]) for f in os.listdir(snap_path)
            if f[-5:] == '.meta'
        ]
        chosen_step = np.sort(snap_steps)[-1]
        chosen_snap = os.path.join(snap_path, 'snap-{:d}'.format(chosen_step))
        tester = ModelTester(model, restore_snap=chosen_snap)
        tester.test(model, dataset)
    else:

        with tf.Session() as sess:
            sess.run(tf.global_variables_initializer())
            sess.run(dataset.train_init_op)
            while True:
                a = sess.run(dataset.flat_inputs)
                pos = a[0]
                sub_pos1 = a[1]
                label = a[21]
                Plot.draw_pc_sem_ins(pos[0, :, :], label[0, :])
                Plot.draw_pc_sem_ins(sub_pos1[0, :, :],
                                     label[0, 0:np.shape(sub_pos1)[1]],
                                     fix_color_num=14)
            chosen_folder = logs[-1]
            snap_path = join(chosen_folder, 'snapshots')
            snap_steps = [
                int(f[:-5].split('-')[-1]) for f in os.listdir(snap_path)
                if f[-5:] == '.meta'
            ]
            chosen_step = np.sort(snap_steps)[-1]
            chosen_snap = os.path.join(snap_path,
                                       'snap-{:d}'.format(chosen_step))
        tester = ModelTester(model, dataset, restore_snap=chosen_snap)
        tester.test(model, dataset)

    else:
        ##################
        # Visualize data #
        ##################

        with tf.Session() as sess:
            sess.run(tf.global_variables_initializer())
            sess.run(dataset.train_init_op)
            while True:
                flat_inputs = sess.run(dataset.flat_inputs)
                pc_xyz = flat_inputs[0]
                sub_pc_xyz = flat_inputs[1]
                labels = flat_inputs[21]
                Plot.draw_pc_sem_ins(pc_xyz[0, :, :], labels[0, :],
                                     cfg.num_classes + 1)
                Plot.draw_pc_sem_ins(sub_pc_xyz[0, :, :],
                                     labels[0, 0:np.shape(sub_pc_xyz)[1]],
                                     cfg.num_classes + 1)
Exemplo n.º 6
0
    dataset = S3DIS(test_area)
    dataset.init_input_pipeline()

    if Mode == 'train':
        model = Network(dataset, cfg)
        model.train(dataset)
    elif Mode == 'test':
        cfg.saving = False
        model = Network(dataset, cfg)
        chosen_snapshot = -1
        logs = np.sort([os.path.join('results', f) for f in os.listdir('results') if f.startswith('Log')])
        chosen_folder = logs[-1]
        snap_path = join(chosen_folder, 'snapshots')
        snap_steps = [int(f[:-5].split('-')[-1]) for f in os.listdir(snap_path) if f[-5:] == '.meta']
        chosen_step = np.sort(snap_steps)[-1]
        chosen_snap = os.path.join(snap_path, 'snap-{:d}'.format(chosen_step))
        tester = ModelTester(model, dataset, restore_snap=chosen_snap)
        tester.test(model, dataset)
    else:

        with tf.Session() as sess:
            sess.run(tf.global_variables_initializer())
            sess.run(dataset.train_init_op)
            while True:
                data_list = sess.run(dataset.flat_inputs)
                xyz = data_list[0]
                sub_xyz = data_list[1]
                label = data_list[21]
                Plot.draw_pc_sem_ins(xyz[0, :, :], label[0, :], fix_color_num=14)
                Plot.draw_pc_sem_ins(sub_xyz[0, :, :], label[0, 0:np.shape(sub_xyz)[1]], fix_color_num=14)
Exemplo n.º 7
0
    dataset.init_input_pipeline()

    if Mode == 'train':
        model = Network(dataset, cfg)
        model.train(dataset)
    elif Mode == 'test':
        cfg.saving = False
        model = Network(dataset, cfg)
        chosen_snapshot = -1
        logs = np.sort([os.path.join('results', f) for f in os.listdir('results') if f.startswith('Log')])
        chosen_folder = logs[-1]
        snap_path = join(chosen_folder, 'snapshots')
        snap_steps = [int(f[:-5].split('-')[-1]) for f in os.listdir(snap_path) if f[-5:] == '.meta']
        chosen_step = np.sort(snap_steps)[-1]
        chosen_snap = os.path.join(snap_path, 'snap-{:d}'.format(chosen_step))
        tester = ModelTester(model, dataset, restore_snap=chosen_snap)
        tester.evaluate(model, dataset)

    else:

        with tf.Session() as sess:
            sess.run(tf.global_variables_initializer())
            sess.run(dataset.train_init_op)
            while True:
                a = sess.run(dataset.flat_inputs)
                pos = a[0]
                sub_pos1 = a[1]
                label = a[21]
                Plot.draw_pc_sem_ins(pos[0, :, :], label[0, :], cfg.num_classes + 1)
                Plot.draw_pc_sem_ins(sub_pos1[0, :, :], label[0, 0:np.shape(sub_pos1)[1]], cfg.num_classes + 1)
Exemplo n.º 8
0
def launch_training(protocol, inputDir, parameters=None):
    GPU_ID = parameters["gpu"]
    os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID"
    os.environ['CUDA_VISIBLE_DEVICES'] = str(GPU_ID)
    os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'

    Mode = parameters["mode"]

    dataset = AppleTree(protocol, path2dataset=inputDir)
    dataset.init_input_pipeline(mode=Mode)

    if Mode == 'train' and not parameters["restoreTrain"]:
        model = Network(dataset, cfg)
        model.train(dataset)

    elif Mode == "train" and parameters["restoreTrain"]:
        model = Network(dataset, cfg, restore_snap=parameters["model_path"])
        model.train(dataset)

    elif Mode == "validation":

        cfg.saving = False
        if parameters["model_path"] is not 'None':
            chosen_snap = parameters["model_path"]
        else:
            chosen_snapshot = -1
            # logs = np.sort([os.path.join('results', f) for f in os.listdir('results') if f.startswith('Log')])
            # chosen_folder = logs[-1]
            chosen_folder = parameters["outputDir"]
            snap_path = join(chosen_folder, 'snapshots')
            snap_steps = [
                int(f[:-5].split('-')[-1]) for f in os.listdir(snap_path)
                if f[-5:] == '.meta'
            ]
            chosen_step = np.sort(snap_steps)[-1]
            chosen_snap = os.path.join(snap_path,
                                       'snap-{:d}'.format(chosen_step))

        model = Network(dataset, cfg, restore_snap=chosen_snap)
        model.evaluate(dataset)

    elif Mode == 'test':
        cfg.saving = False
        model = Network(dataset, cfg)
        if parameters["model_path"] is not 'None':
            chosen_snap = parameters["model_path"]
        else:
            chosen_snapshot = -1
            # logs = np.sort([os.path.join('results', f) for f in os.listdir('results') if f.startswith('Log')])
            # chosen_folder = logs[-1]
            chosen_folder = parameters["outputDir"]
            snap_path = join(chosen_folder, 'snapshots')
            snap_steps = [
                int(f[:-5].split('-')[-1]) for f in os.listdir(snap_path)
                if f[-5:] == '.meta'
            ]
            chosen_step = np.sort(snap_steps)[-1]
            chosen_snap = os.path.join(snap_path,
                                       'snap-{:d}'.format(chosen_step))

        print(chosen_snap)
        tester = ModelTester(model, dataset, restore_snap=chosen_snap)
        tester.test(model, dataset)

    else:
        ##################
        # Visualize data #
        ##################

        with tf.Session() as sess:
            sess.run(tf.global_variables_initializer())
            sess.run(dataset.train_init_op)
            while True:
                flat_inputs = sess.run(dataset.flat_inputs)
                pc_xyz = flat_inputs[0]
                sub_pc_xyz = flat_inputs[1]
                labels = flat_inputs[21]
                Plot.draw_pc_sem_ins(pc_xyz[0, :, :], labels[0, :])
                Plot.draw_pc_sem_ins(sub_pc_xyz[0, :, :],
                                     labels[0, 0:np.shape(sub_pc_xyz)[1]])
Exemplo n.º 9
0
                int(f[:-5].split('-')[-1]) for f in os.listdir(snap_path)
                if f[-5:] == '.meta'
            ]
            chosen_step = np.sort(snap_steps)[-1]
            chosen_snap = os.path.join(snap_path,
                                       'snap-{:d}'.format(chosen_step))
        # TODO:
        tester = ModelTester(model, dataset, restore_snap=chosen_snap)
        tester.test(model, dataset)
    else:
        ##################
        # Visualize data #
        ##################

        with tf.Session() as sess:
            sess.run(tf.global_variables_initializer())
            # use session to start the dataset iterator
            sess.run(dataset.train_init_op)
            while True:

                # obtain the iterator's next element
                flat_inputs = sess.run(dataset.flat_inputs)

                pc_xyz = flat_inputs[4 * cfg.num_layers]  # original xyz
                sub_pc_xyz = flat_inputs[0]  # sub_pc xyz for 1st stage
                labels = flat_inputs[4 * cfg.num_layers + 2]  # sub_pc labels
                Plot.draw_pc_sem_ins(
                    pc_xyz[0, :, :],
                    labels[0, :])  # only draw 1st batch's raw PC
                Plot.draw_pc_sem_ins(sub_pc_xyz[0, :, :], labels[
                    0, 0:np.shape(sub_pc_xyz)[1]])  # draw 1st batch's sub PC