Exemplo n.º 1
0
def train_pipeline(pointcloud_segments):

    augmentation_pipeline = Pipeline\
            ([
            ('RandomRemover', RandomRemover()),
            ('PlaneRemover', PlaneRemover()),
            ('EigenAligner', EigenAligner()),
            ('Rotator', RandomRotator()),
    ])

    pointcloud_segments = augmentation_pipeline.fit_transform(pointcloud_segments)

    preprocessing_pipeline = Pipeline([
            ('CoordinatesRescaler', CoordinatesRescaler(scale_method = "fit", center_method = "mean")),
            # ('Jitter', Jitter()),
            ('Voxelizer', Voxelizer()),
            # ('VoxelNormalizer', VoxelNormalizer(train_ids=train_ids))
        ])

    voxelbox = preprocessing_pipeline.fit_transform(pointcloud_segments)

    return voxelbox
lids = total[:, 0]
labels_dict = dict(zip(lids, labels))
labels=np.array([labels_dict[i] for i in ids])
# print('labels.size', labels.size)
N_CLASSES = np.unique(ids).size
# choose cars only
cars = ids[np.where(labels==1)]
chosen_segments = segments[np.where(labels==1)]
chosen_ids = ids[np.where(labels==1)]
# print('chosen_segments.size', chosen_segments.size)

# create pipeline ==========================================================================
preprocessing_pipeline = Pipeline([
	('EigenAligner', EigenAligner()),
	('CoordinatesRescaler', CoordinatesRescaler(scale_method="fit",
												center_method="mean",
												voxel_shape=VOXEL_SHAPE)),
	('Voxelizer', Voxelizer(voxel_shape = VOXEL_SHAPE)),
	# ('VoxelNormalizer', VoxelNormalizer(train_ids=train_ids))
])


# split data ============================================================================

train_part=0.7
unique_ids = np.unique(ids)
# np.random.shuffle(unique_ids)
train_n=int(0.7*unique_ids.size)
train_unique_ids=unique_ids[:train_n]
test_unique_ids=unique_ids[train_n:]
train_ids=[i for i, id in enumerate(ids) if id in train_unique_ids]
pointcloud_segments = PlaneRemover().fit_transform(pointcloud_segments)
pointcloud_segment = pointcloud_segments[SEGMENT_ID]
print(pointcloud_segment.shape)

pointcloud_segments = EigenAligner().fit_transform(pointcloud_segments)
pointcloud_segment = pointcloud_segments[SEGMENT_ID]
print(pointcloud_segment.shape)

pointcloud_segments = RandomRotator().fit_transform(pointcloud_segments)
pointcloud_segment = pointcloud_segments[SEGMENT_ID]
print(pointcloud_segment.shape)

coordinates_scaler = CoordinatesRescaler(scale_method="fixed",
                                         center_method="mean",
                                         scale=np.array((8, 8, 4)),
                                         voxel_shape=np.array((32, 32, 16)),
                                         min_scale_threshold=np.array(
                                             (3.2, 3.2, 1.6)))

pointcloud_segments = coordinates_scaler.fit_transform(pointcloud_segments)
pointcloud_segment = pointcloud_segments[SEGMENT_ID]
print(pointcloud_segment.shape)

voxelbox_segments = Voxelizer().fit_transform(pointcloud_segments)
voxelbox_segment = voxelbox_segments[SEGMENT_ID]
print(voxelbox_segment.shape)

pointcloud_segments = EigenAligner().fit_transform(pointcloud_segments)
pointcloud_segment = pointcloud_segments[SEGMENT_ID]
print(pointcloud_segment.shape)