ILSVRC2012

  1. 简介
  2. 内容详解
  3. train数据
  4. val数据
  5. test数据

简介

内容详解

下载的文件主要包括以下文件:

ILSVRC2012_img_train.tar
ILSVRC2012_img_val.tar
ILSVRC2012_img_test.tar
ILSVRC2012_devkit_t12.gz

前三个为图像压缩包,分别对应train, val, test三个子集。最后一个为数据说明文档。

train数据

ILSVRC2012_img_train.tar中有1000个tar压缩包,分别对应1000个类别。

每个tar解压后得到对应类别的图片,例如n01514668.tar的内容:

一般需要将这些图片解压,按如下目录组织:

1
2
3
4
5
6
/train
/n01440764
images
/n01443537
images
...

可以用如下python脚本处理:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
def un_tar(file_name, output_root='train'):
# untar zip file to folder whose name is same as tar file
tar = tarfile.open(file_name)
names = tar.getnames()

file_name = os.path.basename(file_name)
extract_dir = os.path.join(output_root, file_name.split('.')[0])

# create folder if nessessary
if os.path.isdir(extract_dir):
pass
else:
os.mkdir(extract_dir)

for name in names:
tar.extract(name, extract_dir)
tar.close()


def untar_traintar(traintar='./traintar'):
"""
untar images from traintar and save in corresponding folders
organize like:
/train
/n01440764
images
/n01443537
images
.....
"""
root, _, files = next(os.walk(traintar))
for file in files:
un_tar(os.path.join(root, file))

val数据

ILSVRC2012_img_al.tar中有50000张图片,没有按照类别区分开,命名方式如下:

其中每张图片对应的label信息保存在ILSVRC2012_devkit_t12.gz中的data文件夹下的ILSVRC2012_validation_ground_truth.txt中,按照编号顺序每行用1-1000的数字表示一个类别。每个类别有50个样本。

ILSVRC2012_validation_ground_truth.txt中的内容如下:

移动val的python脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
def move_valimg(val_dir='./val', devkit_dir='./ILSVRC2012_devkit_t12'):
"""
move valimg to correspongding folders.
val_id(start from 1) -> ILSVRC_ID(start from 1) -> WIND
organize like:
/val
/n01440764
images
/n01443537
images
.....
"""
# load synset, val ground truth and val images list
synset = scipy.io.loadmat(os.path.join(devkit_dir, 'data', 'meta.mat'))

ground_truth = open(os.path.join(devkit_dir, 'data', 'ILSVRC2012_validation_ground_truth.txt'))
lines = ground_truth.readlines()
labels = [int(line[:-1]) for line in lines]

root, _, filenames = next(os.walk(val_dir))
for filename in filenames:
# val image name -> ILSVRC ID -> WIND
val_id = int(filename.split('.')[0].split('_')[-1])
ILSVRC_ID = labels[val_id-1]
WIND = synset['synsets'][ILSVRC_ID-1][0][1][0]
print("val_id:%d, ILSVRC_ID:%d, WIND:%s" % (val_id, ILSVRC_ID, WIND))

# move val images
output_dir = os.path.join(root, WIND)
if os.path.isdir(output_dir):
pass
else:
os.mkdir(output_dir)
shutil.move(os.path.join(root, filename), os.path.join(output_dir, filename))

test数据

不用于训练,略过。


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。