Увеличение данных в API обнаружения объектов: random_image_scale

Я пытаюсь использовать функции увеличения данных API обнаружения объектов, в частности random_image_scale.

Немного покопавшись, я нашел функцию, реализующую ее (вставленную ниже). Я что-то упускаю или тут не лечат наземную правда коробок? Я огляделся и ничего не нашел. Если основная правда не будет изменена в соответствии с масштабированием изображения, это испортит обучаемую модель, не так ли?

Пожалуйста, дайте мне знать, если я что-то упустил или мне следует избегать этой функции для обучения моей сети.

Файл /object_detection/core/preprocessor.py

def random_image_scale(image,
                       masks=None,
                       min_scale_ratio=0.5,
                       max_scale_ratio=2.0,
                       seed=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.

  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]
    size_coef = tf.random_uniform([],
                                  minval=min_scale_ratio,
                                  maxval=max_scale_ratio,
                                  dtype=tf.float32, seed=seed)
    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)

person rpicatoste    schedule 16.11.2017    source источник
comment
нет кода для увеличения данных с использованием разных поворотов?   -  person Pablo Gonzalez    schedule 12.02.2018


Ответы (1)


Если вы используете файл tfrecord, границы поля представляют собой не абсолютные пиксели, а относительные проценты. поэтому, если вы масштабируете изображение, поля остаются прежними.

Так что использование этого должно быть в порядке.

person Falco    schedule 29.11.2017
comment
По коду есть только масштаб, яркость и некоторые опции пэдов. Что с вращением? Для увеличения данных я предпочитаю делать это вручную перед вводом данных (каждый образец поворачивается, масштабируется, поэтому я получаю больше данных). - person Pablo Gonzalez; 12.02.2018