fcn为全卷积网络,对于算法的介绍可以找到很多资料,本篇在mxnet框架下用自己的数据,或者说制作自己的数据来进行模型的训练和测试。
假设已经安装好有关的Mxnet 的环境,其中在Mxnet安装包下的`example/fcn-xs`下找到相关的文件。这里也假设你已经跑过fcn-xs下的`image_segmentaion.py`。在用fcn进行训练的时候比较以后的是训练的数据是什么,有什么格式要求。
下面从两个方面来介绍整个训练过程:
- 数据的制作
模型的训练和测试
1.数据集制作
fcn训练需要的数据为:
JPEGImages,SegmentationClass,train.lst,val.lst
如果不熟悉这个文件可以先参考mxnet下的例子下载voc2012数据集,然后替换相应文件。
数据集制作工具:labelme
#ubuntu install
$ sudo apt-get install python-qt4 pyqt4-dev-tools
$ sudo pip install labelme
#打开
$ labelme imageName
标记完成后会生产json格式的数据
还需要转换才能生成最终需要的图片
$ labelme_json_to_dataset imageName.json
最后把labe_viz.png
放到SegmentationClass
文件夹中。接着就是根据图片来生成train.lst
和val.lst
文件,然后替换掉VOC2012中的文件。
2. 模型训练和测试
#train example/fcn-xs
./run_fcnxs.sh
python image_segmentaion.py
可能遇到的问题:
1.运行 python image_segmentaion.py 出现以下问题,可以把ctx =mx.gpu(0) 改为 ctx=mx.cpu(0)
#参考问题:https://github.com/dmlc/mxnet/issues/5124
Traceback (most recent call last):
File "image_segmentaion.py", line 61, in
main()
File "image_segmentaion.py", line 52, in main
exector = fcnxs.bind(ctx, fcnxs_args ,args_grad=None, grad_req="null", aux_states=fcnxs_args)
File "/home/manager/mxnet/python/mxnet/symbol.py", line 926, in bind
ctypes.byref(handle)))
File "/home/manager/mxnet/python/mxnet/base.py", line 75, in check_call
raise MXNetError(py_str(_LIB.MXGetLastError()))
mxnet.base.MXNetError: [21:44:32] src/executor/graph_executor.cc:240: Check failed: x.ctx() ==default_ctx All arguments must be in global context unless group2ctx is specified
2.图片不需要太大不然程序也会报错
参考文献:
[1] https://github.com/dmlc/mxnet/tree/master/example/fcn-xs
[2] https://github.com/wkentaro/labelme
附:282617340