大家好,又见面了,我是你们的朋友全栈君。
最近这段时间刚好忙完学业作业,抽空来总结一下前段时间的工作。
前段时间一直忙于用深度学习做医学图像分割,采用的方法是FCN,也就是全卷积神经网络。全卷积神经网络是基于卷积神经网络的改进,使得输入和输出的尺寸一致,并且对每个像素点进行分类,达到图像分割的目的。下图是全卷积神经网络的流程图。其中第一行是提取特征步骤,然后2X conv7和4X conv7分别表示对conv7的输出进行2倍和4倍上采样,也就是反卷积操作,最后将特征图变为输入大小的尺寸,就实现了对于每个像素的分类,也就是图像分割。
在该流程中,需要注意以下几点:
- 使用该网络时需要关注你的数据集,看是否适用。比如说,如果你的数据集的尺寸只有100*100左右,那么这个网络结构很有可能就不会work,因为该网络结构只是最原始的FCN,对于处理一些特殊的数据集,会存在性能不足的缺点,导致网络不能收敛。而且你的数据集尺寸太小,在经过了五次池化后,基本上特征图就没什么信息了,在后续的反卷积重建结果中,会导致信息丢失严重。对于这种问题,建议采用U-NET,V-NET,以及比较新的RCF-net。这几种结构都可以结合更多层次的信息,使得重建后的结果更好。
- 使用该网络时需要关注所需处理问题的难度,如果难度过大,那么很有可能该网络会无法work。比如最近我做的一个工作,在一些100*100大小的图像上做四分类。当然,也不是说4分类的问题没法做,只是你得结合你的数据集的特点,比如我做的这个数据集,图像的尺寸太小,导致经过四五次池化后基本没有了信息。对于这类难度较大的问题,可以尝试减少网络的pooling层,或者同时增加的深度,当然这可能导致你的服务器OOM。
- 最后在训练网络时,需要在学习率上增加关注。以前我做实验室,基本上就是按照以前做过的实验来调学习率。但是到了图像分割这个领域,发现网路对于学习率较为敏感,可能小一个数量级就可以收敛,或者大一个数量级就可以更快的收敛。这个也是需要根据不同的任务来制定不同的方法
后续我会将如何用python和tensorflow来编写FCN进行详细的一步一步讲解。
最后想了想,还是用pytorch吧。(手动狗头)
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/151118.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...