使用带有对象检测的数据增强生成的图像数量

时间:2019-03-21 11:45:11

标签: tensorflow object-detection-api

我试图在文档,代码和此处搜索答案,但是我没有运气。 我想知道使用Tensorflow中的对象检测API通过数据增强生成的最终图像数量是多少。 为了清楚起见,我举一个例子:假设我有一个包含2个类的数据集,每个类最初包含50个图像。然后我应用此配置:

  data_augmentation_options {
    ssd_random_crop {
    }
  }

  data_augmentation_options {
    random_rgb_to_gray {
    }
  }

  data_augmentation_options {
    random_distort_color {
    }
  }

  data_augmentation_options {
    ssd_random_crop_pad_fixed_aspect_ratio {
    }
  }

我怎么知道生成用于训练模型的图像的最终数量? (如果有办法)。顺便说一句,我正在使用model_main.py训练我的模型。

先谢谢了。

1 个答案:

答案 0 :(得分:1)

在文件inputs.py中,可以在函数augment_input_fn中看到所有数据增强选项都传递给preprocessor.preprocess方法。 详细信息全部在文件preprocessor.py中,尤其是在函数preprocess中:

for option in preprocess_options:
  func, params = option
  if func not in func_arg_map:
    raise ValueError('The function %s does not exist in func_arg_map' %
                   (func.__name__))
  arg_names = func_arg_map[func]
  for a in arg_names:
    if a is not None and a not in tensor_dict:
      raise ValueError('The function %s requires argument %s' %
                     (func.__name__, a))

  def get_arg(key):
    return tensor_dict[key] if key is not None else None

  args = [get_arg(a) for a in arg_names]
  if (preprocess_vars_cache is not None and
      'preprocess_vars_cache' in inspect.getargspec(func).args):
    params['preprocess_vars_cache'] = preprocess_vars_cache
  results = func(*args, **params)
  if not isinstance(results, (list, tuple)):
    results = (results,)
  # Removes None args since the return values will not contain those.
  arg_names = [arg_name for arg_name in arg_names if arg_name is not None]
  for res, arg_name in zip(results, arg_names):
    tensor_dict[arg_name] = res

请注意,在上面的代码中,arg_names包含所有原始图像名称,这意味着每个增强选项将仅在原始图像上执行(而不是在先前的增强选项之后获得的图像上执行)。

还在preprocessor.py中,我们可以看到每个扩充选项只会产生与原始图像形状相同的图像。

因此,在您的情况下,四个选项和100张原始图像将400张扩展图像添加到tensor_dict