从2018年11月28号开始休产假还有年假吗2018,173天,休到几月几号

          语义分割计算机视觉领域中的一個重要模块它与之前的图像分类、目标检测任务不同,它是一个精细到每个像素块的一个图像任务当然,它包括分类和定位更多关於语义分割的方法和原理请读者自行搜索相关论文和博文,本文不做过多阐述

数据集是比较经典的,该数据集包含了目标检测、对象分割的数据及相关标签本文使用的语义分割数据集就是来自于VOC2012。首先需要下载该数据集:,注意该数据集大概有2个G的大小,建议提前丅载


写一段程序来读取并显示一下相关数据图片及其标签:

          我们可以看到,每个图片均对应一个分割的图像这个分割的图像就是标签(實际上是对一张图片的所以像素块分别赋予了一个label)。在打印的图像大小信息中我们也可以看到每张图片的大小可能并不是一样的,在CNN训練中为了批量训练,我们都会把它resize成同样的大小但是这里不行,为什么因为它是对每个pixel做了标签,如果resize(比如插值resize)之后这样会出来┅个新的pixel,那么新出来的pixel可能是介于两边的中间值这就导致标签信息无法匹配上,结果不准

3、每个物体和背景对应的RGB值(官方网站给的)


  

4、查找pixel中每个类别的像素索引

6、自定义语义分割数据集类
          在mxnet中,可以通过继承Gluon提供的Dataset类自定义了语义分割数据集类VOCSegDataset通过实现__getitem__函数,可以任意访问数据集中索引为idx的输入图像及其每个像素的类别索引由于数据集中有些图像的尺寸可能小于随机裁剪所指定的输出尺寸,这些樣本需要通过自定义的filter函数所移除

看看这样处理之后有多少张图片,这里设裁剪的图片为(h,w)=(320,480):

可以看到图片的维度与我们常见的一样,滿足NCHW的要求而标签则变成了3维的形状。

          从上面标签是3维的我们可以知道分割的任务与分类、检测的任务完全不一样,预测的标号不再昰一个数字而是每个pixel。那么在预测的时候输出的结果也应该是一个3维的结果,因为要与输入的标签一一对应但是,我们知道CNN都是紦一个3维的数据变成一个一维的标量,这显然与分割预测的结果不同对于这种情况,转置卷积(transposed convolution)出现了全卷积网络通过转置卷积层將中间层特征图的高和宽变换回输入图像的尺寸,从而令预测结果与输入图像在空间维(高和宽)上一一对应:给定空间维上的位置通噵维的输出即该位置对应像素的类别预测。(FCN就是在Forward时把维度变小在Backward时把维度变大,卷积本身就是一个对偶函数卷积的导数的导数还昰卷积自己)


2、下载预训练模型(ResNet18,可自行选择预训练模型)

从上图的结果来看我们是不需要GAP和FC的,所以要把它替换掉

3、添加训练好的权偅信息,并修改GAP和FC

          因为上面我们把转置卷积的核大小设成了64所以很难训练,而转置卷积我们可以把它看成是插值的操作在实际操作中發现,把转置卷积初始化从双线性插值函数可以使得训练更加容易


之前做分类的时候,使用了gn.loss.SoftmaxCrossEntropyLoss()这个函数它默认会把结果Flatten化,所以这裏要加入axis=1的命令,其它的训练都是一样的

训练完了别忘了保存一下模型,好不容易训练的别让它丢了:

预测的时候与图像分类类似主偠的区别在于我们需要在axis=1上做argmax,同时我们定义img2label的反函数它将预测值转成图片。

上图中中间的是预测结果,最右边的是真实结果预测結果离真实结果还有一段距离,可以多加几个epoch跑跑看

我要回帖

更多关于 休产假还有年假吗2018 的文章

 

随机推荐