- 我们默认使用 4 卡分布式训练
- 所有 PyTorch 风格的 ImageNet 预训练网络由我们自己训练,和 论文 保持一致。 我们的 ResNet 网络是基于 ResNetV1c 的变种,在这里输入层的 7x7 卷积被 3个 3x3 取代
- 为了在不同的硬件上保持一致,我们以
torch.cuda.max_memory_allocated()
的最大值作为 GPU 占用率,同时设置torch.backends.cudnn.benchmark=False
。 注意,这通常比nvidia-smi
显示的要少 - 我们以网络 forward 和后处理的时间加和作为推理时间,除去数据加载时间。我们使用脚本
tools/benchmark.py
来获取推理时间,它在torch.backends.cudnn.benchmark=False
的设定下,计算 200 张图片的平均推理时间 - 在框架中,有两种推理模式
slide
模式(滑动模式):测试的配置文件字段test_cfg
会是dict(mode='slide', crop_size=(769, 769), stride=(513, 513))
. 在这个模式下,从原图中裁剪多个小图分别输入网络中进行推理。小图的大小和小图之间的距离由crop_size
和stride
决定,重合区域会进行平均whole
模式 (全图模式):测试的配置文件字段test_cfg
会是dict(mode='whole')
. 在这个模式下,全图会被直接输入到网络中进行推理。 对于 769x769 下训练的模型,我们默认使用slide
进行推理,其余模型用whole
进行推理
- 对于输入大小为 8x+1 (比如769),我们使用
align_corners=True
。其余情况,对于输入大小为 8x (比如 512,1024),我们使用align_corners=False
请参考 FCN for details.
请参考 PSPNet for details.
请参考 DeepLabV3 for details.
请参考 PSANet for details.
请参考 DeepLabV3+ for details.
请参考 UPerNet for details.
请参考 NonLocal Net for details.
请参考 EncNet for details.
请参考 CCNet for details.
请参考 DANet for details.
请参考 APCNet for details.
请参考 HRNet for details.
请参考 GCNet for details.
请参考 DMNet for details.
请参考 ANN for details.
请参考 OCRNet for details.
请参考 Fast-SCNN for details.
请参考 ResNeSt for details.
请参考 Semantic FPN for details.
请参考 PointRend for details.
请参考 MobileNetV2 for details.
请参考 MobileNetV3 for details.
请参考 EMANet for details.
请参考 DNLNet for details.
请参考 CGNet for details.
请参考 Mixed Precision (FP16) Training 在 BiSeNetV2 训练的样例 for details.
- 8 NVIDIA Tesla V100 (32G) GPUs
- Intel(R) Xeon(R) Gold 6148 CPU @ 2.40GHz
- Python 3.7
- PyTorch 1.5
- CUDA 10.1
- CUDNN 7.6.03
- NCCL 2.4.08
为了公平比较,我们全部使用 ResNet-101V1c 进行标定。输入大小为 1024x512,批量样本数为 2。
训练速度如下表,指标为每次迭代的时间,以秒为单位,越低越快。
Implementation | PSPNet (s/iter) | DeepLabV3+ (s/iter) |
---|---|---|
MMSegmentation | 0.83 | 0.85 |
SegmenTron | 0.84 | 0.85 |
CASILVision | 1.15 | N/A |
vedaseg | 0.95 | 1.25 |
注意:DeepLabV3+ 的输出步长为 8