微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用自定义 map() 函数从 GeoTiff 文件创建 TF 数据集

如何解决如何使用自定义 map() 函数从 GeoTiff 文件创建 TF 数据集

我正在尝试从多通道 tiff 文件创建一个 TensorFlow 数据集。 TensorFlow I/O 中的 tfio.experimental.image.decode_tiff(image) 仅适用于 4 个通道,因此我尝试先将其读入 numpy,在这种情况下使用 Rasterio,然后将其转换为 TF,如下所示:

import tensorflow as tf
import Rasterio as rio

@tf.compat.v2.autograph.experimental.do_not_convert
def parse_image(img_path: str) -> dict:
    
    src = rio.open(img_path)
    image_numpy = src.read()
    image = tf.convert_to_tensor(image_numpy,dtype=tf.float32)

    return {'image': image}

train_dataset = tf.data.Dataset.list_files("multipage_tiff_example.tif",seed=50)
train_dataset = train_dataset.map(parse_image)

不幸的是,我无法克服这个错误

TypeError                                 Traceback (most recent call last)
<ipython-input-77-8308896524b1> in <module>
     11 
     12 train_dataset = tf.data.Dataset.list_files("multipage_tiff_example.tif",seed=50)
---> 13 train_dataset = train_dataset.map(parse_image)

[...]

~/opt/anaconda3/envs/proj1/lib/python3.7/site-packages/Rasterio/__init__.py in open(fp,mode,driver,width,height,count,crs,transform,dtype,nodata,sharing,**kwargs)
    156     if not isinstance(fp,string_types):
    157         if not (hasattr(fp,'read') or hasattr(fp,'write') or isinstance(fp,Path)):
--> 158             raise TypeError("invalid path or file: {0!r}".format(fp))
    159     if mode and not isinstance(mode,string_types):
    160         raise TypeError("invalid mode: {0!r}".format(mode))

TypeError: invalid path or file: <tf.Tensor 'args_0:0' shape=() dtype=string>

示例 tif 文件在这里link Bootstrap

tf.__version__: 2.5.0-rc3
rio.__version__: 1.1.8

我做了很多交叉检查。例如:

  • 通过光栅将文件加载到 numpy 工作
  • parse() 函数与标准 jpg 和 tf.io 内部工作:
    image = tf.io.read_file(img_path)
    image = tf.image.decode_jpeg(image,channels=3)
  • 当我使用正确的目录+文件模式将整个目录传递给 Dataset.list_files() 时,会发生同样的错误

问题“无效路径或文件”是由Rasterio提出的,但我觉得它可能与TF机制有关/引起。

你能建议如何让它工作吗?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。