赞
踩
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
最近在使用AutoDL算力云复现几个深度学习中知识蒸馏的代码,训练一个图像分类的模型时,用到了李飞飞教授的ImageNet1K数据集,所以想把这个数据集的介绍以及使用给刚入门深度学习图像分类的新手小白们分享一下,内容很简单,也算是做一个简单的笔记。
由于其规模庞大,下载整个数据集可能需要大量时间和存储空间。在过去,ImageNet数据集可以通过官方网站http://www.image-net.org 进行下载。然而,由于数据集的巨大尺寸和资源需求,官方通常要求用户注册并遵守使用协议,同时可能需要支付一定的费用。
在AutoDL中有一个公开数据集模块,已经将ImageNet数据集的压缩包下载了下来,可以在/root/autodl-pub/ImageNet目录下找到,大家也可以自行下载,但是就拿2012年ILSVRC2012竞赛中ImageNet数据集的大小来说,训练数据集下载资源为137.7G,验证集大小为6.3个G。数据集下载好后,如下图:
我们在训练一个新的深度分类神经网络时,用到的是train,val,test三个文件,对模型输入数据时首先需要解压缩这三个tar包,在windows系统中,直接解压缩文件即可,在linux系统中使用python提取ILSVRC2012文件夹中我们需要的训练集和验证集。
import os import tarfile TRAIN_SRC_DIR = '/root/autodl-pub/ImageNet/ILSVRC2012/ILSVRC2012_img_train.tar' TRAIN_DEST_DIR = '/root/autodl-tmp/imagenet/train' VAL_SRC_DIR = '/root/autodl-pub/ImageNet/ILSVRC2012/ILSVRC2012_img_val.tar' VAL_DEST_DIR = '/root/autodl-tmp/imagenet/val' def extract_train(): with open(TRAIN_SRC_DIR, 'rb') as f: tar = tarfile.open(fileobj=f, mode='r:') for i, item in enumerate(tar): cls_name = item.name.strip(".tar") a = tar.extractfile(item) b = tarfile.open(fileobj=a, mode="r:") e_path = "{}/{}/".format(TRAIN_DEST_DIR, cls_name) if not os.path.isdir(e_path): os.makedirs(e_path) print("#", i, "extract train dateset to >>>", e_path) names = b.getnames() for name in names: b.extract(name, e_path) def extract_val(): with open(VAL_SRC_DIR, 'rb') as f: tar = tarfile.open(fileobj=f, mode='r:') if not os.path.isdir(VAL_DEST_DIR): os.makedirs(VAL_DEST_DIR) print("extract val dateset to >>>", VAL_DEST_DIR) names = tar.getnames() for name in names: tar.extract(name, VAL_DEST_DIR) if __name__ == '__main__': extract_train() extract_val()
解压缩完毕后,训练数据集是一个个一类别分类的文件夹,文件夹名是数字,如下所示:
而val文件夹下是随机的图像数据,因此在用val文件夹对模型进行验证时,需要整理val文件夹下的图像的标签,按照train文件目录下的样式,对val文件夹下的图像数据进行分类,并且以类别名作为文件夹名整理图像,val文件夹下的图像没有标签,但是我们下载下来的ILSVRC2012文件夹中包含验证集的标签压缩文件,如图所示:
我们需要将标签压缩文件首先解压缩到和val文件夹相同的目录下,然后通过下面的代码,将对应的图像分类到相应的文件夹中。
代码如下:
from scipy import io import os import shutil 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 = 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)) if __name__ == '__main__': move_valimg()
处理完毕后,就可以正常使用ImageNet数据集去训练模型啦。
使用AutoDl算力云去做深度学习模型的训练还是很方便的,上面也有平台已经下载好的公开数据集,但是需要对系统的数据盘扩容,这个时候就需要收费了,按照扩容大小计量收费,并且收费是根据你存储数据的时间按天收费的,所以大家需要酌情考虑,一天大概几块钱,比如我扩容了200G,每天收费1.33元左右,当然你可以随时扩容或者缩容收费也会随之增大或减小。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。