简介
略
内容详解
下载的文件主要包括以下文件:
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
33def 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
34def 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数据
不用于训练,略过。
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。