このプロジェクトでは、私たちの論文に示されているように、オブジェクト検出のためのFCOSアルゴリズムを実装するためのコードをホストしています。
FCOS: Fully Convolutional One-Stage Object Detection;
Zhi Tian, Chunhua Shen, Hao Chen, and Tong He;
In: Proc. Int. Conf. Computer Vision (ICCV), 2019.
arXiv preprint arXiv:1904.01355
完全な論文は、https://arxiv.org/abs/1904.01355で入手できます。
Detectron2に基づく実装は、Adelaidetに含まれています。
Coco MinivalのAPに46FPSと40.3のリアルタイムモデルもここから入手できます。
8つのNVIDIA V100 GPUを使用します。
ただし、FCOはメモリ効率が高いため、4 1080TI GPUは本格的なResNet-50-FPNベースのFCOをトレーニングすることもできます。
FCOをプロジェクトでオブジェクト検出器として使用するだけのユーザーの場合、PIPでインストールできます。そうするために、実行してください:
pip install torch # install pytorch if you do not have it
pip install git+https://github.com/tianzhi0549/FCOS.git
# run this command line for a demo
fcos https://github.com/tianzhi0549/FCOS/raw/master/demo/images/COCO_val2014_000000000885.jpg
インターフェイスの使用については、こちらをご覧ください。
このFCOの実装は、MaskRCNNベンチマークに基づいています。したがって、インストールは元のMaskRCNNベンチマークと同じです。
インストール手順については、install.mdを確認してください。また、Maskrcnnベンチマークの元のreadme.mdを見たいかもしれません。
インストールが完了したら、以下の手順に従ってクイックデモを実行できます。
# assume that you are under the root directory of this project,
# and you have activated your virtual environment if needed.
wget https://huggingface.co/tianzhi/FCOS/resolve/main/FCOS_imprv_R_50_FPN_1x.pth?download=true -O FCOS_imprv_R_50_FPN_1x.pth
python demo/fcos_demo.py
ココミニバル分割の推論コマンドライン:
python tools/test_net.py
--config-file configs/fcos/fcos_imprv_R_50_FPN_1x.yaml
MODEL.WEIGHT FCOS_imprv_R_50_FPN_1x.pth
TEST.IMS_PER_BATCH 4
注意してください:
FCOS_imprv_R_50_FPN_1x.pth独自のものに置き換えてください。TEST.IMS_PER_BATCH 1に減らしてみてください。--config-file MODEL.WEIGHTのWeightsファイルに変更してください。あなたの便利さのために、私たちは次の訓練されたモデルを提供します(その他のモデルが間もなく登場します)。
resne(x)ts:
すべてのResne(x)ベースのモデルは、ミニバッチおよびフローズンバッチ正規化(つまり、maskrcnn_benchmarkのモデルと一致して)で16の画像でトレーニングされています。
| モデル | マルチスケールトレーニング | テスト時間 / IM | AP(ミニバル) | リンク |
|---|---|---|---|---|
| FCOS_IMPRV_R_50_FPN_1X | いいえ | 44ms | 38.7 | ダウンロード |
| FCOS_IMPRV_DCNV2_R_50_FPN_1X | いいえ | 54ms | 42.3 | ダウンロード |
| FCOS_IMPRV_R_101_FPN_2X | はい | 57ms | 43.0 | ダウンロード |
| FCOS_IMPRV_DCNV2_R_101_FPN_2X | はい | 73ms | 45.6 | ダウンロード |
| FCOS_IMPRV_X_101_32X8D_FPN_2X | はい | 110ms | 44.0 | ダウンロード |
| FCOS_IMPRV_DCNV2_X_101_32X8D_FPN_2X | はい | 143ms | 46.4 | ダウンロード |
| FCOS_IMPRV_X_101_64X4D_FPN_2X | はい | 112ms | 44.7 | ダウンロード |
| FCOS_IMPRV_DCNV2_X_101_64X4D_FPN_2X | はい | 144ms | 46.6 | ダウンロード |
imprv 、ペーパーのimprovements表3に示していることに注意してください。これらのほとんどコストのない変更は、パフォーマンスを合計で約1.5%改善します。したがって、それらを使用することを強くお勧めします。以下は、最初の論文に示されている元のモデルです。
| モデル | マルチスケールトレーニング | テスト時間 / IM | AP(ミニバル) | AP(test-dev) | リンク |
|---|---|---|---|---|---|
| FCOS_R_50_FPN_1X | いいえ | 45ms | 37.1 | 37.4 | ダウンロード |
| FCOS_R_101_FPN_2X | はい | 59ms | 41.4 | 41.5 | ダウンロード |
| FCOS_X_101_32X8D_FPN_2X | はい | 110ms | 42.5 | 42.7 | ダウンロード |
| fcos_x_101_64x4d_fpn_2x | はい | 113ms | 43.0 | 43.2 | ダウンロード |
Mobilenets:
MobileNetベースのモデルのバッチ正規化を更新します。 Syncbnを使用する場合は、Pytorch 1.1以降をインストールしてください。
| モデル | トレーニングバッチサイズ | マルチスケールトレーニング | テスト時間 / IM | AP(ミニバル) | リンク |
|---|---|---|---|---|---|
| fcos_syncbn_bs32_c128_mnv2_fpn_1x | 32 | いいえ | 26ms | 30.9 | ダウンロード |
| fcos_syncbn_bs32_mnv2_fpn_1x | 32 | いいえ | 33ms | 33.1 | ダウンロード |
| fcos_bn_bs16_mnv2_fpn_1x | 16 | いいえ | 44ms | 31.0 | ダウンロード |
[1] 1xおよび2xは、モデルがそれぞれ90kおよび180kの反復でトレーニングされることを意味します。
[2]すべての結果は、単一のモデルで得られ、テスト時間はマルチスケール、フリッピングなどなどのデータ増強なしで取得されます。
[3] c128 、モデルがタワーに128の(256の代わりに)チャネルを持っていることを示します(つまり、 MODEL.RESNETS.BACKBONE_OUT_CHANNELS in config)。
[4] dcnv2 、変形可能な畳み込みネットワークv2を示します。 RESNETベースのモデルの場合、バックボーンでステージC3からC5への変形可能な畳み込みを適用することに注意してください。 ResNextベースのモデルの場合、ステージC4とC5のみが変形可能な畳み込みを使用します。すべてのモデルは、検出器塔の最後の層で変形可能な畳み込みを使用します。
[5]モデルFCOS_imprv_dcnv2_X_101_64x4d_FPN_2xマルチスケールテストを使用すると、COCO Test-DEVのAPで49.0%を達成します。 TEST.BBOX_AUG.ENABLED Trueを使用して、マルチスケールテストを有効にしてください。
次のコマンドラインでは、同期確率的勾配降下(SGD)で8 GPUでFCOS_IMPRV_R_50_FPN_1Xをトレーニングします。
python -m torch.distributed.launch
--nproc_per_node=8
--master_port=$((RANDOM + 10000))
tools/train_net.py
--config-file configs/fcos/fcos_imprv_R_50_FPN_1x.yaml
DATALOADER.NUM_WORKERS 2
OUTPUT_DIR training_dir/fcos_imprv_R_50_FPN_1x
ご了承ください:
--nproc_per_node GPUの数に変更してください。他の設定を変更する必要はありません。合計バッチサイズは、 nproc_per_nodeに依存しません。合計バッチサイズを変更する場合は、 SOLVER.IMS_PER_BATCH Configs/fcos/fcos_r_50_fpn_1x.yamlで変更してください。OUTPUT_DIRに保存されます。--config-file変更してください。num_pos同期しなかったためです。 モデルをONNXにエクスポートする例については、ディレクトリONNXを参照してください。変換されたモデルはここからダウンロードできます。 ONNXモデルには、Pytorch> = 1.4.0(または毎晩)およびTorchvision> = 0.5.0(または毎晩)を使用することをお勧めします。
プルリクエストや問題は大歓迎です。
プロジェクトがあなたの研究に役立つなら、あなたの出版物で私たちの論文を引用することを検討してください。 Bibtexの参照は次のとおりです。
@inproceedings{tian2019fcos,
title = {{FCOS}: Fully Convolutional One-Stage Object Detection},
author = {Tian, Zhi and Shen, Chunhua and Chen, Hao and He, Tong},
booktitle = {Proc. Int. Conf. Computer Vision (ICCV)},
year = {2019}
}
@article{tian2021fcos,
title = {{FCOS}: A Simple and Strong Anchor-free Object Detector},
author = {Tian, Zhi and Shen, Chunhua and Chen, Hao and He, Tong},
booktitle = {IEEE T. Pattern Analysis and Machine Intelligence (TPAMI)},
year = {2021}
}
センターサンプリングとGiouのトリックについて@yqyaoに感謝します。また、@BearCattがボックス回帰を備えた中心分岐を配置するという彼の提案に感謝します(#89を参照)。
アカデミックな使用については、このプロジェクトは2節BSDライセンスの下でライセンスされています。詳細については、ライセンスファイルを参照してください。商業使用については、著者に連絡してください。