Stylegan2-ada tfrecords - ValueError: axes don't match array, images will work one run and not work the next
Stylegan2-ada tfrecords - ValueError: axes don't match array, images will work one run and not work the next
我正在通过 Google Colab 使用我从 Wikiart 抓取并转换为 1024x1024 的照片数据集训练 GAN,但在创建 tfrecords 时不断出现此错误:
Traceback (most recent call last):
File "dataset_tool.py", line 1249, in <module>
execute_cmdline(sys.argv)
File "dataset_tool.py", line 1244, in execute_cmdline
func(**vars(args))
File "dataset_tool.py", line 714, in create_from_images
img = img.transpose([2, 0, 1]) # HWC => CHW
ValueError: axes don't match array
我将其设置为打印出它会停止的文件,并开始从数据集中取出这些文件;但它停滞的地方似乎完全是随机的。它会在一个 运行 上完美地迭代一个文件,然后在下一个 运行 上失败,因为从数据集中取出了一些其他有问题的照片。
我不确定不断删除拖延它的照片的过程是否会 end/leave 我有一个有意义的数据集,我应该尝试修复它吗?
想出了解决办法,结果我抓取的一些图像是灰度的。为了解决这个问题,我使用了 imagemagick(也用于将照片调整为 1024x1024)来检查色彩空间。我将终端指向图像文件夹和 运行:
magick identify *.jpg
在这里,我按 ctrl+f 键查看哪些被标记为“灰色”而不是“sRGB”。在将它们从数据集中取出后,它就像一个魅力。
我 运行 不久前进入这个领域,在花了比我愿意承认的更多时间从源集中搜索和采摘数据之后,我发现了你的问题。我什至做了 ImageMagick 搜索以从数据集中清除灰度图像,但问题仍然存在。
我什至将我的数据集导出到我们的一台 Mac,以便使用预览来批量编辑颜色和分辨率并导出新的、统一的 jpeg。还是没修好。这是我想出的解决方案。 (在您的运行时工作区中更新 dataset_tool.py)
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):
pil_img = PIL.Image.open(image_filenames[order[idx]])
pil_img = pil_img.convert("RGB")
img = np.asarray(pil_img)
#print('\nimg: "%s" (%d)' % (image_filenames[order[idx]], channels))
if channels == 1:
img = img[np.newaxis, :, :] # HW => CHW
else:
img = img.transpose([2, 0, 1]) # HWC => CHW
tfr.add_image(img)
基本上都是用PIL把图片转成RGB不管了
它确实会稍微减慢准备过程,但如果您的训练数据来自不同来源,它会很方便。
我正在通过 Google Colab 使用我从 Wikiart 抓取并转换为 1024x1024 的照片数据集训练 GAN,但在创建 tfrecords 时不断出现此错误:
Traceback (most recent call last):
File "dataset_tool.py", line 1249, in <module>
execute_cmdline(sys.argv)
File "dataset_tool.py", line 1244, in execute_cmdline
func(**vars(args))
File "dataset_tool.py", line 714, in create_from_images
img = img.transpose([2, 0, 1]) # HWC => CHW
ValueError: axes don't match array
我将其设置为打印出它会停止的文件,并开始从数据集中取出这些文件;但它停滞的地方似乎完全是随机的。它会在一个 运行 上完美地迭代一个文件,然后在下一个 运行 上失败,因为从数据集中取出了一些其他有问题的照片。
我不确定不断删除拖延它的照片的过程是否会 end/leave 我有一个有意义的数据集,我应该尝试修复它吗?
想出了解决办法,结果我抓取的一些图像是灰度的。为了解决这个问题,我使用了 imagemagick(也用于将照片调整为 1024x1024)来检查色彩空间。我将终端指向图像文件夹和 运行:
magick identify *.jpg
在这里,我按 ctrl+f 键查看哪些被标记为“灰色”而不是“sRGB”。在将它们从数据集中取出后,它就像一个魅力。
我 运行 不久前进入这个领域,在花了比我愿意承认的更多时间从源集中搜索和采摘数据之后,我发现了你的问题。我什至做了 ImageMagick 搜索以从数据集中清除灰度图像,但问题仍然存在。
我什至将我的数据集导出到我们的一台 Mac,以便使用预览来批量编辑颜色和分辨率并导出新的、统一的 jpeg。还是没修好。这是我想出的解决方案。 (在您的运行时工作区中更新 dataset_tool.py)
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):
pil_img = PIL.Image.open(image_filenames[order[idx]])
pil_img = pil_img.convert("RGB")
img = np.asarray(pil_img)
#print('\nimg: "%s" (%d)' % (image_filenames[order[idx]], channels))
if channels == 1:
img = img[np.newaxis, :, :] # HW => CHW
else:
img = img.transpose([2, 0, 1]) # HWC => CHW
tfr.add_image(img)
基本上都是用PIL把图片转成RGB不管了
它确实会稍微减慢准备过程,但如果您的训练数据来自不同来源,它会很方便。