无法使用 Fiftyone 加载"open-images-v6"的子部分



上下文

我正试图检索大量数据来训练CNN。更具体地说,我在找游泳池的照片。我在谷歌制作的open-images-v6数据库中发现了很多。所以现在,我只想下载这些特定的图像(我不希望900万张图像最终出现在我的下载文件夹中(。

问题

为了做到这一点,我仔细遵循了下载页面上的说明(请参阅:https://storage.googleapis.com/openimages/web/download.html)。因此,我安装了";fiftione";,试用";测试";过程(将加载"快速启动"数据集并浏览数据(,到目前为止还没有遇到任何问题。

但当我试图用以下代码检索游泳池图像时,我遇到了很多问题:

import fiftyone as fo
import fiftyone.zoo as foz
dataset = foz.load_zoo_dataset(
"open-images-v6",
split="validation",
label_types="detections",
classes="Swimming pool"
)
session = fo.launch_app(dataset)

我将直接跳到我无法解决的问题:当我运行代码时,它正确地下载了一堆.csv文件,但当它试图下载数据(图像(时,它显示了一个非常糟糕的错误:

botocore.exceptions.ClientError: An error occurred (404) when calling the HeadObject operation: Not Found

最先进

经过数小时的搜索,我最终发现它与AWS有某种联系,但我完全不知道我能在这个领域做些什么。

我在网上看到一个随机教程,建议安装";awscli";通过PIP,但没有任何变化。我尝试用相同的过程导入其他数据集(即foz.load_zoo_dataset("coco-2017")(,它似乎起作用了(至少下载开始了,但我很早就停止了(。

谢谢你抽出时间。

感谢aws的提示,它终于让我走上了正确的道路。

Fiftyone使用python os.path.join((功能,该功能将在运行windows时创建windows样式的路径。s3 blob存储无法使用这些windows路径,因此引发404错误。

由于这是fiftyone本身的一个bug(我将创建一个pr来修复这个bug(,您需要自己修改fiftyon。

转到您的python站点包目录,然后打开fityone/utils/openimages.py

在该文件中,将以下代码添加到导入语句中:

import re

然后搜索_download_images_if_nnecessary方法并替换此行:

fp_download = os.path.join(split, image_id + ".jpg")

这个:

fp_download = re.sub(r"\", "/", os.path.join(split, image_id + ".jpg"))

这确实为我解决了问题。

最新更新