1. 程式人生 > >實時語義分割框架FCIS的官方程式碼安裝和執行

實時語義分割框架FCIS的官方程式碼安裝和執行

介紹

繼影象分類、物體檢測之後,精確到畫素級別的物體例項分割就成為更具挑戰性和實用性的視覺識別任務。前兩個任務在近年來取得了迅速的進展,已經有了不少優雅有效的方法。然而,例項分割任務卻還缺少一個標杆性的工作。

為此,來自清華大學和微軟研究院的李益、齊浩之、代季峰、季向陽、危夷晨合作,利用全卷積神經網路(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 checkoutgit submodule update,否則會出錯!!!

四.安裝Python的MxNet包

編譯完成後,進入mxnet的Python目錄,安裝Mxnet:

cd python
sudo python setup.py install

這裡安裝的MxNet版本是0.10.1,可在後面執行Demo的時候,版本悄然被升級為最新的1.0.1

五.下載預訓練模型

六.執行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 checkoutgit 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