主要分两步:生成 .lst 和 生成 .rec
1. 生成 .lst
需要准备的就是你的图像。 假设图像数据放在 /home/image
文件夹下,一共有10个类别,那么在 /home/image 文件夹下应该有 10个 子文件夹,每个子文件夹放属于这个类的图像文件,可以用英文名命名这些子文件夹来表达类别,这个无所谓,即便用1到10的数字来分别命名这10个子文件夹也没什么。另外假设要将生成的 .lst
文件放在 /home/lst 文件下,mxnet的项目路径是 ~/incubator-mxnet
, 那么运行下面的命令就可以生成 .lst
文件:
python ~/mxnet/tools/im2rec.py --list --recursive --train-ratio 0.9 /home/lst/data /home/image
--list选项必须要,说明是要生成.lst文件
--recursive选项必须要,表示要将所有图像路径写进成.lst 文件
--train-ratio 表示将train 和 val 以多少比例划分,默认为1,表示都是train的数据
这样在 /home/lst 文件夹下就会生成 data_train.lst 和 data_val.lst 两个文件;
.lst 文件样例:第一列是 index,第二列是 label, 第三列是图像路径。
【注】当然有时候可能图像数据不是按照一个类别放在一个文件夹这种方式,那么就要考虑修改这个脚本来生成相同格式的 .lst 文件才能用于后续生成 .rec 文件。
2. 生成 .rec
需要准备的是第一步生成的 .lst 文件和你的图像
假设将要生成的 .rec 文件放在 .lst 文件相同的 /home/lst 文件夹下 (一般都会这样操作),那么运行下面的命令就可以生成 .rec 文件:
python ~/incubator-mxnet/tools/im2rec.py --num-thread 4 /home/lst /home/image
这里倒数第二个参数:/home/lst是你的.lst文件所放的路径,可以不用指明.lst文件名称,因为代码会自动搜索/home/lst文件夹下所有以.lst结尾的文件。最后一个参数:/home/image 是你的图像所放的路径。--num-thread 4 这个参数是表示用4个线程来执行,当你数据量较大的时候,生成 .rec 的过程会比较慢,这样可以加速
运行成功后,在 /home/rec 文件夹下就成成了 data_train.rec 和 data_val.rec 文件,然后就可以用 mxnet.io.ImageRecordlter 类来导入 .rec 文件了。
另外还会生成两个 .idx 文件,可忽略。