U-net —— 一种在医学领域应用的图像分割网络模型
今天要讲的模型属于深度学习(准确地说应该是卷积神经网络)在医学图像领域的应用,主要参考了一篇2015年的paper《U-Net: Convolutional Networks for Biomedical Image Segmentation》,正好通过这篇paper的学习来了解一下深度学习到底在图像问题领域是怎样运作的。
我之前接触过简单的深度学习在图像领域的应用,就是对于手写数字1-9的识别,本质来讲这是一个图像分类的任务。其实就是将原始的图像作为输入,通过一系列的卷积神经网络和pooling操作将原始的由2维像素点构成的图像编码成一个1维的向量,然后对这个1维的向量进行分类。今天将要接触的任务是医疗图像的分割,也就是从一副医疗图像识别出特定的人体部位,比方说“前列腺”、“肝脏”,其实本质上也是一个分类任务,只不过这次针对的对象不再是整个一副图像,而是图像中每一个像素点是不是属于该目标组织。从图像分割的任务的特性可以看出来,在这种情况下模型的输出将会是一个和输入图像尺寸一致的东西,这个东西每一个元素代表对应输入像素属于目标组织的概率。
在了解了图像分割任务后,我们首先来展示一下u-net的网络结构图:
这个u-net就得名于它的形状,像一个英文字母“U”。左边是一个从上到下,一步一步从原始图像抽取特征(即原始图像本质信息)的过程;右边是一个从小到上,一步一步从图像本质特征还原目标信息的过程。可以看到整个网络里用的全部都是卷积神经网络结构。图像中长方条上方的数字代表了这一层的feature map的个数,长方条下方的数字代表了这层feature map的尺寸大小。左边的红色箭头代表了max pooling操作即下采样过程,右边的绿色箭头代表了上采样过程。在这个网络中上采样使用的是双线性插值算法,(其实反卷积 也可以作为上采样的一种策略)。图中灰色的箭头,代表了信息流的复制工作,图中白色方框和蓝色方框的拼接是在第三维度上的拼接,最后的conv1*1操作是为了使模型最后的输出层feature map的个数和最终的分类类别数是一致的。整个模型的损失函数整体上还是一个交叉熵,只不过这次是所有像素的交叉熵之和,但是为了体现出不同像素的重要程度不同,距离识别目标物体边界越近的点,应该有越重要的权重,因为目标检测的目的就是找出一个合理的边界把目标组织和背景组织分隔开。这里进行了一个加权操作,具体公式如下:
这个就是衡量一个像素点的具体公式,其在paper里定义如下:
其中是一个和x类别频率相关的函数映射,是像素点距离最近的边界点的距离,是像素点距离第二最近边界点的距离。和是模型的两个超参数。
整个模型已经介绍完了,但是需要注意的是在训练这种识别医学领域的图像问题的时候,进行必要的数据增强即“Data Augmentation”工作是十分重要的,对原始图像进行拉伸,放缩,平移变换会大大提高模型的准确率,因为在实际的应用场景中,人体内的器官会随时处于不同的转态,有时候被其他器官挤到的话形状就会变得扭曲一些。
关于模型的损失函数,还有一种称之为“Dice”的损失函数,相对于交叉熵损失,它更加强调整体识别的准确率,即某一块组织整体的识别率,计算公式如下(Dice损失函数来源于Dice系数,是用来衡量两个集合相似度的方法策略):
其中,代表的是真实的label,代表的是我们预测的label的概率。