Posts

Showing posts with the label Semantic Segmentation

SegNet

Image
在结构上 ,SegNet和U-net其实大同小异,都是编码-解码的结果。 区别在于 :SegNet没有直接融合不同尺度层的信息,为了解决位置信息丢失的问题,SegNet使用了带有坐标index的池化。 如图所示, 在maxpooling时,选择最大像素的同时,记录下该像素在Feature Map的位置 。在反池化的时候,根据记录的坐标,把最大值复原到原来对应的位置,其他位置补0。后面的卷积可以把0的元素给填上。这样就解决了由于多次池化造成的位置信息的丢失。

U-net

Image
U-net 用于解决小样本的简单问题分割,比如医疗影片的分割。它遵循的基本原理与FCN一样: 1. Encoder-Decoder结构 : 前半部分为多层卷积池化,不断扩大感受野,用于提取特征。后半部分上采样恢复图片尺寸。 2. 更丰富的信息融合: 如下图中灰色箭头,更多的前后层之间的信息融合。这里是 把前面层的输出和后面层串联在一起,区别于FCN的逐元素相加 。不同的Feature map串联在一起后,接卷积层,可以让卷积核在channel上自己做出选择。注意的是,在串联之前,需要把前层的feature map crop到和后面层一样的大小。

FCN

Image
FCN 是语义分割的开山之作,主要有两点: 1.全连接层换成卷积层 2.不同尺度的信息融合FCN-8s, 16s, 32s 随着一次次的池化,感受野不断增大,语义信息不断增强,但是池化造成了像素位置信息的丢失。 eg. 1/32大小的Heatmap上采样到原图之后,在Heatmap上如果偏移一个像素,在原图上就偏移了32个像素,这是不能容忍的。 因此,虽然前面的层语义信息较少,但是位置信息较多,作者就把1/8,1/16,1/32的三个层的输出融合起来。先把1/32的输出上采样到1/16,和pool4的输出做elementwise addition,结果在上采样到1/8, 和pool3的输出各个元素相加,得到1/8的结果,上采样8倍,求loss。

Semantic Segmentation

Semantic Segmentation(语义分割): 就是按照“语义”给图像上的目标类别中每一个像素点打一个标签,使得不同种类的东西在图像上被区分开来。可以理解成像素级别的分类任务。 输入:(H*W*3)正常的图片 输出:(H*W*#class) 可以看为图片上的每一个点的One-hot表示,每一个channel对应一个class。对每一个pixel位置,都有#class个channel, 每个channel的值对应那个像素属于该class的预测概率。 评价准则: pixel accuracy; mean pixel accuracy; mean IOU; frequency weight intersection over union Pixel accuracy(像素精度): 每一类像素正确分类的个数/每一类像素的实际个数 Mean pixel accuracy(均像素精度): 每一类像素的精度平均值 Mean intersection over union(平均交并比):求出每一类的IOU取平均值 Frequency weight intersection over union: 每一类出现的频率作为权重