网络结构


U-net是MICCAI2015的专门针对医学影像分割设计的网络结构,直到今天还是很好用,效果任然很好。网络的左半部分是Encode
部分,此部分将输入图像逐步下采样得到高层的语义信息。右半部分是Decoder部分,将Encode提取的语义特征逐步恢复为原始图像的尺寸,中间是跳跃连接,将下采样过程中提取到的不同level的特征加入到Decoder中,得到更好的分割结果。

数据集介绍

数据集使用的是ISBI细胞分割数据集,训练集总共就三十张图像,少的可怜,U-net比其他网络强大的地方就在此,小数据集上也能得到很不错的结果。


应该是将细胞边界给分割出来。

U-net网络代码:

# !/usr/bin/python3
# -*- coding:utf-8 -*-
# Author:WeiFeng Liu
# @Time: 2021/12/9 下午12:58import torch
import torch.nn as nn
import torch.nn.functional as Fclass DoubleConv(nn.Module):"""unet的编码器中,每一个level都会有两层卷积和Relu"""def __init__(self, in_channels, out_channels):super(DoubleConv,self).__init__()self.double_conv = nn.Sequential(nn.Conv2d(in_channels, out_channels,kernel_size=3,padding=1),nn.BatchNorm2d(out_channels),nn.ReLU(inplace=True),nn.Conv2d(out_channels,out_channels,kernel_size=3,padding=1),nn.BatchNorm2d(out_channels),nn.ReLU(inplace=True),)def forward(self,x):return self.double_conv(x)class downsample(nn.Module):"""下采样  maxpool + DoubleConv"""def __init__(self, in_channels, out_channels):super(downsample,self).__init__()self.maxpool_conv = nn.Sequential(nn.MaxPool2d(2),#feature map 减半DoubleConv(in_channels,out_channels),)def forward(self, x):return self.maxpool_conv(x)class upsample(nn.Module):"""upsample,  使用双线性插值或者反卷积"""def __init__(self, in_channels,out_channels,bilinear = True):super(upsample,self).__init__()if bilinear:self.upsample = nn.Upsample(scale_factor=2, mode='bilinear',align_corners=True)else:self.upsample = nn.ConvTranspose2d(in_channels//2, out_channels//2,kernel_size=2,stride=2)self.conv = DoubleConv(in_channels,out_channels)def forward(self,x1,x2):""":param x1: decoder feature:param x2: encoder feature:return:"""x1 = self.upsample(x1)diff_y = torch.tensor([x2.size()[2] - x1.size()[2]])diff_x = torch.tensor([x2.size()[3] - x1.size()[3]])#将x1与x2的特征图对齐后concatx1 = F.pad(x1, [diff_x//2,diff_x - diff_x//2,diff_y//2,diff_y - diff_y // 2])x = torch.cat([x2,x1],dim=1)return self.conv(x)class output_conv(nn.Module):def __init__(self,in_channels,out_channels):super(output_conv, self).__init__()self.conv = nn.Conv2d(in_channels,out_channels,kernel_size=1)def forward(self,x):return self.conv(x)class UNET(nn.Module):def __init__(self,n_channels,n_classes,bilinear = True):""":param n_channels: input channel:param n_classes: segmentation classes:param bilinear: upsample tpye"""super(UNET,self).__init__()self.n_channels = n_channelsself.n_classes = n_classesself.bilinear = bilinearself.init = DoubleConv(n_channels,64)self.downsample1 = downsample(64,128)self.downsample2 = downsample(128,256)self.downsample3 = downsample(256,512)self.downsample4 = downsample(512,512)self.upsample1 = upsample(1024,256,bilinear)self.upsample2 = upsample(512,128,bilinear)self.upsample3 = upsample(256,64,bilinear)self.upsample4 = upsample(128,64,bilinear)self.outconv = output_conv(64,n_classes)def forward(self,x):x1 = self.init(x)x2 = self.downsample1(x1)x3 = self.downsample2(x2)x4 = self.downsample3(x3)x5 = self.downsample4(x4)x = self.upsample1(x5,x4)x = self.upsample2(x, x3)x = self.upsample3(x,x2)x = self.upsample4(x, x1)res = self.outconv(x)return res

完整训练代码和数据可以去我的github上面下载:https://github.com/SPECTRELWF/Semantic-Segmentation
个人主页:liuweifeng.top:8090

测试结果:

三十张图像训练30个epoch得到的结果,还是很好的。

Pytorch实现U-net细胞分割相关推荐

  1. 【项目实战课】基于Pytorch的EfficientNet血红细胞分类竞赛实战

    欢迎大家来到我们的项目实战课,本期内容是<基于Pytorch的EfficientNet血红细胞分类竞赛实战>.所谓项目课,就是以简单的原理回顾+详细的项目实战的模式,针对具体的某一个主题, ...

  2. 基于FCN,U-Net的深度学习医学影像分割算法(细胞分割算法)以及传统算法分析

    本博文主要分析了基于传统计算机视觉的细胞分割算法和基于深度学习的细胞分割算法.主要针对医学影像分割算法.包括了FCN全卷积网络的细胞分割效果,U-Net细胞分割效果.查阅了采用深度学习分割医学影像的几 ...

  3. TorchSeg—基于PyTorch的快速模块化语义分割开源库

    点击我爱计算机视觉标星,更快获取CVML新技术 昨日,语义分割算法DFN.BiSeNet 第一作者ycszen开源了TorchSeg项目,基于PyTorch的快速模块化语义分割开源库,复现了DFN, ...

  4. Unet实现细胞分割

    目的:实现细胞分割 数据集:isbi挑战赛的数据,只有30张512x512的image和label 思路: 读取数据,将数据转换成 30x512x512x1格式: 由于数据太少,所以进行数据增强:(注 ...

  5. 【细胞分割】基于阙值+边缘+形态学+种子点图像分割matlab源码含 GUI

    一.简介 数学形态学操作可以分为二值形态学和灰度形态学,灰度形态学由二值形态学扩展而来.数学形态学有2个基本的运算,即腐蚀和膨胀,而腐蚀和膨胀通过结合又形成了开运算和闭运算. 开运算就是先腐蚀再膨胀, ...

  6. matlab实现细胞分割,MATLAB图像处理实验——细胞图像的分割和计数

    代码戳这里 1. 实验内容 本实验为使用MATLAB编写的细胞图像分割及计数系统,实现了对图像内细胞的计数,以及对每个细胞周长和面积的测量,并分别展示了分割后的每个细胞的图像. 实验步骤共分为图像预处 ...

  7. 深度学习工程实践 6. 使用pytorch训练自己的眼球分割模型

    深度学习工程实践 6. 使用pytorch训练自己的眼球分割模型 1. 概述 2. 目标 3. 工程实践 3.1 数据寻找,数据标注 3.2 训练 3.3 部署应用到桌面程序 4. 总结 1. 概述 ...

  8. 使用大规模数据注释和深度学习对具有人类水平性能的组织图像进行全细胞分割

    使用大规模数据注释和深度学习对具有人类水平性能的组织图像进行全细胞分割 摘要 绪论 Mesmer 2.1Mesmer是一种用于精确全细胞分割的深度学习算法 2.2Mesmer实现了人类级的分割性能 2 ...

  9. 【图像分割】基于区域的重叠椭圆拟合实现细胞分割附matlab代码

    1 内容介绍 一种基于区域的方法,用于用自动确定的可能重叠椭圆的数量来逼近任意 2D 形状.RFOVE 是完全无监督的,在没有任何假设或关于对象形状的先验知识的情况下运行,并且扩展和改进了递减椭圆拟合 ...

最新文章

  1. 选择加冒泡排序法与找鞍马之总结与感受
  2. spring中的spel表达式语言
  3. Cloudflare的HTTP/2优化策略
  4. Java EE的三层架构
  5. express bodyparser_nodejs库express是如何接收inbound json请求的
  6. 武汉工程大学2020GPLT选拔赛(上)
  7. STL之string类型
  8. 天池 在线编程 放小球(动态规划)
  9. Java中的新生代、老年代和永久代
  10. 待支付取件费用是什么意思_SEDEX验厂是什么意思,sedex验厂审核费用是多少?...
  11. usb设备的probe全过程
  12. 读书学习:我编程我快乐(一.2)
  13. win10安装git,打开git bash闪退
  14. HDU 1285 确定比赛名次【拓扑排序】
  15. AltiumDesigner VS 立创EDA —— PCB绘图软件选择
  16. Oracle函数之ratio_to_report函数
  17. 层次化网络设计(三层网络结构)
  18. 曾经写过得太监小说2《天道》
  19. nunjucks.js模板渲染
  20. 使用 Learner Lab - 使用 AWS Lambda 将图片写入 S3

热门文章

  1. 不只是相关:基于真理共识论的社区问答可信答案选择新方法
  2. 全球顶会论文作者,28天手把手带你复现顶会论文
  3. 当深度学习遇上量化交易——图与知识图谱篇
  4. 清华大学人工智能研究院开源“天授”强化学习平台
  5. CVPR 2019 | 基于可解释性以及细粒度的可视化解释卷积神经网络
  6. 经典论文复现 | 基于标注策略的实体和关系联合抽取
  7. 直播预告 | 从编码器与解码器端改进生成式句子摘要
  8. Face++ 论文解读:一种新的行人重识别度量学习方法 | PaperDaily #20
  9. IntelliJ IDEA安装
  10. linux安装autossh详细教程,在Linux下安装autossh的教程