全卷积实例分割实战
全卷积实例分割实战
Fully Convolutional Instance-aware Semantic Segmentation
介绍
FCIS是一个完全卷积的端到端解决方案,例如分割,它赢得了2016年COCO分割挑战赛的第一名。FCIS最初在CVPR 2017聚光灯文件中进行了描述。值得注意的是:
FCIS提供了一个简单、快速、准确的实例分割框架。与MNC不同,FCIS同时联合进行实例掩码估计和分类,并估计类特定的掩码。没有利用掩模RCNN系统中的各种技术和技巧,例如增加RPN锚定数(从12到15)、在图像边界外训练锚定、放大图像(较短的一面从600到800像素)、利用FPN特征和对齐的ROI池。这些技术和技巧应该与的简单基线正交。
资源
COCO 2016挑战赛参赛作品:OneDrive中COCO测试集的前5k图像的视觉效果。
ImageNet ILSVRC和COCO 2016研讨会幻灯片:OneDrive。
免责声明
这是基于MXNet的完全卷积实例感知语义分割(FCIS)的官方实现。
值得注意的是:
最初的实现基于在Windows上的内部Caffe版本。由于站台道岔细节丰富,最终精度和运行时间略有不同。
该代码在官方MXNet@(commit 62ecb60)上进行测试,并带有FCIS的额外运算符。使用模型转换器基于ImageNet预先训练的ResNet-v1-101训练模型。转换后的模型产生的精度稍低(ImageNet val的最大误差:24.0%v.s.23.6%)。此存储库使用来自MXNet rcnn示例和mx rfcn的代码。
许可证
版权所有Microsoft,2017年。有麻省理工学院的执照。
引用FCIS
如果发现FCIS对的研究有用,可考虑引用:
@inproceedings{li2016fully,
Author = {Yi Li, Haozhi Qi, Jifeng Dai, Xiangyang Ji and Yichen Wei}
Title = {Fully Convolutional Instance-aware Semantic Segmentation},
Conference = {CVPR},
year = {2017}
}
Main Results
运行时间计算在单个Maxwell Titan X GPU上(推断最小批量大小为1)。
要求:软件
来自官方存储库的MXNet。在MXNet@(commit62ecb60)上测试了代码。由于MXNet的快速发展,如果遇到任何问题,建议签出此版本。如果MXNet在将来的版本中添加了重要功能,可以定期维护这个存储库。
Python包可能丢失:cython,opencv Python>=3.2.0,easydict。如果在系统上设置了pip,那么应该可以通过运行。
pip install Cython
pip install opencv-python==3.2.0.6
pip install easydict==1.6
pip install hickle
对于Windows用户,需要Visual Studio 2015来编译cython模块。
Requirements: Hardware
任何具有至少5GB内存的NVIDIA GPU都应该可以
安装
克隆FCIS存储库,将克隆的FCIS的目录称为${FCIS_ROOT}。
git clone https://github.com/msracver/FCIS.git
对于Windows用户,运行cmd\init.bat. 对于Linux用户,运行sh ./init.sh。脚本将自动生成cython模块并创建一些文件夹。
安装MXNet:
注意:在此PR之后,MXNet的自定义操作无法使用多个gpu并行执行。强烈建议用户回滚到MXNet@(提交998378a)版本进行训练(请参阅第3.2-3.6节)。快速启动
3.1安装MXNet和所有依赖项
pip install -r requirements.txt
如果没有错误消息,则应成功安装MXNet。
从源代码生成(可选方式)
3.2克隆MXNet并通过以下方式签出到MXNet@(提交998378a)
git clone --recursive https://github.com/dmlc/mxnet.git
git checkout 998378a
git submodule init
git submodule update
3.3将$(FCIS_ROOT)/FCIS/operator_cxx中的通道运算符复制到$(YOUR_MXNET_ _FOLDER)/src/operator/contrib
cp -r $(FCIS_ROOT)/fcis/operator_cxx/channel_operator* $(MXNET_ROOT)/src/operator/contrib/
3.4 Compile MXNet
cd ${MXNET_ROOT}
make -j $(nproc) USE_OPENCV=1 USE_BLAS=openblas USE_CUDA=1 USE_CUDA_PATH=/usr/local/cuda USE_CUDNN=1
3.5安装MXNet Python绑定
注意:如果您将在不同版本的MXNet之间主动切换,请遵循3.5而不是3.4
cd python
sudo python setup.py install
3.6 For advanced users, you may put your Python packge into ./external/mxnet/$(YOUR_MXNET_PACKAGE)
, and modify MXNET_VERSION
in ./experiments/fcis/cfgs/*.yaml
to $(YOUR_MXNET_PACKAGE)
. Thus you can switch among different versions of MXNet quickly.
Demo
使用训练模型(在COCO trainval35k上)运行演示,从OneDrive手动下载该模型(中国用户也可以从白都云获得,代码为tmd4),并将其放在文件夹model/下。
1. Make sure it looks like this:
2.
./model/fcis_coco-0000.params
3. Run
python ./fcis/demo.py
训练和测试准备
从SBD下载带有附加注释的VOC 2012数据集。将inst、cls、img文件夹移动到VOCdevit,并确保它看起来像这样:
请在本回购协议中使用train&val拆分,遵循SDS协议。
.data/VOCdevkit/VOCSDS/img/
.data/VOCdevkit/VOCSDS/inst/
.data/VOCdevkit/VOCSDS/cls/
请下载5k图像minival子集和val2014减去minival(val35k)的COCO数据集和注释。确保它看起来像这样:
.data/coco/
.data/coco/annotations/instances_valminusminival2014.json
.data/coco/annotations/instances_minival2014.json
请从OneDrive手动下载ImageNet pretrained ResNet-v1-101模型,并将其置于folder ./model
. 。确保它看起来像这样:
./model/pretrained_model/resnet_v1_101-0000.params
用法
所有实验设置(GPU#,数据集等)都保存在文件夹./experiments/fcis/cfgs中的yaml配置文件中。
到目前为止提供了两个配置文件:FCIS@COCO公司与OHEM和FCIS@VOC没有OHEM。
分别使用8和4个gpu来训练COCO和VOC模型。
要执行实验,请运行python脚本,并将相应的配置文件作为输入。例如,要使用ResNet-v1-101在COCO上训练和测试FCIS,请使用以下命令
python experiments/fcis/fcis_end2end_train_test.py --cfg experiments/fcis/cfgs/resnet_v1_101_coco_fcis_end2end_ohem.yaml
将自动创建一个缓存文件夹,将模型和日志保存在output/fcis/coco/或output/fcis/voc/下。
在配置文件和代码中找到更多详细信息。
Misc.
Code has been tested under:
- Ubuntu 14.04 with a Maxwell Titan X GPU and Intel Xeon CPU E5-2620 v2 @ 2.10GHz
- Windows Server 2012 R2 with 8 K40 GPUs and Intel Xeon CPU E5-2650 v2 @ 2.60GHz
- Windows Server 2012 R2 with 4 Pascal Titan X GPUs and Intel Xeon CPU E5-2650 v4 @ 2.30GHz