Tensorflow 如何转换TFRecord格式的高光谱图像或多波段图像?
我一直在尝试使用.mat文件中的高光谱图像数据集。我发现,使用scipy库及其loadmat功能,我可以加载高光谱图像,并选择一些波段将其视为RGBTensorflow 如何转换TFRecord格式的高光谱图像或多波段图像?,tensorflow,image-processing,dataset,tfrecord,Tensorflow,Image Processing,Dataset,Tfrecord,我一直在尝试使用.mat文件中的高光谱图像数据集。我发现,使用scipy库及其loadmat功能,我可以加载高光谱图像,并选择一些波段将其视为RGB def RGBread(image): images = loadmat(image).get('new_image') return abs(images[:,:,(12,6,4)]) def SIread(image): images = loadmat(image).get('new_
def RGBread(image):
images = loadmat(image).get('new_image')
return abs(images[:,:,(12,6,4)])
def SIread(image):
images = loadmat(image).get('new_image')
return abs(images[:,:,:])
在尝试实现pix2pix体系结构之后,我发现了一个意外错误。当负责加载数据(仍然是.mat文件)的函数传递数据集文件名列表时,Tensor Flow没有用于读取或编码的直接方法,因此我使用RGBread和SIread方法获取这些数据,然后将它们转换为张量
def load_image(filename, augment=True):
inimg = tf.cast( tf.convert_to_tensor(RGBread(ImagePATH+'/'+filename)
,dtype=tf.float32),tf.float32)[...,:3]
tgimg = tf.cast( tf.convert_to_tensor(SIread(ImagePATH+'/'+filename)
,dtype=tf.float32),tf.float32)[...,:12]
inimg, tgimg = resize(inimg, tgimg,IMG_HEIGH,IMG_WIDTH)
if augment:
inimg, tgimg = random_jitter(inimg, tgimg)
return inimg, tgimg
使用load_image方法加载图像时,使用数据集的单个.mat文件(高光谱图像)的名称和路径作为函数的参数,该方法工作得非常好
plt.imshow(load_train_image(tr_urls[1])[0])
问题始于我创建数据集张量时,因为我的RGBread函数不接收张量作为参数,因为loadmat('.mat')需要字符串。有以下错误
train_dataset = tf.data.Dataset.from_tensor_slices(tr_urls)
train_dataset = train_dataset.map(load_train_image,
num_parallel_calls=tf.data.experimental.AUTOTUNE)
在阅读了大量关于读取.mat文件的内容后,我发现一位用户建议将数据传递到TFrecord格式。我一直想做,但做不到。有人能帮我吗?Rasterio在这里可能有用 它可以读取hyperspectral.tif,可以使用tf.keras数据生成器将其传递给tf.data。这可能有点慢,可能应该在训练前完成,而不是在运行时
另一种方法是询问您是否需要geotiff元数据。如果没有,则可以预处理TFR记录并另存为numpy数组 光栅在这里可能很有用 它可以读取hyperspectral.tif,可以使用tf.keras数据生成器将其传递给tf.data。这可能有点慢,可能应该在训练前完成,而不是在运行时
另一种方法是询问您是否需要geotiff元数据。如果没有,则可以预处理TFR记录并另存为numpy数组 谢谢,但是我用tf.keras.Sequential解决了我的问题,这个库允许我创建一个数据生成器。谢谢,但是我用tf.keras.Sequential解决了我的问题,这个库允许我创建一个数据生成器。
TypeError: expected str, bytes or os.PathLike object, not Tensor