Ce projet héberge le code de mise en œuvre de l'algorithme FCOS pour la détection d'objets, comme présenté dans notre article:
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
Le papier complet est disponible sur: https://arxiv.org/abs/1904.01355.
La mise en œuvre basée sur Detectron2 est incluse dans Adelaidet.
Un modèle en temps réel avec 46 images par seconde et 40,3 en AP sur Coco Minival est également disponible ici.
Nous utilisons 8 GPU NVIDIA V100.
Mais 4 GPU 1080TI peuvent également former un FCOS basé sur RESNET-50-FPN à part entière, car les FCOS sont économes en mémoire.
Pour les utilisateurs qui souhaitent utiliser les FCOS comme détecteur d'objets dans leurs projets, ils peuvent l'installer par PIP. Pour ce faire, courez:
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
Veuillez consulter ici pour l'utilisation de l'interface.
Cette implémentation FCOS est basée sur MaskRCNN-Benchmark. Par conséquent, l'installation est la même que le maskrcnn-benchmark d'origine.
Veuillez vérifier Installer.md pour les instructions d'installation. Vous pouvez également voir le Readme.md original de Maskrcnn-Benchmark.
Une fois l'installation terminée, vous pouvez suivre les étapes ci-dessous pour exécuter une démo rapide.
# 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
La ligne de commande d'inférence sur coco miniale divisée:
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
Veuillez noter que:
FCOS_imprv_R_50_FPN_1x.pth par le vôtre.TEST.IMS_PER_BATCH à 1.--config-file dans son fichier de configuration (dans configs / fcos) et MODEL.WEIGHT dans son fichier de poids.Pour votre commodité, nous fournissons les modèles formés suivants (plus de modèles arrivent bientôt).
Resne (x) ts:
Tous les modèles basés sur Resne (x) sont formés avec 16 images dans une normalisation par lots de mini-lots et congelé (c'est-à-dire conformément aux modèles dans maskrcnn_benchmark).
| Modèle | Formation à plusieurs échelles | Test du temps / IM | AP (minival) | Lien |
|---|---|---|---|---|
| Fcos_imprv_r_50_fpn_1x | Non | 44 ms | 38.7 | télécharger |
| Fcos_imprv_dcnv2_r_50_fpn_1x | Non | 54 ms | 42.3 | télécharger |
| Fcos_imprv_r_101_fpn_2x | Oui | 57 ms | 43.0 | télécharger |
| Fcos_imprv_dcnv2_r_101_fpn_2x | Oui | 73 ms | 45.6 | télécharger |
| Fcos_imprv_x_101_32x8d_fpn_2x | Oui | 110 ms | 44.0 | télécharger |
| Fcos_imprv_dcnv2_x_101_32x8d_fpn_2x | Oui | 143 ms | 46.4 | télécharger |
| Fcos_imprv_x_101_64x4d_fpn_2x | Oui | 112 ms | 44.7 | télécharger |
| Fcos_imprv_dcnv2_x_101_64x4d_fpn_2x | Oui | 144 ms | 46.6 | télécharger |
Notez que imprv dénote improvements dans notre tableau papier 3. Ces changements presque gratuits améliorent les performances de ~ 1,5% au total. Ainsi, nous recommandons fortement de les utiliser. Voici les modèles originaux présentés dans notre article initial.
| Modèle | Formation à plusieurs échelles | Test du temps / IM | AP (minival) | AP (test-dev) | Lien |
|---|---|---|---|---|---|
| FCOS_R_50_FPN_1X | Non | 45 ms | 37.1 | 37.4 | télécharger |
| Fcos_r_101_fpn_2x | Oui | 59 ms | 41.4 | 41.5 | télécharger |
| Fcos_x_101_32x8d_fpn_2x | Oui | 110 ms | 42.5 | 42.7 | télécharger |
| Fcos_x_101_64x4d_fpn_2x | Oui | 113 ms | 43.0 | 43.2 | télécharger |
Mobilenets:
Nous mettons à jour la normalisation par lots pour les modèles basés sur MobileNet. Si vous souhaitez utiliser SYNCBN, veuillez installer Pytorch 1.1 ou ultérieure.
| Modèle | Taille du lot d'entraînement | Formation à plusieurs échelles | Test du temps / IM | AP (minival) | Lien |
|---|---|---|---|---|---|
| Fcos_syncbn_bs32_c128_mnv2_fpn_1x | 32 | Non | 26 ms | 30.9 | télécharger |
| Fcos_syncbn_bs32_mnv2_fpn_1x | 32 | Non | 33 ms | 33.1 | télécharger |
| Fcos_bn_bs16_mnv2_fpn_1x | 16 | Non | 44 ms | 31.0 | télécharger |
[1] 1x et 2x signifient que le modèle est formé pour les itérations 90k et 180k, respectivement.
[2] Tous les résultats sont obtenus avec un seul modèle et sans aucune augmentation de données de temps de test tel que multi-échelles, retournement et etc.
[3] c128 indique que le modèle a 128 (au lieu de 256) canaux dans les tours (c.-à-d. MODEL.RESNETS.BACKBONE_OUT_CHANNELS en config).
[4] dcnv2 désigne les réseaux de convolution déformables v2. Notez que pour les modèles basés sur Resnet, nous appliquons des convolutions déformables de l'étape C3 à C5 dans les épine dorsales. Pour les modèles basés sur Resnext, seuls les stades C4 et C5 utilisent des convolutions déformables. Tous les modèles utilisent des convolutions déformables dans la dernière couche de tours de détection.
[5] Le modèle FCOS_imprv_dcnv2_X_101_64x4d_FPN_2x avec des tests à échelle multiples atteint 49,0% en AP sur le test de coco-DEV. Veuillez utiliser TEST.BBOX_AUG.ENABLED True pour activer les tests multi-échelles.
La ligne de commande suivante entraînera FCOS_IMPRV_R_50_FPN_1X sur 8 GPU avec une descente de gradient stochastique synchrone (SGD):
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
Noter que:
--nproc_per_node au nombre de GPU. Aucun autre paramètre ne doit être modifié. La taille totale du lot ne dépend pas de nproc_per_node . Si vous souhaitez modifier la taille totale du lot, veuillez modifier SOLVER.IMS_PER_BATCH dans configs / fcos / fcos_r_50_fpn_1x.yaml.OUTPUT_DIR .--config-file .num_pos entre les GPU lors du calcul de la perte. Veuillez vous référer au répertoire ONNX pour un exemple d'exportation du modèle vers ONNX. Un modèle converti peut être téléchargé ici. Nous vous recommandons d'utiliser Pytorch> = 1.4.0 (ou nocturne) et TorchVision> = 0.5.0 (ou nocturne) pour les modèles ONNX.
Toutes les demandes ou problèmes de traction sont les bienvenus.
Veuillez envisager de citer notre article dans vos publications si le projet aide vos recherches. La référence Bibtex est la suivante.
@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}
}
Nous tenons à remercier @Yqyao pour les astuces d'échantillonnage central et de Giou. Nous remercions également @BearCatt pour sa suggestion de positionner la branche centrale avec régression de la boîte (voir # 89).
Pour une utilisation académique, ce projet est sous licence en vertu de la licence BSD à 2 clauses - consultez le fichier de licence pour plus de détails. Pour un usage commercial, veuillez contacter les auteurs.