示例#1
0
 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
示例#2
0
    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
示例#3
0
 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
示例#4
0
    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
示例#6
0
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)
示例#7
0
    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
示例#8
0
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
示例#9
0
 def _augmentation(self, tag, rgb, raw_lidar, voxel, labels):
     return aug_data(tag, rgb, raw_lidar, voxel, labels)