什么是语义分割
对图片的每个像素都做分类。
较为重要的语义分割数据集有:VOC2012 以及 MSCOCO 。
深度学习最初流行的分割方法是,打补丁式的分类方法 ( patch classification ) 。逐像素地抽取周围像素对中心像素进行分类。由于当时的卷积网络末端都使用全连接层 ( full connected layers ) ,所以只能使用这种逐像素的分割方法。
2014年,来自伯克利的 Fully Convolutional Networks(FCN) 卷积网络,去掉了末端的全连接层。随后的语义分割模型基本上都采用了这种结构。除了全连接层,语义分割另一个重要的问题是池化层。池化层能进一步提取抽象特征增加感受域,但是丢弃了像素的位置信息。但是语义分割需要类别标签和原图像对齐,因此需要从新引入像素的位置信息。有两种不同的架构可以解决此像素定位问题。
第一种是编码-译码架构。编码过程通过池化层逐渐减少位置信息、抽取抽象特征;译码过程逐渐恢复位置信息。一般译码与编码间有直接的连接。该类架构中U-net 是最流行的。
第二种架构是膨胀卷积 ( dilated convolutions ) ,抛弃了池化层。
条件随机场的后处理 经常用来提高分割的精确度。后处理利用图像的光感强度(可理解为亮度),将周围强度相近的像素分为同一类。能提高 1-2 个百分点。
语意分割的演变https://blog.csdn.net/u013580397/article/details/78508392
U-net网络
上图展示了网络结构,它由contracting path 和 expansive path组成。contracting path是典型的卷积网络架构。它的架构是一种重复结构,每次重复中都有2个卷积层和一个pooling层,卷积层中卷积核大小均为33,激活函数使用ReLU,两个卷积层之后是一个22的步长为2的max pooling层。每一次下采样后我们都把特征通道的数量加倍。contracting path中的每一步都首先使用反卷积(up-convolution),每次使用反卷积都将特征通道数量减半,特征图大小加倍。反卷积过后,将反卷积的结果与contracting path中对应步骤的特征图拼接起来。contracting path中的特征图尺寸稍大,将其修剪过后进行拼接。对拼接后的map进行2次33的卷积。最后一层的卷积核大小为11,将64通道的特征图转化为特定深度(分类数量,二分类为2)的结果。网络总共23层。
反卷积就是转置卷积,也是一种卷积,这个就是转置卷积,由小尺寸到大尺寸的过程。也就是说反卷积也可以表示为两个矩阵乘积,很显然转置卷积的反向传播就是也是可进行的。所以说整体是Unet是可以反向传播的。
通过将编码器的每层结果拼接到译码器中得到更好的结果。
所有的卷积过程都是没有加pad的,这样就会导致每做一次卷积,特征的长宽就会减少两个像素,最后网络的输出和输入大小不一样。因为u-net作者只有30张影像,为了数据增强没有加pad.
可以实现端到端,输入一张图像,输出一张图像.
注: 部分文章提到,u-net适用于少样本的数据集.