目录
一、问题描述
Caltech-UCSD Birds-200-2011 (CUB-200-2011)数据集是细粒度可视化分类任务中应用最广泛的数据集。它包含了属于鸟类的200个子类别的11788张图片,5994张用于训练,5794张用于测试。每张图片都有详细的注释:1个子类别标签,15个部分位置(part locations),312个二分类属性和1个边界框(bounding box)。
数据集的使用:
import tensorflow_datasets as tfds
x_train, y_train = tfds.load('caltech_birds2011', split='train', batch_size=-1, as_supervised=True)
x_test, y_test = tfds.load('caltech_birds2011', split='test', batch_size=-1, as_supervised=True)
出现错误:
W tensorflow/core/platform/cloud/google_auth_provider.cc:184] All attempts to get a Google authentication bearer token failed, returning an empty token. Retrieving token from files failed with "NOT_FOUND: Could not locate the credentials file.". Retrieving token from GCE failed with "FAILED_PRECONDITION: Error executing an HTTP request: libcurl code 6 meaning 'Couldn't resolve host name', error details: Could not resolve host: metadata".
E tensorflow/core/platform/cloud/curl_http_request.cc:614] The transmission of request 0x555a86acad30 (URI: https://www.googleapis.com/storage/v1/b/tfds-data/o/datasets%2Fcaltech_birds2011?fields=size%2Cgeneration%2Cupdated) has been stuck at 0 of 0 bytes for 61 seconds and will be aborted. CURL timing information: lookup time: 0.001333 (No error), connect time: 0 (No error), pre-transfer time: 0 (No error), start-transfer time: 0 (No error)
因为All attempts to get a Google authentication bearer token failed, returning an empty token.当时机器也被占着,我就尝试着用Google colab跑了一下,没想到可以
于是我喜滋滋地把tensorflow_datasets下载了,并放在同样的位置,结果还是出现错误。
二、解决思路
我想着起码有数据集了不是,于是又在网上搜索怎么使用tensorflow_datasets加载本地数据集,但是一大堆的教程让我看得云里雾里,然后我看到了一个知乎回答:
里面有一个Google colab的教程(需要梯子)。内容大概是这样的:
三、解决办法(Linux、Win10都可以)
1、Tensorflow
还是上面的图,我看了一下当前目录下的文件
发现下面有个‘~’文件
于是
可算是把它找到了。
接下来按照知乎回答里面说的步骤完成,也就是:
然后连接谷歌云盘
因为文件下载得太慢了(如下图),Google colab连接的机器可能会断开,所以放到云盘上去下载。
download.tar.gz的下载链接:https://pan.baidu.com/s/1gnIj2KQI_NjUf_yEOWzpkQ 提取码:jj2j
然后把文件解压
tar -zxvf download.tar.gz -C 自己指定的文件名/caltech_birds2011/0.1.1
注意结尾必须是caltech_birds2011/0.1.1,据我观察,数据集默认的data_dir应该设置为
自己指定的文件名/tfds.load加载的数据集名称/一个类似版本号的东西/tfrecord文件
最后设置data_dir
import tensorflow_datasets as tfds
x_train, y_train = tfds.load('caltech_birds2011', data_dir='自己指定的文件名', split='train', batch_size=-1, as_supervised=True)
x_test, y_test = tfds.load('caltech_birds2011', data_dir='自己指定的文件名', split='test', batch_size=-1, as_supervised=True)
2、Pytorch
1)下载
下载链接:Perona Lab - CUB-200-2011 (caltech.edu)
2)划分训练集和测试集
方法一:
这位博主写得非常清楚。
方法二:
我使用了
中的数据集划分方法。
然后使用了ImageFolder加载数据集
mode = "train" if self.train else "valid"
root = os.path.join(self.data_dir, mode)
self.data = ImageFolder(root=root)
参考资料:
1、tensorflow_datasets 如何load本地的数据集?tensorflow_datasets 如何load本地的数据集? - 知乎 (zhihu.com)
2、 CUB-200-2011鸟类数据集的下载与使用pytorch加载
CUB-200-2011鸟类数据集的下载与使用pytorch加载_景唯acr的博客-优快云博客_cub数据集下载
3、 ImageFolder、DataLoader加载CUB200数
ImageFolder、DataLoader加载CUB200数据集_查无此人☞的博客-优快云博客_dataloader imagefolder