深度学习- 将图片数据转成.rec文件

深度学习- 将图片数据转成.rec文件

1,前提

  • 1 操作系统: windows8.1
  • 2 开发环境:anconda + spyder + mxnet很方便,很多东西都可以直接像linux下一个命令搭建好, 具体参见我前面的相同系列blog

2 , 说明

MXNet,不是直接处理原生数据比如图片之类的,而是处理的自定义的一种文件格式rec。而rec格式的文件由依赖于一个描述原生数据的列表文件格式lst。我们想训练一个图片相关网络时候,需要将图片数据集转成.rec 文件。我没有按照网上的教程来,加上现在 make_list文件已经没有了,全部集成在了 mxnet/tools/im2rec.py下。如果嫌弃,可以看源码。
我在直接用im2rec.py转图片为rec遇到了很多错误,不知道是windows系统不一样导致还是什么,所以没有成功,也没有找到相应的方法。
我还是按照以前的方法,用一个py文件生成lst,再用im2rec.py生成rec文件。

3,具体操作

(1)生成lst文件。

我自己定义了一个文件 im2lst.py 先看源码

# -*- coding: utf-8 -*-
"""
Created on Mon Jul 24 15:27:45 2017

@author: user
"""

import os
import numpy as np
import random

train_loc = r"datas\train" #图片文件(jpg png)的相对 im2lst.py 位置
# 具体你的图片放哪就把路径改一改

def make_dogvcat_data(data_loc, set_name):

    # FORMAT ::= int_image_index \t label_index \t path_to_image \n

    image_files = os.listdir(data_loc)
    random.seed(100)
    random.shuffle(image_files)

    n_image = len(image_files)
    n_train = int(n_image * 0.8)
    n_test = n_image - n_train

    # train
    fout = open(os.path.join(data_loc+'\\..', set_name+'_train.lst'), 'w')

    DOG = 0
    CAT = 1

    for i in range(n_train):
        filename = image_files[i]
        label = DOG if 'dog' in filename else CAT
        fout.write('%d\t%d\t%s\n'%(i, label, filename))

    fout.close()

    # test
    fout = open(os.path.join(data_loc+'\\..', set_name+'_test.lst'), 'w')

    for i in range(n_test):
        filename = image_files[n_train+i]
        label = DOG if 'dog' in filename else CAT
        fout.write('%d\t%d\t%s\n'%(i, label, filename))

    fout.close()

make_dogvcat_data(train_loc, "cats_vs_dogs") #生成的文件名字,

运行上面这个文件后,我们可以在datas/目录下找到两个文件cats_vs_dogs_test_train.lst 与cats_vs_dogs_test_val.lst 与train文件夹在同一个子目录

(2)生成rec文件

打开我们的终端,我是打开anaconda
这里写图片描述

点三角形 open terminal
然后 cd 到我们项目的目录下面,我的位置是E:\deep learning\cnn for dogs VS cats 所以我cd到这个位置 我的mxnet tools也放在这里的 ,当然还有上面说的datas
现在可以用命令行运行tools下面的im2rec.py文件生成 rec文件

python mxnet-master/tools/im2rec.py --num tread 4 pass-troungh 1 cats_vs_dogs datas/train

参数解释:
cats_vs_dogs 是我们上面生成的lst文件名字前缀, datas/train 是相对目录,train文件里是图片数据集 cats_vs_dogs 与train在同一个子目录。
其他参数的意义 可以参考这篇blog连接 感谢博主,侵删。
等一段时间后,我们可以在cd的根目录下看到rec文件
这里写图片描述

ok 小白我终于把数据乱搞搞定了,可以开始做我们的猫狗识别了

如果有错误,欢迎指正,比丁丁

猜你喜欢

转载自blog.csdn.net/Lucas66666/article/details/76079471