用于为TensorFlow对象检测模型训练创建训练集。我需要生成一个tfrecord
。这里tfrecord
由TensorFlow示例组成,其中每个示例都是一个tf.train.Example
对象。以下代码显示了如何定义TensorFlow示例对象:
tf_example = tf.train.Example(features=tf.train.Features(feature={
'image/height': dataset_util.int64_feature(height),
'image/width': dataset_util.int64_feature(width),
'image/filename': dataset_util.bytes_feature(filename),
'image/source_id': dataset_util.bytes_feature(filename),
'image/encoded': dataset_util.bytes_feature(encoded_jpg),
'image/format': dataset_util.bytes_feature(image_format),
'image/object/bbox/xmin': dataset_util.float_list_feature(xmins),
'image/object/bbox/xmax': dataset_util.float_list_feature(xmaxs),
'image/object/bbox/ymin': dataset_util.float_list_feature(ymins),
'image/object/bbox/ymax': dataset_util.float_list_feature(ymaxs),
'image/object/class/text': dataset_util.bytes_list_feature(classes_text),
'image/object/class/label': dataset_util.int64_list_feature(classes),
}))
但是问题是我必须以bytes_feature
的形式传递每个图像。 encoded_jpg
是从文件读取的图像,格式为_io.BytesIO
。当我从磁盘读取图像时,这没什么大不了的。但是,由于我要扩充图像数据集,因此我将每个扩充后的图像都设为numpy.ndarray
。因此,要么我必须将此numpy.ndarray
图像投射到_io.BytesIO
,要么必须首先保存图像,以便可以在_io.BytesIO
中读取图像,这没有任何意义。因此,如何轻松地将图像转换为所需的格式,而无需将其保存到磁盘。