上下文
我正试图检索大量数据来训练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"))
这确实为我解决了问题。