FCIS算法的MXNet实现

来源:互联网 发布:java char 编辑:程序博客网 时间:2024/05/30 02:24

论文:Fully Convolutional Instance-aware Semantic Segmentation
github地址:https://github.com/msracver/FCIS

FCIS(Fully Convolutional Instance-aware Semantic Segmentation)算法是COCO2016分割的冠军,接下来是自己记录的跑该算法demo和训练模型的过程。

1、拉取项目

git clone https://github.com/msracver/FCIS

2、运行demo

2.1、在项目根目录下运行init.sh:

sh init.sh

这个命令主要是编译cython和生成一些文件夹

2.2、把该项目的operator_cxx文件夹copy到mxnet项目下:

cp -r ${YOUT_FCIS_ROOT}/fcis/operator_cxx/* ${YOUR_MXNET_ROOT}/src/operator/contrib/

注:如果你的电脑还没有mxnet项目,那么应先拉取mxnet项目(切换分支和submodule两步我是做了)再执行前面的cp操作:

git clone --recursive https://github.com/dmlc/mxnet.gitgit checkout 62ecb60git submodule update

2.3、重新编译mxnet
如果原来你的电脑就有编译好的mxnet,那么应该先清除编译,再重新编译:

make cleanmake -j $(nproc) USE_OPENCV=1 USE_BLAS=openblas USE_CUDA=1 USE_CUDA_PATH=/usr/local/cuda USE_CUDNN=1

如果原来你的电脑连mxnet项目都没有,那么应该先拉取mxnet项目,再进行前面的2.2步骤,最后编译mxnet:

git clone --recursive https://github.com/dmlc/mxnet.gitgit checkout 62ecb60git submodule updatecp -r ${YOUT_FCIS_ROOT}/fcis/operator_cxx/* ${YOUR_MXNET_ROOT}/src/operator/contrib/make -j $(nproc) USE_OPENCV=1 USE_BLAS=openblas USE_CUDA=1 USE_CUDA_PATH=/usr/local/cuda USE_CUDNN=1

2.4、下载训练好的模型
下载链接
使得在model文件夹下有这个文件:

./model/fcis_coco-0000.params

2.5、下载一些必要的python库,尤其最后这个hickle一定记得安装

pip install Cythonpip install opencv-python==3.2.0.6pip install easydict==1.6pip install hickle

2.5、运行demo

python ./fcis/demo.py

3、自己训练模型

3.1、下载数据
VOC 2012下载地址
解压后把img,inst,cls文件夹放在data文件夹下,如下所示:

.data/VOCdevkit/VOCSDS/img/.data/VOCdevkit/VOCSDS/inst/.data/VOCdevkit/VOCSDS/cls/

注:下载下来的.tgz压缩文件可以用 tar -xvf file.tgz 命令来解压缩

COCO数据集下载地址
解压后data文件夹下,如下所示:

.data/coco/.data/coco/annotations/instances_valminusminival2014.json.data/coco/annotations/instances_minival2014.json

3.2、下载预训练模型
下载地址
放在model/pretrained_model文件夹下,如下所示:

./model/pretrained_model/resnet_v1_101-0000.params

3.3、训练模型
假设你要在COCO数据集上训练,可以用对应的.yaml配置文件

python experiments/fcis/fcis_end2end_train_test.py --cfg experiments/fcis/cfgs/resnet_v1_101_coco_fcis_end2end_ohem.yaml

fcis_end2end_train_test.py脚本包括训练和测试两个部分,分别调用/FCIS/fcis/train_end2end.py脚本中的main()函数和/FCIS/fcis/test.py脚本中的main()函数.
resnet_v1_101_coco_fcis_end2end_ohem.yaml里面的dataset的数据路径,预训练模型路径最好改成绝对路径,避免以后的麻烦。

贴一个正在训练的FCIS:
这里写图片描述