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文件相关推荐

  1. mxnet rec文件内容分析

    环境:anaconda3,mxnet1.21,win7,intel处理器 参考:https://blog.csdn.net/kupepoem/article/details/105237746 一.M ...

  2. 从mxnet的rec文件中恢复jpg格式

    网上清一色"互相参考"的回答--: 这里迷之501195,然后搜了几个答案居然都写的501195....... 这里给出另一份答案: 参考: cvtower/seesawfacen ...

  3. MXNet如何生成.lst文件和.rec文件

    MXNet框架用于做图像相关的项目时,读取图像主要有两种方式:第一种是读.rec格式的文件,类似Caffe框架中LMDB,优点是.rec文件比较稳定,移植到别的电脑上也能复现,缺点是占空间(.rec文 ...

  4. mxnet制作.lst和.rec文件

    mxnet读数据的其中一种方式就是读取.rec文件,实际上.rec文件的制作流程并不复杂,分为两个步骤: 1.制作.lst文件,这里是一种灵活度比较高的方法 上图是一个简单的lst文件,第一列是ind ...

  5. insightface人脸训练数据rec文件制作

    MXNet框架用于做图像相关的项目时,读取图像主要有两种方式:第一种是读.rec格式的文件,优点是.rec文件比较稳定,移植到别的电脑上也能复现,缺点是占空间(.rec文件的大小基本上和图像的存储大小 ...

  6. C语言rec文件如何打开,REC 文件扩展名: 它是什么以及如何打开它?

    REC 疑难解答 典型的 REC 开放挑战 Squared 5 MPEG Streamclip 不在 你尝试加载 REC 文件并收到错误,例如 "%%os%% 无法打开 REC 文件扩展名& ...

  7. java 默认数据库创建路径_无法创建数据库路径文件:/ user / hive /仓库错误

    我有一个3个节点的群集,并且在运行某些HVE查询时遇到以下错误 FAILED:元数据错误:MetaException(消息:无法创建数据库路径文件:/user/hive/warehouse/db_du ...

  8. android 创建隐藏文件夹吗,Android创建隐藏文件可能文件夹

    Android创建隐藏文件或者文件夹 android创建隐藏文件或者文件夹,其实只要在文件名或者文件夹名字前加一个点号即可. 隐藏文件(夹)可直接进行读写. 如果需要去除隐藏,那就是重命名,去除点即可 ...

  9. linux内核创建节点,Linux内核驱动自动创建设备节点文件

    Linux下生成驱动设备节点文件的方法有3个:1.手动mknod:2.利用devfs:3.利用udev 在刚开始写Linux设备驱动程序的时候,很多时候都是利用mknod命令手动创建设备节点,实际上L ...

  10. R语言使用fs包的dir_create函数在指定路径下创建新的文件夹、使用file_create函数在指定文件夹下创建文件

    R语言使用fs包的dir_create函数在指定路径下创建新的文件夹.使用file_create函数在指定文件夹下创建文件 目录

最新文章

  1. Virtualbox安装使用注意
  2. UVA679 小球下落 Dropping Balls(二叉树的编号)
  3. java空间租用_java影片租赁平台
  4. 【模板】 最小生成树
  5. ES5-3 循环、引用值初始、显示及隐式类型转换
  6. 第三次实验及动手动脑
  7. linux awk搜索文本最后个字符串,[转载]linux下的文本处理命令sedawkgrep
  8. python删除第一行_python3.7 openpyxl 删除指定一列或者一行的代码
  9. 第三章:数组[5常见算法]--[6反转]
  10. 【python】opencv、PIL、gdal读取tif高分遥感影像比较
  11. LVDS 屏 format
  12. canvas 加载图片
  13. Alex 的 Hadoop 菜鸟教程: 第7课 Hbase 使用教程
  14. 找出冲突的Windows快捷键
  15. E盾网络验证介绍以及教程分享
  16. The database returned no natively generated identity value
  17. 使用pyecharts遇到的坑(去掉地图标识小红点)!
  18. 基于bs架构的办公自动化系统毕业设计
  19. 【wifi】抓取握手包
  20. HTTPS、证书机构(CA)、证书、数字签名、私钥、公钥

热门文章

  1. 广东开放大学形考任务保险学原理(本,2022春)形考三答案
  2. android开发,动态图标,Android动态更新APP图标
  3. 思科Packet Tracer基础使用教程
  4. c语言———链表的创建
  5. 手机及电脑抓包(tcp,udp,http)
  6. 电厂运维的cis数据_浅析电力企业信息系统运维综合监管平台设计-
  7. pdf加水印怎么加?五个步骤非常简单
  8. Echarte柱状图文字位置
  9. 也谈谈Linux下recv函数的使用
  10. 乙酸乙酯密度是多少 乙酸乙酯的用途