Unet网络

Pytorch搭建Unet语义分割平台

什么是Unet模型

Unet是一个优秀的语义分割模型,其主要执行过程与其他语义分割模型类似. Unet可以分为三个部分,如下图所示:

第一部分是 主干特征提取部分 ,我们可以利用主干部分获得一个又一个的特征层,Unet的主干特征提取1部分与VGG相似1,为卷积核最大池化的堆叠.利用主干特征提取部分我们可以获得五个初步有效特征层,在第二步中,我们会利用这五个有效特征层可以进行特征融合. 第二部分是 加强特征提取部分 ,我们可以利用主干部分1获取到的五个初步有效特征层进行上采样,并且进行特征融合,获得一个最终的,融合了所有特征的有效特征层. 第三部分是 预测部分 ,我们会利用最终获得的最后一个有效特征层对每一个特征点进行分类,相当于对每一个像素点进行分类.

test.jpg

预测网络

1.主干网络介绍

Unet的主干特征提取部分由卷积+最大池化1组成1,整体结构与VGG类似

本文所采用的主干特征提取网络为VGG16,这样也方便使用imagenet上的预训练权重.

VGG是由Simonyan 和Zisserman在文献《Very Deep Convolutional Networks for Large Scale Image Recognition》中提出卷积神经网络模型,其名称来源于作者所在的牛津大学视觉几何组(Visual Geometry Group)的缩写。

该模型参加2014年的 ImageNet图像分类与定位挑战赛,取得了优异成绩:在分类任务上排名第二,在定位任务上排名第一。 它的结构如下图所示:

这是一个VGG16被用到烂的图,但确实很好的反应了VGG16的结构。

当我们使用VGG16作为主干特征提取网络的时候,我们只会用到两种类型的层,分别是卷积层和最大池化层。

当输入的图像大小为512x512x3的时候,具体执行方式如下: 1、conv1:进行两次[3,3]的64通道的卷积,获得一个[512,512,64]的初步有效特征层,再进行2X2最大池化,获得一个[256,256,64]的特征层。 2、conv2:进行两次[3,3]的128通道的卷积,获得一个[256,256,128]的初步有效特征层,再进行2X2最大池化,获得一个[128,128,128]的特征层。 3、conv3:进行三次[3,3]的256通道的卷积,获得一个[128,128,256]的初步有效特征层,再进行2X2最大池化,获得一个[64,64,256]的特征层。 4、conv4:进行三次[3,3]的512通道的卷积,获得一个[64,64,512]的初步有效特征层,再进行2X2最大池化,获得一个[32,32,512]的特征层。 5、conv5:进行三次[3,3]的512通道的卷积,获得一个[32,32,512]的初步有效特征层。

2.加强特征提取结构

test.jpg

Unet所使用的加强特征提取网络是一个U的形状

利用第一步我们可以获得五个初步的有效特征层,在加强特征提取网络这里,我们会利用这五个初步的有效特征层进行特征融合,特征融合的方法就是对特征层进行上采样并且进行堆叠. 为了方便网络的构建与更好的通用性,我们的Unet和上图的Unet结构有些许不同,在上采样时直接进行两倍上采样再进行特征融合,最终获得的特征层和输入图片的高宽相同.

具体示意图如下:

3.利用特征获得预测结果

利用1,2步,我们可以获取输入进来的图片的特征,此时,我们需要利用特征获得预测结果.

利用特征获得预测结果的过程为: 利用一个1x1卷积进行通道调整,将最终特征层的通道数调整成num_classes.

二 训练部分

使用训练文件采用VOC的格式 语义分割模型训练的文件分为两部分 一部分是原图 一部分是标签 原图就是普通的RGB图像,标签就是灰度图或者8位彩色图。

原图的shape为[height, width, 3],标签的shape就是[height, width],对于标签而言,每个像素点的内容是一个数字,比如0、1、2、3、4、5……,代表这个像素点所属的类别。

语义分割的工作就是对原始的图片的每一个像素点进行分类,所以通过预测结果中每个像素点属于每个类别的概率与标签对比,可以对网络进行训练.

loss解析

本文所使用的LOSS由两部分组成:

  1. Cross Entropy Loss
  2. Dice Loss

Cross Entropy Loss 交叉熵损失 当语义分割平台利用Softmax对像素点进行分类的时候,进行使用

Dice loss将语义分割的评价指标作为Loss,Dice系数是一种集合相似度度量函数,通常用于计算两个样本的相似度,取值范围在[0,1]

计算公式 如下:

就是预测结果和真实结果的交乘上2,除上预测结果加上真实结果。其值在0-1之间。越大表示预测结果和真实结果重合度越大。所以Dice系数是越大越好。

如果作为LOSS的话是越小越好,所以使得Dice loss = 1 - Dice,就可以将Loss作为语义分割的损失了。


最后分割效果贴一张

iimg.jpg

updatedupdated2021-05-212021-05-21