MXNet中im2rec将图片转换成二进制RecordIO格式

我们在前面的 计算机视觉之目标检测训练数据集(皮卡丘)《2》其中有提到这个二进制的RecordIO格式,使用的是MXNet自带的im2rec工具,源码在tools里面

import mxnet as mx
#D:\Anaconda3\envs\myd2l\lib\site-packages\mxnet\tools\
print(mx.__path__[0])

在这路径的下面有一个im2rec.py文件,根据自己的环境,前面目录有所区别。

生成.lst文件

lst文件类似一个清单文件,图片索引与位置信息,下面是最终完成的目录结构图:


将在myimgs目录下面生成一个my.lst文件
list参数是生成.lst文件,recursive参数可以递归下面的目录
python D:\Anaconda3\envs\myd2l\lib\site-packages\mxnet\tools\im2rec.py myimgs/my myimgs --list --recursive

将在myimgs目录下面分别生成my_train.lst和my_val.lst文件
train-ratio 0.8表示提取80%作为训练集,20%作为验证集,这里使用取整不是四舍五入。
python D:\Anaconda3\envs\myd2l\lib\site-packages\mxnet\tools\im2rec.py myimgs/my myimgs --list --recursive --train-ratio 0.8

t1 0
t1\t2 1

这里我是有两个目录,t1目录下面有一些图片, 还有一个t2的目录,t2目录也有一些图片,图片是网上下载的一些水果图片。

lst文件的内容如下,索引-->标签类别-->图片所在位置 

生成rec文件

将在myimgs目录下面分别生成my_train.rec,my_train.idx和my_val.rec,my_val.idx文件
python D:\Anaconda3\envs\myd2l\lib\site-packages\mxnet\tools\im2rec.py myimgs/my myimgs
也可以使用多线程,指定参数num-thread
python D:\Anaconda3\envs\myd2l\lib\site-packages\mxnet\tools\im2rec.py myimgs/my myimgs --num-thread 4

读取rec文件

将生成的rec和idx文件一起结合起来解析,就可以得到这些图片的数据,然后我们现实图像来看下:

import matplotlib.pyplot as plt
import mxnet as mx
import numpy as np

data_iter = mx.image.ImageIter(batch_size=8, data_shape=(3, 600, 600),
                               path_imgrec="./myimgs/my_train.rec", path_imgidx="./myimgs/my_train.idx")
data_iter.reset()
batch = data_iter.next()
data = batch.data[0]
label = batch.label[0]
print(label)#[0. 0. 0. 1. 0. 0. 0. 1.]
for i in range(8):
    plt.subplot(2, 4, i+1)
    plt.title(i+1)
    plt.imshow((data[i].asnumpy()/255).transpose((1, 2, 0)))#通道维放最后
    #plt.imshow(data[i].asnumpy().astype(np.uint8).transpose((1, 2, 0)))
    if i%4:plt.yticks([])
plt.show()

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寅恪光潜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值