而是使用此: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 。 基准