def __init__(self, root, sample_points=8192, block_size=10, num_classes=20, split='train', with_remission=False, config_file='semantic-kitti.yaml', should_map=True, padding=0.01, random_sample=False, random_rate=0.1): self.root = root assert split in splits self.split = split self.padding = padding self.block_size = block_size self.sample_points = sample_points self.random_sample = random_sample self.with_remission = with_remission self.should_map = should_map self.config = yaml.safe_load(open(config_file, 'r')) self.scan = laserscan.SemLaserScan(nclasses=num_classes, sem_color_dict=self.config['color_map']) sequences = self.config['split'][split] self.points_name = [] self.label_name = [] for sequence in sequences: sequence = '{0:02d}'.format(int(sequence)) points_path = os.path.join(self.root, 'sequences', sequence, 'velodyne') label_path = os.path.join(self.root, 'sequences', sequence, 'labels') seq_points_name = [os.path.join(points_path, pn) for pn in os.listdir(points_path) if pn.endswith('.bin')] seq_label_name = [os.path.join(label_path, ln) for ln in os.listdir(label_path) if ln.endswith('.label')] assert len(seq_points_name) == len(seq_label_name) seq_points_name.sort() seq_label_name.sort() self.points_name.extend(seq_points_name) self.label_name.extend(seq_label_name) if self.random_sample: random.Random(seed).shuffle(self.points_name) random.Random(seed).shuffle(self.label_name) total_length = len(self.points_name) self.points_name = self.points_name[:int(total_length * random_rate)] self.label_name = self.label_name[:int(total_length * random_rate)] label_weights_dict = mapped_content num_keys = len(label_weights_dict.keys()) self.label_weights_lut = np.zeros((num_keys), dtype=np.float32) self.label_weights_lut[list(label_weights_dict.keys())] = list(label_weights_dict.values()) self.label_weights_lut = np.power(np.amax(self.label_weights_lut[1:]) / self.label_weights_lut, 1 / 3.0) if should_map: remapdict = self.config["learning_map"] # make lookup table for mapping maxkey = max(remapdict.keys()) # +100 hack making lut bigger just in case there are unknown labels self.remap_lut = np.zeros((maxkey + 100), dtype=np.int32) self.remap_lut[list(remapdict.keys())] = list(remapdict.values())
def __init__(self, root, sample_points=8192, block_size=10, stride=3.3, num_classes=20, split='test', with_remission=False, config_file='semantic-kitti.yaml', should_map=True): self.root = root assert split in splits self.split = split self.stride = stride self.block_size = block_size self.block_points = sample_points self.should_map = should_map self.with_remission = with_remission self.config = yaml.safe_load(open(config_file, 'r')) self.scan = laserscan.SemLaserScan( nclasses=num_classes, sem_color_dict=self.config['color_map']) sequences = self.config['split'][split] color = [] for values in self.config['learning_map_inv'].values(): color.append(self.config['color_map'][values]) self.color_map = np.array(color) self.points_name = [] self.label_name = [] for sequence in sequences: sequence = '{0:02d}'.format(int(sequence)) points_path = os.path.join( self.root, 'sequences', sequence, 'velodyne') label_path = os.path.join(self.root, 'sequences', sequence, 'labels') seq_points_name = [os.path.join(points_path, pn) for pn in os.listdir(points_path) if pn.endswith('.bin')] seq_points_name.sort() self.points_name.extend(seq_points_name) if split != 'test': seq_label_name = [os.path.join(label_path, ln) for ln in os.listdir(label_path) if ln.endswith('.label')] seq_label_name.sort() self.label_name.extend(seq_label_name) if should_map: remapdict = self.config["learning_map"] # make lookup table for mapping maxkey = max(remapdict.keys()) # +100 hack making lut bigger just in case there are unknown labels self.remap_lut = np.zeros((maxkey + 100), dtype=np.int32) self.remap_lut[list(remapdict.keys())] = list(remapdict.values())