我是一名有用的助手,可以为您进行文本翻译。以下是您需要翻译的内容:
这个程序会崩溃,但异常没有被正确处理。它只是抛出异常并崩溃。所以有两个问题:
我打印出了四个矩阵。我认为这些库都使用了libpng或类似的东西。
当处理第1258张图片时,Tensorflow崩溃了。查看DecodePng source,看起来实际上是TF png library导致了崩溃。
我意识到我可能可以编写自己的数据加载器,但那似乎有点麻烦。
编辑:
这也可以作为片段工作:
我在数据集中无法找到一些有问题的图像。
我的模型开始训练,但我遇到了以下错误:
tensorflow.python.framework.errors_impl.InvalidArgumentError: Invalid PNG data, size 135347
[[{{node case/cond/cond_jpeg/decode_image/cond_jpeg/cond_png/DecodePng}} = DecodePng[channels=3, dtype=DT_UINT8, _device="/device:CPU:0"](case/cond/cond_jpeg/decode_image/cond_jpeg/cond_png/cond_gif/DecodeGif/Switch:1, ^case/Assert/AssertGuard/Merge)]]
[[node IteratorGetNext (defined at object_detection/model_main.py:105) = IteratorGetNext[output_shapes=[[24], [24,300,300,3], [24,2], [24,3], [24,100], [24,100,4], [24,100,2], [24,100,2], [24,100], [24,100], [24,100], [24]], output_types=[DT_INT32, DT_FLOAT, DT_INT32, DT_INT32, DT_FLOAT, DT_FLOAT, DT_FLOAT, DT_FLOAT, DT_INT32, DT_BOOL, DT_FLOAT, DT_INT32], _device="/job:localhost/replica:0/task:0/device:CPU:0"](IteratorV2)]]
我写了一个小脚本,在生成TFRecords之前运行,以尝试捕捉任何问题图像。这基本上是教程代码,但批量大小为1。这是我能想到的最简单的方式来尝试捕捉错误。
def preprocess_image(image):
image = tf.image.decode_png(image, channels=3)
image = tf.image.resize_images(image, [192, 192])
image /= 255.0 # normalize to [0,1] range
return image
def load_and_preprocess_image(path):
image = tf.read_file(path)
return preprocess_image(image)
mobile_net = tf.keras.applications.MobileNetV2(input_shape=(192, 192, 3), include_top=False)
mobile_net.trainable=False
path_ds = tf.data.Dataset.from_tensor_slices(images)
image_ds = path_ds.map(load_and_preprocess_image, num_parallel_calls=4)
def change_range(image):
return (2*image-1)
keras_ds = image_ds.map(change_range)
keras_ds = keras_ds.batch(1)
for i, batch in tqdm(enumerate(iter(keras_ds))):
try:
feature_map_batch = mobile_net(batch)
except KeyboardInterrupt:
break
except:
print(images[i])
这个程序会崩溃,但异常没有被正确处理。它只是抛出异常并崩溃。所以有两个问题:
- 有没有办法强制正确处理它?看起来Tensorflow, try and except doesn't handle exception无法处理异常
- 有没有更好的方法来查找损坏的输入?
import scipy
images = images[1258:]
print(scipy.misc.imread(images[0]))
import matplotlib.pyplot as plt
print(plt.imread(images[0]))
import cv2
print(cv2.imread(images[0]))
import skimage
print(skimage.io.imread(images[0]))
... try to run inference in Tensorflow
我打印出了四个矩阵。我认为这些库都使用了libpng或类似的东西。
当处理第1258张图片时,Tensorflow崩溃了。查看DecodePng source,看起来实际上是TF png library导致了崩溃。
我意识到我可能可以编写自己的数据加载器,但那似乎有点麻烦。
编辑:
这也可以作为片段工作:
tf.enable_eager_execution()
for i, image in enumerate(images):
try:
with tf.gfile.GFile(image, 'rb') as fid:
image_data = fid.read()
image_tensor = tf.image.decode_png(
image_data,
channels=3,
name=None
)
except:
print("Failed: ", i, image_tensor)
decode_raw
而不是decode_png
吗? - Sharkyimg = tf.decode_raw('image_raw', tf.uint8) img = tf.reshape(img, img_shape)
这样行吗? - Sharkyimg_shape
。 - Joshexample_features = {'height': tf.FixedLenFeature((), tf.int64)
此外,我想你可以尝试使用tf.Assert
来捕获异常。 - Sharky