def test_angle_segment_shift_image(self): data_set = self.create_real_dataset( filter_method=drive_record_filter_include_all) allocator = AngleSegmentRecordAllocator( data_set, AngleSegment((-1.5, -0.5), 10), # big sharp left AngleSegment((-0.5, -0.25), 14), # sharp left AngleSegment((-0.25, -0.249), 1), # sharp turn left (zero right camera) AngleSegment((-0.249, -0.1), 12), # big turn left AngleSegment((-0.1, 0), 12), # straight left AngleSegment((0, 0.001), 2), # straight zero center camera AngleSegment((0.001, 0.1), 12), # straight right AngleSegment((0.1, 0.25), 12), # big turn right AngleSegment((0.25, 0.251), 1), # sharp turn right (zero left camera) AngleSegment((0.251, 0.5), 14), # sharp right AngleSegment((0.5, 1.5), 10) # big sharp right ) # a pipe line with shift -> flip -> brightness -> shadow augment processes generator = pipe_line_generators( shift_image_generator(angle_offset_pre_pixel=0.0015), flip_random_generator, brightness_image_generator(0.35), shadow_generator) self._angle_distribution( "angle_distribution_generator_angle_segment_shift_image", 100, 256, allocator=allocator.allocate, generator=generator)
def segment_normal_distribution_shift_flip_brightness_shadow_reg(): data_set = DriveDataSet.from_csv( "datasets/udacity-sample-track-1/driving_log.csv", crop_images=True, all_cameras_images=True, filter_method=drive_record_filter_include_all) # fine tune every part of training data so that make it meat std distrubtion allocator = AngleSegmentRecordAllocator( data_set, AngleSegment((-1.5, -0.5), 10), # big sharp left AngleSegment((-0.5, -0.25), 14), # sharp left AngleSegment((-0.25, -0.249), 3), # sharp turn left (zero right camera) AngleSegment((-0.249, -0.1), 10), # big turn left AngleSegment((-0.1, 0), 11), # straight left AngleSegment((0, 0.001), 4), # straight zero center camera AngleSegment((0.001, 0.1), 11), # straight right AngleSegment((0.1, 0.25), 10), # big turn right AngleSegment((0.25, 0.251), 3), # sharp turn right (zero left camera) AngleSegment((0.251, 0.5), 14), # sharp right AngleSegment((0.5, 1.5), 10) # big sharp right ) # a pipe line with shift -> flip -> brightness -> shadow augment processes augment = pipe_line_generators( shift_image_generator(angle_offset_pre_pixel=0.002), flip_generator, brightness_image_generator(0.35), shadow_generator) data_generator = DataGenerator(allocator.allocate, augment) model = nvidia_with_regularizer(input_shape=data_set.output_shape(), dropout=0.2) Trainer(model, learning_rate=0.0001, epoch=45, multi_process=use_multi_process, custom_name=inspect.stack()[0][3]).fit_generator( data_generator.generate(batch_size=256))
def test_angle_distribution_generator_45_10_45_pipe_line(self): data_set = self.create_real_dataset( filter_method=drive_record_filter_exclude_duplicated_small_angles) allocator = AngleTypeWithZeroRecordAllocator(data_set, 20, 20, 15, 15, 15, 0.25) generator = pipe_line_generators( shift_image_generator(angle_offset_pre_pixel=0.002), flip_generator, brightness_image_generator(0.25)) self._angle_distribution( "angle_distribution_generator_exclude_duplicated_small_angles_40_20_40_pipe_line", 100, 256, allocator=allocator.allocate, angle_offset_pre_pixel=0.006, generator=generator)
def raw_data_centre_left_right_crop_shift_flip(): data_set = DriveDataSet.from_csv( "datasets/udacity-sample-track-1/driving_log.csv", crop_images=True, all_cameras_images=True, filter_method=drive_record_filter_include_all) allocator = RecordRandomAllocator(data_set) # shift_image_generator was the only difference generator = pipe_line_generators( shift_image_generator(angle_offset_pre_pixel=0.002), flip_generator) data_generator = DataGenerator(allocator.allocate, generator) model = nvidia(input_shape=data_set.output_shape(), dropout=0.5) Trainer(model, learning_rate=0.0001, epoch=20, multi_process=use_multi_process, custom_name=inspect.stack()[0][3]).fit_generator( data_generator.generate(batch_size=128))
def segment_left_centre_right(): data_set = DriveDataSet.from_csv( "datasets/udacity-sample-track-1/driving_log.csv", crop_images=True, all_cameras_images=True, filter_method=drive_record_filter_include_all) allocator = AngleTypeWithZeroRecordAllocator( data_set, left_percentage=20, right_percentage=20, zero_percentage=8, zero_left_percentage=6, zero_right_percentage=6, left_right_image_offset_angle=0.25) generator = pipe_line_generators( shift_image_generator(angle_offset_pre_pixel=0.002), flip_generator, brightness_image_generator(0.25), shadow_generator) data_generator = DataGenerator(allocator.allocate, generator) model = nvidia(input_shape=data_set.output_shape(), dropout=0.5) Trainer(model, learning_rate=0.0001, epoch=10).fit_generator(data_generator.generate(batch_size=128))
def _angle_distribution(self, name, batches, batch_size, allocator, angle_offset_pre_pixel=0.002, generator=None): if generator is None: generator = pipe_line_random_generators( image_itself, shift_image_generator( angle_offset_pre_pixel=angle_offset_pre_pixel), flip_generator) data_generator = DataGenerator(allocator, generator) angles = np.array([]) for index in range(batches): print("batch {} / {}".format(index, batches)) _, _angles = next(data_generator.generate(batch_size=batch_size)) angles = np.append(angles, _angles) plt = Plot.angle_distribution(angles) plt.savefig("angle/{}.jpg".format(name))