Detectron2-基准测试-十二

52次阅读

共计 5096 个字符,预计需要花费 13 分钟才能阅读完成。

作者 |facebookresearch
编译 |Flin
来源 |Github

基准测试

在这里, 我们以一些其他流行的开源 Mask R-CNN 实现为基准, 对 Detectron2 中 Mask R-CNN 的训练速度进行了基准测试。

设置

  • 硬件:8 个带有 NVLink 的 NVIDIA V100。
  • 软件: Python 3.7, CUDA 10.0, cuDNN 7.6.4, PyTorch 1.3.0 (链接(https://download.pytorch.org/…
    TensorFlow 1.15.0rc2, Keras 2.2.5, MxNet 1.6.0b20190820.
  • 模型:端到端 R -50-FPN Mask-RCNN 模型, 使用与 Detectron 基线配置(https://github.com/facebookre…。
  • 指标:我们使用 100-500 次迭代中的平均吞吐量来跳过 GPU 预热时间。请注意, 对于 R -CNN 样式的模型, 模型的吞吐量通常会在训练期间发生变化, 因为它取决于模型的预测。因此, 该指标不能直接与 model zoo 中的 ” 训练速度 ” 相比较, 后者是整个训练过程的平均速度。

主要结果

工具 吞吐率(img / s)
Detectron2 59
maskrcnn-benchmark 51
tensorpack 50
mmdetection 41
simpledet 39
Detectron 19
matterport/Mask_RCNN 14

每个实现的链接:

  • Detectron2:https://github.com/facebookre…
  • maskrcnn-benchmark:https://github.com/facebookre…
  • tensorpack:https://github.com/tensorpack…
  • mmdetection:https://github.com/open-mmlab…
  • simpledet:https://github.com/TuSimple/s…
  • Detectron:https://github.com/facebookre…
  • matterport/Mask_RCNN:https://github.com/matterport…

每个实现的详细信息:

  • __Detectron2__:

    python tools/train_net.py  --config-file configs/Detectron1-Comparisons/mask_rcnn_R_50_FPN_noaug_1x.yaml --num-gpus 8
  • __maskrcnn-benchmark__: 通过 sed -i‘s/torch.uint8/torch.bool/g’**/*.py 使用 commit 0ce8f6f与使其与最新的 PyTorch 兼容。然后, 运行

    python -m torch.distributed.launch --nproc_per_node=8 tools/train_net.py --config-file configs/e2e_mask_rcnn_R_50_FPN_1x.yaml

    我们观察到的速度比其 model zoo 快, 这可能是由于软件版本不同所致。

  • __tensorpack__: 在提交caafda,export TF_CUDNN_USE_AUTOTUNE=0, 然后运行

    mpirun -np 8 ./train.py --config DATA.BASEDIR=/data/coco TRAINER=horovod BACKBONE.STRIDE_1X1=True TRAIN.STEPS_PER_EPOCH=50 --load ImageNet-R50-AlignPadding.npz
  • __mmdetection__: commit 4d9a5f, 应用以下 diff, 然后运行

    ./tools/dist_train.sh configs/mask_rcnn_r50_fpn_1x.py 8

    我们观察到的速度比其 model zoo 快, 这可能是由于软件版本不同所致。

    <details>
    <summary>
    (diff 使其使用相同的超参数 - 单击展开)
    </summary>

    diff --git i/configs/mask_rcnn_r50_fpn_1x.py w/configs/mask_rcnn_r50_fpn_1x.py
    index 04f6d22..ed721f2 100644
    --- i/configs/mask_rcnn_r50_fpn_1x.py
    +++ w/configs/mask_rcnn_r50_fpn_1x.py
    @@ -1,14 +1,15 @@
    # model settings
    model = dict(
      type='MaskRCNN',
    -    pretrained='torchvision://resnet50',
    +    pretrained='open-mmlab://resnet50_caffe',
      backbone=dict(
        type='ResNet',
        depth=50,
        num_stages=4,
        out_indices=(0, 1, 2, 3),
        frozen_stages=1,
    -        style='pytorch'),
    +        norm_cfg=dict(type="BN", requires_grad=False),
    +        style='caffe'),
      neck=dict(type='FPN',

@@ -115,7 +116,7 @@ test_cfg = dict(
dataset_type = ‘CocoDataset’
data_root = ‘data/coco/’
img_norm_cfg = dict(

  • mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True)
  • mean=[123.675, 116.28, 103.53], std=[1.0, 1.0, 1.0], to_rgb=False)

train_pipeline = [

dict(type='LoadImageFromFile'),
dict(type='LoadAnnotations', with_bbox=True, with_mask=True),

</details>

* __SimpleDet__: 在 commit`9187a1` 时运行

python detection_train.py –config config/mask_r50v1_fpn_1x.py


* __Detectron__: 运行

python tools/train_net.py –cfg configs/12_2017_baselines/e2e_mask_rcnn_R-50-FPN_1x.yaml

请注意, 它的许多操作都在 CPU 上运行, 因此性能受到限制。* __matterport/Mask_RCNN__: 在 commit 时 `3deaec`, 应用以下 diff ,`export TF_CUDNN_USE_AUTOTUNE=0`, 然后运行

python coco.py train –dataset=/data/coco/ –model=imagenet

 请注意, 此实现中的许多小细节可能与 Detectron 的标准不同。<details>
<summary>
 (diff 使其使用相同的超参数 - 单击展开)
</summary>

diff –git i/mrcnn/model.py w/mrcnn/model.py
index 62cb2b0..61d7779 100644
— i/mrcnn/model.py
+++ w/mrcnn/model.py
@@ -2367,8 +2367,8 @@ class MaskRCNN():

    epochs=epochs,
    steps_per_epoch=self.config.STEPS_PER_EPOCH,
    callbacks=callbacks,
  • validation_data=val_generator,
  • validation_steps=self.config.VALIDATION_STEPS,
  • validation_data=val_generator,

  • validation_steps=self.config.VALIDATION_STEPS,

      max_queue_size=100,
      workers=workers,
      use_multiprocessing=True,

diff –git i/mrcnn/parallel_model.py w/mrcnn/parallel_model.py
index d2bf53b..060172a 100644
— i/mrcnn/parallel_model.py
+++ w/mrcnn/parallel_model.py
@@ -32,6 +32,7 @@ class ParallelModel(KM.Model):

  keras_model: The Keras model to parallelize
  gpu_count: Number of GPUs. Must be > 1
  """
  • super().__init__()

    self.inner_model = keras_model
    self.gpu_count = gpu_count
    merged_outputs = self.make_parallel()

diff –git i/samples/coco/coco.py w/samples/coco/coco.py
index 5d172b5..239ed75 100644
— i/samples/coco/coco.py
+++ w/samples/coco/coco.py
@@ -81,7 +81,10 @@ class CocoConfig(Config):

IMAGES_PER_GPU = 2

# Uncomment to train on 8 GPUs (default is 1)
  • GPU_COUNT = 8

  • GPU_COUNT = 8
  • BACKBONE = “resnet50”
  • STEPS_PER_EPOCH = 50
  • TRAIN_ROIS_PER_IMAGE = 512

    # Number of classes (including background)
    NUM_CLASSES = 1 + 80 # COCO has 80 classes

@@ -496,29 +499,10 @@ if name == ‘__main__’:

  # *** This training schedule is an example. Update to your needs ***

  # Training - Stage 1
  • print(“Training network heads”)

    model.train(dataset_train, dataset_val,
          learning_rate=config.LEARNING_RATE,
          epochs=40,
  • layers=’heads’,
  • augmentation=augmentation)

  • Training – Stage 2

  • Finetune layers from ResNet stage 4 and up

  • print(“Fine tune Resnet stage 4 and up”)
  • model.train(dataset_train, dataset_val,
  • learning_rate=config.LEARNING_RATE,
  • epochs=120,
  • layers=’4+’,
  • augmentation=augmentation)

  • Training – Stage 3

  • Fine tune all layers

  • print(“Fine tune all layers”)
  • model.train(dataset_train, dataset_val,
  • learning_rate=config.LEARNING_RATE / 10,
  • epochs=160,
  • layers=’all’,
  • layers=’3+’,

          augmentation=augmentation)
    

    elif args.command == “evaluate”:


</details>



原文链接:https://detectron2.readthedocs.io/notes/benchmarks.html


欢迎关注磐创 AI 博客站:[http://panchuang.net/](http://panchuang.net/)

sklearn 机器学习中文官方文档:[http://sklearn123.com/](http://sklearn123.com)

欢迎关注磐创博客资源汇总站:[http://docs.panchuang.net/](http://docs.panchuang.net/)

正文完
 0