Mxnet学习系列2----如何制作image.rec(新版本)

看过我Mxnet学习系列1的同学,肯定有些疑惑,这个问题已经讲过了怎么还讲?对于这个问题我也很无奈。上篇博客已经是很久以前写的了,Mxnet的更新还是很快的,没办法只能在写一篇博客。

先说一下新版本(2016/10/26)较老版本的变化在于将老版本中的make_list.py和im2rec.py两个文件的功能合并到im2rec.py一个文件中去了,使用参数--list=True(make_list),默认是--list=False(im2rec.py).

OK!下面简单的说一下如何使用im2rec.py制作自己的数据。使用im2rec.py建议先看一下Mxnet学习系列0。

1、下载lfw,解压

 http://pan.baidu.com/s/1eRZomxO

2、制作image_list,让这个折腾里一天,原来是im2rec.py的源码错了,我已经修改,可从此处下载:https://github.com/sunshineInmoon/mxnet/tree/master/tools

定位im2rec.py路径,我的在E:\Mxnet\mxnet\tools,

执行命令python im2rec.py --list=True --exts .jpg --exts .jpeg(也可以是--exts=[.jpg,.jpeg]或者--exts=.jpg --exts=.jpeg) 

--recursive=True E:\lfw\imge E:\lfw\    

执行后屏幕会输出:

 Mxnet学习系列2----如何制作image.rec(新版本)_第1张图片

我们会在E:\lfw文件夹下发现多了三个文件imge_train.lst, imge_test.lst, imge_val.lst.这三个文件分别代表训练数据,测试数据,验证数据。

通过学习源码,了解了几个特别参数的作用和原理,这里给大家讲一讲:

Chunk----是把数据分成几块,每一个数据块都能单独生成各自的 train.lst,test.lst,

        Val.lst三个文件

    N = len(image_list)
    chunk_size = (N + args.chunks - 1) / args.chunks #计算每个块的大小
    for i in xrange(args.chunks):#对于每一个块分别计算
        chunk = image_list[i * chunk_size:(i + 1) * chunk_size]
        if args.chunks > 1:
            str_chunk = '_%d' % i
        else:
            str_chunk = ''
        sep = int(chunk_size * args.train_ratio)
        sep_test = int(chunk_size * args.test_ratio)
        write_list(args.prefix + str_chunk + '_test.lst', chunk[:sep_test])
        write_list(args.prefix + str_chunk + '_train.lst', chunk[sep_test:sep_test + sep])
        write_list(args.prefix + str_chunk + '_val.lst', chunk[sep_test + sep:])

通过上面的源码我们可以看到每一个块的数据按照顺序分层testtrainval三部分比如1,2,3,4,5,6,7,8,9为数据,test_ratio=0.1,train_ratio=0.7,test=[1],

train=[2,3,4,5,6,7,8],val=[9];

 

3、image_list转换成image.rec

真是一波未平一波又起,这一步又出错了。感觉原来挺顺利的,不知为什么新版本这么多问题,还好已经解决了。

如果我们直接使用im2rec.py windows会报错,如下:

 Mxnet学习系列2----如何制作image.rec(新版本)_第2张图片

网上的朋友说是multiprocessing不兼容,我已经改成im2rec_Windows.py,OK!

也可以将im2rec.cc 编译成im2rec.exe,也能成功。在此强烈建议使用im2rec.exe,因为im2rec_Windows.py,不保证百分之百正确,有待验证。需要注意的是im2rec_Windows.py im2rec.exe的参数格式不同

Im2rec.exe E:\lfw\image_train.lst E:\lfw image.rec

Im2rec_Windows.py E:\lfw\image E:\lfw 


你可能感兴趣的:(Mxnet学习系列)