Keras实现Unet语义分割医学细胞图像并训练自己的数据集




# 前言 本文实现keras下的Unet语义分割模型并且用自己制作的数据集进行训练并预测。

本文引用了一些博文里面的内容,侵权请联系删改
引用的一些文章链接地址:
1.Unet网络讲解https://blog.csdn.net/weixin_44791964/article/details/108864955
2.U-net源码讲解(Keras)https://blog.csdn.net/mieleizhi0522/article/details/82217677
也有一些相关的博文可以参考
1.https://zhuanlan.zhihu.com/p/57859749
2.unet代码试运行
https://blog.csdn.net/py_yangh/article/details/82726786
3.https://www.bilibili.com/video/BV1v7411Z7b9?from=search&seid=14522545615848347758&spm_id_from=333.337.0.0
4.https://blog.csdn.net/weixin_41036461/article/details/109129810utm_term=unet%E7%9A%84%E6%8D%9F%E5%A4%B1%E5%87%BD%E6%95%B0&utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2allsobaiduweb~default-5-109129810&spm=3001.4430

##Github代码下载地址:
FENGShuanglang/unet https://github.com/FENGShuanglang/unet
##环境
python3.6.8
tensorflow-gpu1.13.1
keras
2.1.5
没有硬性要求,tensorflow2.x以下的应该都可以运行


一、Unet网络模型

Unet可以分为三个部分,如下图所示:

第一部分是主干特征提取部分,Unet的主干特征提取部分与VGG相似,由卷积+最大池化组成,为卷积和最大池化的堆叠。卷积层用来初步提取有效特征,再通过最大池化进行下采样获得一个有效特征层。利用主干特征提取部分我们可以获得五个初步有效特征层,在第二步中,我们会利用这五个有效特征层可以进行特征融合。

第二部分是加强特征提取部分,我们可以利用主干部分获取到的五个初步有效特征层进行上采样,然后再和主干部分中获得的有效特征层进行特征融合,获得一个最终的,融合了所有特征的有效特征层。
上采样是指将特征图的分辨率还原到原始图片的分辨率大小,此处用反卷积,即通过转置卷积核的方法来实现卷积的逆过程。
第三部分是预测部分,利用最终获得的最后一个有效特征层对每一个特征点进行分类,相当于对每一个像素点进行分类。

在这里插入图片描述请添加图片描述unet就是一个全卷积神经网络,输入和输出都是图像,没有全连接层。较浅的高分辨率层用来解决像素定位的问题,较深的层用来解决像素分类的问题。

Over-tile策略
深入浅出了解Unet
Unet使用一种称为overlap-tile的的策略,使得任意大小输入的图片都可以获得一个无缝分割
该策略的思想是:对图像的某一块像素点(黄框内部分)进行预测时,需要该图像块周围的像素点(蓝色框内)提供上下文信息(context),以获得更准确的预测
这样的策略会带来一个问题,图像边界的图像块没有周围像素,因此作者对周围像素采用了镜像扩充。原始图片周围扩充的像素点均由原图对称得到。这样,边界图像块也能得到准确的预测
作者在卷积时只使用有效部分,使得最终传到下一层的只有中间原先图像块(黄色框内)的部分(可理解为不加padding),来解决第一块图像周围的部分会和第二块图像重叠的问题

二、代码运行

源码文件夹目录:
在这里插入图片描述

unet-master\data\membrane\train\image 中存放的是原数据集
unet-master\data\membrane\train\label 中存放的是数据集对应的标签
unet-master\data\membrane\text 中存放的是预测用的图片,x_predict.png 是之前预测出来的结果,重新预测需要删掉
修改各个文件夹路径,运行main,py进行训练
main.py:

# main_train.py
from model import *
from mydata1 import *


# #os.environ["CUDA_VISIBLE_DEVICES"] = "0"
# data_gen_args = dict() : 为keras自带的图像增强方法
data_gen_args = dict(rotation_range=0.2,  # 整数。随机旋转的度数范围。
                     width_shift_range=0.05,  # 浮点数、一维数组或整数
                     height_shift_range=0.05,  # 浮点数。剪切强度(以弧度逆时针方向剪切角度)。
                     shear_range=0.05,
                     zoom_range=0.05,  # 浮点数 或 [lower, upper]。随机缩放范围
                     horizontal_flip=True,
                     fill_mode='nearest')  # {
   
  • 12
    点赞
  • 95
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值