我正在尝试使用 deeplab3+使用新数据集(具有不同数量的类)进行微调的 tensorflow 实现。我将数据集转换为 tfrecords 并开始 train模型没有问题。现在我想评估新的检查点,运行 evaluation脚本,我得到一个形状不匹配错误。
tensorflow.python.framework.errors_impl.InvalidArgumentError: Shape mismatch
模型实现使用了tensorflow.slim,我想我的问题是函数相关
slim.evaluation.evaluation_loop(
master=FLAGS.master,
checkpoint_dir=FLAGS.checkpoint_dir,
logdir=FLAGS.eval_logdir,
num_evals=num_batches,
eval_op=list(metrics_to_updates.values()),
max_number_of_evaluations=num_eval_iters,
eval_interval_secs=FLAGS.eval_interval_secs,
hooks=[tf_debug.LocalCLIDebugHook()]))
我的错误日志
`tensorflow.python.framework.errors_impl.InvalidArgumentError: Shape mismatch in tuple component 1. Expected [513,513,3], got [2448,2448,3]
[[Node: batch/padding_fifo_queue_enqueue = QueueEnqueueV2[Tcomponents=[DT_INT64, DT_FLOAT, DT_STRING, DT_INT32, DT_UINT8, DT_INT64], timeout_ms=-1, _device="/job:localhost/replica:0/task:0/device:CPU:0"](batch/padding_fifo_queue, Reshape_3/_4659, add_2/_4661, Reshape_1, add_3/_4663, case/cond/Merge/_4665, Reshape_6/_4667)]]`
我不明白这个错误,因为实现使用相同的 preprocessing训练和验证期间的例行程序。我还尝试使用 tf_debug.LocalCLIDebugHook() 进行调试,但没有成功。
请您参考如下方法:
两种解决方案:
只需将
eval_crop_size/vis_crop_size更改为评估集中的最大图像大小。使用
tf.image.resize_image_with_pad(不会改变宽高比)或tf.image.resize_images调整您的评估大小,使最大图像长度 < 513 (将改变宽高比但不改变填充)
主要原因在input_preprocess.py .下面的代码揭示了如何对输入进行预处理以确保尺寸兼容性:图像被填充(如果它们小于 crop_size),然后被裁剪(仅用于训练)。
# Pad image and label to have dimensions >= [crop_height, crop_width]
image_shape = tf.shape(processed_image)
image_height = image_shape[0]
image_width = image_shape[1]
target_height = image_height + tf.maximum(crop_height - image_height, 0)
target_width = image_width + tf.maximum(crop_width - image_width, 0)
# Randomly crop the image and label
if is_training and label is not None:
processed_image, label = preprocess_utils.random_crop(
[processed_image, label], crop_height, crop_width)
