多尺度上下文聚合网络培训时间 CamVid数据

将驾驶场景的图像分割为语义组件类

该模型于2016年发布,是第一个系统使用扩展卷积进行像素分类的模型。在VGG型前端增加了一个上下文聚合模块,其特征是具有指数级递增膨胀的卷积。

层数:53|参数计数:134313443|培训大小:537 MB|

训练集信息

性能

示例

资源检索

获取预先训练过的网:

在[1]中:=
NetModel[“基于CamVid数据训练的多尺度上下文聚合网络”]
输出[1]=

评估功能

编写评估函数来处理输入图像的填充和平铺:

在[2]中:=
netevaluate[img_,device_:“CPU”]:=块[{net,marginImg,inputSize,windowSize,zoom,imgPad,imgSize,takeSpecs,tiles,marginTile,prob},(*参数*)net=NetModel[“基于CamVid数据训练的多尺度上下文聚合网络”];marginImg=186;inputSize={9001100};缩放=8;windowSize=输入大小-2*marginImg;(*填充和平铺输入*)imgPad=图像填充[img,marginImg,“反射”];imgSize=图像尺寸[imgPad];takeSpecs=表格[{{i,i+inputSize[[1]]-1},{j,j+input1Size[[2]-1}},{i,1,imgSize[[2]]-2*marginImg,窗口大小[[1]]},{j,1,imgSize[[1]]-2*marginImg,窗口大小[[1]]}];tiles=地图[ImageTake[imgPad,序列@@#]&,takeSpecs,{2}];(*制作所有瓷砖900x1100*)marginTile=反向[windowSize]-Mod[imgSize-2*marginImg,反转@windowSize];tiles=MapAt[ImagePad[#,{{0,marginTile[[1]]},{0,0}},“反射”]&,tiles,{All,-1}];tiles=MapAt[ImagePad[#,{{0,0},{marginTile[[2],0}},“反射”]&,tiles,{-1,All}];(*在瓦片上运行net*)prob=net[平铺@瓷砖,无,目标设备->设备];prob=阵列展平@ArrayReshape[prob,连接[尺寸@瓷砖, {66, 91, 11}]];(*按缩放因子对prob重新采样并修剪额外的分幅边距*)prob=ArrayResample[prob,Dimensions[prob]*{缩放,缩放,1},重新采样->“Linear”];prob=取[prob,序列@@Reverse[图像尺寸@img],全部];(*预测类*)NetExtract[net,“输出”]@prob]

标签列表

定义此模型的标签列表。模型输出中的整数对应于标签列表中的元素:

在[3]中:=
labels={“建筑物”,“树”,“天空”,“汽车”,“标志,符号”,“道路”,“行人”,“栅栏”,“柱子,柱子”,“人行道”,“自行车”};

基本用法

获取给定图像的分段掩码:

在[4]中:=
(*评估此单元格以获取示例输入*)CloudGet[“https://www.wolframcloud.com/obj/eba0964d-1078-4a01-b7b1-ea8b9afee76c"]

检查检测到的类别:

在[5]中:=
检测到=删除副本@扁平@掩模
输出[5]=
在[6]中:=
标签[[检测到的]]
输出[6]=

可视化遮罩:

在[7]中:=
着色[mask]
输出[7]=

高级可视化

将类与颜色关联:

在[8]中:=
colors=应用[RGB颜色,{{70,70,70},{107,142,35},}70,130,180,{0,0,142},[220,220,0}
输出[8]=
在[9]中:=
indexToColor=线程[范围[11]->颜色];

编写一个函数,用图例覆盖图像和遮罩:

在[10]中:=
result[img_,device_:“CPU”]:=块[{掩码,类,maskPlot,合成},mask=网络评估[img,设备];classes=删除重复项[压扁@遮罩];maskPlot=着色[mask,ColorRules->indexToColor];合成=图像合成[img,{maskPlot,0.5}];传奇人物[行[Image[#,ImageSize->Large]和/@{maskPlot,composition}],SwatchLegend[indexToColor[[类,2]],标签[[类]]]]

检查结果:

在[11]中:=
(*评估此单元格以获取示例输入*)CloudGet[“https://www.wolframcloud.com/obj/77c48e7d-651a-47dc-b45a-3955ef330620"]
输出[11]=
在[12]中:=
(*评估此单元格以获取示例输入*)CloudGet[“https://www.wolframcloud.com/obj/ef029a30-5ea5-40b0-938a-0186d21dded0"]
输出[12]=

净信息

检查网络中所有阵列的参数数量:

在[13]中:=
网络信息[NetModel[“在CamVid上训练的多尺度上下文聚合网络\数据“],”ArraysElementCounts“]
输出[13]=

获取参数总数:

在[14]中:=
网络信息[NetModel[“在CamVid上训练的多尺度上下文聚合网络\数据“],”ArraysTotalElementCount“]
输出[14]=

获取层类型计数:

在[15]中:=
网络信息[NetModel[“在CamVid上训练的多尺度上下文聚合网络\数据“],”层类型计数“]
输出[15]=

显示摘要图形:

在[16]中:=
网络信息[NetModel[“在CamVid上训练的多尺度上下文聚合网络\数据“],”SummaryGraphic“]
输出[16]=

导出到MXNet

导出将网络转换为可在MXNet中打开的格式:

在[17]中:=
jsonPath=Export[FileNameJoin[{$TemporaryDirectory,“net.json”}],NetModel[“在CamVid上训练的多尺度上下文聚合网络\数据“],”MXNet“]
输出[17]=

导出还创建了网络参数包含参数的文件:

在[18]中:=
paramPath=FileNameJoin[{DirectoryName[jsonPath],“net.params”}]
退出[18]=

获取参数文件的大小:

在[19]中:=
文件字节计数[paramPath]
输出[19]=

大小与资源对象的字节数类似:

在[20]中:=
资源对象[“基于PASCAL VOC2012的多尺度上下文聚合网络\数据“][”ByteCount“]
输出[20]=

将MXNet网络表示为图形:

在[21]中:=
导入[jsonPath,{“MXNet”,“NodeGraphPlot”}]
输出[21]=

要求

Wolfram语言11.3(2018年3月)或以上

资源历史记录

参考