深度学习到底是怎么实现训练模型的(以医学图像分割为例

发布于:2024-10-18 ⋅ 阅读:(11) ⋅ 点赞:(0)

本文主要讲解的主要不是深度学习训练模型过程中的数学步骤,不是讲: 输入——前向传播——反向传播——输出,特征提取,特征融合等等过程。而是对于小白或者门外汉来说,知道模型怎么处理的,在用些什么东西,怎么用的,怎么实现最终可以分割的模型的。

形象理解训练的过程,哪些loss指标是怎么来的,模型的更新又是怎么个过程的。

(写在前面:说白了:我们做的工作就是去找一个函数去尽可能拟合一个个散值)

首先,要大体明白,模型的训练过程。有几个大的组件。 一个是原图(待处理的图片),一个是ground truth(被标注好的数据集,常见为黑白二值图片), 待训练的模型框架(提出的算法网络)(猜测的函数模型)。

我们要做的任务就是,利用被标注的数据集,来训练模型,使得模型能够正常识别关注的病变区域和背景。 

而训练后,就能够通过给它一个图片,(简单地说)就能分清楚前景(被关注的对象)和背景。 而训练后的模型相当就是一个庞大复杂的函数,f。而训练过程,就是不断调整各个部分参数的过程。例如:f = ax + b。  就是求出a,b,是的函数拟合更好的意思。

原图片:                                                        ground truth二值图片

         

知道,三大组件后,就通俗说说各自什么意思,相当于什么。

整个过程相当于就是:(网络)模型就是一个参数有待确定的函数。ground truth就是散落在图像中的点。(最开始会随便初始化一个a,b参数值)通过输入原图片(相当于输入x0的值), 会得到一个函数值f0,然后再通过让f0与应该得到的真实值y0(也就是ground truth对应的值(要知道图片也是一个一个的值组成的哈))作差或者其他方式(所以这里怎么去计算差距的方式算法也比较重要,所以也可以通过调整这个,来使得模型更优),来找到差距,从而进行调整修正参数。最后大量训练后,参数a,b...就基本稳定(也就是我们常说的模型最终收敛稳定),loss值变最小,变稳定。

(可能会问:它怎么调整,怎么修正的呢,计算机怎么知道怎么调会让差距变大, 怎么调会让差距变小?这就是看更新公式,更新算法了,更新算法在pytorch中已经打包好的,直接调用就好了。)

形象的比喻,相当于就是一个学生学习过程。  

开始输入的原图片相当于就是  给学生做练习题。 ground truth 相当于就是参考答案,  对答案后修正原来的认知(也就相当于修正参数,具体怎么才是往差距更小的方向去修正,就是更新函数的事,直接调用不用管),修正后又继续做其他的,更多的练习题,知道给这个板块的“知识”学会(也就是得到了一组参数,使得模型每次做题较好)。

拓:后面训练好后,一般还涉及验证集,测试集。 他们分别就相当于是 月考,高考。  月考后,会对参数进行微调(简单的更新认知),测试集就是直接来一个新题,看效果怎么样(也就是最后看评价指标)。

而我们再回到最前面我们说到的那些:前向传播,反向传播,特征提取,位置编码等等操作,其实是构建函数f (也就是网络模型)的过程。而我们说的训练 ,就是找这个函数的合适参数系数的过程。

另外,其实这也很好理解了,为啥我们看文章的时候,尽量以数据集为分类来看模型,因为数据集就是出的题型,  同类的题,学习的方式,思维很有借鉴价值——也就是他人做该数据集做分割的时候提出模型对应的模块。  当然,其实理论上来说,好的函数架构,应该是用什么数据集训练,都应该可以得到较好的结果,但是就好比,有的人笨,有的人聪明,有的人擅长这方面,有的人不擅长这方面一样。   如果你提出的网络架构确实好,那么确实就可以适用于很多数据集,就好比人很聪明一样。   但是大多数人都是平凡人,我们提出来的大多数模型也很普通,所以,就在所在领域先学好再说吧。   

本人Q:135 408 7583