1、医学图像数据量少怎么解决?
-
根据数据特性,对数据进行数据增强处理,目前分为线上数据增强和线下数据增强。
- 线下数据增强,未训练之前对数据进一步扩增。适合小数据量。
- 线上数据增强,在训练时,对小批量的图像进行增强。适合大数据集。
-
优化模型
- 简化模型
- 正则化
- 集成学习
- dropout
-
腾讯提出了一个用于3D医疗影像预训练的MedicalNet。利用迁移学习。基于底层的一些特征是类似的,可以进行迁移尝试。(fine-tuning:在实践中,由于数据集不够大,很少有人从头开始训练网络。常见的做法是使用预训练的网络(例如在ImageNet上训练的分类1000类的网络)来重新fine-tuning(也叫微调),或者当做特征提取器。)
-
利用GAN去生成,但是考虑医疗图像对准确度要求高,思考GAN合成数据的可信度
2、分辨率大
3、图像分割样本类别不均衡怎么解决?
来自百面机器学习:
类别不平衡
分类学习方法都有共同的基本假设:不同类别的训练样例数目相当,类别不平衡就是指分类任务中不同类别的训练样例数目差距很大的情况。
采用再缩放:
1)欠采样,去除一些反例,使得正例,反例数目接近
2)过采样:增加一些正例,使得正反例数目相近
3)直接基于原始训练集进行学习,用训练好的分类器(阈值移动)进行预测时,嵌入到决策过程中。
针对图像分割类别不均衡怎么解决?
4、Dice损失函数与交叉熵损失函数
参考链接
Dice损失函数:表示集合相似度度量,计算两个样本的相似度,取值(0-1)之间,值越大相似度越高。
S = 2|X∩Y| /|X|+|Y|
dice系数 = 1-s
比较适用样本极度不均的情况,适用dice loss 会对反向传播造成不利影响,容易使训练变得稳定。
为什么会影响训练速度?
在训练像素的神经网络时,如FCN是选择交叉熵还是Dice?
选择交叉熵->梯度更优化
dice和Iou的梯度表达形式复杂 2t^2 /(p+t)^2 极端情况下,p,t都训练的非常小时,计算梯度非常大,训练不稳定。
5、归一化&标准化&中心化
1)归一化:把数据变成(0,1)或者(-1,1)之间的小数,为了数据处理方便,(0,1)之间更加便捷快速;使有量纲的值能够加权平均;归一化一种简化计算的方式,公式:(x-min)/(max-min).(归一化仅有极值决定)
2)标准化:机器学习中,处理不同种类的资料。资料标准化后使得每个特征中的数值平均变为0,标准差变为1
3)中心化:每个特征值的平均值为0(原数据-平均值),是数据位于0中心。
归一化和标准化对数据进行压缩再平移,对数据进行线性变换。线性变换是不会改变原始数据的数值排序的。
如果数据较为稳定,不存在极端的最大值最小值->归一化
如果数据存在异常和较多噪音->用标准化,可通过中心化避免异常值的影响。
6、为什么要使用卷积?
多层感知机:输入通常是一个特征向量(需人工设计),一个图片展平的数据量太大了。
卷积:每个Filter去提取其特征,每个神经元都不需要对全局图像做感受,每个神经元只感受局部的图像区域,对于图片中的每一个特征,首先局部感知,然后在更高层次对局部进行综合操作,最后得到全局信息。
卷积中的主要思路是权值共享和感受野
激活函数
因为线性表示的复杂度很低,解决不了更复杂的问题。激活函数为特征增加了非线性的表示,能够使网络加深的更加有意义,学到更多的东西。
从神经科学上来看,中央区酷似神经元的兴奋态,两侧区酷似神经元的抑制态,因而在神经网络学习方面,可以将重点特征推向中央区,将非重点特征推向两侧区。
线性模型的表达能力是有限的,如果没有激活函数,那么y值很大的时候经过多层神经网络的传输,计算的复杂度是难以接受的,而且针对深度学习的任务,我们大概率是想获得一个概率值。
激活函数的设计原则:
- 非线性,这样增加网络的深度才有意义
- 可导的,不然怎么做梯度下降
- 易于计算的
- 输出空间最好是有限的,这条好像也不是必须的,Relu就没有遵循这条
池化,下采样
主要用于特征降维,保留主要特征,压缩数据和参数量,减小过拟合,同时提高模型容错性,保证图片不变性。
卷积网络的优点:
输入图像和网络的拓扑结构很好的吻合
特征提取和模式分类同时进行,并同时在训练中产生
权值共享可减少训练参数,结构简单适应性更强
7、为什么使用BN?
一是因为一旦网络train起来,那么参数就要发生更新,除了输入层的数据外(因为输入层数据,我们已经人为的为每个样本归一化),后面网络每一层的输入数据分布是一直在发生变化的,因为在训练的时候,前面层训练参数的更新将导致后面层输入数据分布的变化。以网络第二层为例:网络的第二层输入,是由第一层的参数和input计算得到的,而第一层的参数在整个训练过程中一直在变化,因此必然会引起后面每一层输入数据分布的改变。我们把网络中间层在训练过程中,数据分布的改变称之为:“Internal Covariate Shift”。BN的提出,就是要解决在训练过程中,中间层数据分布发生改变的情况。
随着逐层的学习也会导致输入越来越大而导致激活值的饱和产生梯度爆炸或衰减的现象。
正态分布一般情况下能够体现样本的特征分布,但不一定能很好的表示。比如数据本身就不对称的情况。这时进行批标准化就会削弱网络的性能。通过参数γ和β的学习来尽量拟合真实的数据分布状态。这两个参数进行缩放和平移。
在训练时使用BN,我们有大批的数据进行计算均值,方差,那在测试时,只预测一个样本,BN的均值和方差就来自我们训练时的记录。
使用了BN就不用加偏置,因为加了也没有什么用,也会直接被均值归一化。
使用BN需要注意的地方
- batch-size 尽量大,太小基本起不到什么作用
- BN在卷积层的激活函数之间使用,且卷积的偏置可以不用
- 训练的时候,使用BN,验证测试的时候不使用。
8、如何理解全局平均池化
- 在NIN中,在卷积网络的最后一步降维,防止过拟合
- GAP在SENet中获取全局感受野
9、迁移学习
样本量少,特征学习到的少,可以用别人训练好的模型,来引导自己模型的特征学习。
10、语义分割中常说的上下文信息指的是?
可以理解说是,在对某个像素进行判别时,考虑了该点附近其他像素的影响。
网络中每一个神经元都受网络中所有其他神经元全局活动的潜在影响。因此,神经网络将很自然地能够处理上下文信息。 也就是说神经网络可以很好的处理此神经元与前一个和后一个神经元的信息。