保研会问到做过的项目的一些知识,这里做一下复习。
一、图像分割(将类标签分给每个像素)
(一)网络结构
1、U-net提出原因
(1)通常CNN都是应用于分类,生物医学图像更关注的是分割以及定位的任务;
(2)CNN需要获取大量的训练数据,而医学图像很难获得那么大规模的数据。
(3)以往解决上面两点困难的方法是使用滑窗的方法,为每一个待分类的像素点取周围的一部分邻域输入。这样的方法有两点好处,首先它完成了定位的工作,其次因为每次取一个像素点周围的邻域,所以大大增加了训练数据的数量。但是这样的方法也有两个缺点,首先通过滑窗所取的块之间具有较大的重叠,所以会导致速度变慢;其次是网络需要在局部准确性和获取上下文之间进行取舍。因为更大的块需要更多的池化层,进而降低了定位的准确率,而小的块使网络只看到很小的一部分上下文。

2、特点
采用U-net进行分割,将二维变成三维。U-net适用于小样本任务。U-net包括下采样和上采样。
(1)U-net主要改进部分为在上采样过程中与下采样中对应的特征图进行拼接。拼接中会涉及到一个crop的操作。
3、相关知识点
(1)、crop
(2)、特征图(feature map)
某一层网络输出的概率分布
(3)、上采样:
(a)Resize,如双线性插值直接缩放,类似于图像缩放(这种方法在原文中提到)
(b)Deconvolution,也叫Transposed Convolution(周围加了一些步长)

(4)特征融合,拼接方法
(a)FCN式的逐点相加,对应caffe的EltwiseLayer层,对应tensorflow的tf.add()
(b)U-Net式的channel维度拼接融合,对应caffe的ConcatLayer层,对应tensorflow的tf.concat()
(5)损失函数 dice函数(本质上是F1-score)

(6)损失函数其他相关知识
dice coefficient就等于Jaccard(IOU)分子分母各加了一个AB交集。

(7)冻结相关操作
使用requir_grad。使用Pytorch一定要有能够求导更新的参数。
(8)FCN与U-net区别与联系
(a)对于一般的分类CNN网络,如VGG和Resnet,都会在网络的最后加入一些全连接层,经过softmax后就可以获得类别概率信息。但是这个概率信息是1维的,即只能标识整个图片的类别,不能标识每个像素点的类别,所以这种全连接方法不适用于图像分割。
而FCN提出可以把后面几个全连接都换成卷积,这样就可以获得一张2维的feature map,后接softmax获得每个像素点的分类信息,从而解决了分割问题

(b)FCN的主要思想是使用连续的层补充通常的收缩网络,在判别输出的位置添加上采样层,这些层增加了输出层的分辨率,为了定位。来自于收缩路径的高分别率与上采样输出相结合,基于这个信息,一个连续的卷积层可以学习组装更精确的输出。
而U-net与FCN的不同在于,U-net的上采样依然有大量的通道,这使得网络将上下文信息向更高层分辨率传播,作为结果,扩展路径与收缩路径对称,形成一个U型的形状(如上图所示)。 网络没有全连接层并且只是用每一个卷积层的有效部分。
(c)U-Net与FCN都是很小的分割网络,既没有使用空洞卷积,也没有后接CRF,结构简单。
(二)、图像分割套路
下采样+上采样:Convlution + Deconvlution/Resize
多尺度特征融合:特征逐点相加/特征channel维度拼接
获得像素级别的segement map:对每一个像素点进行判断类别
参考
网友评论