mxnet用于图像分类tool

版权声明: https://blog.csdn.net/qq_35606924/article/details/80071526

mxnet是一个相对简洁的框架,下面我们将介绍如何用mxnet来实现图像分类。其实关于图像分类的博文有很多了,这一篇算是自己的一个记录吧,以防以后会再用到,可以方便的捡起来:)

我自己构建了一个mxnet的分类toolkit,可以方便的进行数据集的建立,几乎支持一键训练。
可以直接clone代码进行玩耍
https://github.com/610265158/My_Mxnet_toolkit.git

首先将你要分类的数据放到./data/ 下, 每个类别放在一个文件夹下面,例如
./data/dog 和./data/cat
我们以kaggle猫狗大战的数据来做个小实验,数据可以从这里下载
https://pan.baidu.com/s/1tZ6ZIHMUpwXrh8pNMU2pKA
解压到当前目录
然后运行

python get_list.py 

会生成train.lst和val.lst, 比例是可以控制的,可以进入get_list.py 很简单一看便知。

    `输出 dog with label 0
          cat with label 1`

一般做分类相关的开发工作用finetune比较多,去mxnet model zoo有很多imagenet的模型可以用,下载resnet50到model目录,也就是.json
和.params。

然后运行 python train.py –finetune 1 –num_class 2 –batch_size 50 –data_shape 224
就开始训练了,默认是选择mobilenet 来训练

至于数据集增强,以及参数的调试可以进入代码进行更改。

Fintune收敛的速度很快。

猫狗分类也比较简单,很容易99%,

2018-04-26 11:56:04,686 Epoch[2] Batch [170] Speed: 163.59 samples/sec accuracy=0.992500
2018-04-26 11:56:07,126 Epoch[2] Batch [175] Speed: 163.95 samples/sec accuracy=0.990000
2018-04-26 11:56:09,099 Update[681]: Change learning rate to 5.07060e-06
2018-04-26 11:56:09,584 Epoch[2] Batch [180] Speed: 162.75 samples/sec accuracy=0.990000
2018-04-26 11:56:12,037 Epoch[2] Batch [185] Speed: 163.09 samples/sec accuracy=0.992500
2018-04-26 11:56:14,510 Epoch[2] Batch [190] Speed: 161.74 samples/sec accuracy=0.992500
2018-04-26 11:56:17,011 Epoch[2] Batch [195] Speed: 159.92 samples/sec accuracy=0.977500
2018-04-26 11:56:19,019 Update[701]: Change learning rate to 4.05648e-06
2018-04-26 11:56:19,524 Epoch[2] Batch [200] Speed: 159.17 samples/sec accuracy=0.990000
2018-04-26 11:56:22,013 Epoch[2] Batch [205] Speed: 160.71 samples/sec accuracy=0.990000
2018-04-26 11:56:24,461 Epoch[2] Batch [210] Speed: 163.41 samples/sec accuracy=0.992500
2018-04-26 11:56:26,984 Epoch[2] Batch [215] Speed: 158.58 samples/sec accuracy=0.990000
2018-04-26 11:56:28,962 Update[721]: Change learning rate to 3.24519e-06
2018-04-26 11:56:29,463 Epoch[2] Batch [220] Speed: 161.37 samples/sec accuracy=0.985000
2018-04-26 11:56:31,915 Epoch[2] Batch [225] Speed: 163.16 samples/sec accuracy=0.995000
2018-04-26 11:56:34,364 Epoch[2] Batch [230] Speed: 163.29 samples/sec accuracy=0.987500
2018-04-26 11:56:36,842 Epoch[2] Batch [235] Speed: 161.47 samples/sec accuracy=0.995000
2018-04-26 11:56:38,801 Update[741]: Change learning rate to 2.59615e-06
2018-04-26 11:56:39,319 Epoch[2] Batch [240] Speed: 161.50 samples/sec accuracy=0.997500
2018-04-26 11:56:41,829 Epoch[2] Batch [245] Speed: 159.36 samples/sec accuracy=0.980000
2018-04-26 11:56:43,367 Epoch[2] Train-accuracy=0.984375
2018-04-26 11:56:43,367 Epoch[2] Time cost=123.394
2018-04-26 11:56:43,552 Saved checkpoint to “./trained_models/your_model-0003.params”
2018-04-26 11:57:01,047 Epoch[2] Validation-accuracy=0.989087

然后可以用训练好的模型进行测试:

img 对应你的图片
epoch对应你想用第几个epoch的模型,训练好的模型在./trained_models

python demo.py --img /your/img.jpg --epoch 2

结果
probability=0.992205, class=0
probability=0.007795, class=1

因为前面label的时候dog 是0,所以这个图片应该是个狗子
输出 dog with label 0
cat with label 1

当然也支持从其他模型训练,可以从mxnet model zoo下载与训练模型,更改一下参数即可。

可以对finetune的参数,比如dropout,denselayer等进行调节。

猜你喜欢

转载自blog.csdn.net/qq_35606924/article/details/80071526
今日推荐