- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 StyleGAN github 存储库中的 dataset_tool.py 将本地文件夹中的训练图像转换为 TFRecords。这是代码:
def create_from_images(tfrecord_dir, image_dir, shuffle):
print('Loading images from "%s"' % image_dir)
image_filenames = sorted(glob.glob(os.path.join(image_dir, '*')))
if len(image_filenames) == 0:
error('No input images found')
img = np.asarray(PIL.Image.open(image_filenames[0]))
resolution = img.shape[0]
channels = img.shape[2] if img.ndim == 3 else 1
if img.shape[1] != resolution:
error('Input images must have the same width and height')
if resolution != 2 ** int(np.floor(np.log2(resolution))):
error('Input image resolution must be a power-of-two')
if channels not in [1, 3]:
error('Input images must be stored as RGB or grayscale')
with TFRecordExporter(tfrecord_dir, len(image_filenames)) as tfr:
order = tfr.choose_shuffled_order() if shuffle else np.arange(len(image_filenames))
for idx in range(order.size):
img = np.asarray(PIL.Image.open(image_filenames[order[idx]]))
if channels == 1:
img = img[np.newaxis, :, :] # HW => CHW
else:
img = img.transpose([2, 0, 1]) # HWC => CHW
tfr.add_image(img)
def add_image(self, img):
if self.print_progress and self.cur_images % self.progress_interval == 0:
print('%d / %d\r' % (self.cur_images, self.expected_images), end='', flush=True)
if self.shape is None:
self.shape = img.shape
self.resolution_log2 = int(np.log2(self.shape[1]))
assert self.shape[0] in [1, 3]
assert self.shape[1] == self.shape[2]
assert self.shape[1] == 2**self.resolution_log2
tfr_opt = tf.python_io.TFRecordOptions(tf.python_io.TFRecordCompressionType.NONE)
for lod in range(self.resolution_log2 - 1):
tfr_file = self.tfr_prefix + '-r%02d.tfrecords' % (self.resolution_log2 - lod)
self.tfr_writers.append(tf.python_io.TFRecordWriter(tfr_file, tfr_opt))
assert img.shape == self.shape
for lod, tfr_writer in enumerate(self.tfr_writers):
if lod:
img = img.astype(np.float32)
img = (img[:, 0::2, 0::2] + img[:, 0::2, 1::2] + img[:, 1::2, 0::2] + img[:, 1::2, 1::2]) * 0.25
quant = np.rint(img).clip(0, 255).astype(np.uint8)
ex = tf.train.Example(features=tf.train.Features(feature={
'shape': tf.train.Feature(int64_list=tf.train.Int64List(value=quant.shape)),
'data': tf.train.Feature(bytes_list=tf.train.BytesList(value=[quant.tostring()]))}))
tfr_writer.write(ex.SerializeToString())
self.cur_images += 1
它创建具有多种分辨率(最高可达原始分辨率)的 TFRecords 文件。因此,使用原始结果创建的 TFRecords 比包含文件的原始文件夹大 100 倍。我的原始文件是 BW png,每个 2 KB,文件夹大小 120 MB。虽然我收到的 TFRecords 是 12 GB。我知道 TFRecords 通常比原始文件大,但不是 100 倍!这里可能有什么问题?
最佳答案
问题在于您将未压缩的图像保存在记录文件中,这比压缩的图像文件占用更多的空间。为了避免这种情况,您可以直接将图像文件写入为记录,但是,由于您首先要进行一些图像处理,因此您必须进行该处理并再次以压缩格式保存生成的图像。您可以使用如下函数将图像数组转换为其 PNG 压缩形式:
import io
import numpy as np
from PIL import Image
def img2png(image):
# Assumes image was passed in CHW format
img = Image.fromarray(np.moveaxis(image, 0, 2))
with io.BytesIO() as img_bytes:
img.save(img_bytes, 'PNG')
return img_bytes.getvalue()
在您的示例中,您可以像这样保存quant
图像。
ex = tf.train.Example(features=tf.train.Features(feature={
'shape': tf.train.Feature(int64_list=tf.train.Int64List(value=quant.shape)),
'data': tf.train.Feature(bytes_list=tf.train.BytesList(value=[img2png(quant)]))}))
请注意,由于您要保存压缩图像,因此需要使用 tf.io.decode_image
稍后解析记录时。这是您必须为减少磁盘大小而“付出”的开销。
关于python - TFRecords 比原始大小大 100 倍,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58998822/
有什么方法可以直接将 .tfrecords 文件拆分为多个 .tfrecords 文件,而无需写回每个数据集示例? 最佳答案 在 tensorflow 2.0.0 中,这将起作用: import te
我想从 AutoGraph 生成的图形内部将 tensorflow 示例记录写入 TFRecordWriter。 tensorflow 2.0 的文档说明如下: The simplest way to
我正在使用 tensorflow 对象检测 api 创建用于微调任务的数据集。 我的目录结构是: 火车/ -- 图片/ ---- img1.jpg -- 安/ ---- img1.csv 其中每个图像
保存到 TFRecord 时,我使用: def _int64_feature(value): return tf.train.Feature(int64_list=tf.train.Int64
我的理解是,最好对每个时期的训练样本进行洗牌,以便每个小批量包含整个数据集的一个很好的随机样本。如果我将整个数据集转换为包含 TFRecords 的单个文件,那么在加载整个数据集的情况下如何实现这种改
为什么在 TensorFlow 的初始模型示例中对 TFRecords 文件进行分片? 为了随机性,不能在创建一个 TFRecord 文件之前打乱文件列表吗? 最佳答案 为什么 TFRecords 文
根据您的经验,在各种设备(硬盘、SSD、NVME)和存储位置(本地计算机、具有网络安装的 HPC 集群)上运行效果最好的 .tfrecord 文件的理想大小是多少? 如果我在云中技术更强大的计算机上获
为什么在 TensorFlow 的初始模型示例中对 TFRecords 文件进行分片? 为了随机性,不能在创建一个 TFRecord 文件之前打乱文件列表吗? 最佳答案 为什么 TFRecords 文
我有一个包含大约 4000 万行的 CSV。每行都是一个训练实例。根据 the documentation on consuming TFRecords我正在尝试对数据进行编码并将其保存在 TFRec
我在另一个论坛上被问到这个问题,但我想我会把它发布在这里,以供遇到 TFRecords 问题的任何人使用。 如果 TFRecord 文件中的标签与 labels.pbtxt 文件中的标签不对齐,Ten
我正在处理相当大的时间序列数据集,然后将准备为 SequenceExample 的数据写入 TFRecord 。这会产生一个相当大的文件(超过 100GB),但我想将它存储在块中。我试过了: file
关于 Carvana Image Masking Challenge 给出的数据格式,我们如何将其转换为tfrecord可以输入到 Deeplab V3 中的格式型号,可支持VOC和 Cityscap
我得到了一个 TFRecord 数据文件 filename = train-00000-of-00001,其中包含未知大小的图像,可能还包含其他信息。我知道我可以使用 dataset = tf.dat
TensorFlow 对象检测 API 更喜欢 TFRecord 文件格式。 MXNet 和 Amazon Sagemaker 似乎使用 RecordIO 格式。这两种二进制文件格式有何不同,或者它们
我有 5 个 tfrecords 文件,每个对象一个。在训练时,我想从所有 5 个 tfrecord 中平均读取数据,即如果我的批量大小为 50,我应该从第一个 tfrecord 文件中获取 10 个
我想用 TensorFlow 执行多标签分类。 我有大约 95000 张图像,每张图像都有一个相应的标签向量。每个图像有 7 个标签。这 7 个标签表示为一个大小为 7 的张量。每个图像的形状为 (2
在 TensorFlow 教程示例中,TFRecords 的用法与 MNIST 数据集一起提供。 MNIST 数据集被转换为 TFRecords 文件,如下所示: def convert_to(dat
我想将整数列表(或任何多维 numpy 矩阵)写入一个 TFRecords 示例。对于单个值或多个值的列表,我可以创建 TFRecord 文件而不会出错。我还知道如何从 TFRecord 文件中读取单
尝试编写 w/和 w/o 多线程的 tfrecord,发现速度差异不大(w/4 线程:434 秒;w/o 多线程 590 秒)。不确定我是否正确使用它。有没有更好的方法来更快地编写 tfrecord?
我的目标是在本地运行Tensorflow Training App时使用存储在Google Cloud存储中的培训数据(格式:tfrecords)。 (为什么要在本地?:在将其转换为Cloud ML培
我是一名优秀的程序员,十分优秀!