В компьютерном зрении увеличение объема данных - это метод повышения производительности систем компьютерного зрения. Это делает наш алгоритм классификации более устойчивым к таким изменениям, как солнечный свет, освещение и т. Д., В нашем наборе обучающих данных. Tensorflow API предоставляет широкий спектр методов дополнения данных для повышения производительности классификации в DNN. Использование этих шагов по расширению нашего набора данных может повысить способность сетей к обобщению по мере создания большего количества обучающих данных с отклонениями от наших исходных данных. Этот метод удобен при работе с небольшим объемом набора данных с целью обучения DNN. Увеличение данных , также является другим способом, мы можем уменьшить переобучение на моделях, где мы увеличиваем объем обучающих данных, используя информацию только в наших обучающих данных.
Аргументы могут быть представлены в виде пар "ключ-значение". Расширение может быть инициализировано, как показано ниже, где вы можете указать свои собственные желаемые значения, в противном случае preprocessor.proto просто предоставит значение по умолчанию:
data_augmentation_options {
random_image_scale {
min_scale_ratio: 0.3
max_scale_ratio: 1.5
}
}
где указанное пользователем значение перезапишет значения по умолчанию,
def random_image_scale(image, masks=None, min_scale_ratio=0.5, max_scale_ratio=2.0, seed=None, preprocess_vars_cache=None): """Scales the image size. Args: image: rank 3 float32 tensor contains 1 image -> [height, width, channels]. masks: (optional) rank 3 float32 tensor containing masks with size [height, width, num_masks]. The value is set to None if there are no masks. min_scale_ratio: minimum scaling ratio. max_scale_ratio: maximum scaling ratio. seed: random seed. preprocess_vars_cache: PreprocessorCache object that records previously performed augmentations. Updated in-place. If this function is called multiple times with the same non-null cache, it will perform deterministically. Returns: image: image which is the same rank as input image. masks: If masks is not none, resized masks which are the same rank as input masks will be returned. with tf.name_scope('RandomImageScale', values=[image]): result = [] image_shape = tf.shape(image) image_height = image_shape[0] image_width = image_shape[1] generator_func = functools.partial( tf.random_uniform, [], minval=min_scale_ratio, maxval=max_scale_ratio, dtype=tf.float32, seed=seed) size_coef = _get_or_create_preprocess_rand_vars( generator_func, preprocessor_cache.PreprocessorCache.IMAGE_SCALE, preprocess_vars_cache) image_newysize = tf.to_int32( tf.multiply(tf.to_float(image_height), size_coef)) image_newxsize = tf.to_int32( tf.multiply(tf.to_float(image_width), size_coef)) image = tf.image.resize_images( image, [image_newysize, image_newxsize], align_corners=True) result.append(image) if masks: masks = tf.image.resize_nearest_neighbor( masks, [image_newysize, image_newxsize], align_corners=True) result.append(masks) return tuple(result)
Для случайной настройки насыщенности
data_augmentation_options {
random_adjust_saturation {
}
}
где значения по умолчанию будут инициализированы, если не указано иное,
def random_adjust_saturation(image, min_delta=0.8, max_delta=1.25, seed=None, preprocess_vars_cache=None): """Randomly adjusts saturation. Makes sure the output image is still between 0 and 255. Args: image: rank 3 float32 tensor contains 1 image -> [height, width, channels] with pixel values varying between [0, 255]. min_delta: see max_delta. max_delta: how much to change the saturation. Saturation will change with a value between min_delta and max_delta. This value will be multiplied to the current saturation of the image. seed: random seed. preprocess_vars_cache: PreprocessorCache object that records previously performed augmentations. Updated in-place. If this function is called multiple times with the same non-null cache, it will perform deterministically. Returns: image: image which is the same shape as input image. """ with tf.name_scope('RandomAdjustSaturation', values=[image]): generator_func = functools.partial(tf.random_uniform, [], min_delta, max_delta, seed=seed) saturation_factor = _get_or_create_preprocess_rand_vars( generator_func, preprocessor_cache.PreprocessorCache.ADJUST_SATURATION, preprocess_vars_cache) image = tf.image.adjust_saturation(image/255, saturation_factor)*255 image=tf.clip_by_value(image,clip_value_min=0.0,clip_value_max=255.0) return image
Вот список опций, представленных в Preprocessor.proto. Выберите технику увеличения из списка вариантов, которые подходят для вашей цели.
NormalizeImage normalize_image = 1;
RandomHorizontalFlip random_horizontal_flip = 2; RandomVerticalFlip random_vertical_flip = 3
RandomPixelValueScale random_pixel_value_scale = 4;
RandomImageScale random_image_scale = 5;
RandomRGBtoGray random_rgb_to_gray = 6;
RandomAdjustBrightness random_adjust_brightness = 7;
RandomAdjustContrast random_adjust_contrast = 8;
RandomAdjustHue random_adjust_hue = 9;
RandomAdjustSaturation random_adjust_saturation = 10;
RandomDistortColor random_distort_color = 11;
RandomJitterBoxes random_jitter_boxes = 12;
RandomCropImage random_crop_image = 13;
RandomPadImage random_pad_image = 14;
RandomCropPadImage random_crop_pad_image = 15;
RandomCropToAspectRatio random_crop_to_aspect_ratio = 16;
RandomBlackPatches random_black_patches = 17;
RandomResizeMethod random_resize_method = 18;
ScaleBoxesToPixelCoordinates scale_boxes_to_pixel_coordinates = 19;
ResizeImage resize_image = 20;
SubtractChannelMean subtract_channel_mean = 21;
SSDRandomCrop ssd_random_crop = 22;
SSDRandomCropPad ssd_random_crop_pad = 23;
SSDRandomCropFixedAspectRatio ssd_random_crop_fixed_aspect_ratio = 24;
Ваше здоровье!!! Удачного глубокого обучения
Суман Гимире
Соучредитель Pixel Labs (https://www.pixelnetworks.net/)
Msc. Инженерия и технологии (устойчивое сельское хозяйство)
Ссылки