社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  机器学习算法

图像分割中的深度学习:U-Net 体系结构

新机器视觉 • 6 月前 • 100 次点击  


原标题 | Deep Learning for Image Segmentation: U-Net Architecture
作 者 | Ayyüce Kızrak
翻 译 | 天字一号、尼古拉斯赵四、邺调
审 校 | 鸢尾、唐里、Pita

U-Net是一种卷积神经网络(CNN)方法,由Olaf Ronneberger、Phillip Fischer和Thomas Brox于2015年首次提出,它可以更好的分割生物医学图像。

一、为什么需要分割?U-Net 能提供什么?


大体说来,分割就是将一幅图像分割为若干个部分的过程,这可以让我们把图像中的目标或纹理分割出来。因此分割常常被用于遥感影像或者肿瘤检测等应用中。
传统上有很多方法可以实现这一过程,例如点、线和边缘检测方法,阈值分割法,基于区域的聚类,基于像素的聚类,形态学的方法等等。目前也出现很多利用卷积神经网络进行分割的方法,对于那些需要进行图像分割处理的更高级的任务,这种方法是不可或缺的。在本篇文章中,我们将仔细研究这样一个架构:U-Net。
我们知道,深度学习需要大量数据集来训练模型。但这有一定的难度,对于像目标分类这样问题我们常常不能提供足够的数据量。这里的“不能”,往往意味着时间、金钱以及硬件设备。
例如,我们不可能去用手机摄像头来收集生物医学图像,而是需要复杂系统的方法来收集;此外在数据标记过程中,仅仅依靠开发人员/工程师是不够的 , 更需要大量具备专业知识和经验的人员对相关图像进行分类,对于医疗诊断等高度专业化的领域尤其如此。
相比于传统模型,U-Net在架构和基于像素的图像分割方面更成功;特别地,它在有限数据集图像上更加有效。下面,我们通过对生物医学图像分析来实现该体系结构。

二、U-Net 的独特之处


我们知道,在模型中会使用池化层来对高和宽进行降维处理,简单来说池化就是用一个像素来代表一组元素,从而实现图像降维。
最大和平均池。注意:池化可以有不同的方法,包括MaxAvg Pooling等。


 U-Net模型结构
U-Net,如上图所示,它的命名源自它的结构——网络结构可视化的结果正如一个字母“U”。U-Net 由收缩路径(左侧)和扩展路径(右侧)两部分组成!它的特殊之处在于结构后半部分的扩展路径。此外,该网络没有使用全连接层,只采用了卷积层,每个标准的卷积层后面都紧跟着一个Relu激活函数层。
下面是conv 3×3+ReLU的具体过程:

下面是up-conv 2×2的具体过程:

需要注意,这里要在图像四周的边界区域中对称地添加像素,以便可以实现连续分割图像;使用这种策略,可以将图像完全分割。此外,填充(添加像素)方法对于将U-Net模型应用于大图像上也具有重要意义;如果不这样,GPU 内存容量将限制分辨率。下图显示了我提到的镜像填充和分割的结果:

三、U-Net 和自编码器的区别


为了理解UNet独特的结构,我们将传统的分割方法“自编码器”(autoencoder)架构与Unet进行简单地比较。
在传统的自动编码器结构中,输入信息的大小逐层递减。
自编码器的模型
在这个结构中,编码器部分完成之后,解码器部分开始。线性特征表示也是在解码器部分学习的,特征的大小将逐渐增大,到了解码器的末尾,输出图像大小等于输入图像相等。
这种体系结构在保持输出大小方面是理想的,但有一个问题是,它对输入进行线性压缩,从而导致所有特性都无法传输的瓶颈。
这就是U-Net的不同之处。U-Net在解码器部分(网络的后半部分)采用反卷积,这种结构可以克服自编码器在特征传递过程中产生的特征丢失问题。


四、继续学习 U-Net


我们回到生物医学图像分割的案例。
生物医学图像中组织影像最常见的变化是变形(deformation)。我们可以模拟实际中的变形,通过弹性变形方法可以帮助我们扩充数据集,从而提高学习效果。
弹性变形的可视化表示
此外,当同一类别的某些部分相互接触时,往往很难确定边界。因此,推荐使用 loss 函数中具有较大权重的值,同时也先从背景中分离要分割的信息。
由DIC(Differential Interference Contrast,差分干涉对比度)显微镜记录的HeLa细胞。a) 原始图像;b) 标记的分割结果,用不同的颜色标识 HeLa 细胞的不同个体;c) 创建的分割蒙版(黑白);d) 以像素为单位的权重损失图,以便于网络学习边缘像素。

五、Loss 函数


Loss可以通过标准二值交叉熵(binary cross-entropy)和 Dice 损失计算,这是评估生物医学图像分割成功与否的常用性能标准。

二值交叉熵和 Dice 损失  
交并比(IoU) 是基于像素的评价标准,通常用于评估分割性能。这里考虑了目标矩阵与结果矩阵之间的不同像素比。这个度量与Dice计算也有关。


下面是IOU的可视化:
 下面是输入的图像和标签:
我们来看看与其他方法相比,U-Net在EM图像分割方面的表现: 

下面这是U-Net在PhC-U373 (a-b)和DIC-HeLa (c-d) 数据集上的分割,看起来还是比较成功的:


在这两个数据集的结果以及与先前研究的比较如下:
 当然,分割不仅仅用于医学图像。地球科学或卫星图像的遥感系统也使用分割,无人驾驶系统也是如此。毕竟,到处都有“模式”。

六、其他应用



1、TGS盐鉴定挑战
在地球各地区,地表下有大量的油气和盐层。不幸的是,很难知道大型盐矿藏在哪里。
专业的地震成像图需要专家来判断是否有盐体存在。这往往存在极大的主观性,不同专家往往会给出不同的结果。TGS(地质学数据公司)有精确的地震图像和三维成像图,他们希望Kaggle的机器学习社区能够创建一种算法来自动地、准确地确定地下目标是否是盐,因此他们举办了一个TGS Salt Identification Challenge。下面这就是U-Net在这个挑战赛中成功应用的案例:


2、地图挑战-利用分割构建缺失地图
利用卫星影像确定地图区域是U-Net另一个应用领域。事实上,可以说,随着这一领域的发展而出现的应用将极大地促进测绘和环境工程师的工作。 
这种方法不仅适用于国防工业,也适用于城市区域规划。例如,在建筑物检测竞赛中(https://www.crowdai.org/challenges/mapping-challenge),U-Net取得平均精度0.943,平均灵敏度0.954的结果。你可以在Github上下载这个U-Net模型的开源代码:https://github.com/neptune-ml/open-solution-mapping-challenge
 
地图挑战赛中Neptune.ML的结果


3、U-Net对其他深度学习方法的启示

U-Net对不同体系结构以及其他计算机视觉深度学习模型也具有极大的启发意义。
例如,ResNet的ResNet(RoR)概念就是一个例子。该结构可定义为U-Net体系结构的后半部分,适用于经典残差网络中的跳跃连接(skip connections)。
 
原始ResNet(左)-RoR方法(右)
从经典的ResNet模型架构可以看出,每个蓝色块都有一个跳过连接。在RoR 方法中,通过前面的连接将新的连接从输入添加到输出。在ResNet中有不同版本的RoR。如果你想了解更多细节,可以参看以下参考资料。

参考资料
1. U-Net: Convolutional Networks for Biomedical Image Segmentation
2. ISBI Challenge: Segmentation of neuronal structures in EM stacks
3. 5 Minute Teaser Presentation of the U-net
4. Autoencoders, Unsupervised Learning, and Deep Architectures
5. Pattern Recognition and Image Processing
6. Medical-Imaging-Semantic-Segmentation
7. Open Solution to the Mapping Challenge Competition
8. Residual Networks of Residual Networks: Multilevel Residual Networks
9. Evaluating image segmentation models

via:https://heartbeat.fritz.ai/deep-learning-for-image-segmentation-u-net-architecture-ff17f6e4c1cf



Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/164809
 
100 次点击