GitHubじゃ!Pythonじゃ!

GitHubからPython関係の優良リポジトリを探したかったのじゃー、でも英語は出来ないから日本語で読むのじゃー、英語社会世知辛いのじゃー

msracver

Deformable-ConvNets – 変形可能な畳み込みネットワーク

投稿日:

変形可能な畳み込みネットワーク

変形可能な畳み込みネットワーク

このリポジトリの主な貢献者は、 Yuwen XiongHaozhi QiGuodong ZhangYi LiJifeng DaiBin XiaoHan HuYichen Weiなどです。

私たちはCOCO検出2017エントリの基礎であるDeformable FPNのトレーニング/テストコードと事前訓練モデルをリリースしました。 COCO 2017ワークショップでスライド。

変形可能なR-FCN +ソフトNMS のサードパーティ改良

前書き

変形可能なConvNetsは、最初にICCV 2017口頭で記述されています。 ICCV 2017口頭スライド)

R-FCNは当初、 NIPS 2016論文に記載されている。

免責事項

これは、MXNetに基づく変形可能な畳み込みネットワーク (変形可能なConvNets)の公式の実装です。 それに気付く価値がある:

  • オリジナルの実装は、Windows上の内部Caffeバージョンに基づいています。 プラットフォームの切り替えには細部の詳細があるため、最終的な精度と実行時間には若干の違いがあります。
  • コードは公式MXNet @(コミット62ecb60)で変形可能なConvNets用の追加の演算子でテストされています。
  • 我々は、 モデルコンバータを使用して、ImageNet事前訓練を受けたResNet-v1-101に基づいてモデルを訓練しました。 変換されたモデルは、わずかに低い精度をもたらす(ImageNet上のTop-1 Error:24.0%対23.6%)。
  • このリポジトリは、 MXNet rcnn examplemx-rfcnのコードを使用していました

ライセンス

©Microsoft、2017. Apache-2.0ライセンスでライセンスされています。

変形可能なConvNetsの引用

研究で有用な変形可能なConvNetsを見つけた場合は、

@article{dai17dcn,
    Author = {Jifeng Dai, Haozhi Qi, Yuwen Xiong, Yi Li, Guodong Zhang, Han Hu, Yichen Wei},
    Title = {Deformable Convolutional Networks},
    Journal = {arXiv preprint arXiv:1703.06211},
    Year = {2017}
}
@inproceedings{dai16rfcn,
    Author = {Jifeng Dai, Yi Li, Kaiming He, Jian Sun},
    Title = {{R-FCN}: Object Detection via Region-based Fully Convolutional Networks},
    Conference = {NIPS},
    Year = {2016}
}

主な結果

トレーニングデータ データのテスト mAP@0.5 mAP@0.7 時間
R-FCN、ResNet-v1-101 VOC 07 + 12 trainval VOC 07テスト 79.6 63.1 0.16秒
変形可能なR-FCN、ResNet-v1-101 VOC 07 + 12 trainval VOC 07テスト 82.3 67.8 0.19秒
トレーニングデータ データのテスト 地図 mAP@0.5 mapp@0.75 mAP @ S mAP @ M mAP @ L
R-FCN、ResNet-v1-101 ココトゥールヴァール coco test-dev 32.1 54.3 33.8 12.8 34.9 46.1
変形可能なR-FCN、ResNet-v1-101 ココトゥールヴァール coco test-dev 35.7 56.8 38.3 15.2 38.8 51.5
高速R-CNN(2fc)、ResNet-v1-101 ココトゥールヴァール coco test-dev 30.3 52.1 31.4 9.9 32.2 47.4
変形可能な高速R-CNN(2fc)、
ResNet-v1-101
ココトゥールヴァール coco test-dev 35.0 55.0 38.3 14.3 37.7 52.0
トレーニングデータ データのテスト 地図 mAP@0.5 mapp@0.75 mAP @ S mAP @ M mAP @ L
FPN + OHEM、ResNet-v1-101 ココのtrainval35k ココのミニバル 37.8 60.8 41.0 22.0 41.5 49.8
変形可能なFPN + OHEM、ResNet-v1-101 ココのtrainval35k ココのミニバル 41.2 63.5 45.5 24.3 44.9 54.4
FPN + OHEM +ソフトNMS +マルチスケール試験、
ResNet-v1-101
ココのtrainval35k ココのミニバル 40.9 62.5 46.0 27.1 44.1 52.2
変形可能なFPN + OHEM +ソフトNMS +マルチスケール試験、ResNet-v1-101 ココのtrainval35k ココのミニバル 44.4 65.5 50.2 30.8 47.3 56.4
トレーニングデータ データのテスト 時間
DeepLab、ResNet-v1-101 都市景観の訓練 Cityscapes val 70.3 0.51秒
変形可能なDeepLab、ResNet-v1-101 都市景観の訓練 Cityscapes val 75.2 0.52秒
DeepLab、ResNet-v1-101 VOC 12列車(増強) VOC 12 val 70.7 0.08秒
変形可能なDeepLab、ResNet-v1-101 VOC 12列車(増強) VOC 12 val 75.9 0.08秒

実行時間は、1つのMaxwell Titan X GPUでカウントされます(ミニバッチサイズは1で推測されます)。

要件:ソフトウェア

  1. 公式リポジトリからのMXNet MXNet @(コミット62ecb60)でコードをテストしました。 MXNetの急速な発展により、問題が発生した場合は、このバージョンをチェックアウトすることをお勧めします。 MXNetが将来のリリースで重要な機能を追加した場合、このリポジトリを定期的に更新することがあります。

  2. Python 2.7。 Anaconda2にはすでに多くの一般的なパッケージが含まれているので、Anaconda2の使用をお勧めします。 私たちはまだPython 3をサポートしていません。もしPython 3を使いたいのであれば、コードを修正して動作させる必要があります。

  3. Pythonパッケージが見つからない可能性があります:cython、opencv-python> = 3.2.0、easydict。 あなたのシステムにpipが設定されている場合、これらのパッケージは、

    pip install -r requirements.txt
    
  4. Windowsユーザーの場合、cythonモジュールをコンパイルするにはVisual Studio 2015が必要です。

要件:ハードウェア

4GB以上のメモリを搭載したNVIDIA GPUはOKです。

インストール

  1. Deformable ConvNetsリポジトリをクローンすると、$ {DCN_ROOT}として変形可能なConvNetsをクローンしたディレクトリを呼び出します。
git clone https://github.com/msracver/Deformable-ConvNets.git
  1. Windowsユーザーの場合は、 cmd .\init.bat実行します。 Linuxユーザーの場合は、 sh ./init.sh実行します。 スクリプトは自動的にcythonモジュールを構築し、いくつかのフォルダを作成します。

  2. MXNetをインストールする:

    注意:このPRの後、MXNetのカスタムOpはマルチGPUを使用して並行して実行することはできません。 我々は、トレーニングのためにユーザーがMXNet @(コミット998378a)にロールバックすることを強く推奨します(3.2節〜3.5節を参照)。

    クイックスタート

    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 update
    # if it's the first time to checkout, just use: git submodule update --init --recursive
    

    3.3 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.4 MXNet Pythonバインディングをインストールする

    注意:異なるバージョンのMXNetを積極的に切り替える場合は、3.4の代わりに3.5を実行してください

    cd python
    sudo python setup.py install
    

    3.5上級者は、Python ./external/mxnet/$(YOUR_MXNET_PACKAGE)MXNET_VERSION 、. $(YOUR_MXNET_PACKAGE) . $(YOUR_MXNET_PACKAGE) ./experiments/rfcn/cfgs/*.yaml$(YOUR_MXNET_PACKAGE)変更することができます。 したがって、MXNetの異なるバージョン間ですばやく切り替えることができます。

  3. Deeplabについては、議論されたVOC 2012データセットを使用します。 引数付き注釈はSBDデータセットによって提供されます。 便宜上、変換されたPNGアノテーションと列車/列画像のリストを提供しますので、 OneDriveからダウンロードしてください。

デモ&変形モデル

我々は、COCOトレインで訓練された変形可能なR-FCN&Faster R-CNNモデル、およびCityScapesトレインでトレーニングされた変形可能なDeepLabモデルを含む、訓練された変形可能なコンベネットモデルを提供します。

  1. 事前に訓練された変形可能なモデルでデモを使用するには、 OneDriveまたはBaiduYunから手動でダウンロードし、フォルダmodel/下に置きます。

    次のようにしてください:

    ./model/rfcn_dcn_coco-0000.params
    ./model/rfcn_coco-0000.params
    ./model/fpn_dcn_coco-0000.params
    ./model/fpn_coco-0000.params
    ./model/rcnn_dcn_coco-0000.params
    ./model/rcnn_coco-0000.params
    ./model/deeplab_dcn_cityscapes-0000.params
    ./model/deeplab_cityscapes-0000.params
    ./model/deform_conv-0000.params
    ./model/deform_psroi-0000.params
    
  2. R-FCNデモを実行するには、

    python ./rfcn/demo.py
    

    デフォルトでは、変形可能なR-FCNが実行され、R-FCNを実行するためにいくつかの予測結果が提供されます。

    python ./rfcn/demo.py --rfcn_only
    
  3. DeepLabデモを実行するには、

    python ./deeplab/demo.py
    

    デフォルトでは、Deformable Deeplabが実行され、いくつかの予測結果が与えられます.DeLabを実行するには、

    python ./deeplab/demo.py --deeplab_only
    
  4. 変形可能な畳み込みと変形可能なpsroipoolingのオフセットを視覚化するには、

    python ./rfcn/deform_conv_demo.py
    python ./rfcn/defrom_psroi_demo.py
    

トレーニングとテストの準備

R-FCN / Faster R-CNNの場合:

  1. COCOとVOC 2007 + 2012のデータセットをダウンロードし、次のようにしてください:

    ./data/coco/
    ./data/VOCdevkit/VOC2007/
    ./data/VOCdevkit/VOC2012/
    
  2. OneDriveからImageNetで事前に作成されたResNet-v1-101モデルを手動でダウンロードし、. ./modelフォルダの下に置きます。 次のようにしてください:

    ./model/pretrained_model/resnet_v1_101-0000.params
    

DeepLabの場合:

  1. CityscapesとVOC 2012のデータセットをダウンロードし、次のようにしてください:

    ./data/cityscapes/
    ./data/VOCdevkit/VOC2012/
    
  2. 議論されたVOC 2012注釈/画像リストをダウンロードし、議論された注釈と議論された列車/

    ./data/VOCdevkit/VOC2012/SegmentationClass/
    ./data/VOCdevkit/VOC2012/ImageSets/Main/
    

    、それぞれ。

  3. OneDriveからImageNetで事前に作成されたResNet-v1-101モデルを手動でダウンロードし、. ./modelフォルダの下に置きます。 次のようにしてください:

    ./model/pretrained_model/resnet_v1_101-0000.params
    

使用法

  1. すべての実験設定(GPU#、データセットなど)は、. ./experiments/rfcn/cfgs / ./experiments/faster_rcnn/cfgs / ./experiments/deeplab/cfgs/ . ./experiments/faster_rcnn/cfgs / ./experiments/deeplab/cfgs/ ./experiments/faster_rcnn/cfgsおよび./experiments/deeplab/cfgs/ yaml設定ファイルに保存されています。

  2. COCO / VOCのためのR-FCN、COCO / VOCのための変形可能なR-FCN、COCO / VOCのためのより速いR-CNN(2fc)、COCOのための変形可能な高速R-CNN(2fc) / VOC、Cityscapes / VOCのためのDeeplab、Cityscapes / VOCのための変形可能なDeeplab、それぞれ。 私たちは、8つのGPUと4つのGPUを使用してCOCOのモデルを訓練し、VOCをR-FCNのモデルに訓練します。 デプラブの場合は、すべての実験で4つのGPUを使用します。

  3. 実験を行うには、対応する設定ファイルを入力としてPythonスクリプトを実行します。 たとえば、ResNet-v1-101を使用してCOCOで変形可能な電線を訓練してテストするには、次のコマンドを使用します

    python experiments\rfcn\rfcn_end2end_train_test.py --cfg experiments\rfcn\cfgs\resnet_v1_101_coco_trainval_rfcn_dcn_end2end_ohem.yaml
    

    モデルoutput/rfcn_dcn_coco/ログをoutput/rfcn_dcn_coco/下に保存するために、キャッシュフォルダが自動的に作成されます。

  4. 設定ファイルとコードで詳細を確認してください。

その他

コードは以下のテスト済みです:

  • Ubuntu 14.04、Maxwell Titan X GPUおよびIntel Xeon CPU E5-2620 v2 @ 2.10GHz
  • Windows Server 2012 R2、8個のK40 GPU、Intel Xeon CPU E5-2650 v2 @ 2.60GHz
  • Windows Server 2012 R2、4 Pascal Titan X GPU、Intel Xeon CPU E5-2650 v4 @ 2.30GHz

よくある質問

Q: AttributeError: 'module' object has no attribute 'DeformableConvolution'

A:これは、

  • 演算子をMXNetフォルダにコピーするのを忘れてしまいます

  • または間違ったパスにコピーする

  • あなたが再コンパイルするのを忘れる

  • または間違ったMXNetをインストールする

    mxnet.__path__を印刷して、正しいMXNetを使用していることを確認してください

Q:最初にsegment faultしました。

A:MXNetとopencv-python 3.0+の間で互換性の問題が確認されています。 入力スクリプトでimport mxnetimport mxnetする前に、必ず最初にimport cv2import cv2ことをお勧めします。

Q:長期間のトレーニングでは、トレーニングの速度が遅くなることがわかります。

A:Windows上のMXNetにこの問題があることが確認されています。 だから、Linuxでこのプログラムを実行することをお勧めします。 また、この問題が発生した場合は、トレーニングのプロセスを再開してトレーニングの速度を回復することもできます。

Q:あなたのCaffe実装を共有できますか?

A:いくつかの理由があります(コードは古い、内部のCaffeに基づいており、公開されているCaffeには余分な作業や時間制限などが必要です)。 私たちはCaffeコードを公開する予定はありません。 現在のMXNetの畳み込み実装はCaffe(ほぼ同じ)に非常に似ているので、自分でCaffeに移植するのは簡単ですが、コアCUDAコードは変更されません。 それをしたいと思う人は誰でもプルの要求をすることを歓迎します。







-msracver

執筆者: