最近在读few-shot Learning 的论文,这个Tired ImageNet可以说是很多期刊论文的few-shot learning文章都喜欢用来做实验对比了,所以我也很好奇这个tired ImageNet到底是个什么样子的。通过这篇博客和大家一起探索一下tired ImageNet。
tired ImageNet是在2018年的论文 META-LEARNING FOR SEMI-SUPERVISED FEW-SHOT CLASSIFICATION 中提出来的一个数据集,根据作者的介绍,这个数据集是数据集 ILSVRC-12 (ImageNet 2012)的一个子集。熟悉few-shot learning的朋友都知道,mini-ImageNet作为另一个few-shot learning的热门数据集,它也是 ILSVRC-12 的一个子集。不同的是,mini-ImageNet只有100个类,划分成64个training categories,16个val categories和20个test categories。而tired ImageNet类似于Omniglot(手写符号数据集),它的分类有层次概念。数据集分成34个大类(比如乐器,工具,载具之类的),这34个大类中每个类包含10~30个更细致的小类(比如乐器这个大类包含吉他,钢琴等)。34个大类分成20个training categories,6个val categories和8个test categories。根据作者的说法,这样做的好处是让大类相同的小类不要分别出现在training和test categories中。比如mini-ImageNet中将管风琴作为训练集,电吉他作为测试集,即便这两种都是乐器。
OK。上面这些差不多就是论文里对tired ImageNet的全部描述了,如果有兴趣的读者可以自己去读读原文。可是对于我这种想要使用tired ImageNet做训练的人来说,这些信息太粗糙了,我需要知道这个数据集怎么加载,怎么划分,标签是什么样的。
首先,找到原始数据集。
https://github.com/renmengye/few-shot-ssl-public
这是META-LEARNING FOR SEMI-SUPERVISED FEW-SHOT CLASSIFICATION 的github链接。往下翻可以发现
Nice!作者给出了tired ImageNet的链接。不过有一点问题,他们给的是谷歌的网盘链接,这就要看本事了,把它下载下来。
下载好之后是这样的,一个压缩包。
解压之后的样子。好家伙,数据全部被保存成pkl了,我又不知道作者当初是怎么压缩的,所以怎么解压这个pkl文件是一个大问题。还是要去看源码,这是最恶心人的部分了。那么下面是我看完源码之后从里面抽取出来的一点关键代码,以training categories为例。
import numpy as np
import pandas as pd
import pickle as pkl
cache_path_labels = 'F:/数据库/tiered-imagenet/train_labels.pkl'
f = open(cache_path_labels, 'rb')
data = pkl.load(f, encoding='bytes')
label_specific = data["label_specific"]
label_general = data["label_general"]
label_specific_str = data["label_specific_str"]
label_general_str = data["label_general_str"]
print('label_specific: ')
print(len(label_specific))
print(label_specific)
print(label_specific_str)
print('\nlabel_general:')
print(len(label_general))
print(set(label_general))
print(label_general_str)
可以看出来,training categories里面,精细划分的有351个类,粗糙划分的有20个类,总共有448695张图片。再分别测试一下val和test。
这是val categories的运行结果,精细划分的有97个类,粗糙划分的有6个类,总共有124261张图片。
这是test categories的运行结果,精细划分的有160个类,粗糙划分的有8个类,总共有206209张图片。
上面都是对于label的压缩文件的解压操作,下面会介绍图片的解压操作。
突然发现解压图片要用到cv2,我还没安装这个包,那就下次再说了,等我弄好了再继续写图片解压。