mxnet一键式训练自己的数据 - imistyrain/mxnet-oneclick: use mxnet to train your own data with just oneclick

标签: | 发表时间:2019-03-15 21:07 | 作者:
出处:https://github.com

mxnet一键式训练自己的数据


mxnet应用到工业项目大概包括收集数据、转换数据、定义模型、训练模型和评估模型等几个步骤,这里以常见的车牌字符识别为例讲解怎么用mxnet一键式训练自己的数据

structures

1.mxnet安装

现在已经非常简单,装好python和pip后一句代码就能搞定:

    pip install mxnet

如果需要从源码编译安装,可以参照 官网和[mxnet VS2015编译.pdf](mxnet VS2015编译.pdf)

2.数据准备

chars文件夹是从车牌识别的开源项目 easypr中提取的数字0和1的字符样本,为了简单起见,我只提取了2类样本,其实一共有65类之多(字母+数字+汉字),不过只需要把图片文件拷贝过去就好,后面的操作基本一致。

数据是参考ImageNet的格式组织的,也就是所有的图片按照类别分组,相同类别的放入同一文件夹下,最后这些不同类别的文件夹放到一个文件夹(示例为platechars,是开源项目 EasyPR中车牌字符的训练样本)。

接下来需要转换为mxnet所需的格式,也就是rec格式,mxnet自带的im2rec.py就是完成此功能的,此外,还需要生成训练样本的字典文件synset.txt,也就是有哪些类别。

完成以上这些功能的代码被封装成了preprocess.bat:

echo"Generating lst"python preprocess/im2rec.py platechars/chars platechars--recursive=True--list=Trueecho"Generating rec"python preprocess/im2rec.py platechars/chars platechars
	echo"Generating synsetwords"python preprocess/generatesynsetwords.py--datadir=platechars

其中参数的含义是:数据存放的文件夹、所生成数据列表的文件名前缀(后缀默认是lst)、是否递归处理(也就是进入子文件夹),是否生成list文件。

当然你也可以下载已经 转换好的文件密码:9qq8,约15M.

3.定义模型

需要定义网络的结构,训练时batch大小、迭代次数和学习率等和训练相关的参数。 示例采用的是lenet的结构,

    def get_lenet():
    LeCun, Yann, Leon Bottou, Yoshua Bengio, and Patrick
    Haffner. "Gradient-based learning applied to document recognition."
    Proceedings of the IEEE (1998)
    data = mx.symbol.Variable('data')
    # first conv
    conv1 = mx.symbol.Convolution(data=data, kernel=(5,5), num_filter=20)
    tanh1 = mx.symbol.Activation(data=conv1, act_type="tanh")
    pool1 = mx.symbol.Pooling(data=tanh1, pool_type="max",
                              kernel=(2,2), stride=(2,2))
    # second conv
    conv2 = mx.symbol.Convolution(data=pool1, kernel=(5,5), num_filter=50)
    tanh2 = mx.symbol.Activation(data=conv2, act_type="tanh")
    pool2 = mx.symbol.Pooling(data=tanh2, pool_type="max",
                              kernel=(2,2), stride=(2,2))
    # first fullc
    flatten = mx.symbol.Flatten(data=pool2)
    fc1 = mx.symbol.FullyConnected(data=flatten, num_hidden=500)
    tanh3 = mx.symbol.Activation(data=fc1, act_type="tanh")
    # second fullc
    fc2 = mx.symbol.FullyConnected(data=tanh3, num_hidden=34)
    # loss
    lenet = mx.symbol.SoftmaxOutput(data=fc2, name='softmax')
    return lenet

4.训练模型

定义训练相关的参数,例如batch大小、迭代次数以及学习率和使用的GPU等。

    def main():
    batch_size=1000
    num_epoch = 200
    num_gpus = 1
    logging.basicConfig(level=logging.DEBUG)
    gpus = [mx.gpu(i) for i in range(num_gpus)]
    lenet=get_lenet()
    model = mx.model.FeedForward(ctx=gpus, symbol=lenet, num_epoch=num_epoch,
                                     learning_rate=0.01, momentum=0.9, wd=0.0001,
                                     initializer=mx.init.Uniform(0.07))
    train_dataiter = mx.io.ImageRecordIter(
            path_imgrec=datadir+"/chars_train.rec",
            mean_img=datadir+"/mean.bin",
            rand_crop=True,
            rand_mirror=True,
            data_shape=(3,20,20),
            batch_size=batch_size,
            preprocess_threads=1)
    test_dataiter = mx.io.ImageRecordIter(
            path_imgrec=datadir+"/chars_val.rec",
            mean_img=datadir+"/mean.bin",
            rand_crop=False,
            rand_mirror=False,
            data_shape=(3,20,20),
            batch_size=batch_size,
            preprocess_threads=1)
    model.fit(X=train_dataiter, eval_data=test_dataiter,
              batch_end_callback=mx.callback.Speedometer(100))
    model.save(datadir+'/lenetweights',num_epoch)

前述两部分的代码可通过train.bat进行训练,生成的模型文件存于platachars/lenetweights-0200.params,其中200是迭代的次数。

5.评估模型

实际应用中需根据训练的结果对训练样本的分类结果进行调整以提升分类精度,因此找到错误分类的样本就显得尤为重要。

evaluation.bat会读取训练样本所在的文件夹,遍历输出分类结果,并把所有分错的样本保存在error下相应的文件夹下,每个错误样本的命名由三部分组成: 原始文件名 + "_" + 真值 + "_" + 预 测值。

例如evaluation/error下1的文件夹中,397_0_1.jpg代表其原始文件为1下的397.jpg,本来应该是0,训练模型错误的将其分类为1。

以上所有步骤均可自动化实现,因此封装了oneclick.bat,可一键式预处理、训练和评估。

6.工程化应用

charstest.py里面已经包含了用于预测输出的代码,可以提取需要的部分加入到自己的工程中去。

7.FAQ

Win7编译c++生成的测试例子不能运行,在win10下能正常运行,原因待查。

相关

相关 [mxnet 训练 数据] 推荐:

mxnet一键式训练自己的数据 - imistyrain/mxnet-oneclick: use mxnet to train your own data with just oneclick

- -
mxnet一键式训练自己的数据. mxnet应用到工业项目大概包括收集数据、转换数据、定义模型、训练模型和评估模型等几个步骤,这里以常见的车牌字符识别为例讲解怎么用mxnet一键式训练自己的数据. 现在已经非常简单,装好python和pip后一句代码就能搞定:. 如果需要从源码编译安装,可以参照. 官网和[mxnet VS2015编译.pdf](mxnet VS2015编译.pdf).

使用Mxnet进行图像深度学习训练工具 InsightFace - 使用篇, 如何一键刷分LFW 99.80%, MegaFace 98%. - 知乎

- -
开头先把论文和开源项目地址放一下:. InsightFace库是对我们上述论文中提出算法的开源实现. 其中不仅仅包括我们自己的算法, 也包括其他常见的人脸loss, 比如Softmax, SphereFace, AMSoftmax, CosFace, Triplet Loss等等. 除了代码实现以外, 我们还提供了打包对齐好的人脸训练数据供下载, 免除了一大堆数据准备的工作.

TensorFlow、MXNet、PaddlePaddle 三个开源库对比

- - IT瘾-dev
【转载请注明出处】 chenrudan.github.io. 从深度学习开始流行,到深度学习框架的迭代,到各类实际应用的出现,不过短短几年时间. 其实发展到现在,各个框架对自己的定位都不相同,硬要说哪个框架最好没什么必要,结合自身需求找到合适的用就够了(实验室的服务器不太方便拿来折腾,本文就不比较运算速度了,可以参考[4][5]).

Leetcode 编程训练

- - 酷 壳 - CoolShell.cn
Leetcode这个网站上的题都是一些经典的公司用来面试应聘者的面试题,很多人通过刷这些题来应聘一些喜欢面试算法的公司,比如:Google、微软、Facebook、Amazon之类的这些公司,基本上是应试教育的功利主义. 我做这些题目的不是为了要去应聘这些公司,而是为了锻炼一下自己的算法和编程能力.

王家林“云计算分布式大数据Hadoop实战高手之路---从零开始”的第一讲Hadoop图文训练课程:10分钟理解云计算分布式大数据处理框架Hadoop

- - CSDN博客云计算推荐文章
                                                                                                                                                     .

我的听力训练之路

- moz - 学习力就是竞争力
舍得上初中那会,基本谈不上什么听力训练,最多最多就是英语老师拿了个录音机让大家做听写,听的通常是单词.就算如此,舍得初中四年的英语听力训练加在一起不会超过两个小时.. 初中毕业后舍得上的是技校,学的是热处理专业,根本就没有英语这一科,哈哈.技校毕业就进了工厂,玩了三年后才觉得该学学英语了.于是买了个爱华录音机,买了一套新概念英语的磁带,就开始听起来了.那时候年轻贪玩,加上基础差,没有坚持下来..

训练免疫系统杀死癌症

- 微笑!?~ - Solidot
一年前,当化疗对白血病也无效时,65岁的William Ludwig签署协议参与了宾夕法尼亚大学的一项大胆的实验. 医生抽取出10亿T细胞——对抗病毒和肿瘤的白细胞——为T细胞加入能编程细胞去攻击癌细胞的新基因,然后这些修改过的细胞被重新滴入Ludwig的静脉. 他浑身发冷颤,然后体温上升,血压下降,最后他被医生送入重病特别护理室,向其家人发出去世警告.

胜利还得靠“精神训练法”

- Clover - 果壳网 guokr.com - 果壳网
机会常常只有一次,只许成功不许失败. 你竭尽全力奔向目标,努力准备每一个细节,可是当机会来了,却发现准备有余,熟练不足. 明明已经写在笔记本上的要点,发言时一紧张又忘了说. 怎样才能把握住这些难得的表现机会,让自己熟练发挥呢. 对此,运动心理学提倡使用“精神训练法”(mental practice),简单说就是在脑子里把事情过一遍.

38种摄影基本功训练

- freefish - 佳人
摄影,除了拥有好装备,良好的运气,超凡的耐心之外,更有有一手过硬的摄影技巧,分享摄影基本功训练,文末提供摄影基本功训练全文阅读. 被摄体:一般风景、花卉、城市建筑等冲击力较强的景物. 建 议:首先使用广角镜头:24MM—35MM拍摄,光圈:F11—16,光圈优先AE模式. 要 求:只把焦点对在主要被摄体上,浅景深.

怎样训练写故事的能力?

- - 知乎每日精选
介是个好问题,又到了半夜写知乎的时间啦~. 我的以下答案,都是基于如何训练 戏剧性故事创作,用 戏剧创作的方法和经验来谈一谈故事创作,希望可以给题主一些帮助. 首先要说一说,戏剧性,啥叫戏剧性呢. 抛开资料论述,我个人最喜欢的一个解读为——. 那为什么要强调故事创作的戏剧性呢. 因为戏剧性满足了人自身对故事的渴望和期待习惯.