利用Mxnet自带的工具,进行数据转化,读取图片文件

一、MXNet不是直接处理原生数据比如图片之类的,而是处理的自定义的一种文件格式rec。而rec格式的文件由依赖于一个描述原生数据的列表文件格式lst。

数据集:caltech256,其中包含两个文件,一个test,一个train,每个文件里面又有很多个代表类标的文件,各个文件里存放了每一类的图片。

 利用Mxnet自带的工具,进行数据转化,读取图片文件_第1张图片

二.从原生数据生成lst文件

这个图像文件列表的格式如下:

integer_image_index \t label_index \t path_to_image

 利用Mxnet自带的工具,进行数据转化,读取图片文件_第2张图片

mxnet/tools/路径下运行make_list.py

python make_list.py /root/DATA/caltech256x256-256/train/ /root/DATA/train --recursive=True

第一个参数是图片所在的根目录
第二个参数是生成lst文件的前缀,这里我们可以把路径加进去从而保证test.lst是生成在~/data/下的。 

第三个参数代表每读取一个目录,增加一个类标,因为/root/DATA/caltech256x256-256/train/文件下有很多类的文件,每个文件里面存放每类的图片

利用Mxnet自带的工具,进行数据转化,读取图片文件_第3张图片

三.从lst文件生成rec

在路径mxnet/bin/下有个文件:im2rec

直接在命令行使用这个文件就行。具体使用方法可以查看源码,这里我只举个最简单的栗子:

./im2rec /root/DATA/train.lst /root/DATA/caltech256x256-256/train/ /root/DATA/train.rec

第一个参数指明lst文件 
第二个参数指明图片根目录,这样才能找到图片 
第三个参数指明生成的rec文件

利用Mxnet自带的工具,进行数据转化,读取图片文件_第4张图片

四.创建Data Iterator

参考mxnet/example/image-classification里面train_cifar10.py或者train_imagenet.py例子进行修改即可。

# data

def get_iterator(args, kv):

    data_shape = (3, 256, 256)

    train = mx.io.ImageRecordIter(

        path_imgrec = args.data_dir + "train.rec",

        mean_r      = 123.68,

        mean_g      = 116.779,

        mean_b      = 103.939,

        data_shape  = data_shape,

        batch_size  = args.batch_size,

        rand_crop   = True,

        rand_mirror = True,

        num_parts   = kv.num_workers,

        part_index  = kv.rank)

    val = mx.io.ImageRecordIter(

        path_imgrec = args.data_dir + "test.rec",

        mean_r      = 123.68,

        mean_g      = 116.779,

        mean_b      = 103.939,

        rand_crop   = False,

        rand_mirror = False,

        data_shape  = data_shape,

        batch_size  = args.batch_size,

        num_parts   = kv.num_workers,

        part_index  = kv.rank)

    return (train, val)

 

你可能感兴趣的:(大数据,linux,深度学习,Mxnet)