tensorflow - 保存 tensorflow 对象检测增强图像
问题描述
有没有办法在所有预处理/增强之后查看 tensorflow 对象检测 api 训练的图像。
我想验证事情是否正确。我能够验证在推理中查看图表后调整大小的调整大小,但对于增强选项,我显然无法做到这一点。
在过去使用 Keras 时,我已经能够做到这一点,并且我发现我很有侵略性。
解决方案
API 为增强选项提供测试代码。在input_test.py文件中,该函数test_apply_image_and_box_augmentation
就是为此而生的。您可以通过将自己的图像传递给该函数来重写此函数,tensor_dict
然后保存以augmented_tensor_dict_out
进行验证,或者您可以直接将其可视化。
编辑:由于这个答案很久以前就得到了回答,但仍未被接受,我决定提供一个更具体的答案和例子。我写了一个小测试脚本,叫做augmentation_test.py
.
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
import functools
import os
from absl.testing import parameterized
import numpy as np
import tensorflow as tf
from scipy.misc import imsave, imread
from object_detection import inputs
from object_detection.core import preprocessor
from object_detection.core import standard_fields as fields
from object_detection.utils import config_util
from object_detection.utils import test_case
FLAGS = tf.flags.FLAGS
class DataAugmentationFnTest(test_case.TestCase):
def test_apply_image_and_box_augmentation(self):
data_augmentation_options = [
(preprocessor.random_horizontal_flip, {
})
]
data_augmentation_fn = functools.partial(
inputs.augment_input_data,
data_augmentation_options=data_augmentation_options)
tensor_dict = {
fields.InputDataFields.image:
tf.constant(imread('lena.jpeg').astype(np.float32)),
fields.InputDataFields.groundtruth_boxes:
tf.constant(np.array([[.5, .5, 1., 1.]], np.float32))
}
augmented_tensor_dict =
data_augmentation_fn(tensor_dict=tensor_dict)
with self.test_session() as sess:
augmented_tensor_dict_out = sess.run(augmented_tensor_dict)
imsave('lena_out.jpeg',augmented_tensor_dict_out[fields.InputDataFields.image])
if __name__ == '__main__':
tf.test.main()
您可以将此脚本放在下面models/research/object_detection/
并简单地使用python augmentation_test.py
. 要成功运行它,您应该提供任何图像名称“lena.jpeg”,并且增强后的输出图像将保存为“lena_out.jpeg”。
请注意,我preprocessor.random_horizontal_flip
在脚本中使用了。结果准确地显示了输入图像之后的样子random_horizontal_flip
。要使用其他增强选项对其进行测试,您可以将 替换为random_horizontal_flip
其他方法(这些方法都在preprocessor.py以及 config proto 文件中定义),您可以将其他选项附加到data_augmentation_options
列表中,例如:
data_augmentation_options = [(preprocessor.resize_image, {
'new_height': 20,
'new_width': 20,
'method': tf.image.ResizeMethod.NEAREST_NEIGHBOR
}),(preprocessor.random_horizontal_flip, {
})]
推荐阅读
- powerbi - 如何在 power bi 中动态重命名列标题?
- elasticsearch - 将日志转发到索引模板,而不是直接从 Fluent-bit 到 ElasticSearch 的索引
- salesforce - 如何在 Health 云患者列表视图中添加更多操作
- javascript - ^await(带有插入符号)在编译的 JS 中是什么意思?
- php - 如何在信封中设置事件名称和延迟时间?
- javascript - 通过对象的JS数组过滤并添加用户名相同的步骤值
- python - 试图将两个 excel 连接到另一个 excel
- java - PropertyAccessException 通过反射访问持久属性的字段时出错
- asynchronous - spring batch:异步执行作业时CustomItemWriter中的NullPointerException
- c# - 如何保持拦截器相互关联?