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