信誉好的企业网站建设,中美最新消息,之梦一个系统做多个网站,公司网站设计定制【图像分割】Unet 深度讲解 文章目录【图像分割】Unet 深度讲解1. 介绍1.1 背景介绍#xff1a;1.2 医学图像特点1.3 图像分割是什么2. Unet发展历程#xff08;FCN、Unet、Unet#xff09;2.1 全卷积网络-FCN2.1.1 FCN介绍#xff1a;2.1.2 FCN框架2.1.3 反卷积层2.1.4 输…【图像分割】Unet 深度讲解 文章目录【图像分割】Unet 深度讲解1. 介绍1.1 背景介绍1.2 医学图像特点1.3 图像分割是什么2. Unet发展历程FCN、Unet、Unet2.1 全卷积网络-FCN2.1.1 FCN介绍2.1.2 FCN框架2.1.3 反卷积层2.1.4 输入图像大小2.1.5 分割效果2.2 UNET2.2.1 网络架构2.2.2 valid卷积2.2.3 overlap-tile策略2.2.4 弹性变换2.4.5 损失函数2.3 UNET2.3.1 存在的问题2.3.2 网络深度2.3.3 模型架构3. 参考1. 介绍
1.1 背景介绍 自2015年以来在生物医学图像分割领域U-Net得到了广泛的应用目前已达到四千多次引用。至今U-Net已经有了很多变体。目前已有许多新的卷积神经网络设计方式但很多仍延续了U-Net的核心思想加入了新的模块或者融入其他设计理念。 编码和解码早在2006年就发表在了nature上.当时这个结构提出的主要作用并不是分割而是压缩图像和去噪声后来把这个思路被用在了图像分割的问题上也就是现在我们看到的FCN或者U-Net结构在它被提出的三年中有很多很多的论文去讲如何改进U-Net或者FCN不过这个分割网络的本质的结构是没有改动的, 即下采样、上采样和跳跃连接。
1.2 医学图像特点 图像语义较为简单、结构较为固定。我们做脑的就用脑CT和脑MRI做胸片的只用胸片CT做眼底的只用眼底OCT都是一个固定的器官的成像而不是全身的。由于器官本身结构固定和语义信息没有特别丰富所以高级语义信息和低级特征都显得很重要。 数据量少。医学影像的数据获取相对难一些很多比赛只提供不到100例数据。所以我们设计的模型不宜多大参数过多很容易导致过拟合。 原始UNet的参数量在28M左右、上采样带转置卷积的UNet参数量在31M左右而如果把channel数成倍缩小模型可以更小。缩小两倍后UNet参数量在7.75M。缩小四倍可以把模型参数量缩小至2M以内非常轻量。个人尝试过使用Deeplab v3和DRN等自然图像语义分割的SOTA网络在自己的项目上发现效果和UNet差不多但是参数量会大很多。 多模态。相比自然影像医疗影像是具有多种模态的。以ISLES脑梗竞赛为例其官方提供了CBF,MTT,CBV,TMAX,CTP等多种模态的数据。比如CBF是脑血流量CBV用于检测巨细胞病毒的。
1.3 图像分割是什么
简单的来讲就是给一张图像图像分割出一个物体的准确轮廓。也这样考虑给出一张图像 这个问题就是求一个函数从I映射到Mask。求这个函数有很多方法但是第一次将深度学习结合起来的是全卷积网络(FCN)利用深度学习求这个函数。
2. Unet发展历程FCN、Unet、Unet
2.1 全卷积网络-FCN
很多分割网络都是基于FCN做改进,我们先介绍FCN的内容。
2.1.1 FCN介绍
FCN是深度学习在图像分割的开山之作。
在此之前深度学习一般用在分类和检测问题上。由于用到CNN所以最后提取的特征的尺度是变小的。和我们分割任务要求的函数不一样我们要求的函数是输入多大输出有多大。经典的CNN在卷积层之后使用全连接层得到固定长度的特征向量进行分类全联接层softmax输出。
基于此FCN的设计使得可以接受任意尺寸的输入图像采用反卷积层对最后一个卷积层的feature map进行上采样, 使它恢复到输入图像相同的尺寸最后在上采样的特征图上进行逐像素分类。解决了语义级别的图像分割问题。由于网络中只有卷积没有全连接所以这个网络又叫全卷积网络。 2.1.2 FCN框架
输入原图得到五次池化后的特征图然后将特征map上采样回去。再将预测结果和ground truth每个像素一一对应分类做像素级别分类。也就是说将分割问题变成分类问题而分类问题正好是深度学习的强项。如果只将特征map直接上采样或者反卷积明显会丢失很多信息。FCN采取解决方法是将pool4、pool3、和特征map融合起来由于pool3、pool4、特征图大小尺寸是不一样的所以融合前应该上采样到同一尺寸。这里的融合对应元素相加。 2.1.3 反卷积层
反卷积层也是卷积层。乍看一下好像反卷积和卷积的工作过程差不多主要的区别在于反卷积输出图片的尺寸会大于输入图片的尺寸通过增加padding来实现这一操作。这里可以参考
卷积和逆卷积转置卷积详解卷积和逆卷积-nn.Conv2d与nn.ConvTranspose2d参数理解
2.1.4 输入图像大小
FCN的输入图片大小任意。
首先我们来看传统CNN为什么需要固定输入图片大小。
对于CNN一幅输入图片在经过卷积和 pooling 层时这些层是不关心图片大小的。比如对于一个卷积层它并不关心inputsize多大pooling层同理。但是在进入全连接层时feature map假设大小为n×n要拉成一条向量而向量中每个元素共n×n个作为一个结点都要与下一个层的所有结点假设4096个全连接这里的权值个数是4096×n×n而我们知道神经网络结构一旦确定它的权值个数都是固定的所以这个n不能变化n是conv5的outputsize所以层层向回看每个outputsize都要固定因此输入图片大小要固定。
而FCN的全卷积是没有全连接层的所以不要求输入图片大小固定。
2.1.5 分割效果
FCN优点是实现端到端分割。
输入是原始数据输出是最终结果缺点是分割结果细节不够好可以看到FCN8s是上面讲的pool4、pool3和特征图融合FCN16s是pool4和特征map融合FCN32s是只有特征map得出结果都是细节不够好具体可以看自行车。
此外作者还尝试了结合pool2发现效果并没有提升。
2.2 UNET
2.2.1 网络架构
Unet包括两部分
第一部分特征提取VGG类似。第二部分上采样部分。由于网络结构像U型所以叫Unet网络。特征提取部分每经过一个池化层就一个尺度包括原图尺度一共有5个尺度。上采样部分每上采样一次就和特征提取部分对应的通道数相同尺度融合但是融合之前要将其crop。这里的融合是拼接。可以看到输入是572x572的但是输出变成了388x388这说明经过网络以后输出的结果和原图不是完全对应的。 图中
蓝色箭头代表3x3的卷积操作并且stride是1padding策略是vaild因此每个该操作以后featuremap的大小会减2。红色箭头代表2x2的maxpooling操作需要注意的是此时的padding策略也是vaild这就会导致如果pooling之前featuremap的大小是奇数会损失一些信息 。所以要选取合适的输入大小因为2*2的max-pooling算子适用于偶数像素点的图像长宽。绿色箭头代表2x2的反卷积操作这个只要理解了反卷积操作就没什么问题操作会将featuremap的大小乘2。- 卷积和逆卷积转置卷积详解、 卷积和逆卷积-nn.Conv2d与nn.ConvTranspose2d参数理解灰色箭头表示复制和剪切操作可以发现在同一层左边的最后一层要比右边的第一层要大一些这就导致了想要利用浅层的feature就要进行一些剪切。
输出的最后一层使用了1x1的卷积层做了分类。最后输出了两层是前景和背景。
2.2.2 valid卷积
这三种不同模式是对卷积核移动范围的不同限制。 full mode橙色部分为image蓝色部分为filter。full模式的意思是从filter和image刚相交开始做卷积白色部分为填0。 same mode当filter的中心(K)与image的边角重合时开始做卷积运算可见filter的运动范围比full模式小了一圈。注意这里的same还有一个意思卷积之后输出的feature map尺寸保持不变(相对于输入图片)。当然same模式不代表完全输入输出尺寸一样也跟卷积核的步长有关系。same模式也是最常见的模式因为这种模式可以在前向传播的过程中让特征图的大小保持不变调参不需要精准计算其尺寸变化(因为尺寸根本就没变化)。 valid mode当filter全部在image里面的时候进行卷积运算可见filter的移动范围较same更小了。
2.2.3 overlap-tile策略
医学图像是一般相当大分割时候不可能将原图直接输入网络。所以需要用一个滑动窗口把原图扫一遍使用原图的切片进行训练或测试。如下图
红框是要分割区域。但是在切图时要包含周围区域overlap另一个重要原因是周围overlap部分可以为分割区域边缘部分提供纹理等信息。这样的策略会带来一个问题图像边界的图像块没有周围像素卷积会使图像边缘处的信息丢失。因此作者对周围像素采用了镜像扩充。下图中红框部分为原始图片其周围扩充的像素点均由原图沿白线对称得到。这样边界图像块也能得到准确的预测。另一个问题是这样的操作会带来图像重叠问题即第一块图像周围的部分会和第二块图像重叠。因此作者在卷积时只使用有效部分。可能的解释是使用valid卷积和crop裁剪最终传到下一层的只有中间原先图像块黄色框内的部分。
2.2.4 弹性变换
由于深度神经网络具有非常强的学习能力如果没有大量的训练数据会造成过拟合训练出的模型难以应用。因此对于一些没有足够样本数量的问题可以通过已有的样本对其进行变换人工增加训练样本。常用的增加训练样本的方法主要有对图像进行旋转、位移等仿射变换也可以使用镜像变换。
这里介绍弹性变换。
该算法最开始应用在mnist手写体数字识别数据集中发现对原图像进行弹性变换的操作扩充样本以后对于手写体数字的识别效果有明显的提升。因为unet论文的数据集是细胞组织的图像细胞组织的边界每时每刻都会发生不规则的畸变所以采用弹性变形的增广是非常有效的。下面来详细介绍一下算法流程 弹性变化是对像素点各个维度产生-11区间的随机标准偏差用高斯滤波对各维度的偏差矩阵进行滤波最后用放大系数控制偏差范围。因而由Axy得到的A’(xdelta_x,ydelta_y)。A‘的值通过在原图像差值得到A’的值充当原来A位置上的值。下图显示的是在固定的n下不同高斯标准差的结果第二个图的形变效果是最合适的。
2.4.5 损失函数
损失函数首先是用了个pixel-wise softmax就是每个像素对应的输出单独做softmax也就是做了w*h个softmax。
其中x可以看作是某一个像素点 l(x表示x这个点对应的类别labelpk(x)表示在x这个点的输出在类别k的softmax的激活值。那么pl(x)(x)代表什么呢根据前面的说明就可以推断出来点x在对应的label给出的那个类别的输出的激活值。
正常的交叉熵定义如第一个公式可以发现两个公式的意义其实是相同的后面的公式在外面把非label对应的结果乘0了。
然后是w(x)定义的式子
d1d2分别是像素点最近和第二近的细胞的距离。这个权重可以调整图像中某个区域的重要程度。细胞组织图像的一大特点是多个同类的细胞会紧紧贴合在一起其中只有细胞壁或膜组织分割。
因此作者在计算损失的过程中给两个细胞重合的边缘部分增加了损失的权重以此让网络更加注重这类重合的边缘信息。实际情况中是需要自己根据应用情况来设计或调整这个权重的。 下图中的a是raw imageb是ground truth segmentationc 是生成的分割掩码白色是前景黑色是背景。d是增加了像素级的loss权重后让网络对边界像素进行了更好的学习的结果。
2.3 UNET
2.3.1 存在的问题
第一个问题既然输入和输出都是相同大小的图为什么要折腾去降采样一下再上采样呢
降采样的理论意义是它可以增加对输入图像的一些小扰动的鲁棒性比如图像平移旋转等减少过拟合的风险降低运算量增加感受野的大小。上采样的最大的作用其实就是把抽象的特征再还原解码到原图的尺寸最终得到分割结果。 对于特征提取阶段浅层结构可以抓取图像的一些简单的特征比如边界颜色而深层结构因为感受野大了而且经过的卷积操作多了能抓取到图像的一些抽象特征。
第二个问题既然unet每一层抓取的特征都很重要为什么非要降四次之后才开始上采样回去呢
2.3.2 网络深度
提出疑问后 为了验证多深才好每加一个深度就训练一个网络
分别用了两个数据集Electron Microscopy 和 Cell然后测它们各自的分割表现先不要看后两个UNet就看这个不同深度的U-Net的表现(黄色条形图)。
我们可以看出不是越深越好它背后的传达的信息就是不同层次特征的重要性对于不同的数据集是不一样的并不是说设计一个原论文给出的那个结构就一定对所有数据集的分割问题都最优。
最终得出的结论是不同数据集的最优的深度是不一样的, 但是总不能把所有不同深度的U-Net都训练一遍太耗时间了于是提出unet 。
2.3.3 模型架构
这个综合长连接和短连接的架构就是UNet。
UNet的优势是可以抓取不同层次的特征将它们通过特征叠加的方式整合加入更浅的U-Net结构使得融合时的特征图尺度差异更小。UNet同时也引进了很多参数占用内存也变大。 3. 参考
【1】https://blog.csdn.net/a8039974/article/details/109645616