当前位置: 首页 > news >正文

医学图像算法之基于Unet的视网膜血管分割

第一步:准备数据

视网膜血管分割数据比较少,但效果好,总共40张

d2f97d6c12fb4eaabb8efb2488da8eab.png

第二步:搭建模型

UNet主要贡献是在U型结构上,该结构可以使它使用更少的训练图片的同时,且分割的准确度也不会差,UNet的网络结构如下图:

f2a3879f9aad407cb4c92a01a229c481.png

(1)UNet采用全卷积神经网络。
(2)左边网络为特征提取网络:使用conv和pooling
(3)右边网络为特征融合网络:使用上采样产生的特征图与左侧特征图进行concatenate操作。(pooling层会丢失图像信息和降低图像分辨率且是永久性的,对于图像分割任务有一些影响,对图像分类任务的影响不大,为什么要做上采样呢?上采样可以让包含高级抽象特征低分辨率图片在保留高级抽象特征的同时变为高分辨率,然后再与左边低级表层特征高分辨率图片进行concatenate操作)
(4)最后再经过两次卷积操作,生成特征图,再用两个卷积核大小为1*1的卷积做分类得到最后的两张heatmap,例如第一张表示第一类的得分,第二张表示第二类的得分heatmap,然后作为softmax函数的输入,算出概率比较大的softmax,然后再进行loss,反向传播计算。

第三步:代码

1)损失函数为:MSE损失函数

2)网络代码(将输出层增加一个sigmoid函数,将输出值约束到0-1之间):

class U_Net(nn.Module):def __init__(self,img_ch=3,output_ch=1):super(U_Net,self).__init__()self.Maxpool = nn.MaxPool2d(kernel_size=2,stride=2)self.Conv1 = conv_block(ch_in=img_ch,ch_out=64)self.Conv2 = conv_block(ch_in=64,ch_out=128)self.Conv3 = conv_block(ch_in=128,ch_out=256)self.Conv4 = conv_block(ch_in=256,ch_out=512)self.Conv5 = conv_block(ch_in=512,ch_out=1024)self.Up5 = up_conv(ch_in=1024,ch_out=512)self.Up_conv5 = conv_block(ch_in=1024, ch_out=512)self.Up4 = up_conv(ch_in=512,ch_out=256)self.Up_conv4 = conv_block(ch_in=512, ch_out=256)self.Up3 = up_conv(ch_in=256,ch_out=128)self.Up_conv3 = conv_block(ch_in=256, ch_out=128)self.Up2 = up_conv(ch_in=128,ch_out=64)self.Up_conv2 = conv_block(ch_in=128, ch_out=64)self.Conv_1x1 = nn.Conv2d(64,output_ch,kernel_size=1,stride=1,padding=0)def forward(self,x):# encoding pathx1 = self.Conv1(x)x2 = self.Maxpool(x1)x2 = self.Conv2(x2)x3 = self.Maxpool(x2)x3 = self.Conv3(x3)x4 = self.Maxpool(x3)x4 = self.Conv4(x4)x5 = self.Maxpool(x4)x5 = self.Conv5(x5)# decoding + concat pathd5 = self.Up5(x5)d5 = torch.cat((x4,d5),dim=1)d5 = self.Up_conv5(d5)d4 = self.Up4(d5)d4 = torch.cat((x3,d4),dim=1)d4 = self.Up_conv4(d4)d3 = self.Up3(d4)d3 = torch.cat((x2,d3),dim=1)d3 = self.Up_conv3(d3)d2 = self.Up2(d3)d2 = torch.cat((x1,d2),dim=1)d2 = self.Up_conv2(d2)d1 = self.Conv_1x1(d2)d1 = F.sigmoid(d1)return d1

第四步:统计一些指标(训练过程中的loss)

1b9a059676c241c7be8f51b22443c092.png

第五步:搭建GUI界面

dafacf6ea9d143aeac070dd9c7c0a7bd.png

b83df448605e47da8804ddce8212a7e8.png

第六步:整个工程的内容

44c8d96cf0e7481fa616639a818c70d5.png

整套算法系列:医学图像实战演练_AI洲抿嘴的薯片的博客-CSDN博客

项目源码下载地址:关注文末【AI街潜水的八角】,回复【视网膜血管分割】即可下载

整套项目源码内容包含

有训练代码和训练好的模型以及训练过程,提供数据,提供GUI界面代码,总共好几千代码


http://www.mrgr.cn/news/69777.html

相关文章:

  • 【JAVA】正则表达式中的捕获组和非捕获组
  • git config 保存密码
  • FastGPT部署通义千问Qwen和智谱glm模型|OneAPI配置免费的第三方API
  • 深入解析 CentOS 7 上 MySQL 8.0 的最佳实践20241112
  • Flutter-左侧导航栏跟随窗口的宽变化
  • Docker实践与应用举例:从入门到进阶
  • 【Lucene】从文本到索引:Lucene如何构建索引
  • 伊洛瓦底江
  • 存贷款调整 20241110
  • Linux进程信号
  • “穿梭于容器之间:C++ STL迭代器的艺术之旅”
  • 【CLIP系列】开篇
  • GIN:逼近WL-test的GNN架构
  • 信息泄露漏洞一文速通
  • 【Hadoop实训】Hive 数据操作①
  • 全面解析 Python typing模块与静态类型注解:从基础到高级
  • 寻找伤感短视频素材 这些网站帮你轻松下载无水印资源
  • 图片搜索引擎,来快速实现一个高性能的本地图片搜索引擎
  • 《浔川 AI 翻译 v3.0 或面临取消发布困境》
  • 【VScode】Html+Css+JavaScript学习计划表
  • 《TCP/IP网络编程》学习笔记 | Chapter 7:优雅地断开套接字连接
  • 医院一体化监控运维:保障医疗信息化稳定运行的智慧之选
  • 【优选算法 — 滑动窗口】最大连续1的个数 将 x 减到0的最小操作数
  • 打开MATLAB报错,名称不存在或不是目录?
  • Spring Boot与工程认证:计算机课程管理的新范式
  • Linux【基础篇】T