基于FCN的医学图像分割(1)

   上一篇文章还是基于CNN的人脸性别识别,但是这一篇直接啥都变了,这是为啥呢。。。因为我老板说了,学习CNN只是为了热身,真正想让学的是FCN,是的,也就是用来分割的FCN。好吧,我也只能听命。

    FCN的代码网上都有,我也是直接借鉴的,这里不多说,这篇文章主要记录一下我在调参路上的艰辛旅程。

    首先我先记录一下我所搜集的所有可能有助于对抗过拟合的方法(是的,因为我的数据集较小,只能从别的方面下手):

    1、参数范数惩罚,即L1、L2正则化 (L2比L1好,更容易求解)
    2、数据增强,即将原数据给裁剪,或加入噪声,或翻转图像,使用更多的数据来训练网络
    3、提前终止,可以有效的减缓过拟合现象
    4、RNN中用到的参数共享,在其整条时间链上可以进行参数的共享,这样才使得其能够被训练.
    5、bagging 和其他集成方法  
         其实bagging的方法是可以起到正则化的作用,因为正则化就是要减少泛化误差,而bagging的方法可以组合多个模型起到减      少泛化误差的作用. 
    在深度学习中同样可以使用此方法,但是其会增加计算和存储的成本
    6、dropout
    7、辅助分类节点  
        Google Inception V1中,采用了辅助分类节点的策略,即将中间某一层的输出用作分类,并按一个较小的权重加到最终的分      类结果中,这样相当于做了模型的融合,同时给网络增加了反向传播的梯度信号,提供了额外的正则化的思想.
    8. Batch Normalization
       在Google Inception V2中所采用,是一种非常有用的正则化方法,可以让大型的卷积网络训练速度加快很多倍,同时收敛后分      类的准确率也可以大幅度的提高. 
    BN在训练某层时,会对每一个mini-batch数据进行标准化(normalization)处理,使输出规范到N(0,1)的正太分布,减少了                 Internal     convariate shift(内部神经元分布的改变),传统的深度神经网络在训练是,每一层的输入的分布都在改变,因此训练         困难,只能选择用一个很小的学习速率,但是每一层用了BN后,可以有效的解决这个问题,学习速率可以增大很多倍.

    9、可变的学习率

    import tensorflow as tf

    global_step = tf.Variable(0, trainable=False)

    initial_learning_rate = 0.1 #初始学习率
    learning_rate = tf.train.exponential_decay(initial_learning_rate,
                                           global_step=global_step,
                                           decay_steps=10,decay_rate=0.9)
    10、初始化反卷积层的参数W时用双线性插值
    11、U-Net
    12、RefineNet   编码用的ResNet,主要在于解码部分RefineNet。
    13、DeconvNet/SegNet  卷积部分与FCN一致,主要针对上采样部分进行改进。DeconvNet/SegNet这两个网络区别不          大,细节上的改动。

    14、使用momentum优化函数

当然,这些方法不一定都有用,我也只是暂时搜集了这么多,只能慢慢的来花时间来验证到底有没有用。后面的那几个网络我也只是想参考一下结构,看能不能借鉴到FCN里。

   查到BN:由于网络结构越深,则后面网络层的输入发生的偏移越大,则对于网络的收敛越不利,所以BN 的思想就是对网络中的每一层都做规范化,也就是均值为0方差为1的标准正态分布,这样可以使得输入值可以落在非线性函数对于输入比较敏感的地方,也就是说让梯度变大,避免梯度消失的问题。


你可能感兴趣的:(个人经验)