MXNet图像数据打包 im2rec.py

     记录一下使用MXNet进行图像数据打包时踩过的坑。我使用的MXNet是最新的1.2.0版本,而参考资料中给的基本都是老版本的打包方式,所以过程中出了很多错误,无奈只能看im2rec.py源码,最终完美解决。

    MXNet提供了图像数据打包格式RecordIO,以及专用迭代器ImageRecordIter,它可以快速异步载入打包后的图像,还可以自动完成裁剪、缩放、图像增强等常见操作。

    接下来说一下图像打包的具体步骤:

    (1)将图像按标签分类放到各自的文件夹中;

     例如,在train文件夹下新建10个子文件夹,分别命名为0-9,里边存放的是属于各自类别的图片。

    

    (2)下载MXNet的GitHub项目,地址为https://github.com/dmlc/mxnet

    (3)在命令行运行tools文件夹中的im2rec.py文件,生成图像列表lst文件,具体如下:

在与train同级的文件夹中打开命令行,执行 python  F:\mxnet\incubator-mxnet-master\tools\im2rec.py  --list  --recursive  train  F:\........\train

注意:

    踩过的坑主要在这里,参考资料中写的是--list=1 --recursive=1,这可能是老版本的写法,新版本这样写就会出错。源码中list、recursive默认的是False,此处只需指明--list  --recursive即可。

    (4)从列表生成rec文件和idx文件

在与train同级的文件夹中打开命令行,执行 python F:\mxnet\incubator-mxnet-master\tools\im2rec.py --pass-through train.lst F:
\.........\train

注意:这里也有几个坑

  1. 同样的--pass-through参数无需再次赋值,只需指明即可;
  2. train.list一定要写上后缀,不然会报错;
  3. 执行这条指令后可能会抱如下错误:TypeError: a bytes-like object is required, not 'str'。解决办法:在源码中将line = [i.strip() for i in line.strip().split('\t')] 修改为line = [i.strip() for i in str(line.strip(),encoding='utf-8').split('\t')]。源码中第103行(1.2.0版本)。 

    (5)至此,lst、rec、idx文件已全部生成 ,即可在ImageRecordIter中载入使用。

注:部分内容参考《深度卷积网络》

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值