def load_data(k): for i, j in enumerate(range(k * n, (k + 1) * n)): if i % 10 == 0: print('reading number', i + 1, 'th lab' + str(k + 1) + ' point clouds') if use_key_feature: pc = np.loadtxt( base_path + '/lab' + str(k + 1) + '/lab_project' + str(i) + '.txt') # pc = tf.convert_to_tensor(pc, dtype=tf.float32) pc = PointCloud(pc) pc.normalize() expand = np.expand_dims(pc.position, axis=0) pc_tile[j, :, :] = expand # print('*****************************************') # print('reading point cloud cost time:{}'.format(t1 - t0)) pc_key_eig = get_local_eig_np(expand) # 1 x nb_keypoints x 9 # print('*****************************************') # print('get local cost time:{}'.format(t2 - t1)) #pc_key_feature[i, :, :] = np.squeeze(sess.run(pc_key_eig, feed_dict={pc_pl: pc})) pc_key_feature[j, :, :] = np.squeeze(pc_key_eig) else: pc_tile[j, :, :] = np.expand_dims( np.loadtxt(base_path + '/lab' + str(k + 1) + '/lab_project' + str(i) + '.txt'), axis=0) # print('-----------------------------------------') # print('one pc cost total:{}second'.format(te-ts)) # print('----------------------------------------') print('current thread ending: ', threading.current_thread().name)
def save_data(save_path='', base_path='', n=5000, use_key_feature=True, train_data=True, nb_types=4, show_result=False, normalize=True, shuffle=True): """ transform the txt point clouds into h5py dataset for simplicity. data augmentation of projection is implemented here :param save_path: :param n: :param train_data whether it is training data or it is test data. if its testdata, label is random. :param base_path: path contains txt or ply point cloud data :param use_key_feature: if you want to use the local key features :param nb_types: number of classes of used object :return: """ compute_time = [] if train_data: pc_tile = np.empty(shape=(nb_types * n, 1024, 3)) if use_key_feature: pc_key_feature = np.empty(shape=(nb_types * n, int( 1024 * 0.1), 9)) # key feature space, 102=1024*0.1, # 9 for multi-scale eigen-value #pc_pl = tf.placeholder(tf.float32, shape=(1, 1024, 3)) for k in range( nb_types ): # number of types of objects model, test data can ignore type label for i, j in enumerate(range(k * n, (k + 1) * n)): if i % 10 == 0: print('reading number', i + 1, 'th lab' + str(k + 1) + ' point clouds') if use_key_feature: pc = np.loadtxt( base_path + '/lab' + str(k + 1) + '/lab_project' + str(i) + '.txt' ) # pc = tf.convert_to_tensor(pc, dtype=tf.float32) pc = PointCloud(pc) if normalize: pc.normalize( ) # partial point cloud should not normalize expand = np.expand_dims(pc.position, axis=0) pc_tile[j, :, :] = expand # print('*****************************************') # print('reading point cloud cost time:{}'.format(t1 - t0)) pc_key_eig = get_local_eig_np( expand, useiss=False) # 1 x nb_keypoints x 9 # print('*****************************************') # print('get local cost time:{}'.format(t2 - t1)) #pc_key_feature[i, :, :] = np.squeeze(sess.run(pc_key_eig, feed_dict={pc_pl: pc})) pc_key_feature[j, :, :] = np.squeeze(pc_key_eig) else: pc_tile[j, :, :] = np.expand_dims( np.loadtxt(base_path + '/lab' + str(k + 1) + '/lab_project' + str(i) + '.txt'), axis=0) # print('-----------------------------------------') # print('one pc cost total:{}second'.format(te-ts)) # print('----------------------------------------') pc_label = np.tile(np.arange(nb_types), (n, 1)).reshape((-1, ), order='F') train_set_shape = (nb_types * n, 1024, 3) train_set_local_shape = (nb_types * n, 102, 9) train_label_shape = (nb_types * n, ) else: ply_list = [ base_path + '/' + i for i in os.listdir(base_path) if os.path.splitext(i)[1] == '.ply' or os.path.splitext(i)[1] == '.txt' ] n = len(ply_list) less_than_th = [] for i, j in enumerate(ply_list): pc = PointCloud(j) if pc.nb_points < 1024: less_than_th.append(i) n = n - len(less_than_th) print("there are: ,", n, ' point clouds with # of points available') pc_label = np.arange(n) train_set_shape = (n, 1024, 3) train_set_local_shape = (n, 102, 9) train_label_shape = (n, ) pc_tile = np.empty(shape=(n, 1024, 3)) pc_key_feature = np.empty(shape=(n, int( 1024 * 0.1), 9)) # key feature space, 102=1024*0.1, for i, j in enumerate(ply_list): if i not in less_than_th: print(j) start_time = time.clock() mypc = PointCloud(j) if mypc.nb_points > 1024: mypc.down_sample(number_of_downsample=1024) if normalize: mypc.normalize() expand = np.expand_dims(mypc.position, axis=0) pc_tile[i, :, :] = expand pc_key_eig = get_local_eig_np(expand, useiss=False) end_time = time.clock() compute_time.append([end_time - start_time]) if use_key_feature: pc_key_feature[i, :, :] = np.squeeze(pc_key_eig) hdf5_file = h5py.File(save_path, mode='a') hdf5_file.create_dataset('train_set', train_set_shape, np.float32) # be careful about the dtype hdf5_file.create_dataset('train_labels', train_label_shape, np.uint8) hdf5_file.create_dataset('train_set_local', train_set_local_shape, np.float32) if shuffle: idx = np.arange(np.shape(pc_tile)[0]) np.random.shuffle(idx) pc_tile = pc_tile[idx, ...] pc_label = pc_label[idx, ...] pc_key_feature = pc_key_feature[idx, ...] hdf5_file["train_set"][...] = pc_tile hdf5_file["train_labels"][...] = pc_label hdf5_file["train_set_local"][...] = pc_key_feature hdf5_file.close() return compute_time