文章目录
前言
本文在Linux中,处理对象为ILSVRC2012数据集(ImageNet-1k)
一、数据集下载
ImageNet官网链接
在Linux上也可以直接用命令行进行下载:
- 训练集(ILSVRC2012_img_train.tar):
wget https://image-net.org/data/ILSVRC/2012/ILSVRC2012_img_train.tar --no-check-certificate
- 验证集(ILSVRC2012_img_val.tar):
wget https://image-net.org/data/ILSVRC/2012/ILSVRC2012_img_val.tar --no-check-certificate
- 标签映射文件(ILSVRC2012_devkit_t12.tar.gz):
wget https://image-net.org/data/ILSVRC/2012/ILSVRC2012_devkit_t12.tar.gz --no-check-certificate
二、解压
1.训练集
执行命令,进入该文件目录下:
cd /home/data/imagenet
执行命令,将训练集解压到文件夹 train 目录下:
mkdir train &&tar -xvf ILSVRC2012_img_train.tar -C train &&forxin`ls train/*tar`;dofn=train/`basename $x .tar`;mkdir$fn;tar -xvf $x -C $fn;rm -f $fn.tar;done
执行命令,进入 train 目录下:
cd train
执行命令,查看该目录下的文件夹数量,若解压成功,则返回1000:
ls -lR|grep"^d"|wc -l
执行命令,查看 train 目录下所有文件(图片)的数量,若解压成功,则返回1281167:
ls -lR|grep"^-"|wc -l
2.验证集
执行命令,进入3个文件所在的根目录:
cd /home/data/imagenet
执行命令,创建解压验证集的文件夹:
mkdir val
执行命令,将验证集图像解压到 val 目录下:
tar xvf ILSVRC2012_img_val.tar -C ./val
此时 val 目录下是50000张图像,并没有被分类到1000个文件夹下。因此需要将验证集中的图像进行分类存放。
执行命令,解压ILSVRC2012_devkit_t12.tar.gz这个文件:
tar -xzf ILSVRC2012_devkit_t12.tar.gz
该文件中记录着验证集中的图像名及其类别标签之间的映射关系。
在 ‘/home/data/imagenet’ 目录下创建 Python 脚本,假设命名为“unzip.py”,其内容如下:
from scipy import io
import os
import shutil
defmove_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 = 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):passelse:
os.mkdir(output_dir)
shutil.move(os.path.join(root, filename), os.path.join(output_dir, filename))if __name__ =='__main__':
move_valimg()
回到imagenet下,执行该文件,进行验证集分类存放进1000个文件夹:
cd /home/data/imagenet
python unzip.py
总结
这样就成功啦!!
版权归原作者 小周_ 所有, 如有侵权,请联系我们删除。