PyTorch中的MIT ADE20K数据集的语义分割

PyTorch中的MIT ADE20K数据集的语义分割

代码地址:https://github.com/CSAILVision/semantic-segmentation-pytorch

Semantic Understanding of Scenes through ADE20K Dataset. B. Zhou, H. Zhao, X. Puig, T. Xiao, S. Fidler, A. Barriuso and A. Torralba. International Journal on Computer Vision (IJCV), 2018. (https://arxiv.org/pdf/1608.05442.pdf)

Scene Parsing through ADE20K Dataset. B. Zhou, H. Zhao, X. Puig, S. Fidler, A. Barriuso and A. Torralba. Computer Vision and Pattern Recognition (CVPR), 2017. (http://people.csail.mit.edu/bzhou/publication/scene-parse-camera-ready.pdf)

这是MIT ADE20K场景解析数据集(http://sceneparsing.csail.mit.edu/)上语义分割模型的PyTorch实现。

ADE20K是MIT Computer Vision团队发布的最大的用于语义分割和场景解析的开源数据集。请通过下面的链接找到数据集和在Caffe和Torch7上的实现的存储库:https : //github.com/CSAILVision/sceneparsing

如果只是想玩演示,请尝试以下链接:http : //scenesegmentation.csail.mit.edu可以上传自己的照片并进行解析!

所有预训练的模型都可以在以下位置找到:http ://sceneparsing.csail.mit.edu/model/pytorch

[从左至右:测试图像,地面真理,预测结果]

可以在以下位置找到语义类别的颜色编码:https ://docs.google.com/spreadsheets/d/1se8YEtb2detS7OuPE86fXGyD269pMycAWe2mtKUj2W8/edit?usp=sharing

更新

  • 现在支持HRNet模型。
  • 使用配置文件来存储参数解析器中的大多数选项。选项的定义在中详细介绍config/defaults.py。
  • 在数据预处理中遵循Pytorch惯例(RGB [0,1],减去均值,除法std)。

强调

PyTorch上的同步批处理规范化

此模块在训练期间计算所有设备上的均值和标准差。凭经验发现,合理的大批量批量对于细分很重要。感谢毛嘉元先生的贡献,有关详细信息,请参阅Synchronized-BatchNorm-PyTorch

该实现易于使用,因为:

  • 是纯Python,没有C ++额外的扩展库。
  • 与PyTorch的实现完全兼容。具体来说,使用无偏方差更新移动平均值,并使用sqrt(max(var,eps))代替sqrt(var + eps)。
  • 非常有效,仅比UnsyncBN慢20%到30%。

动态输入比例,可使用多个GPU进行训练

对于语义分割的任务,最好在训练过程中保持图像的长宽比。因此,重新实现了该DataParallel模块,并使其支持在python dict中将数据分发到多个GPU,以便每个gpu可以处理不同大小的图像。同时,数据加载器的操作也不同。

现在,数据加载器的批处理大小始终等于GPU的数量,每个元素将被发送到GPU。也与多处理兼容。请注意,用于多处理数据加载器的文件索引存储在主进程中,这与目标每个工作人员维护自己的文件列表的目标相矛盾。因此,使用了一个技巧,尽管主进程仍为数据加载器提供__getitem__功能索引,但只是忽略了此类请求并发送了一个随机批处理指令。另外,如果直接使用上述技巧,则由数据加载器派生的多个工作程序都具有相同的种子,会发现多个工作程序将产生完全相同的数据。因此,添加了一行代码,该代码为numpy.random 在激活数据加载器中的多个工作程序之前。

最先进的模型

  • PSPNet是场景解析网络,通过金字塔池模块(PPM)聚合全局表示。是ILSVRC'16 MIT场景解析挑战赛的获胜者模型。有关详细信息,请参阅https://arxiv.org/abs/1612.01105
  • UPerNet是基于特征金字塔网络(FPN)和金字塔池模块(PPM)的模型。不需要膨胀卷积,运算符既耗时又消耗内存。无需花哨,与PSPNet相比甚至更好,同时需要更短的训练时间和更少的GPU内存。有关详细信息,请参阅https://arxiv.org/abs/1807.10221
  • HRNet是最近提出的模型,该模型保留了整个模型的高分辨率表示,而没有传统的瓶颈设计。在一系列像素标记任务上实现了SOTA性能。有关详细信息,请参阅https://arxiv.org/abs/1904.04514

支持机型

将模型分为编码器和解码器,其中通常直接从分类网络修改编码器,并且解码器由最终卷积和上采样组成。在config文件夹中提供了一些预配置的模型。

编码器:

  • MobileNetV2dilated
  • ResNet18 / ResNet18dilated
  • ResNet50 / ResNet50dilated
  • ResNet101 / ResNet101dilated
  • HRNetV2(W48)

解码器:

  • C1(一个卷积模块)
  • C1_deepsup(C1 +深度监控技巧)
  • PPM(金字塔合并模块,有关详细信息,请参阅PSPNet。)
  • PPM_deepsup(PPM +深度监督技巧)
  • UPerNet(金字塔池+ FPN头,有关详细信息,请参阅UperNet。)

性能:

重要说明:存储库中的基础ResNet是自定义的(不同于Torchvision中的ResNet)。基本模型将在需要时自动下载。

系统结构

多尺度测试

平均IOU

像素精度(%)

总分

推理速度(fps

MobileNetV2dilated + C1_deepsup

没有

34.84

75.75

54.07

17.2

33.84

76.80

55.32

10.3

MobileNetV2dilated + PPM_deepsup

没有

35.76

77.77

56.27

14.9

36.28

78.26

57.27

6.7

ResNet18dilated + C1_deepsup

没有

33.82

76.05

54.94

13.9

35.34

77.41

56.38

5.8

ResNet18dilated + PPM_deepsup

没有

38.00

78.64

58.32

11.7

38.81

79.29

59.05

4.2

ResNet50dilated + PPM_deepsup

没有

41.26

79.73

60.50

8.3

42.14

80.13

61.14

2.6

ResNet101dilated + PPM_deepsup

没有

42.19

80.59

61.39

6.8

42.53

80.91

61.72

2.0

UperNet50

没有

40.44

79.80

60.12

8.4

41.55

80.23

60.89

2.9

UperNet101

没有

42.00

80.79

61.40

7.8

42.66

81.01

61.84

2.3

HRNetV2

没有

42.03

80.77

61.40

5.8

43.20

81.47

62.34

1.9

该训练是在具有8个NVIDIA Pascal Titan Xp GPU(12GB GPU内存)的服务器上进行基准测试的,推理速度是对单个NVIDIA Pascal Titan Xp GPU进行可视化的基准测试。

环境

该代码是在以下配置下开发的。

  • 硬件:> = 4个GPU用于训练,> = 1个GPU用于测试(进行相应设置[--gpus GPUS])
  • 软体:Ubuntu 16.04.3 LTS,CUDA> = 8.0Python> = 3.5PyTorch> = 0.4.0
  • 依赖项:numpy,scipy,opencv,yacs,tqdm

快速入门:使用训练有素的模型对图像进行测试

  1. 这是一个对单个图像进行推断的简单演示:

chmod + x demo_test.sh

./demo_test.sh

该脚本下载经过训练的模型(ResNet50dilated + PPM_deepsup)和测试图像,运行测试脚本,并将预测的分段(.png)保存到工作目录。

  1. 要在图像或图像文件夹($PATH_IMG)上进行测试,只需执行以下操作:

python3 -u test.py --imgs $PATH_IMG --gpu $GPU --cfg $CFG

训练

  1. 下载ADE20K场景解析数据集:

chmod + x下载_ADE20K.sh

./download_ADE20K.sh

  1. 通过选择要使用的GPU($GPUS)和配置文件($CFG)来训练模型。训练期间,默认情况下,检查点保存在文件夹中ckpt。

python3 train.py --gpus $ GPUS --cfg $ CFG

  • 要选择要使用的GPU,可以执行--gpus 0-7或--gpus 0,2,4,6。

例如,可以从提供的配置开始:

  • 训练MobileNetV2dilated + C1_deepsup

python3 train.py --gpus GPUS --cfg config / ade20k-mobilenetv2dilated-c1_deepsup.yaml

  • 训练ResNet50dilated + PPM_deepsup

python3 train.py --gpus GPUS --cfg config / ade20k-resnet50dilated-ppm_deepsup.yaml

  • 训练UPerNet101

python3 train.py --gpus GPUS --cfg config / ade20k-resnet101-upernet.yaml

  1. 也可以在命令行中覆盖选项,例如 python3 train.py TRAIN.num_epoch 10 。

评价

  1. 在验证集上评估训练有素的模型。将VAL.visualize True参数添加到输出可视化效果中,如预告片所示。

例如:

  • 评估MobileNetV2dilated + C1_deepsup

python3 eval_multipro.py --gpus GPUS --cfg config / ade20k-mobilenetv2dilated-c1_deepsup.yaml

  • 评估ResNet50dilated + PPM_deepsup

python3 eval_multipro.py --gpus GPUS --cfg config / ade20k-resnet50dilated-ppm_deepsup.yaml

  • 评估UPerNet101

python3 eval_multipro.py --gpus GPUS --cfg config / ade20k-resnet101-upernet.yaml

与其项目整合

可以通过安装该库pip以轻松与另一个代码库集成

点安装git + https:
pip install git+https://github.com/CSAILVision/semantic-segmentation-pytorch.git@master

现在,可以轻松地以编程方式使用此库。例如

from mit_semseg.config import cfg
from mit_semseg.dataset import TestDataset
from mit_semseg.models import ModelBuilder, 
原文地址:https://www.cnblogs.com/wujianming-110117/p/13298868.html