而是使用此:https://github.com/facebookresearch/maskrcnn-benchmark

使用檢測預審計的重量的E2E_MASK_RCNN-R-101-FPN_2X的示例輸出。

來自檢測的相應示例輸出。

E2E_KEYPOINT_RCNN-R-50-FPN_S1X的示例輸出使用檢測預審計的重量。
該代碼遵循檢測的實現體系結構。僅支持該功能的一部分。檢查本節以獲取更多信息。
使用此代碼,您可以...
該存儲庫最初是在jwyang/更快的rcnn.pytorch上構建的。但是,經過多次修改,結構發生了很大變化,現在與檢測更相似。我故意使所有內容與檢測到的實現相似或相同,以直接從官方預驗證的重量文件中復制結果。
該實現具有以下功能:
它是純Pytorch代碼。當然,有一些CUDA代碼。
它支持多圖像批處理培訓。
它支持多次GPU培訓。
它支持三種合併方法。請注意,僅修改ROI對齊以匹配CAFFE2中的實現。因此,使用它。
它是記憶效率的。對於數據批處理,有兩種可減少內存使用量的技術:1)方面分組:批處理中具有相似縱橫比的組圖像2)耕作:作物圖像太長。方面分組在檢測中實現,因此用於默認值。方面裁剪是jwyang/abert-rcnn.pytorch的想法,並且不用於默認。
除此之外,我還實現了一個自定義的nn.DataParallel平行模塊,該模塊可以在不同的GPU上實現不同的批處理斑點大小。查看我的nn.dataparallow部分以了解有關此的更多詳細信息。
克隆回購:
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_POOING,ROI_CROP和ROI_ALIGN。 (實際上GPU NMS從未使用過...)
請注意,如果您使用CUDA_VISIBLE_DEVICES設置GPU,請確保在編譯代碼時至少可見一個GPU。
在存儲庫下創建一個數據文件夾,
cd {repo_root}
mkdir data
可可:從可可網站下載可可圖像和註釋。
並確保將文件放置為以下結構:
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
├── ...
從這裡下載可可迷你註釋。請注意,大會完全等同於最近定義的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。建議使用上述鏈接中的咖啡館預處理模型來重現結果。順便說一句,檢測還使用了咖啡館預處理的重量。
如果您想使用Pytorch預訓練的模型,請記住將圖像從BGR轉換為RGB,並使用與Pytorch預告片預告片模型中使用的相同數據預處理(減去平均值和歸一化)。
此外,除了在上面使用預告片的權重外,您還可以通過更改模型配置文件中的相應行來使用detectron的權重,如下所示:
RESNETS:
IMAGENET_PRETRAINED_WEIGHTS: 'data/pretrained_model/R-50.pkl'
R-50-GN.PKL和R-101-GN.PKL是GN_BASELINE所需的。
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
有效_batch_size:batch_size x iter_size
改變的變化: new value of something / old value of something
以下配置選項將根據實際培訓設置自動調整:1)gpus NUM_GPUS的數量,2)批量尺寸每gpu TRAIN.IMS_PER_BATCH ,3)更新期限iter_size
SOLVER.BASE_LR :直接調整batch_size的更改。SOLVER.STEPS , SOLVER.MAX_ITER :對有效_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,數據加載程序線程的數量默認值為config.py中的4。
指定—-use_tfboard在張量板上記錄損耗。
注意:使用--dataset keypoints_coco2017訓練Kepoint-RCNN。
--iter_size與CAFFE一樣,更新網絡一次( optimizer.step() )每個iter_size迭代(向前 +向後)。這樣可以擁有更大的有效批次尺寸進行培訓。請注意,僅在網絡更新後增加步驟計數。
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
恢復培訓時,還將從檢查點還原步驟計數和優化器狀態。對於SGD優化器,優化器狀態包含每個可訓練參數的動量。
注意: --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套件上測試Mask-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}
使用--load_detectron加載檢測點的檢查點。如果有多個GPU可用,請添加--multi-gpu-testing 。
指定不同的輸出Direcry,使用--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默認為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_ResNet152_conv5_P2only_body fpn_ResNet50_conv5_body , fpn_ResNet50_conv5_P2only_body , fpn_ResNet101_conv5_body fpn_ResNet152_conv5_body fpn_ResNet101_conv5_P2only_body盒子頭: ResNet_roi_conv5_head , roi_2mlp_head , roi_Xconv1fc_head , roi_Xconv1fc_gn_head
mask_rcnn_fcn_head_v1up4convs_gn頭: mask_rcnn_fcn_head_v0upshare , mask_rcnn_fcn_head_v0up , mask_rcnn_fcn_head_v1up , mask_rcnn_fcn_head_v1up4convs
關鍵點頭: roi_pose_head_v1convX
注意:該命名與檢測中使用的命名相似。只需刪除任何準備add_ 。
目前僅支持可可。但是,整個數據集庫的實現幾乎與檢測的實現相同,因此應該很容易地添加更多的數據集。
架構特定的配置文件放在配置下。常規配置文件lib/core/config.py幾乎具有所有默認值與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.5RPN.OUT_DIM_AS_IN_DIM = True , RPN.OUT_DIM = 512 , RPN.CLS_ACTIVATION = 'sigmoid' :RPN的官方實現具有相同的輸入和輸出特徵通道,並使用SIGMOID作為FG/BG類別預測的激活功能。在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 。 基準