def __call__(self, load_index): if self.aug: ret = aug_data(self.data_tag[load_index], self.data_dir, sampler=self.db_sampler) else: rgb = cv2.resize(cv2.imread(self.f_rgb[load_index]), (cfg.IMAGE_WIDTH, cfg.IMAGE_HEIGHT)) raw_lidar = np.fromfile(self.f_lidar[load_index], dtype=np.float32).reshape((-1, 4)) if not self.is_testset: labels = [ line for line in open(self.f_label[load_index], 'r').readlines() ] else: labels = [''] tag = self.data_tag[load_index] if self.f_voxel is None: voxel = process_pointcloud(tag, raw_lidar) else: voxel_files = np.load(self.f_voxel[load_index]) voxel = {} voxel['feature_buffer'] = voxel_files['feature_buffer'] voxel['coordinate_buffer'] = voxel_files['coordinate_buffer'] voxel['number_buffer'] = voxel_files['number_buffer'] voxel['mask_buffer'] = voxel_files['mask_buffer'] ret = [tag, rgb, raw_lidar, voxel, labels] return ret
def __call__(self, load_index): if aug: ret = aug_data(self.data_tag[load_index], self.data_dir) tag.append(ret[0]) rgb.append(ret[1]) raw_lidar.append(ret[2]) voxel.append(ret[3]) labels.append(ret[4]) else: rgb.append( cv2.resize(cv2.imread(f_rgb[load_index]), (cfg.IMAGE_WIDTH, cfg.IMAGE_HEIGHT))) raw_lidar.append( np.fromfile(f_lidar[load_index], dtype=np.float32).reshape( (-1, 4))) if not is_testset: labels.append([ line for line in open(f_label[load_index], 'r').readlines() ]) else: labels.append(['']) tag.append(data_tag[load_index]) voxel.append(process_pointcloud(raw_lidar[-1])) return n
def __call__(self, load_index): if self.aug: ret = aug_data(self.data_tag[load_index], self.data_dir) else: #rgb = cv2.resize(cv2.imread(self.f_rgb[load_index]), (cfg.IMAGE_WIDTH, cfg.IMAGE_HEIGHT)) rgb = 0 # placeholder rgb = cv2.resize( cv2.imread( '/home/ziyanw1/data/KITTI/training/image_2/001201.png'), (cfg.IMAGE_WIDTH, cfg.IMAGE_HEIGHT)) #rgb.append( cv2.imread(f_rgb[load_index]) ) raw_lidar = np.fromfile(self.f_lidar[load_index], dtype=np.float32).reshape((-1, 4)) raw_obj_pc = np.fromfile(self.f_obj[load_index], dtype=np.float32).reshape((-1, 4)) if not self.is_testset: labels = [ line for line in open(self.f_label[load_index], 'r').readlines() ] else: labels = [''] tag = self.data_tag[load_index] voxel = process_pointcloud(raw_lidar) ret = [tag, rgb, raw_lidar, raw_obj_pc, voxel, labels] return ret
def fill_queue(self, batch_size=0): load_index = self.load_index self.load_index += batch_size if self.load_index >= self.dataset_size: if not self.is_testset: # test set just end if self.require_shuffle: self.shuffle_dataset() load_index = 0 self.load_index = load_index + batch_size else: self.work_exit.value = True labels, tag, voxel, rgb, raw_lidar = [], [], [], [], [] for _ in range(batch_size): try: if self.aug: ret = aug_data(self.data_tag[load_index], self.object_dir) tag.append(ret[0]) rgb.append(ret[1]) raw_lidar.append(ret[2]) voxel.append(ret[3]) labels.append(ret[4]) else: rgb.append(cv2.resize(cv2.imread( self.f_rgb[load_index]), (cfg.IMAGE_WIDTH, cfg.IMAGE_HEIGHT))) raw_lidar.append(np.fromfile( self.f_lidar[load_index], dtype=np.float32).reshape((-1, 4))) if not self.is_testset: labels.append([line for line in open( self.f_label[load_index], 'r').readlines()]) else: #labels.append(['Dummy 0.00 0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0']) labels.append(['']) tag.append(self.data_tag[load_index]) voxel.append(process_pointcloud(raw_lidar[-1])) load_index += 1 except: if not self.is_testset: # test set just end self.load_index = 0 if self.require_shuffle: self.shuffle_dataset() else: self.work_exit.value = True # only for voxel -> [gpu, k_single_batch, ...] vox_feature, vox_number, vox_coordinate = [], [], [] single_batch_size = int(self.batch_size / self.multi_gpu_sum) for idx in range(self.multi_gpu_sum): _, per_vox_feature, per_vox_number, per_vox_coordinate = build_input( voxel[idx * single_batch_size:(idx + 1) * single_batch_size]) vox_feature.append(per_vox_feature) vox_number.append(per_vox_number) vox_coordinate.append(per_vox_coordinate) self.dataset_queue.put_nowait( (labels, (vox_feature, vox_number, vox_coordinate), rgb, raw_lidar, tag))
def __call__(self,load_index): if self.aug: ret = aug_data(self.data_tag[load_index], self.data_dir) else: rgb = cv2.resize(cv2.imread(self.f_rgb[load_index]), (cfg.IMAGE_WIDTH, cfg.IMAGE_HEIGHT)) raw_lidar = np.fromfile(self.f_lidar[load_index], dtype=np.float32).reshape((-1, 4)) if not self.is_testset: labels = [line for line in open(self.f_label[load_index], 'r').readlines()] else: labels = [''] tag = self.data_tag[load_index] voxel = process_pointcloud(raw_lidar) ret = [tag, rgb, raw_lidar, voxel, labels] return ret
def test_aug_data(): tag = '%06d' % (12) root_path = '/mine/KITTI_DAT/' object_dir = os.path.join(root_path, 'training') info_path = os.path.join(root_path, 'kitti_dbinfos_train.pkl') db_sampler = DataBaseSampler(root_path, info_path) tag, rgb, lidar, voxel_dict, label = aug_data(tag, object_dir, sampler=db_sampler) print(lidar.shape) print(label) gt_box3d = label_to_gt_box3d([tag], np.array(label)[np.newaxis, :], cls='', coordinate='lidar')[0] gt_box3d_corners = center_to_corner_box3d(gt_box3d) view_pc(lidar, gt_box3d_corners)
def load(self, batch_size=1): if self.load_index >= self.dataset_size: return None num_to_load = batch_size labels, tag, voxel, rgb, raw_lidar = [], [], [], [], [] vox_feature, vox_number, vox_coordinate = [], [], [] # Load normal data for i in range(batch_size): load_index = self.load_index + i rgb.append( cv2.resize(cv2.imread(self.f_rgb[load_index]), (cfg.IMAGE_WIDTH, cfg.IMAGE_HEIGHT))) raw_lidar.append( np.fromfile(self.f_lidar[load_index], dtype=np.float32).reshape((-1, 4))) if not self.is_testset: labels.append([ line for line in open(self.f_label[load_index], 'r').readlines() ]) else: labels.append(['']) tag.append(self.data_tag[load_index]) voxel.append(process_pointcloud(raw_lidar[-1])) bsize, per_vox_feat, per_vox_num, per_vox_coor = build_input( [voxel[-1]]) vox_feature.append(per_vox_feat) vox_number.append(per_vox_num) vox_coordinate.append(per_vox_coor) #print('bsize', bsize) #print('vox_feature', np.array(vox_feature).shape) #print('vox_number', vox_number) # Create augmented data augIdxs, aug_voxel = [], [] if self.aug and not self.is_testset: num_to_load += self.aug_num # Get the indices of members to be augmented augIdxs = np.random.choice(np.arange( self.load_index, self.load_index + batch_size + 1), self.aug_num, replace=False) for idx in augIdxs: ret = aug_data(self.data_tag[idx], self.object_dir) tag.append(ret[0]) rgb.append(ret[1]) raw_lidar.append(ret[2]) aug_voxel.append(ret[3]) labels.append(ret[4]) bsize, per_vox_feat, per_vox_coor, per_vox_num = build_input( [aug_voxel[-1]]) vox_feature.append(per_vox_feat) #print('per_vox_feat', np.array(per_vox_feat).shape) vox_number.append(per_vox_num) vox_coordinate.append(per_vox_coor) #print('bsize', bsize) #print('vox_feature', np.array(vox_feature).shape) ret = (np.array(tag), np.array(labels), np.array(vox_feature), np.array(vox_number), np.array(vox_coordinate), np.array(rgb), np.array(raw_lidar)) flag = False self.load_index += batch_size if self.load_index >= self.dataset_size: flag = True return flag, ret
def iterate_data(data_dir, shuffle=False, aug=False, is_testset=False, batch_size=1, multi_gpu_sum=1): f_rgb = glob.glob(os.path.join(data_dir, 'image_2', '*.png')) f_lidar = glob.glob(os.path.join(data_dir, 'velodyne', '*.bin')) f_label = glob.glob(os.path.join(data_dir, 'label_2', '*.txt')) f_rgb.sort() f_lidar.sort() f_label.sort() data_tag = [name.split('/')[-1].split('.')[-2] for name in f_rgb] assert len(data_tag) != 0, "dataset folder is not correct" assert len(data_tag) == len(f_rgb) == len( f_lidar), "dataset folder is not correct" nums = len(f_rgb) indices = list(range(nums)) if shuffle: np.random.shuffle(indices) num_batches = int(math.floor(nums / float(batch_size))) for batch_idx in range(num_batches): start_idx = batch_idx * batch_size excerpt = indices[start_idx:start_idx + batch_size] labels, tag, voxel, rgb, raw_lidar = [], [], [], [], [] for load_index in excerpt: if aug: ret = aug_data(data_tag[load_index], data_dir) tag.append(ret[0]) rgb.append(ret[1]) raw_lidar.append(ret[2]) voxel.append(ret[3]) labels.append(ret[4]) else: rgb.append( cv2.resize(cv2.imread(f_rgb[load_index]), (cfg.IMAGE_WIDTH, cfg.IMAGE_HEIGHT))) #rgb.append( cv2.imread(f_rgb[load_index]) ) raw_lidar.append( np.fromfile(f_lidar[load_index], dtype=np.float32).reshape( (-1, 4))) if not is_testset: labels.append([ line for line in open(f_label[load_index], 'r').readlines() ]) else: labels.append(['']) tag.append(data_tag[load_index]) voxel.append(process_pointcloud(raw_lidar[-1])) # only for voxel -> [gpu, k_single_batch, ...] vox_feature, vox_number, vox_coordinate = [], [], [] single_batch_size = int(batch_size / multi_gpu_sum) for idx in range(multi_gpu_sum): _, per_vox_feature, per_vox_number, per_vox_coordinate = build_input( voxel[idx * single_batch_size:(idx + 1) * single_batch_size]) vox_feature.append(per_vox_feature) vox_number.append(per_vox_number) vox_coordinate.append(per_vox_coordinate) ret = (np.array(tag), np.array(labels), np.array(vox_feature), np.array(vox_number), np.array(vox_coordinate), np.array(rgb), np.array(raw_lidar)) yield ret
def _augmentation(self, tag, rgb, raw_lidar, voxel, labels): return aug_data(tag, rgb, raw_lidar, voxel, labels)