이 프로젝트는 논문에 제시된대로 객체 감지를위한 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를 사용합니다.
그러나 41080Ti GPU는 FCO가 메모리 효율적이기 때문에 본격적인 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-Benchmark를 기반으로합니다. 따라서 설치는 원래 MaskRCNN-Benchmark와 동일합니다.
설치 지침은 install.md를 확인하십시오. MaskRcnn-Benchmark의 원래 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
Coco Minival Split의 추론 명령 줄 :
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 구성 파일 (configs/fcos) 및 MODEL.WEIGHT 로 변경하십시오.편의를 위해 다음과 같은 훈련 된 모델을 제공합니다 (더 많은 모델이 곧 출시 될 예정입니다).
Resne (x) ts :
모든 Resne (x) T 기반 모델은 미니 배치 및 냉동 배치 정규화로 16 개의 이미지로 훈련됩니다 (즉, MaskRCN_Benchmark의 모델과 일치).
| 모델 | 다중 규모 교육 | 테스트 시간 / 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_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 논문 표 3의 improvements 나타냅니다. 이러한 거의 비용없는 변화는 총 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 대신)이 타워에 128 개를 가지고 있음을 나타냅니다 (예 : config의 MODEL.RESNETS.BACKBONE_OUT_CHANNELS ).
[4] dcnv2 변형 가능한 컨볼 루션 네트워크 v2를 나타낸다. RESNET 기반 모델의 경우 백본에서 C3 단계에서 C5로 변형 가능한 컨볼 루션을 적용합니다. RessNext 기반 모델의 경우 단계 C4 및 C5 만 변형 가능한 컨볼 루션을 사용합니다. 모든 모델은 마지막 탐지기 타워의 마지막 층에서 변형 가능한 컨볼 루션을 사용합니다.
[5] 모델 FCOS_imprv_dcnv2_X_101_64x4d_FPN_2x 다중 규모 테스트를 통해 Coco Test-Dev에서 AP에서 49.0%를 달성합니다. 다중 규모 테스트를 활성화하려면 TEST.BBOX_AUG.ENABLED True 사용하여 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 gpus 수로 변경하십시오. 다른 설정을 변경할 필요가 없습니다. 총 배치 크기는 nproc_per_node 에 의존하지 않습니다. 총 배치 크기를 변경하려면 configs/fcos_r_50_fpn_1x.yaml에서 SOLVER.IMS_PER_BATCH 변경하십시오.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 라이센스에 따라 라이센스가 부여됩니다. 자세한 내용은 라이센스 파일을 참조하십시오. 상업적으로 사용하려면 저자에게 문의하십시오.