你好,我正在使用DeeplabV3Plus架构和Tensorflow (Keras)进行语义分割。我用另一个数据集做得很好,但现在我想用我自己的数据集做。但是在加载数据的第一步,它显示了一个奇怪的错误。函数是
tf.data.Dataset.from_tensor_slices
,错误是:
ValueError Traceback (most recent call last)
~AppDataLocalTempipykernel_20192306109049.py in <module>
57
58 train_dataset = data_generator(train_images, train_masks)
---> 59 val_dataset = data_generator(val_images, val_masks)
60
61 print("Train Dataset:", train_dataset)
~AppDataLocalTempipykernel_20192306109049.py in data_generator(image_list, mask_list)
50
51 def data_generator(image_list, mask_list):
---> 52 dataset = tf.data.Dataset.from_tensor_slices((image_list, mask_list))
53 dataset = dataset.map(load_data, num_parallel_calls=tf.data.experimental.AUTOTUNE)
54 dataset = dataset.batch(BATCH_SIZE, drop_remainder=True)
~AppDataLocalProgramsPythonPython37libsite-packagestensorflowpythondataopsdataset_ops.py in from_tensor_slices(tensors, name)
812 Dataset: A `Dataset`.
813 """
--> 814 return TensorSliceDataset(tensors, name=name)
815
816 class _GeneratorState(object):
~AppDataLocalProgramsPythonPython37libsite-packagestensorflowpythondataopsdataset_ops.py in __init__(self, element, is_files, name)
4720 batch_dim.assert_is_compatible_with(
4721 tensor_shape.Dimension(
-> 4722 tensor_shape.dimension_value(t.get_shape()[0])))
4723
4724 variant_tensor = gen_dataset_ops.tensor_slice_dataset(
~AppDataLocalProgramsPythonPython37libsite-packagestensorflowpythonframeworktensor_shape.py in assert_is_compatible_with(self, other)
298 if not self.is_compatible_with(other):
299 raise ValueError("Dimensions %s and %s are not compatible" %
--> 300 (self, other))
301
302 def merge_with(self, other):
ValueError: Dimensions 37 and 50 are not compatible
错误是"尺寸37和50不兼容",我搜索了这个,但找不到解决方案。代码:
import os
import cv2
import numpy as np
from glob import glob
from scipy.io import loadmat
import matplotlib.pyplot as plt
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers
IMAGE_SIZE = 512
BATCH_SIZE = 4
NUM_CLASSES = 20
DATA_DIR = r'C:/Users/Joshi/Desktop/CARLA_0.9.13/WindowsNoEditor/PythonAPI/examples/out'
NUM_TRAIN_IMAGES = 250
NUM_VAL_IMAGES = 50
train_images = sorted(glob(os.path.join(DATA_DIR, "out/*")))[:NUM_TRAIN_IMAGES]
train_masks = sorted(glob(os.path.join(DATA_DIR, "Seman/*")))[:NUM_TRAIN_IMAGES]
val_images = sorted(glob(os.path.join(DATA_DIR, "out/*")))[
NUM_TRAIN_IMAGES : NUM_VAL_IMAGES + NUM_TRAIN_IMAGES
]
val_masks = sorted(glob(os.path.join(DATA_DIR, "Seman/*")))[
NUM_TRAIN_IMAGES : NUM_VAL_IMAGES + NUM_TRAIN_IMAGES
]
def read_image(image_path, mask=False):
image = tf.io.read_file(image_path)
if mask:
image = tf.image.decode_png(image, channels=1)
image.set_shape([None, None, 1])
image = tf.image.resize(images=image, size=[IMAGE_SIZE, IMAGE_SIZE])
else:
image = tf.image.decode_png(image, channels=3)
image.set_shape([None, None, 3])
image = tf.image.resize(images=image, size=[IMAGE_SIZE, IMAGE_SIZE])
image = image / 127.5 - 1
return image
def load_data(image_list, mask_list):
image = read_image(image_list)
mask = read_image(mask_list, mask=True)
return image, mask
def data_generator(image_list, mask_list):
dataset = tf.data.Dataset.from_tensor_slices((image_list, mask_list))
dataset = dataset.map(load_data, num_parallel_calls=tf.data.experimental.AUTOTUNE)
dataset = dataset.batch(BATCH_SIZE, drop_remainder=True)
return dataset
train_dataset = data_generator(train_images, train_masks)
val_dataset = data_generator(val_images, val_masks)
print("Train Dataset:", train_dataset)
print("Val Dataset:", val_dataset)
图片的尺寸不对。