您的位置:首页 > 理论基础 > 计算机网络

MXNet系统上ilsvrc12数据集的制作与inception-bn网络的训练

2016-06-01 11:05 573 查看
MXNet系统推荐使用Image RecordIO数据格式(简称rec)的数据集进行训练,系统提供了MNIST和Cifar10两种数据集的Image RecordIO格式数据,但是其他数据集没有提供rec格式的数据集,所以我们想要使用其他数据集的话,需要学会制作其对应的rec格式数据,下面就来介绍imagenet的ilsvrc12数据集的rec格式的训练数据制作过程与其用inception-bn网络训练使用的过程。

首先附上官网教程的链接:http://mxnet.dmlc.ml/en/latest/packages/python/io.html,(其中红色的Python改为python,csdn会自动给python这个字眼增加跳转链接,所以变成这个形式了)大家可以参考一下。

一、制作ilsvrc12数据集

1、首先需要下载ilsvrc12数据集:

下载链接为:http://www.image-net.org/challenges/LSVRC/2012/nnoupb/ILSVRC2012_img_train.tar

linux上可使用命令下载:

wget http://www.image-net.org/challenges/LSVRC/2012/nnoupb/ILSVRC2012_img_train.tar 该文件总大小有147G左右,当时放服务器下载,花了一周左右的时间,ilsvrc12中有1000类的图片数据

解压后其中包含:dirilsvrc2012train和dirilsvrc2012val两个文件夹,我们将利用它们分别制作训练集数据和测试集数据。前者包含1000个文件夹,分别对应1000个类,其中总共有1281167张训练图片,后者包含50000张测试图片。

2、制作ilsvrc12训练集数据

(1)首先制作image list,其格式为:

integer_image_index \t label_index \t path_to_image

interger_image是指图片的序列号,label_index是指图片对应的标签号,即所属的类,path_to_image是指图片存放的路径

我们可以使用tools文件夹下的make_list.py脚本来创建这个list,首先进入mxnet根目录,cd mxnet,然后使用指令:

sudo python tools/make_list.py /home/share/data/dirilsvrc2012train ./data/ilsvrc12/train --recursive=True
其中,

/home/share/data/dirilsvrc2012train:是指ilsvrc12训练图片存放的路径

/data/ilsvrc12/train:是指生成的list文件的名字,即会生成train.lst文件,前面加上路径可以指定这个lst文件生成的位置,使用前应该提前创建好./data/ilsvrc12这个文件夹。

--recursive=True:是指图片文件都是存放在指定类的文件夹下,ilsvrc12中的有1000个文件夹,即1000个类,每个文件夹下存放着相应类的图片,例如,文件夹如下:



其中文件夹n01440764下的内容为该类的图片:



执行这条命令后:



在./data/ilsvrc12文件夹下会生成train.lst文件,用head命令查看train.lst的前二十条内容:



(2)利用image list制作rec格式数据,即利用train.lst制作train.rec

bin/im2rec data/ilsvrc12/train.lst /home/share/data/dirilsvrc2012train/ data/ilsvrc12/train.rec resize=227
其中,
data/ilsvrc12/train.lst:是指刚刚生成的train.lst文件

/home/share/data/dirilsvrc2012train/:是指训练数据的路径(最后面的斜杠/千万不要漏了,否则路径不完整,会出现找不到图片的错误)

data/ilsvrc12/train.rec:是指要在data/ilsvrc12下生成train.rec文件

resize=227:是指要将原始图片调整为227*227大小

该指令执行结果如下:



因为图片数量比较大,所以这个执行过程比较长,当时跑了12多小时,这个需要耐心等待,可以使用nohup命令让它在后台执行

执行完后查看data/ilsvrc12这个文件夹,ls data/ilsvrc12,可以发现该文件夹下多了个train.rec文件,大小为20多G

这样train.rec文件就生成了,总体流程是先利用tools/make_list.py生成train.lst文件,然后再利用bin/im2rec可执行程序和train.lst文件生成train.rec文件,就大功告成。

3、制作ilsvrc12测试集数据

与制作训练集数据的流程类似,总体流程是先利用tools/make_list.py生成val.lst文件,然后再利用bin/im2rec可执行程序和val.lst文件生成val.rec文件。

下面直接给出执行的指令和运行结果:

(1)制作val.lst

python tools/make_list.py /home/share/data/dirilsvrc2012val data/ilsvrc12val --recursive=True
查看val.lst的前二十条内容,因为是测试集,所以图片没有对应的标签,即都为0



(2)制作val.rec

bin/im2rec data/ilsvrc12/val.lst /home/share/data/dirilsvrc2012val/ data/ilsvrc12/val.rec resize=227结果如下:





此时data/ilsvrc12文件夹下增加了val.rec文件,ls data/ilsvrc12

至此,训练集和测试集的数据都弄好了,此时data/ilsvrc12下有四个文件train.lst、train.rec、val.lst、val.rec。



二、利用ilsvrc12数据集训练inception-bn网络

具体命令可以查看example/image-classification/README.md文件:

python example/image-classification/train_imagenet.py --batch-size 144 --lr 0.05 --lr-factor .94 --gpus 0,1 --num-epoch 60 --network inception-bn --data-dir data/ilsvrc12/
其中--gpus 0,1参数是指本次使用两个GPU进行训练,因为我这个服务器上有两台k40显卡,所以可以使用两个gpu,如果大家只要一个gpu的话,则参数改为--gpus 0,根据自己的服务器情况而定;--network inception-bn是指此次使用inception-bn网络进行训练,--data-dir data/ilsvrc12/是指训练集和数据集的存放路径,也就是在第一个步骤中生成的数据。执行结果如下:



这个训练过程也是比较长,需要大家耐心等待。

教程至此结束,大家可以试着也做做ilsvrc12的数据集并训练inception-bn网络,当然也可以制作其他数据集和训练其他网络,最近在着手研究MXNet,欢迎大家共同交流。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息