GitHubじゃ!Pythonじゃ!

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

jwyang

faster-rcnn.pytorch – 速いr-cnnのより速いpytorchの実装

投稿日:

速いr-cnnのより速いpytorchの実装

速いR-CNNの高速ピクトーチ実装

前書き

このプロジェクトは、 高速なR-CNNのより高速な Pytorch実装であり、より高速なR-CNNオブジェクト検出モデルの訓練を加速することを目的としています。 最近、多くの良い実装があります:

実装時には、上記の実装、特にlongcw / faster_rcnn_pytorchを参照しました しかし、私たちの実装には、上記の実装と比較していくつかの独特で新しい機能があります:

  • それは純粋なPytorchコードです。 私たちはすべてのnumpyの実装をpytorchに変換します!

  • マルチイメージバッチトレーニングをサポートしています dataloader、rpn、roi-poolingなどのすべてのレイヤーを修正して、各ミニバッチ内の複数のイメージをサポートします。

  • 複数のGPUトレーニングをサポートします 上記の2つの機能のメリットとして、複数のGPUラッパー(ここではnn.DataParallel)を使用して1つ以上のGPUを柔軟に使用できます。

  • 3つのプーリング方法をサポートしています 私たちは3つのプール方法を統合しています:roi pooing、roi align、roi crop。 さらに重要なことは、マルチイメージバッチ訓練をサポートするようにそれらのすべてを変更することです。

  • それはメモリ効率的です。 画像のアスペクト比を制限し、同様のアスペクト比の画像をミニバッチにグループ化します。 このように、resnet101とVGG16は、タイタンX(12 GB)の大きさでbatchsize = 4(4イメージ)でトレーニングできます。 8 GPUでトレーニングする場合、各GPUの最大バッチサイズは3(Res101)、合計24です。

  • それはより速いです。 上記の変更に基づいて、トレーニングははるかに高速です。 私たちはNVIDIA TITAN Xpのトレーニング速度を以下の表に示します。

その他の実装

チュートリアル

ベンチマーキング

我々は、pascal voc、coco、およびimagenet-200という3つのデータセットで、vgg16とresnet101という2つの異なるネットワークアーキテクチャを使用して、コードを完全にベンチマークします。 結果は以下のとおりです。

1)。 パスカルVOC 2007(列車/試験:07trainval / 07test、スケール= 600、ROI Align)

モデル #GPUs バッチサイズ lr lr_decay max_epoch 時間/エポック mem / GPU 地図
VGG-16 1 1 1e-3 5 6 0.76時間 3265MB 70.1
VGG-16 1 4 4e-3 8 9 0.50時間 9083MB 69.6
VGG-16 8 16 1e-2 8 10 0.19時間 5291MB 69.4
VGG-16 8 24 1e-2 10 11 0.16時間 11303MB 69.2
Res-101 1 1 1e-3 5 7 0.88時間 3200 MB 75.2
Res-101 1 4 4e-3 8 10 0.60時間 9700 MB 74.9
Res-101 8 16 1e-2 8 10 0.23時間 8400 MB 75.2
Res-101 8 24 1e-2 10 12 0.17時間 10327MB 75.1

2)。 COCO(列車/テスト:coco_train + coco_val-minival / minival、縮尺= 800、最大サイズ= 1200、ROI Align)

モデル #GPUs バッチサイズ lr lr_decay max_epoch 時間/エポック mem / GPU 地図
VGG-16 8 16 1e-2 4 6 4.9時間 7192 MB 29.2
Res-101 8 16 1e-2 4 6 6.0時間 10956MB 36.2
Res-101 8 16 1e-2 4 10 6.0時間 10956MB 37.0

注記 上記のモデルはscale = 800を使用しているので、テストコマンドの最後に “–ls”を追加する必要があります。

3)。 COCO(列車/テスト:coco_train + coco_val-minival / minival、スケール= 600、max_size = 1000、ROI Align)

モデル #GPUs バッチサイズ lr lr_decay max_epoch 時間/エポック mem / GPU 地図
Res-101 8 24 1e-2 4 6 5.4時間 10659 MB 33.9
Res-101 8 24 1e-2 4 10 5.4時間 10659 MB 34.5

4)。 ビジュアルゲノム(列車/テスト:vg_train / vg_test、スケール= 600、最大サイズ= 1000、ROIアライメント、カテゴリ= 2500)

モデル #GPUs バッチサイズ lr lr_decay max_epoch 時間/エポック mem / GPU 地図
VGG-16 1 P100 4 1e-3 5 20 3.7時間 12707 MB 4.4

視覚的ゲノムにあらかじめ用意された検出モデルを提供してくれたRemiに感謝します!

  • 上記の表のリンクをクリックして、事前に訓練された高速のr-cnnモデルをダウンロードしてください。
  • 言及されていない場合、私たちが使用したGPUはNVIDIA Titan X Pascal(12GB)です。

私たちは何をするつもりですか

  • python2とpython3の両方をサポートしています( cclaussに感謝します )。
  • 異なる設定でPASCAL VOC 07/12、COCO、ImageNet、Visual Genome(VG)の系統的実験を行います。
  • 我々の実装における新しいものについての詳細なレポートと、我々の実験における定量的な結果を書く。

準備

まず、コードを複製する

git clone https://github.com/jwyang/faster-rcnn.pytorch.git

次に、フォルダを作成します。

cd faster-rcnn.pytorch && mkdir data

前提条件

  • Python 2.7
  • Pytorch 0.2.0
  • CUDA 8.0以上

データ準備

  • PASCAL_VOC 07 + 12 :VOCデータセットを準備するには、 py-faster-rcnnの指示に従ってください。 実際には、他のものを参照することができます。 データをダウンロードした後、フォルダdata /にソフトリンクを作成します。

  • COCOpy-faster-rcnnの指示に従ってデータを準備してください。

  • ビジュアルゲノム :ビヘイビアゲノムデータセットを準備するために、 ボトムアップでの指示に従ってください。 最初にイメージとオブジェクト注釈ファイルをダウンロードしてから、このリポジトリに用意されているスクリプトに基づいてアノテーションを取得し、アノテーションを取得する必要があります。

事前トレーニングされたモデル

私たちの実験では、VGGとResNet101の2つの事前学習モデルを使用しました。 次の2つのモデルをダウンロードできます。

それらをダウンロードしてdata / pretrained_model /に入れます。

注記 PytorchとCaffeのプリトレインモデルを比較し、驚くべきことに、Caffe事前学習モデルはPytorch事前学習モデルより若干優れたパフォーマンスを持つことがわかります。 私たちは、上記のリンクからCaffe pretrainedモデルを使用して、結果を再現することを提案します。

もしあなたがプレタイヤルモデルのpytorchを使用したいのであれば、BGRからRGBへのイメージの転置、そして事前トレーニングされたモデルで使用されているのと同じデータトランスフォーマー(マイナス平均とノーマライズ)を使用することを忘れないでください。

編集

ruotianluo / pytorch-faster-rcnnで指摘されているように、 make.shファイルの右の-archを選択して、cudaコードをコンパイルします。

GPUモデル 建築
TitanX(Maxwell / Pascal) sm_52
GTX 960M sm_50
GTX 1080(Ti) sm_61
グリッドK520(AWS g2.2xlarge) sm_30
Tesla K80(AWS p2.xlarge) sm_37

アーキテクチャの設定に関する詳細は、 こちらまたはこちらを参照してください。

pipを使用してすべてのpython依存関係をインストールします。

pip install -r requirements.txt

次の簡単なコマンドを使用して、cudaの依存関係をコンパイルします。

cd lib
sh make.sh

NMS、ROI_Pooing、ROI_Align、ROI_Cropなど、必要なすべてのモジュールをコンパイルします。 デフォルトのバージョンはPython 2.7でコンパイルされています。異なるPythonバージョンを使用している場合は、自分でコンパイルしてください。

この問題で指摘されているように、コンパイル中に何らかのエラーが発生した場合は、CUDAパスを環境にエクスポートすることができない場合があります。

列車

トレーニングの前に、訓練されたモデルを保存して読み込むための適切なディレクトリを設定します。 trainval_net.pyとtest_net.pyの引数 “save_dir”と “load_dir”を環境に合わせて変更します。

pascal_vocでvgg16を使用してより高速なR-CNNモデルをトレーニングするには、次のコマンドを実行します。

CUDA_VISIBLE_DEVICES=$GPU_ID python trainval_net.py \
                   --dataset pascal_voc --net vgg16 \
                   --bs $BATCH_SIZE --nw $WORKER_NUMBER \
                   --lr $LEARNING_RATE --lr_decay_step $DECAY_STEP \
                   --cuda

ここで、「bs」はデフォルトの1のバッチサイズです。あるいは、resnet101を使ってpascal_vocで学習するには、簡単に実行します。

 CUDA_VISIBLE_DEVICES=$GPU_ID python trainval_net.py \
                    --dataset pascal_voc --net res101 \
                    --bs $BATCH_SIZE --nw $WORKER_NUMBER \
                    --lr $LEARNING_RATE --lr_decay_step $DECAY_STEP \
                    --cuda

上記のBATCH_SIZEとWORKER_NUMBERは、GPUのメモリサイズに応じて適応的に設定することができます。 12Gのメモリを搭載したTitan Xpでは、最大4つまで可能です。

Titan Xp GPUが複数ある(たとえば8つ)場合は、それらをすべて使用してください! 試してください:

python trainval_net.py --dataset pascal_voc --net vgg16 \
                       --bs 24 --nw 8 \
                       --lr $LEARNING_RATE --lr_decay_step $DECAY_STEP \
                       --cuda --mGPUs

COCOまたはVisual Genomeで訓練したい場合は、データセットを「coco」または「vg」に変更します。

テスト

pascal_vocテストセットで事前に訓練されたvgg16モデルの検出性能を向上させたい場合は、

python test_net.py --dataset pascal_voc --net vgg16 \
                   --checksession $SESSION --checkepoch $EPOCH --checkpoint $CHECKPOINT \
                   --cuda

具体的なモデルセッション、chechepochとチェックポイントを指定します。たとえば、SESSION = 1、EPOCH = 6、CHECKPOINT = 416です。

デモ

事前に訓練されたモデルで自分の画像で検出を実行する場合は、上記の表に記載されている事前学習済みのモデルをダウンロードするか、自分のモデルをトレーニングしてから、$ ROOT / imagesフォルダに画像を追加してから

python demo.py --net vgg16 \
               --checksession $SESSION --checkepoch $EPOCH --checkpoint $CHECKPOINT \
               --cuda --load_dir path/to/model/directoy

次に、$ ROOT / imagesフォルダに検出結果が表示されます。

デフォルトのdemo.pyは単にpascal_vocカテゴリをサポートしていることに注意してください。 自分のモデルに合わせてを変更する必要があります。

以下にいくつかの検出結果を示します。

Webcamデモ

ウェブカメラを使用してリアルタイムデモで実行することができます

python demo.py --net vgg16 \
               --checksession $SESSION --checkepoch $EPOCH --checkpoint $CHECKPOINT \
               --cuda --load_dir path/to/model/directoy \
               --webcam $WEBCAM_ID

画像ウィンドウをクリックし、 ‘q’キーを押すとデモが停止します。

著者

このプロジェクトは、 Jianwei YangJiasen Lu 、および他の多くの人たちによっても同様に寄贈されています(それらのおかげで!)。

引用

@article{jjfaster2rcnn,
    Author = {Jianwei Yang and Jiasen Lu and Dhruv Batra and Devi Parikh},
    Title = {A Faster Pytorch Implementation of Faster R-CNN},
    Journal = {https://github.com/jwyang/faster-rcnn.pytorch},
    Year = {2017}
} 

@inproceedings{renNIPS15fasterrcnn,
    Author = {Shaoqing Ren and Kaiming He and Ross Girshick and Jian Sun},
    Title = {Faster {R-CNN}: Towards Real-Time Object Detection
             with Region Proposal Networks},
    Booktitle = {Advances in Neural Information Processing Systems ({NIPS})},
    Year = {2015}
}







-jwyang
-,

執筆者: