深度学习模型优化策略

对于深度学习模型优化,通常从以下几点进行:

1、数据方面:

    1)数据预处理:比如可以进行重采样;设置图像强度阈值。

    2)数据增广:对于图像来说,可以对图像进行平移、旋转、镜像、添加噪声,改变对比度等方法进行数据扩充。这是一个对图像数据进行扩充的一些库:https://github.com/albumentations-team/albumentations

    3)补充其他相似性数据集

2、模型方面:

     1)可以选择适合的与训练模型

     2)对模型结构进行调整优化。比如可以将普通卷积换成高效的Shuffle model、Mobile Model、ESP Model、Ghost Model。

3、损失函数:选择合适的损失函数用于不同的任务

     1)目标检测:一般采用smooth L1 Loss,Focal Loss

     2)图像分割:一般采用Dice Loss,CE Loss

     3)图像分类:一般采用交叉熵损失(CE)函数,Focal Loss

     4)图像降噪:一般采用L2 Loss

4、优化算法

    1)选择合适的学习率与batchsize。对于学习率选择合适的学习率衰减算法,batchsize就看你的显卡能支持多大了。太小的话,最好网络中不要使用BatchNorm。

    2)采用对抗学习

    3)采用随机权重平均策略(SWA),就是你训练过程中可以分为两个阶段进行,这两个阶段的优化器和学习率都不同。只不过SWA阶段的训练是依赖于第一阶段训练的模型的(感觉类似一个教师模型,就是你先训练好一个模型,然后我们重新选择一个优化器和学习率(一般改为初始值的一半)再继续训练)。该方法确实能提点,就是比较费时间。

5、正则化

    1)dropout,其实就是一种对于网络的集成策略。因为你每次随机丢掉的神经元都不一样(也不是丢掉,就是将这个神经元激活值置为0,但是在推理阶段这些神经元可是会参与推理的,并不会丢掉),所以可以达到多个网络的集成效果。但是对于数据量小的情况下训练,不建议使用,因为好不容易学习到的特征给丢了,很可能造成精度下降。

    2)early stop,这个方法一般是应用于模型过拟合的情况下,当模型对于训练集拟合的很好,但是测试集很差。我们不需要他继续学习下去了,因为很可能会把其他噪音学习进去。

6、测试扩充

      我们可以在推理阶段,对每一次预测的值输出时进行一些图像变换(镜像,翻转)等方法,然后再送入推理模型进行预测,利用多次预测的效果,从而提高最终的预测结果。对于小模型预测,这个过程还是挺快的,但是对大模型采用测试扩充,那就太耗时间了,如果对推理时间有要求,不建议采用这种优化策略。

7、后处理

     这个阶段通常是在推理阶段结束之后进行的,对预测的结果进行后处理,一般可以采用阈值优化,这样会剔除掉一些不想关的噪音。比如对于脑肿瘤来说,他是一个连续的区域,如果存在不连续的区域,那么我们就认为该区域预测错了,剔除它。

posted @ 2022-11-20 22:30  九叶草  阅读(392)  评论(0编辑  收藏  举报