博客 U-Net网络结构详解

U-Net网络结构详解

   数栈君   发表于 2023-11-24 10:10  1834  0

U-Net: Convolutional Networks for Biomedical Image Segmentation

原文地址:https://zhuanlan.zhihu.com/p/43927696

前言

U-Net是比较早的使用全卷积网络进行语义分割的算法之一,论文中使用包含压缩路径和扩展路径的对称U形结构在当时非常具有创新性,且一定程度上影响了后面若干个分割网络的设计,该网络的名字也是取自其U形形状。

U-Net的实验是一个比较简单的ISBI cell tracking数据集,由于本身的任务比较简单,U-Net紧紧通过30张图片并辅以数据扩充策略便达到非常低的错误率,拿了当届比赛的冠军。

论文源码已开源,可惜是基于MATLAB的Caffe版本。虽然已有各种开源工具的实现版本的U-Net算法陆续开源,但是它们绝大多数都刻意回避了U-Net论文中的细节,虽然这些细节现在看起来已无关紧要甚至已被淘汰,但是为了充分理解这个算法,笔者还是建议去阅读作者的源码,地址如下:https://lmb.informatik.uni-freiburg.de/people/ronneber/u-net/

1. 算法详解

1.1 U-Net的网络结构

直入主题,U-Net的U形结构如图1所示。网络是一个经典的全卷积网络(即网络中没有全连接操作)。网络的输入是一张 https://www.zhihu.com/equation?tex=572%5Ctimes572
 的边缘经过镜像操作的图片(input
image tile),关于“镜像操作“会在1.2节进行详细分析,网络的左侧(红色虚线)是由卷积和Max
Pooling构成的一系列降采样操作,论文中将这一部分叫做压缩路径(contracting
path)。压缩路径由4个block组成,每个block使用了3个有效卷积和1个Max Pooling降采样,每次降采样之后Feature
Map的个数乘2,因此有了图中所示的Feature Map尺寸变化。最终得到了尺寸为 https://www.zhihu.com/equation?tex=32%5Ctimes32
 的Feature Map。

网络的右侧部分(绿色虚线)在论文中叫做扩展路径(expansive
path)。同样由4个block组成,每个block开始之前通过反卷积将Feature
Map的尺寸乘2,同时将其个数减半(最后一层略有不同),然后和左侧对称的压缩路径的Feature
Map合并,由于左侧压缩路径和右侧扩展路径的Feature Map的尺寸不一样,U-Net是通过将压缩路径的Feature
Map裁剪到和扩展路径相同尺寸的Feature
Map进行归一化的(即图1中左侧虚线部分)。扩展路径的卷积操作依旧使用的是有效卷积操作,最终得到的Feature Map的尺寸是 https://www.zhihu.com/equation?tex=388%5Ctimes388
 。由于该任务是一个二分类任务,所以网络有两个输出Feature Map。

http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/c4a783c38600491b9002893cc3dc59d4..jpg

图1:U-Net网络结构图

如图1中所示,网络的输入图片的尺寸是 https://www.zhihu.com/equation?tex=572%5Ctimes572
 ,而输出Feature Map的尺寸是 https://www.zhihu.com/equation?tex=388%5Ctimes388
,这两个图像的大小是不同的,无法直接计算损失函数,那么U-Net是怎么操作的呢?

1.2 U-Net究竟输入了什么

首先,数据集我们的原始图像的尺寸都是 https://www.zhihu.com/equation?tex=512%5Ctimes512
 的。为了能更好的处理图像的边界像素,U-Net使用了镜像操作(Overlay-tile

Strategy)来解决该问题。镜像操作即是给输入图像加入一个对称的边(图2),那么边的宽度是多少呢?一个比较好的策略是通过感受野确定。因为有效卷积是会降低Feature
Map分辨率的,但是我们希望 https://www.zhihu.com/equation?tex=512%5Ctimes512
 的图像的边界点能够保留到最后一层Feature Map。所以我们需要通过加边的操作增加图像的分辨率,增加的尺寸即是感受野的大小,也就是说每条边界增加感受野的一半作为镜像边。

http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/e17ebdeb606f2a4354ecdaac628b2573..jpg

图2:U-Net镜像操作

根据图1中所示的压缩路径的网络架构,我们可以计算其感受野:

https://www.zhihu.com/equation?tex=%5Ctext%7Brf%7D+%3D+%28%28%280+%5Ctimes2+%2B2+%2B2%29%5Ctimes2+%2B2+%2B2%29%5Ctimes2+%2B2+%2B2%29%5Ctimes2+%2B2+%2B2+%3D+60+%5Ctag%7B1%7D

这也就是为什么U-Net的输入数据是 https://www.zhihu.com/equation?tex=572%5Ctimes572
 的。572的卷积的另外一个好处是每次降采样操作的Feature Map的尺寸都是偶数,这个值也是和网络结构密切相关的。

1.3 U-Net的损失函数

ISBI数据集的一个非常严峻的挑战是紧密相邻的物体之间的分割问题。如图3所示,(a)是输入数据,(b)是Ground Truth,(c)是基于Ground Truth生成的分割掩码,(d)是U-Net使用的用于分离边界的损失权值。

http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/1889d0e92d567c9a683a13d2ee076d2e..jpg

图3:ISBI数据集样本示例

那么该怎样设计损失函数来让模型有分离边界的能力呢?U-Net使用的是带边界权值的损失函数:

https://www.zhihu.com/equation?tex=E+%3D+%5Csum_%7B%5Cmathbf%7Bx%7D%5Cin+%5COmega%7D+w%28%5Cmathbf%7Bx%7D%29+%5Ctext%7Blog%7D%28p_%7B%5Cell%28%5Cmathbf%7Bx%7D%29%7D%28%5Cmathbf%7Bx%7D%29%29+%5Ctag%7B2%7D

其中 https://www.zhihu.com/equation?tex=p_%7B%5Cell%28%5Cmathbf%7Bx%7D%29%7D%28%5Cmathbf%7Bx%7D%29
 是损失函数, https://www.zhihu.com/equation?tex=%5Cell%3A+%5COmega+%5Crightarrow+%5C%7B1%2C...%2CK%5C%7D
 是像素点的标签值, https://www.zhihu.com/equation?tex=w%3A+%5COmega+%5Cin+%5Cmathbb%7BR%7D
 是像素点的权值,目的是为了给图像中贴近边界点的像素更高的权值。

https://www.zhihu.com/equation?tex=w%28%5Cmathbf%7Bx%7D%29+%3D+w_c%28%5Cmathbf%7Bx%7D%29+%2B+w_0+%5Ccdot+%5Ctext%7Bexp%7D%28-%5Cfrac%7B%28d_1%28%5Cmathbf%7Bx%7D%29%2B+d_2%28%5Cmathbf%7Bx%7D%29%29%5E2%7D%7B2%5Csigma%5E2%7D%29+%5Ctag%7B3%7D

其中 https://www.zhihu.com/equation?tex=w_c%3A+%5COmega+%5Cin+%5Cmathbb%7BR%7D
 是平衡类别比例的权值, https://www.zhihu.com/equation?tex=d_1%3A+%5COmega+%5Cin+%5Cmathbb%7BR%7D
 是像素点到距离其最近的细胞的距离, https://www.zhihu.com/equation?tex=d_2%3A+%5COmega+%5Cin+%5Cmathbb%7BR%7D
 则是像素点到距离其第二近的细胞的距离。 https://www.zhihu.com/equation?tex=w_0
 和 https://www.zhihu.com/equation?tex=%5Csigma
 是常数值,在实验中 https://www.zhihu.com/equation?tex=w_0+%3D+10
 , https://www.zhihu.com/equation?tex=%5Csigma%5Capprox+5
 。

2. 数据扩充

由于训练集只有30张训练样本,作者使用了数据扩充的方法增加了样本数量。并且作者指出任意的弹性形变对训练非常有帮助。

3. 总结

U-Net是比较早的使用多尺度特征进行语义分割任务的算法之一,其U形结构也启发了后面很多算法。但其也有几个缺点:

  1. 有效卷积增加了模型设计的难度和普适性;目前很多算法直接采用了same卷积,这样也可以免去Feature Map合并之前的裁边操作
  2. 其通过裁边的形式和Feature Map并不是对称的,个人感觉采用双线性插值的效果应该会更好。

Reference

[1] Ronneberger O, Fischer P, Brox T. U-net: Convolutional networks
for biomedical image segmentation[C]//International Conference on
Medical image computing and computer-assisted intervention. Springer,
Cham, 2015: 234-241.

免责申明:

本文系转载,版权归原作者所有,如若侵权请联系我们进行删除!

《数据治理行业实践白皮书》下载地址:https://fs80.cn/4w2atu

《数栈V6.0产品白皮书》下载地址:
https://fs80.cn/cw0iw1

想了解或咨询更多有关袋鼠云大数据产品、行业解决方案、客户案例的朋友,浏览袋鼠云官网:
https://www.dtstack.com/?src=bbs

同时,欢迎对大数据开源项目有兴趣的同学加入「袋鼠云开源框架钉钉技术群」,交流最新开源技术信息,群号码:30537511,项目地址:
https://github.com/DTStack

0条评论
社区公告
  • 大数据领域最专业的产品&技术交流社区,专注于探讨与分享大数据领域有趣又火热的信息,专业又专注的数据人园地

最新活动更多
微信扫码获取数字化转型资料
钉钉扫码加入技术交流群