SipMask を動かす
SipMask: Spatial Information Preservation for Fast Image and Video Instance Segmentation (ECCV2020) という論文の実装が
で公開されています。
SipMask-mmdetection を実行してみるにあたって、いくつかハマリポイントがあったので、メモ代わりに記事を書いておきます。
環境
- p2.xlarge
- AWS DeepLearning AMI
(うまくいった)動かし方
手順だけ書いておきます。
source activate pytorch_p36 cd ~/ git clone https://github.com/JialeCao001/SipMask.git pip install --upgrade pip pip install mmcv-full==latest+torch1.4.0+cu101 -f https://download.openmmlab.com/mmcv/dist/index.html pip install mmcv==0.4.3 pip install "git+https://github.com/cocodataset/cocoapi.git#subdirectory=PythonAPI" pip install jupyter jupyterlab wget https://github.com/open-mmlab/mmdetection/archive/v1.2.0.zip unzip v1.2.0.zip cd mmdetection-1.2.0/ pip install --no-cache-dir -e . cd ../SipMask/SipMask-mmdetection/ python setup.py develop wget https://open-mmlab.oss-cn-beijing.aliyuncs.com/mmdetection/models/faster_rcnn_r50_fpn_1x_20181010-3d1b3351.pth jupyter notebook --ip 0.0.0.0 --port 8888
準備されているDockerfile をビルドしても実行できない。
Github にDockerfile が準備されていますが、それをビルドしてもうまく動きませんでした。 おそらく、SipMask のライブラリは、 mmdetection v1 に依存していますが、mmdetection の v2 がインストールされるためだと思います。 mmdetection は、リリースヒストリーから持ってくることにしました。
mmcv というライブラリのインストール
mmcvは、cuda とPytorch のバージョンによって、インストールすべきものが変わるので、よしなに調整しなくてはなりません。 最初、docker hub からダウンロードしてきた pytorch/pytorch のイメージを使って実行していましたが、CUDA のバージョンが合わなかったりしたので、 docker を使わずに環境を作成する方針に切り替えました。
また、このIssue のコメントにあるように、
mmcv-full をインストールした後に、mmcv==0.4.3 をインストールしました。 最終的に、この動作が必要だったかどうか、検証できていません。
SipMask のインストールが必要
README.md に書いていなかった(はず) のですが、python setup.py develop を実行しないといけません。 これに気づくまで、結構時間がかかりました。。。
以上のことをやると、SipMask-mmdetection/demo/inference_demo.ipynb
が動くようになります!
config_file = '../configs/faster_rcnn_r50_fpn_1x.py' # download the checkpoint from model zoo and put it in `checkpoints/` checkpoint_file = '../checkpoints/faster_rcnn_r50_fpn_1x_20181010-3d1b3351.pth'
を、
config_file = '../configs/sipmask/sipmask_r50_caffe_fpn_gn_1x.py' # README に書いてあるモデルをダウンロードして設置 checkpoint_file = '../checkpoints/sipmask_r50_caffe_1x.pth'
に変えてあげると、無事、SipMask を実行することができます。
以上。