В компьютерном зрении увеличение объема данных - это метод повышения производительности систем компьютерного зрения. Это делает наш алгоритм классификации более устойчивым к таким изменениям, как солнечный свет, освещение и т. Д., В нашем наборе обучающих данных. 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. Инженерия и технологии (устойчивое сельское хозяйство)

Ссылки