介绍
继图像分类、物体检测之后,精确到像素级别的物体实例分割就成为更具挑战性和实用性的视觉识别任务。前两个任务在近年来取得了迅速的进展,已经有了不少优雅有效的方法。然而,实例分割任务却还缺少一个标杆性的工作。
为此,来自清华大学和微软研究院的李益、齐浩之、代季峰、季向阳、危夷晨合作,利用全卷积神经网络(FCN)在图像语义分割和实例分割预测方面的优势,提出了一种新的架构 FCIS。
FCIS 是首个全卷积、端到端的实例分割解决方案,为实例分割提供了一个简单、快速、准确的框架,由于考虑到实例分割预测和分类这两个步骤之间的关联,FCIS 能够同时对多个物体实例进行检测和分割。
FCIS 在 COCO 2016 分割检测竞赛中以显著优势获得了第一名。日前,他们的研究论文《全卷积实例语义分割》(Fully Convolutional Instance-aware Semantic Segmentation)被 CVPR 2017 作为亮点论文接收,作者将论文上传到 arXiv,也将代码在 Github 开源,地址:https://github.com/msracver/FCIS。因为COCO 2017分割检测比赛的代码尚未开源,所以FCIS是目前开源方案中最高效的实时语义提取方案。
顺便提下COCO 2017 物体分割比赛的冠军,是来自商汤科技的UCenter队夺。相对2016年的冠军,UCenter团队取得了9.1个点的提升,相对提升达24%。UCenter团队成员表示,在CVPR截稿之后,他们会整理代码并将其开源,分享给更多的计算机视觉工作者、爱好者。
安装和运行Demo
环境
Ubuntu 14.04 + Cuda8.0 +Python2.7 + MxNet 1.0.1 + GCC/G++ 4.8.4 + cudnn-8.0-linux-x64-v6.0
FCIS的官方实现使用了“国产”的深度学习框架——MxNet,而且运行于Python2.7之上。
一.安装Python依赖
首先安装依赖:
pip install Cython
pip install opencv-python==3.2.0.6
pip install easydict==1.6
pip install hickle
二.初始化编译
然后克隆仓库,初始化编译:
git clone https://github.com/msracver/FCIS.git
cd FCIS
sh init.sh
运行init.sh脚本会新建一些目录,并进行一些初始化操作。
三.编译mxnet
接下来克隆mxnet到FCIS同一级目录,把FCIS中的Operator模块复制到mxnet,然后进行编译:
git clone --recursive https://github.com/dmlc/mxnet.git
cp -r FCIS/fcis/operator_cxx/* mxnet/src/operator/contrib/
cd mxnet
make -j $(nproc) USE_OPENCV=1 USE_BLAS=openblas USE_CUDA=1 USE_CUDA_PATH=/usr/local/cuda USE_CUDNN=1
此处编译时间较久,需要20分钟到半个小时左右。
重要提示:
编译mxnet千万不要按官方教程进行git checkout
和git submodule update
,否则会出错!!!
四.安装Python的MxNet包
编译完成后,进入mxnet的Python目录,安装Mxnet:
cd python
sudo python setup.py install
这里安装的MxNet版本是0.10.1
,可在后面运行Demo的时候,版本悄然被升级为最新的1.0.1
。
五.下载预训练模型
下载已经训练好的模型,置于FCIS的model
目录下,下载链接https://pan.baidu.com/s/1geOHioV,提取码tmd4。
六.运行Demo
cd FCIS
python fcis/demo.py
出错和解决
我按照官方的REDEME进行安装运行,结果在运行Demo的时候出错,提示:AttributeError: 'module' object has no attribute' 'ChannelOperator
。
报错信息如下:
'pretrained': './model/pretrained_model/resnet_v1_101',
'pretrained_epoch': 0},
'output_path': '../output/fcis',
'symbol': 'resnet_v1_101_fcis'}
Traceback (most recent call last):
File "./fcis/demo.py", line 151, in
main()
File "./fcis/demo.py", line 43, in main
sym = sym_instance.get_symbol(config, is_train=False)
File "/home/hniu2/FCIS/fcis/symbols/resnet_v1_101_fcis.py", line 816, in get_symbol
psroipool_cls = mx.contrib.sym.ChannelOperator(name='psroipool_cls', data=psroipool_cls_seg, group=num_classes, op_type='Group_Max')
AttributeError: 'module' object has no attribute 'ChannelOperator'
解决方案如下:
首先避免进行git checkout
和git submodule update
,然后把FCIS中的Operator模块复制到mxnet,再编译mxnet。
cp -r FCIS/fcis/operator_cxx/* mxnet/src/operator/contrib/
cd mxnet
make -j $(nproc) USE_OPENCV=1 USE_BLAS=openblas USE_CUDA=1 USE_CUDA_PATH=/usr/local/cuda USE_CUDNN=1