MxNet创建ILSVRC2012.rec文件
ILSVRC2012是一个经典的深度学习验证数据集,它包含1000个类别。在官网下载数据集,下载的文件包含以下几个文件:
ILSVRC2012包含120多万张train图片,以及5万张val图片。下载后的train数据集将近150G,val数据集约6.7G。为了确定下载的.tar文件没有损坏,使用下面的代码进行验证:
import os
from mxnet.gluon.utils import check_sha1_TARGET_DIR = '/media/wang/WangKe/ImageNet' #ILSVRC下载存储的位置
_TRAIN_TAR = 'ILSVRC2012_img_train.tar'
_TRAIN_TAR_SHA1 = '43eda4fe35c1705d6606a6a7a633bc965d194284'
_VAL_TAR = 'ILSVRC2012_img_val.tar'
_VAL_TAR_SHA1 = '5f3f73da3395154b60528b2b2a2caf2374f5f178'def check_file(filename, checksum, sha1):if not os.path.exists(filename):raise ValueError('File not found: '+filename)if checksum and not check_sha1(filename, sha1):raise ValueError('Corrupted file: '+filename)train_tar_fname = os.path.join(_TARGET_DIR, _TRAIN_TAR)
val_tar_fname = os.path.join(_TARGET_DIR, _VAL_TAR)
check_file(train_tar_fname, True, _TRAIN_TAR_SHA1)
check_file(val_tar_fname, True, _VAL_TAR_SHA1)
下面开始制作ilsvrc2012.rec文件,参考MxNet中GluonCV给出的教程(https://gluon-cv.mxnet.io/build/examples_datasets/imagenet.html )。由于我使用的是python2,已经不支持gluoncv,因此对代码进行简单修改。
首先,分别下载im2rec.py,train.lst和val.lst三个文件,下载地址(https://raw.githubusercontent.com/apache/incubator-mxnet/master/tools/im2rec.py,http://data.mxnet.io/models/imagenet/resnet/train.lst,http://data.mxnet.io/models/imagenet/resnet/val.lst),并保存到/media/wang/WangKe/ImageNet中。随后运行修改后的imagenet.py
"""Prepare the ImageNet dataset"""
import os
import argparse
import tarfile
import pickle
import gzip
import subprocess
from tqdm import tqdm
from mxnet.gluon.utils import check_sha1
# from gluoncv.utils import download, makedirs# _TARGET_DIR = os.path.expanduser('~/.mxnet/datasets/imagenet')
_TARGET_DIR = '/media/wang/WangKe/ImageNet'
_TRAIN_TAR = 'ILSVRC2012_img_train.tar'
_TRAIN_TAR_SHA1 = '43eda4fe35c1705d6606a6a7a633bc965d194284'
_VAL_TAR = 'ILSVRC2012_img_val.tar'
_VAL_TAR_SHA1 = '5f3f73da3395154b60528b2b2a2caf2374f5f178'def parse_args():parser = argparse.ArgumentParser(description='Setup the ImageNet dataset.',formatter_class=argparse.ArgumentDefaultsHelpFormatter)parser.add_argument('--download-dir', required=True,help="The directory that contains downloaded tar files")parser.add_argument('--target-dir', default=_TARGET_DIR,help="The directory to store extracted images")parser.add_argument('--checksum', action='store_true',help="If check integrity before extracting.")parser.add_argument('--with-rec', action='store_true',help="If build image record files.")parser.add_argument('--num-thread', type=int, default=1,help="Number of threads to use when building image record file.")args = parser.parse_args()return argsdef check_file(filename, checksum, sha1):if not os.path.exists(filename):raise ValueError('File not found: '+filename)if checksum and not check_sha1(filename, sha1):raise ValueError('Corrupted file: '+filename)def build_rec_process(img_dir, train=False, num_thread=1):rec_dir = os.path.abspath(os.path.join(img_dir, '../rec'))if not os.path.exists(rec_dir):os.makedirs(rec_dir)prefix = 'train' if train else 'val'print('Building ImageRecord file for ' + prefix + ' ...')to_path = rec_dir# download lst file and im2rec scriptscript_path = os.path.join(rec_dir, 'im2rec.py')script_url = 'https://raw.githubusercontent.com/apache/incubator-mxnet/master/tools/im2rec.py'# download(script_url, script_path)lst_path = os.path.join(rec_dir, prefix + '.lst')lst_url = 'http://data.mxnet.io/models/imagenet/resnet/' + prefix + '.lst'# download(lst_url, lst_path)# executionimport syscmd = [sys.executable,script_path,rec_dir,img_dir,'--recursive','--pass-through','--pack-label','--num-thread',str(num_thread)]subprocess.call(cmd)os.remove(script_path)os.remove(lst_path)print('ImageRecord file for ' + prefix + ' has been built!')def extract_train(tar_fname, target_dir, with_rec=False, num_thread=1):os.makedirs(target_dir)with tarfile.open(tar_fname) as tar:print("Extracting "+tar_fname+"...")# extract each class one-by-onepbar = tqdm(total=len(tar.getnames()))for class_tar in tar:pbar.set_description('Extract '+class_tar.name)tar.extract(class_tar, target_dir)class_fname = os.path.join(target_dir, class_tar.name)class_dir = os.path.splitext(class_fname)[0]os.mkdir(class_dir)with tarfile.open(class_fname) as f:f.extractall(class_dir)os.remove(class_fname)pbar.update(1)pbar.close()if with_rec:build_rec_process(target_dir, True, num_thread)def extract_val(tar_fname, target_dir, with_rec=False, num_thread=1):# os.makedirs(target_dir)# print('Extracting ' + tar_fname)# with tarfile.open(tar_fname) as tar:# tar.extractall(target_dir)# build rec file before images are moved into subfoldersif with_rec:build_rec_process(target_dir, False, num_thread)# move images to proper subfoldersval_maps_file = os.path.join('/media/wang/WangKe/ImageNet', 'imagenet_val_maps.pklz')# val_maps_file = os.path.join(os.path.dirname(__file__), 'imagenet_val_maps.pklz')with gzip.open(val_maps_file, 'rb') as f:dirs, mappings = pickle.load(f)for d in dirs:os.makedirs(os.path.join(target_dir, d))for m in mappings:os.rename(os.path.join(target_dir, m[0]), os.path.join(target_dir, m[1], m[0]))def main():args = parse_args()target_dir = args.target_dir# if os.path.exists(target_dir):# raise ValueError('Target dir ['+target_dir+'] exists. Remove it first')download_dir = args.download_dir# download_dir = os.path.expanduser(args.download_dir)train_tar_fname = os.path.join(download_dir, _TRAIN_TAR)# check_file(train_tar_fname, args.checksum, _TRAIN_TAR_SHA1)val_tar_fname = os.path.join(download_dir, _VAL_TAR)# check_file(val_tar_fname, args.checksum, _VAL_TAR_SHA1)build_rec = True# build_rec = args.with_recif build_rec and not os.path.exists(os.path.join(target_dir, 'rec')):os.makedirs(os.path.join(target_dir, 'rec'))extract_val(val_tar_fname, os.path.join(target_dir, 'val'), build_rec, args.num_thread)extract_train(train_tar_fname, os.path.join(target_dir, 'train'), build_rec, args.num_thread)if __name__ == '__main__':main()
最终,分别在文件夹/media/wang/WangKe/ImageNet/train和/media/wang/WangKe/ImageNet/ 中按类存储ILSVRC2012图片,在/media/wang/WangKe/ImageNet/rec 中生成对应的train,val的rec文件。
MxNet创建ILSVRC2012.rec文件相关推荐
- mxnet rec文件内容分析
环境:anaconda3,mxnet1.21,win7,intel处理器 参考:https://blog.csdn.net/kupepoem/article/details/105237746 一.M ...
- 从mxnet的rec文件中恢复jpg格式
网上清一色"互相参考"的回答--: 这里迷之501195,然后搜了几个答案居然都写的501195....... 这里给出另一份答案: 参考: cvtower/seesawfacen ...
- MXNet如何生成.lst文件和.rec文件
MXNet框架用于做图像相关的项目时,读取图像主要有两种方式:第一种是读.rec格式的文件,类似Caffe框架中LMDB,优点是.rec文件比较稳定,移植到别的电脑上也能复现,缺点是占空间(.rec文 ...
- mxnet制作.lst和.rec文件
mxnet读数据的其中一种方式就是读取.rec文件,实际上.rec文件的制作流程并不复杂,分为两个步骤: 1.制作.lst文件,这里是一种灵活度比较高的方法 上图是一个简单的lst文件,第一列是ind ...
- insightface人脸训练数据rec文件制作
MXNet框架用于做图像相关的项目时,读取图像主要有两种方式:第一种是读.rec格式的文件,优点是.rec文件比较稳定,移植到别的电脑上也能复现,缺点是占空间(.rec文件的大小基本上和图像的存储大小 ...
- C语言rec文件如何打开,REC 文件扩展名: 它是什么以及如何打开它?
REC 疑难解答 典型的 REC 开放挑战 Squared 5 MPEG Streamclip 不在 你尝试加载 REC 文件并收到错误,例如 "%%os%% 无法打开 REC 文件扩展名& ...
- java 默认数据库创建路径_无法创建数据库路径文件:/ user / hive /仓库错误
我有一个3个节点的群集,并且在运行某些HVE查询时遇到以下错误 FAILED:元数据错误:MetaException(消息:无法创建数据库路径文件:/user/hive/warehouse/db_du ...
- android 创建隐藏文件夹吗,Android创建隐藏文件可能文件夹
Android创建隐藏文件或者文件夹 android创建隐藏文件或者文件夹,其实只要在文件名或者文件夹名字前加一个点号即可. 隐藏文件(夹)可直接进行读写. 如果需要去除隐藏,那就是重命名,去除点即可 ...
- linux内核创建节点,Linux内核驱动自动创建设备节点文件
Linux下生成驱动设备节点文件的方法有3个:1.手动mknod:2.利用devfs:3.利用udev 在刚开始写Linux设备驱动程序的时候,很多时候都是利用mknod命令手动创建设备节点,实际上L ...
- R语言使用fs包的dir_create函数在指定路径下创建新的文件夹、使用file_create函数在指定文件夹下创建文件
R语言使用fs包的dir_create函数在指定路径下创建新的文件夹.使用file_create函数在指定文件夹下创建文件 目录
最新文章
- Virtualbox安装使用注意
- UVA679 小球下落 Dropping Balls(二叉树的编号)
- java空间租用_java影片租赁平台
- 【模板】 最小生成树
- ES5-3 循环、引用值初始、显示及隐式类型转换
- 第三次实验及动手动脑
- linux awk搜索文本最后个字符串,[转载]linux下的文本处理命令sedawkgrep
- python删除第一行_python3.7 openpyxl 删除指定一列或者一行的代码
- 第三章:数组[5常见算法]--[6反转]
- 【python】opencv、PIL、gdal读取tif高分遥感影像比较
- LVDS 屏 format
- canvas 加载图片
- Alex 的 Hadoop 菜鸟教程: 第7课 Hbase 使用教程
- 找出冲突的Windows快捷键
- E盾网络验证介绍以及教程分享
- The database returned no natively generated identity value
- 使用pyecharts遇到的坑(去掉地图标识小红点)!
- 基于bs架构的办公自动化系统毕业设计
- 【wifi】抓取握手包
- HTTPS、证书机构(CA)、证书、数字签名、私钥、公钥