IE盒子

搜索
查看: 102|回复: 6

小样本分割经典网络:U-Net解析

[复制链接]

3

主题

6

帖子

15

积分

新手上路

Rank: 1

积分
15
发表于 2022-12-2 12:34:43 | 显示全部楼层 |阅读模式
U-Net:Convolutional Networks for Biomedical Image Segmentation
home page: http://lmb.informatik.uni-freiburg.de/
University of Freiburg,Germany,德国弗莱堡大学
写在前面

深度学习网络通常需要大量标注好的训练数据。
本文提出一个网络以及一个训练策略,在有限的数据上对数据进行增强,避免了使用大量的数据。
网络结构包含一个不断缩小的feature map来捕捉纹理信息,包含一个与其相对称的放大过程来实现对每个像素的分类。
在ISBI竞赛上,我们用这个网络分割电子显微镜下的神经元。
这样的一个网络,我们用很少的图片,进行端到端的训练,效果就可以超过之前的方法。
使用同样的网络结构,我们赢得了ISBI细胞跟踪2015竞赛,大比分领先。
这个网络不仅仅准确,而且更快。
在2015年的GPU上,分割一个512x512的图片只用不到一秒的时间。
完整版的实现和已经训练好的网络参数在这里:
http://lmb.informatik.uni-freiburg.de/people/ronneber/u-net.



大概介绍




图1
这个模型非常优雅,结构对称,全是卷积层,没有全连接。
因为这个网络使用更少的数据,取得更好的效果
所以我们修改并扩展这个网络。
全卷积网络其实就是一个不断缩小特征图的卷积神经网络,只不过后面的一些层中,将pooling层换为unsampling操作了。
为了使得分割结果更加精确,将高分辨率的特征图与与上采样后的低分辨率特征图进行合并。因此,分割结果就更加准确。
我们在此基础上进行了修改:在上采样阶段,我们的channels数依然很大,这样会有更细节的纹理信息通过上采样向后传播。
从形状上看,上采样阶段和下采样阶段就是对称的,呈"U"形。
如何解决生物医学上的大图片所带来的显存需求急剧升高问题?
网络中没有任何全连接层,只对特征图本身进行了卷积。这样操作就使最后得到的分割遮罩就对应于原图的每个像素,输入图片中就包含所有的上下文纹理信息。
这样的只对特征图本身进行卷积的策略就可以对任何的大图片进行无缝分割,如图2所示,进行overlap-tile 策略。


图2

对于图片中心的像素,我们使用其周围区域来分割它。
对于图片边缘的像素,由于它没有周围像素,所以我们把图片内像素镜像到图片外,作为边缘像素的周围像素。
这种tiling strategy很重要,因为它的存在,我们就可以把网络应用于大图片了。一次分割大图片的一个区域即可。训练时还可以不受GPU显存的限制。

如何解决生物医学图像的数据非常少的问题?
另外一个问题, 我们只有很少的数据用于训练。所以我们使用了大量的数据增强,对有限的数据进行了elastic deformations.弹性变形。这一点在生物医学分割上也非常重要,这中形变非常适合生物组织,形变后也是栩栩如生的。具体数据增强的参数在此文的无导师特征学习部分有介绍:Discriminative un- supervised feature learning with convolutional neural networks。
如何解决待分割物体占图片像素比重很大问题?
关于细胞分割的另外一个挑战是需要分割的细胞紧密相连,相互touching的。前景部分很多,背景部分很少,所以,我们提出使用了一个加权loss,使细胞之间的缝隙有较大的训练权重。如图3所示:


图3. d图的红色部分是权重比较大的部分

解决了以上三个问题的网络可以应对各种各样的生物医学分割问题。
本文展示了它对电子显微镜栈城乡的神经元结构的分割效果(ISBI 2012系列竞赛). 我们的性能超过了Ciresan.



本文还展示了它在光学显微图片上的细胞追踪上的效果。ISBI cell tracking challenge 2015。
所以,我们在两个最具有挑战的2d透射光数据集上取得了冠军。
下面我们看看网络结构:

图1就是网络结构了,包含下采样阶段(左半部分)和上采样阶段(右半部分).
下采样阶段是典型的卷积神经网络结构。包含重复的两个3x3卷积操作(无padded 卷积).
每个卷积后面跟着一个rectified linear unit (ReLU)和一个2x2的池化层,strde=2实现下采样功能。在每一次下采样时,我们时channels数加倍。
上采样阶段的每一步结构是一样的,都包含一个上采样得到的feature map,然后对这个feature map进行 2x2 up-convolution,它使feature map 大小增加,但是channels减半,然后在channels维度上与crop过的下采样阶段的feature map进行拼接。拼接后进行两个3x3的卷积,每个卷积都跟着一个ReLU.
这个过程中的cropping是必须的,因为随着无padded convolution的进行,feature map在减少。
最后一层的1x1 convolution是为了将64channel映射为类别数。
整个网络一共有23个卷积层。
训练过程

训练数据:图片以及他们的标注:分割遮罩图



训练过程使用了caffe中已经实现的随机梯度下降法
因为unpadded convolutions,输出图片的大小比输入图片的大小少了固有的像素数。
为了尽量减少重叠,尽最大程度的利用GPU的显存,
我们使用了比输出图片大的输入粘贴图,使用了大的batch size,从而降低单张图片的 batch.
momentum=0.99,非常接近于1了,非常高。这会让网络朝着根据之前见过的大部分数据的方向去优化。
损失函数(能量函数)是在最后一层feature map上的像素级的 soft-max ,然后使用cross entropy loss loss function.




:所有位置的像素


:每个像素对应的权重【前面说过对缝隙位置要加大权重,因为缝隙位置少】


:分割的类别



每个像素权重需要预先计算出来,通过分割的gt来计算。
每个像素加权种主要是为了弥补像素种,不同类别的数据不平衡问题。强迫网络学习相互紧贴的细胞之间的像素类别。
权重公式主要从形态上考虑,如公式(2)所示。
公式中的





分别表示当前像素距离细胞边缘的第一近距离和第二近距离。


是类别平衡矩阵,每个像素对应一个值。


对细胞间隙的分割其实就像对道路的分割

模型初始化
对于一个有许多层的,并且有许多跳级连接的深度神经网络来说,一个好的权重初始化是非常重要的。对于我们这样交替使用卷积核ReLU层的网络来说,使用Gaussian分布,标准差为


,


是得到一个神经元的输入元素个数。例如如果一层是3x3的卷积核,64channels的卷积层,那么它初始化时,



再看看U-Net是如何数据增强

若要网络性能好,当数据量分厂少时,数据增强是必须的。
显微图片的话,我们主要通过平移、旋转来增强。但是随机的弹性形变对于训练一个分割网络来说十分必要。我们使用随机移位向量在3x3的网络上实现平滑的移位。向量来自于10像素标准差的Gaussian 分布,每个像素的值用双三次线性插值来计算。


弹性变换后的图像
实验结果

进行了3个分割任务。
第一个是电子显微镜下的神经元结构记录。图2上显示了这个数据集的原图与分割后的图。附件材料中有整个数据集中所有图片的分割结果。这个数据集在EM segmentation 竞赛上提供。训练数据集是30张512x512的图片,每张图片都有对应的标注。测试集是公开的,但是测试集的答案就保密的。你可以发送你的结果给竞赛组织方,以获取测试结果。
评价办法:用阈值把分割结果分成10个不同的级别,然后计算出warping error,rand error 和pixel error.



这比基于滑窗的Ciresan好多了。



warping Error 到底是啥?
rand error 到底是啥?
pixel error 到底是啥?





结论

弹性形变增强使我们只用非常少的标注图片,只在Titan GPU(6GB)上训练了10个小时。我们公开了完整的基于caffe的实现和训练好的网络参数。
u-net的这个结构可以更好的应用于其他任务。
回复

使用道具 举报

1

主题

7

帖子

11

积分

新手上路

Rank: 1

积分
11
发表于 2022-12-2 12:35:34 | 显示全部楼层
老师请教一个问题:这里为什么要这样初始化呀?
对于一个有许多层的,并且有许多跳级连接的深度神经网络来说,一个好的权重初始化是非常重要的。对于我们这样交替使用卷积核ReLU层的网络来说,使用Gaussian分布。
回复

使用道具 举报

2

主题

9

帖子

16

积分

新手上路

Rank: 1

积分
16
发表于 2022-12-2 12:36:28 | 显示全部楼层
模型输入的均值为零,方差为1,我们希望由输入计算得到的各层feature map 的均值也是零,方差也是1,那么将权重用高斯分布,也就是正态分布,然后初始化成均值为0,方差与神经元个数有关的时候,我们就能够保证各层featuremap 的均值为0,方差为1。那么为什么要保持均值为零,方差为1?这样做各层特征分布是一样的,更容易训练出鲁棒性好,使用性强的模型
回复

使用道具 举报

1

主题

8

帖子

12

积分

新手上路

Rank: 1

积分
12
发表于 2022-12-2 12:36:42 | 显示全部楼层
你好,请问crop具体操作是怎么进行的?比如原网络第1层是568x568x64,up第9层是392x392x128,这步的crop是?
回复

使用道具 举报

2

主题

8

帖子

13

积分

新手上路

Rank: 1

积分
13
发表于 2022-12-2 12:37:41 | 显示全部楼层
在568的中间crop出392出来。去掉568的前(568-392)/2和后(568-392)/2就行了
回复

使用道具 举报

1

主题

4

帖子

6

积分

新手上路

Rank: 1

积分
6
发表于 2022-12-2 12:38:02 | 显示全部楼层
你好,想请问一下:
原输入是572*572,最后输出是388*388; 那么如何跟mask进行损失计算?“在568的中间crop出392出来。去掉568的前(568-392)/2和后(568-392)/2就行了”,这个是随机裁剪?从中间crop不需要进行特征对齐么?
回复

使用道具 举报

4

主题

12

帖子

25

积分

新手上路

Rank: 1

积分
25
发表于 2025-4-7 17:58:02 | 显示全部楼层
秀起来~
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表