目录
卷积
深度学习---图像卷积与反卷积(最完美的解释)_Dean0Winchester的博客-CSDN博客_卷积
图像矩阵进行卷积的过程
区分卷积的三种模式与padding的两种模式:
卷积的三种模式full, same, valid以及padding的same, valid - 知乎
4.26找到一个很nice的up讲解:
【卷积神经网络】8分钟搞懂CNN,动画讲解喜闻乐见_哔哩哔哩_bilibili
池化
机器学习与Tensorflow(4)——卷积神经网络与tensorflow实现 - 小伙郭 - 博客园
一般池化层的filter取2*2,最大取3*3,stride取2,特征信息压缩为原来的1/4
最大池化:每个小块中的最大值
平均池化:每个小块中的平均值
池化层的作用:
- 池化层可对提取到的特征信息进行降维,
- 一方面使特征图变小,简化网络计算复杂度并在一定程度上避免过拟合的出现;一方面进行特征压缩,提取主要特征。
- 最大池采样在计算机视觉中的价值体现在两个方面:(1)、它减小了来自上层隐藏层的计算复杂度;(2)、这些池化单元具有平移不变性,即使图像有小的位移,提取到的特征依然会保持不变。由于增强了对位移的鲁棒性,这样可以忽略目标的倾斜、旋转之类的相对位置的变化,以此提高精度,最大池采样方法是一个高效的降低数据维度的采样方法。
- 需要注意的是:这里的pooling操作是特征图缩小,有可能影响网络的准确度。
传统CNN
分类使用的网络通常会在最后连接几层全连接层,它会将原来二维的矩阵(图片)压扁成一维的,从而丢失了空间信息,最后训练输出一个标量,这就是我们的分类标签。
这些抽象的特征对分类很有帮助,可以很好地判断出一幅图像中包含什么类别的物体,但是因为丢失了一些物体的细节,不能很好地给出物体的具体轮廓、指出每个像素具体属于哪个物体,因此做到精确的分割就很有难度。
经典AlexNet:前5层是卷积层,第6层和第7层分别是一个长度为4096的一维向量,第8层是长度为1000的一维向量,分别对应1000个类别的概率
栗子:下图中的猫, 输入AlexNet, 得到一个长为1000的输出向量, 表示输入图像属于每一类的概率, 其中在“tabby cat”这一类统计概率最高。
FCN(全卷积网络)
图像语义分割的输出需要是个分割图,且不论尺寸大小,但是至少是二维的。所以,我们需要丢弃全连接层,换上全卷积层。
——是从抽象的特征中恢复出每个像素所属的类别。即从图像级别的分类进一步延伸到像素级别的分类。
图像分割深度学习始于FCN,与CNN相比去掉了全连接层,全部都是卷积层
通过5次下采样提取特征,得到1/32原图大小的特征图
再通过上采样层将原图进行放大回复道输入图像相同的尺寸,从而可以对每个像素都产生了一个预测, 同时保留了原始输入图像中的空间信息, 最后在上采样的特征图上进行逐像素分类,得到分割结果。(使用的是反卷积)
最后逐个像素计算softmax分类的损失, 相当于每一个像素对应一个训练样本。
Unet
整个网络形如字母U。简单的来说,整个网络分为两个部分,左边部分负责特征提取,随着网络层加深,网络的channel逐渐变大,"图片"逐渐变小。右边的网络负责特征的还原,整个网络实际上就是一个编码-解码器。
*channel:
【CNN】理解卷积神经网络中的通道 channel_我叫鱼大的博客-CSDN博客_卷积神经网络通道数
在卷积神经网络中,channels作用是什么,channels数量越多是否提取上下文能力越强? - 知乎
左侧可视为一个编码器,右侧可视为一个解码器。编码器有五个子模块,每个子模块包含两个卷积层,每个子模块之后有一个通过max pool实现的下采样层。输入图像的分辨率是572x572, 第1-5个模块的分辨率分别是572x572, 284x284, 140x140, 68x68和32x32。由于卷积使用的是valid模式,故这里后一个子模块的分辨率等于(前一个子模块的分辨率-4)/2。解码器包含四个子模块,分辨率通过上采样操作依次上升,直到与输入图像的分辨率一致(由于卷积使用的是valid模式,实际输出比输入图像小一些)。该网络还使用了跳跃连接,将上采样结果与编码器中具有相同分辨率的子模块的输出进行连接,作为解码器中下一个子模块的输入。
需要注意的是,整个网络最出彩的地方是灰色箭头的部分。在编码的过程中,部分信息丢失了(Maxpooling和Conv2D)。在解码时,加入与之对应的编码层信息。从图上来看的话就是右边每一层网络都加入了一部分"白"色的"图片"(特征)。Unet对所有上采样的特征图与原图进行了融合,融合了更多的尺度。
U-Net和FCN非常的相似,U-Net比FCN稍晚提出来,但都发表在2015年,和FCN相比,U-Net的第一个特点是完全对称,也就是左边和右边是很类似的,而FCN的decoder相对简单,只用了一个deconvolution的操作,之后并没有跟上卷积结构。第二个区别就是skip connection,FCN用的是加操作(summation),U-Net用的是叠操作(concatenation)。这些都是细节,重点是它们的结构用了一个比较经典的思路,也就是编码和解码(encoder-decoder),早在2006年就被Hinton大神提出来发表在了nature上.
- FCN是通过特征图对应像素值的相加来融合特征的;
- U-net通过通道数的拼接,这样可以形成更厚的特征,当然这样会更佳消耗显存;
为什么医学图像:
1.医疗影像语义较为简单、结构固定。因此语义信息相比自动驾驶等较为单一,因此并不需要去筛选过滤无用的信息。医疗影像的所有特征都很重要,因此低级特征和高级语义特征都很重要,所以U型结构的skip connection结构(特征拼接)更好派上用场
2.医学影像的数据较少,获取难度大,数据量可能只有几百甚至不到100,因此如果使用大型的网络例如DeepLabv3+等模型,很容易过拟合。大型网络的优点是更强的图像表述能力,而较为简单、数量少的医学影像并没有那么多的内容需要表述,因此也有人发现在小数量级中,分割的SOTA模型与轻量的Unet并没有什么优势
3.医学影像往往是多模态的。比方说ISLES脑梗竞赛中,官方提供了CBF,MTT,CBV等多中模态的数据(这一点听不懂也无妨)。因此医学影像任务中,往往需要自己设计网络去提取不同的模态特征,因此轻量结构简单的Unet可以有更大的操作空间。
未完待续。。。