linux下mxnet的gpu版本编译和基于ssd的模型训练
1.写在前面
最近做了一些基于mxnet框架和ssd算法做图像识别的工作,从编译到最终训练,走了不少弯路,写在这里,希望对学习这方面知识的盆友有所帮助。
2. mxnet的gpu版本编译
下载mxnet并编译,我当时这一步做了好久,因为要安装mxnet的电脑没联网……
3.ssd算法训练实现
参考SSD算法的MXNet实现,这篇博客基本是翻译的github上ssd的算法介绍与实现。
其中第三步讲了基于pascal VOC数据集进行训练的步骤。
如果在执行生成.lst
和.rec
文件时运行下面的代码
sh prepare_pascal.sh
报错提示为:找不到xx指令等等,可以以文本形式打开prepare_pascal.sh,发现其作用是获得当前绝对路径然后设置.lst
和.rec
的目标路径,因此可以在prepare_pascal.sh的文件夹下,终端输入
python prepare_dataset.py --dataset pascal --year 2007 --set trainval --target $ 到ssd/data的路径/train.lst
第二行同理。如果没有报错,忽略这一段。
我们如果希望自己训练模型,需要做以下几个工作:
1.理解train.py中的参数意义,请阅读AI之路-SSD算法代码介绍(一):训练参数配置 ,这篇博主对AI里一些常用算法和框架做了深入的研究,非常有参考价值,墙推。
2.将VOCdevkit
文件夹下面的VOC数据集替换为自己的数据集,文件目录保持不动,VOC2007数据集制作教程,这篇教程里末尾代码import os好像有点问题,删除之后重新输入一遍应该就可以了。
3.生成.lst
和.rec
二进制文件,然后将ssd/dataset/names/pascal_voc.names
中的名称替换为自己训练图像数据中的目标名称,这个名称与VOC2007/Annotations
中.xml文件里涉及到的所有object中的name是一致的。
4.修改train.py中的部分参数,如–class-names,也改为和上面name一样的;–num-class;–prefix,修改'model'
为自己想保存的路径;其中的gpus根据自己的情况修改;–batch-size的default值可以稍微小一些,防止运行train.py之后报错out of memory,即内存不足。注意修改为8的整数倍。
最后再执行python train.py就可以开开心心训练啦~