csv - 构建一个 tf.data.Dataset 对象,其中图像作为特征,.csv 文件作为标签
问题描述
我正在做一个深度学习项目,试图自动检测给定图像的人的关节,我被困在试图以正确格式将数据提供给我的神经网络。我的特征 (x) 是非常大的图像 (2000x900),我的标签 (y) 是 .csv 文件,其中有四列,每列 15 行:第一列包含字符串(关节名称),其他三列包含整数(每行每列一个整数)。.csv 文件如下所示:
左膝,可见,x,y
Right_knee, vis, x, y
...(这里的x和y代表图像坐标,不是特征和标签!vis为0或1,表示关节是否可见)
每个 .csv 文件对应一个特定的图像,.csv 文件和对应的图像名称相同但路径不同。现在,我想创建一个 tf.data.Dataset 对象,其中特征是图像,标签是从 .csv 文件构建的 Python 字典。例如,对应于图像 x(i) 的单个标签 y(i) 需要如下所示: {'Left_knee': [vis, x, y], 'Right_knee': [vis, x, y] , ...}。
我构建这样一个数据集的策略是将图像和标签加载到单独的 tf.data.Dataset 对象中,然后将它们融合在一起。为了加载图像,我编写了这个非常简单的代码(可能效率低下/错误?):
imgs_path = pathlib.Path('path/to/images')
list_imgs = tf.data.Dataset.list_files(str(imgs_path/'*'))
def imgs_to_dataset(file_path):
return tf.io.read_file(file_path)
imgs_dataset = list_imgs.map(imgs_to_dataset)
老实说,我对 TensorFlow(和一般编程!)太陌生了,无法以任何方式对其进行测试以发现潜在问题,但它至少不会给我任何错误。
现在,我的问题是如何将 .csv 文件加载到 tf.data.Dataset 对象中,然后将其与 imgs_dataset 融合,以便正确的标签到达每个图像。我知道我必须使用 tf.data.experimental.make_csv_dataset 之类的东西,但我不太确定如何设置它,以便我的 y 采用我想要的格式。有没有办法做到这一点,还是我走错了路?我应该澄清一下,我对使用 tf.data.Dataset 对象的想法没有任何看法,但据我所知,这似乎是一种非常方便(如果你可以设置的话!)将数据提供给 tf 的方式.keras 模型通过 .fit()。另外,我希望标签以特定方式(即作为字典)构造,因为我的网络损失将需要访问标签的不同字段(例如,如果,损失会更低,对于给定的图像和给定的关节,关节的 vis 参数为 0)。但也许有一种更有效的方法来构建我的标签以实现这一目标?
任何帮助和建议将不胜感激!提前致谢。
解决方案
我认为tf.data.Dataset
是一个很好的方法。您不需要创建两个数据集并将它们融合在一起,您可以首先使用例如加载数据集。from_tensor_slces
, list_files
, 或from_generator
然后继续应用地图功能,如果需要,它会对您的图像进行后处理并加载一个后处理您的标签,即将它们从 pd.DataFrame 转换为 dict。然后,您的 map 函数会将图像元组作为张量返回,并将其标签作为 dicts。在映射之后,您也可以应用洗牌和批处理。
文档中的示例:
dataset = Dataset.range(5)
# `map_func` takes a single argument of type `tf.Tensor` with the same
# shape and dtype.
result = dataset.map(lambda x: x + 1)
应该结构化的方式map
高度取决于文件的结构和命名。您可能想用您自己的自定义函数替换 lambda 函数,
推荐阅读
- scikit-learn - 一个 2 分类变量的热编码
- c - 即使我使用的是 malloc,strcpy 上的分段错误
- python - 使用 shell_exec 在 PHP 文件中运行 python 脚本在使用 localhost 时有效,但在放在服务器上时无效
- python-3.x - 使用 webdriver 查找“登录”按钮
- identityserver4 - 创建重定向到身份服务器登录页面的登录按钮
- react-bootstrap - React Bootstrap 4 Button 没有与输入对齐
- java - 合并 2 个地图
> 在Java中 - ios - 如何更改 UIDatePicker 色调颜色?
- c# - 使用 sql 表作为收件人的动态电子邮件列表
- python - 如何对两个对象使用相同的 OpenCv 函数?