대신 https://github.com/facebookresearch/maskrcnn-benchmark를 사용하십시오

E2E_MASK_RCNN-R-101-FPN_2X DECTECTRON 사전 상충된 중량을 사용한 예의 출력.

Detectron의 해당 예제 출력.

E2E_KEYPOINT_RCNN-r-50-FPN_S1X 의 예의 출력 예측 중량을 이용한 출력.
이 코드는 Detectron의 구현 아키텍처를 따릅니다. 기능의 일부만 지원됩니다. 자세한 내용은이 섹션에서 확인하십시오.
이 코드를 사용하면 ...
이 저장소는 원래 Jwyang/Faster-Rcnn.pytorch에 구축되었습니다. 그러나 많은 수정 후 구조가 많이 바뀌고 이제는 Detectron과 더 유사합니다. 나는 공식 사방 파일에서 결과를 직접 재현하기 위해 Detectron의 구현과 유사하거나 동일하게 모든 것을 고의적으로 만듭니다.
이 구현에는 다음과 같은 기능이 있습니다.
순수한 Pytorch 코드입니다 . 물론 Cuda 코드가 있습니다.
다중 이미지 배치 트레이닝을 지원합니다 .
여러 GPU 교육을 지원합니다 .
세 가지 풀링 방법을 지원합니다 . CAFFE2의 구현과 일치하도록 ROI Align 만 개정됩니다. 그래서 그것을 사용하십시오.
메모리 효율적입니다 . 데이터 배치의 경우 메모리 사용을 줄이는 데 사용할 수있는 두 가지 기술이 있습니다. 1) 측면 그룹화 : 배치에서 비슷한 종횡비를 가진 그룹 이미지 2) 측면 자르기 : 너무 긴 자르기 이미지. 측면 그룹화는 Detectron에서 구현되므로 기본값에 사용됩니다. 측면 자르기는 Jwyang/Faster-Rcnn.pytorch의 아이디어이며 기본값에는 사용되지 않습니다.
그 외에도 다른 GPU에서 다른 배치 블로브 크기를 가능하게하는 맞춤형 nn.DataParallel 모듈을 구현합니다. 이에 대한 자세한 내용은 NN.DataparAllel 섹션을 확인하십시오.
레포를 복제하십시오 :
git clone https://github.com/roytseng-tw/mask-rcnn.pytorch.git
Python3에서 테스트.
CUDA 코드를 컴파일하십시오.
cd lib # please change to this directory
sh make.sh
Volta GPU를 사용하는 경우 lib/mask.sh 에서이 라인을 무의미하게하고 위의 줄에서 백 슬래시를 연기하는 것을 잊지 마십시오. CUDA_PATH /usr/loca/cuda 로 기본값을 얻습니다. 다른 경로에서 Cuda 라이브러리를 사용하려면이 라인을 그에 따라 변경하십시오.
NMS, ROI_POING, ROI_CROP 및 ROI_ALIGN을 포함하여 필요한 모든 모듈을 컴파일합니다. (실제로 GPU NMS는 사용되지 않습니다 ...)
CUDA_VISIBLE_DEVICES 사용하여 GPU를 설정하는 경우 코드를 컴파일 할 때 하나 이상의 GPU가 표시되어 있는지 확인하십시오.
Repo에서 데이터 폴더를 만들고
cd {repo_root}
mkdir data
Coco : Coco 웹 사이트에서 Coco Images 및 Annotations를 다운로드하십시오.
파일을 다음 구조로 넣으십시오.
coco
├── annotations
| ├── instances_minival2014.json
│ ├── instances_train2014.json
│ ├── instances_train2017.json
│ ├── instances_val2014.json
│ ├── instances_val2017.json
│ ├── instances_valminusminival2014.json
│ ├── ...
|
└── images
├── train2014
├── train2017
├── val2014
├──val2017
├── ...
여기에서 Coco Mini 주석을 다운로드하십시오. 미니발은 최근에 정의 된 2017 VAL 세트와 정확히 동일합니다. 마찬가지로, Valminusminival의 연합과 2014 년 열차는 2017 년 열차 세트와 정확히 동일합니다.
데이터 세트를 원하는 곳에 자유롭게 넣은 다음 data/ 폴더 아래에 데이터 세트를 소프트 링하십시오.
ln -s path/to/coco data/coco
더 나은 교육 성능을 위해 이미지를 SSD에 넣는 것이 좋습니다.
나는 백본 네트워크를 위해 Caffe의 Imagenet 사전 상환 무게를 사용합니다.
그것들을 다운로드하여 {repo_root}/data/pretrained_model 에 넣으십시오.
다음 명령을 모두 다운로드 할 수 있습니다.
argparse_color_formater , colorama , requests python tools/download_imagenet_weights.py
참고 : 카페 사전 치료 무게는 Pytorch가 사전에 발생하는 것보다 성능이 약간 향상됩니다. 위의 링크에서 Caffe 사회수 모델을 사용하여 결과를 재현하는 것이 좋습니다. 그건 그렇고, Detectron은 또한 Caffe의 사전 상환 중량을 사용합니다.
Pytorch 미리 훈련 된 모델을 사용하려면 BGR에서 RGB로 이미지를 전환하고 Pytorch 사전 제기 모델에 사용 된 것과 동일한 데이터 전처리 (마이너스 평균 및 정규화)를 사용하십시오.
위의 RESNET에 사전 처리 된 가중치를 사용하는 것 외에도 다음과 같이 모델 구성 파일에서 해당 라인을 변경하여 Detectron의 가중치를 사용할 수도 있습니다.
RESNETS:
IMAGENET_PRETRAINED_WEIGHTS: 'data/pretrained_model/R-50.pkl'
GN_BASELINES에는 R-50-GN.PKL 및 R-101-GN.PKL이 필요합니다.
x-101-32x8d.pkl, x-101-64x4d.pkl 및 x-152-32x8d-in5k.pkl은 resnext 백본에 필요합니다.
제공된 구성 파일 (configs/**/xxxx.yml)에서 아무것도 변경하지 마십시오.
환경 변수 CUDA_VISIBLE_DEVICES 사용하여 사용할 GPU를 제어하십시오.
batch_size : NUM_GPUS x TRAIN.IMS_PER_BATCH
explic_batch_size : batch_size x iter_size
Somethining의 변화 : new value of something / old value of something
다음 구성 옵션은 실제 교육 설정에 따라 자동으로 조정됩니다. 1) GPU NUM_GPUS 수, 2) GPU 열차 당 배치 크기 TRAIN.IMS_PER_BATCH , 3) 업데이트 기간 iter_size
SOLVER.BASE_LR : Batch_size의 변경에 직접 제안을 조정하십시오.SOLVER.STEPS , SOLVER.MAX_ITER : explice_batch_size의 변화에 반비례 제안을 조정하십시오.예를 들어 RES50 백본이있는 Mask-RCNN을 사용하십시오.
python tools/train_net_step.py --dataset coco2017 --cfg configs/baselines/e2e_mask_rcnn_R-50-C4.yml --use_tfboard --bs {batch_size} --nw {num_workers}
--bs 사용하여 기본 배치 크기를 GPU에 맞는 적절한 값으로 덮어 씁니다. --nw 에 대해 simliar, data loader 스레드 수는 config.py에서 기본적으로 4로 4로 기본적으로.
텐서 보드에 손실을 기록하려면 —-use_tfboard 지정하십시오.
참고 : KeyPoint-RCNN에 대한 교육시 --dataset keypoints_coco2017 사용하십시오.
--iter_size 의 사용 Caffe에서와 같이 네트워크를 한 번 업데이트하십시오 ( optimizer.step() ) 모든 iter_size 반복 (Forward + Backward). 이 방법으로 훈련을 위해 더 큰 효과적인 배치 크기를 갖기 위해. 네트워크 업데이트 후에 만 스텝 카운트가 증가합니다.
python tools/train_net_step.py --dataset coco2017 --cfg configs/baselines/e2e_mask_rcnn_R-50-C4.yml --bs 4 --iter_size 4
iter_size 기본값은 1입니다.
python tools/train_net_step.py ... --load_ckpt {path/to/the/checkpoint}
또는 DeTectron의 체크 포인트 파일 사용
python tools/train_net_step.py ... --load_detectron {path/to/the/checkpoint}
python tools/train_net_step.py ... --load_ckpt {path/to/the/checkpoint} --resume
훈련을 재개하면 STEP COUNT 및 OPTIMIEST 상태 도 검사 점에서 복원됩니다. SGD Optimizer의 경우 Optimizer 상태에는 각 트레이닝 가능한 매개 변수에 대한 운동량이 포함되어 있습니다.
참고 : --resume --load_detectron 에 대해서는 아직 지원되지 않습니다
python tools/train_net_step.py ... --no_save --set {config.name1} {value1} {config.name2} {value2} ...
python tools/train_net_step.py ... --no_save --set DEBUG True
--no_save 추가하십시오. python train_net_step.py --help
요컨대, train_net_step.py 사용하십시오.
train_net_step.py 에서 :
SOLVER.LR_POLICY: steps_with_decay 가 지원됩니다. (감가 상각) train_net.py 의 일부 구성 옵션은 효과가 없으며 알아볼 가치가 있습니다.
SOLVER.LR_POLICY , SOLVER.MAX_ITER , SOLVER.STEPS , SOLVER.LRS : 현재 교육 정책은 이러한 명령 줄 인수에 의해 제어됩니다.
--epochs : 훈련 할 에포크 수. 하나의 시대는 전체 훈련 세트를 통해 하나의 이동을 의미합니다. 기본값은 6입니다.--lr_decay_epochs : 학습 속도를 부패시키는 에포크. 붕괴는 시대의 시작 부분에서 발생합니다. 에포크는 0- 인덱스입니다. 기본값으로 [4, 5]. 더 많은 명령 줄 인수는 python train_net.py --help 를 참조하십시오.
SOLVER.WARM_UP_ITERS , SOLVER.WARM_UP_FACTOR , SOLVER.WARM_UP_METHOD : 훈련 워밍업은 지원되지 않습니다.
예를 들어, Coco2017 Val 세트의 테스트 마스크 -RCNN
python tools/test_net.py --dataset coco2017 --cfg config/baselines/e2e_mask_rcnn_R-50-FPN_1x.yaml --load_ckpt {path/to/your/checkpoint}
Detectron의 체크 포인트를로드하기 위해 --load_detectron 사용하십시오. 여러 GPU를 사용할 수 있으면 --multi-gpu-testing 추가하십시오.
다른 출력 Directry를 지정하고, 사용 --output_dir {...} 사용하십시오. {the/parent/dir/of/checkpoint}/test 로 기본값이 있습니다
python tools/infer_simple.py --dataset coco --cfg cfgs/baselines/e2e_mask_rcnn_R-50-C4.yml --load_ckpt {path/to/your/checkpoint} --image_dir {dir/of/input/images} --output_dir {dir/to/save/visualizations}
--output_dir defaults to infer_outputs .
등뼈:
ResNet50_conv4_body , ResNet50_conv5_body , ResNet101_Conv4_Body , ResNet101_Conv5_Body , ResNet152_Conv5_Body[fpn_]ResNet101_Conv4_Body , [fpn_]ResNet101_Conv5_Body , [fpn_]ResNet152_Conv5_Bodyfpn_ResNet50_conv5_body , fpn_ResNet50_conv5_P2only_body , fpn_ResNet101_conv5_body , fpn_ResNet101_conv5_P2only_body , fpn_ResNet152_conv5_P2only_body , fpn_ResNet152_conv5_body 박스 헤드 : ResNet_roi_conv5_head , roi_2mlp_head , roi_Xconv1fc_head , roi_Xconv1fc_gn_head
마스크 헤드 : mask_rcnn_fcn_head_v0upshare , mask_rcnn_fcn_head_v0up , mask_rcnn_fcn_head_v1up , mask_rcnn_fcn_head_v1up4convs , mask_rcnn_fcn_head_v1up4convs_gn
키패 인트 헤드 : roi_pose_head_v1convX
참고 : 명명은 Detectron에 사용 된 것과 유사합니다. 선불 add_ 만 제거하십시오.
현재 코코 만 지원됩니다. 그러나 전체 데이터 세트 라이브러리 구현은 Detectron과 거의 동일하므로 Detectron에서 지원하는 더 많은 데이터 세트를 추가 할 수 있어야합니다.
아키텍처 특정 구성 파일은 구성에 포함됩니다. 일반 구성 파일 lib/core/config.py 에는 Detectron과 동일한 기본값을 가진 거의 모든 옵션이 있으므로 Detectron에서 아키텍처 특정 구성을 변환하는 것이 쉽지 않습니다.
해당 기능이 아직 구현되지 않기 때문에 Detectron의 일부 옵션은 사용되지 않습니다 . 예를 들어, 테스트시 데이터 확대.
MODEL.LOAD_IMAGENET_PRETRAINED_WEIGHTS = True : imagenet 사례 무게를로드할지 여부.RESNETS.IMAGENET_PRETRAINED_WEIGHTS = '' : 사전에 잔류 네트워크 가중치로가는 경로. '/' 로 시작하면 절대 경로로 취급됩니다. 그렇지 않으면 ROOT_DIR 의 상대적인 경로로 취급하십시오.TRAIN.ASPECT_CROPPING = False , TRAIN.ASPECT_HI = 2 , TRAIN.ASPECT_LO = 0.5 : 이미지 종횡비 범위를 제한하기위한 측면 자르기 옵션.RPN.OUT_DIM_AS_IN_DIM = True , RPN.OUT_DIM = 512 , RPN.CLS_ACTIVATION = 'sigmoid' : RPN의 공식 구현에는 동일한 입력 및 출력 기능 채널이 있으며 FG/BG 클래스 예측의 활성화 기능으로 SIGMOID를 사용합니다. Jwyang의 구현에서 출력 채널 번호를 512로 수정하고 SoftMax를 활성화 기능으로 사용합니다.MODEL.NUM_CLASSES 제거하십시오. --dataset 에 의해 지정된 데이터 세트에 따라 설정됩니다.TRAIN.WEIGHTS TRAIN.DATASETS TEST.DATASETSMODEL.CONV_BODY , FAST_RCNN.ROI_BOX_HEAD ...)의 경우, 존재하면 문자열에서 add_ 제거하십시오.RESNETS.IMAGENET_PRETRAINED_WEIGHTS 가리키는 중량 파일을 가리키십시오. 그렇지 않은 경우 MODEL.LOAD_IMAGENET_PRETRAINED_WEIGHTS False 로 설정하십시오.OUTPUT_DIR: . 마지막 줄에서NUM_GPUS 옵션을 변경하지 마십시오 . 훈련을 위해 원래 배치 크기를 유추하는 데 사용되며 배치 크기 변화에 따라 학습 속도가 선형 적으로 조정됩니다. 적절한 학습 속도 조정은 배치 크기가 다른 훈련에 중요합니다.RESNETS.USE_GN: True 추가하십시오. Benchmark.md