【MATLAB实战】基于UNet的肺结节的检测

news2024/11/22 14:46:03

数据:
在这里插入图片描述
在这里插入图片描述
训练过程图
在这里插入图片描述
算法简介:
UNet网络是分割任务中的一个经典模型,因其整体形状与"U"相似而得名,"U"形结构有助于捕获多尺度信息,并促进了特征的精确重建,该网络整体由编码器,解码器以及跳跃连接三部分组成。
编码器由一系列卷积层(Convenlution)和池化层(Polling) 组成,用于逐步降低输入图像的空间尺寸和通道数,同时提取图像的高层特征信息:
解码器由一系列上采样层和卷积层组成,用于逐步还原特征图的空间尺寸和通道细节信息。
在编码器和解码器通过跳跃连接将编码器的某一层的特征图与对应的解码器层的特征图连接起来。正是因为"U"结构的有效性,UNet网络被许多学者沿用至今。
UNet网络的基本块由两个卷积和ReLu激活函数构成,使用3x3的卷积核尺寸来捕捉上下文信息。网络的左侧部分构成UNet的编码器,负责从输入影像中提取特征信息。
在UNet的解码阶段,解码基本块与编码阶段的基本块是一一对应的。从瓶颈层出发,通过上采样将特征图放大,然后经过解码基本块进行特征信息的解码重建。
此外跳跃连接(copyandcrop)的设计允许将编码阶段提取的特征信息传递到解码基本块中,有助于进一步恢复细节信息。整个过程重复进行四次,完成对病灶区域的分割。
在这里插入图片描述

运行视频:

【MATLAB实战】基于UNet的肺结节的检测

代码:

function expName = unet(expName, size, encoderDepth, filters, batchsize, epochs, useDataAugmentation, L2Reg, lr, ...
    gradientclipping, path, splits, folders, savePredictionsFolder, classNames, labelIDs, valPat, isMAT )

% 创建unet 网络
numClasses  = length(classNames);
lgraph = unetLayers(size,numClasses,'EncoderDepth',encoderDepth, 'NumFirstEncoderFilters', filters)

%%     TRAIN       %%
% 加载训练集
if isMAT == true
    imdsTrain = imageDatastore(strcat(path, '/', splits(1), '/', folders(1)), 'FileExtensions','.mat', 'ReadFcn', @loadMAT);
else
    imdsTrain = imageDatastore(strcat(path, '/', splits(1), '/', folders(1)));
end
    pxdsTrain = pixelLabelDatastore(strcat(path, '/', splits(1), '/', folders(2)),classNames,labelIDs);

    tbl = countEachLabel(pxdsTrain)

     imageFreq = tbl.PixelCount ./ tbl.ImagePixelCount;
     medFreqClassWeights = median(imageFreq) ./ imageFreq

layer_to_add = [pixelClassificationLayer('Classes',classNames,'ClassWeights',medFreqClassWeights,'Name','Segmentation-Layer')];
% 替换层
lgraph = replaceLayer(lgraph,'Segmentation-Layer',layer_to_add);
Display the network.
analyzeNetwork(lgraph)

% 创建 datastore 
if useDataAugmentation == false % 不适用图像增强
%     testpxds = pixelLabelDatastore(testlabelDir,classNames,labelIDs);
    ds = pixelLabelImageDatastore(imdsTrain,pxdsTrain);
else % 图像增强
    augmenter = imageDataAugmenter('RandXReflection',true, 'RandYReflection',true)%,'RandRotation',[-10 10], 'RandXTranslation', [-5 5], 'RandYTranslation', [-5 5]);  
    ds = pixelLabelImageDatastore(imdsTrain,pxdsTrain, 'DataAugmentation', augmenter);
end 


% 加载验证集.
if isMAT==true
    imdsVal = imageDatastore(strcat(path, '/', splits(3), '/', folders(1)), 'FileExtensions','.mat', 'ReadFcn', @loadMAT);
else
    imdsVal = imageDatastore(strcat(path, '/', splits(3), '/', folders(1)));
end
pxdsVal = pixelLabelDatastore(strcat(path, '/', splits(3), '/', folders(2)),classNames,labelIDs);  
valData = pixelLabelImageDatastore(imdsVal, pxdsVal); 
valFreq = floor(length(ds.Images)/batchsize)

% 设置 OPTIONS
options = trainingOptions(...
    'adam', ...    
    ... 'rmsprop' 
    ... 'sgdm','Momentum', 0.9, ...
    'InitialLearnRate',lr, ...
    ... 'LearnRateSchedule','piecewise', ...
    ... 'LearnRateDropFactor', dropfactor, ...
    ... 'LearnRateDropPeriod', 1, ...
    'MaxEpochs',epochs, ...
    'VerboseFrequency',10, ...
    'MiniBatchSize' , batchsize, ...
    'Plots','training-progress', ...
    'L2Regularization',L2Reg, ...,
    'ValidationData',valData, ...,
    'ValidationFrequency', valFreq,...,
    'ValidationPatience', valPat,...,
    ... 'GradientThresholdMethod','l2norm',...
    ... 'GradientThreshold',gradientclipping, ...
    'Shuffle','every-epoch', ...
    'ExecutionEnvironment', 'gpu');

% 训练网络
tic;
[net,info] = trainNetwork(ds,lgraph,options)
traintime=toc;
save net.mat net;
%%         TEST       %%
% 加载测试集
if isMAT==true
    imdsTest = imageDatastore(strcat(path, '/', splits(2), '/', folders(1)), 'FileExtensions','.mat', 'ReadFcn', @loadMAT);
else
    imdsTest = imageDatastore(strcat(path, '/', splits(2), '/', folders(1)));
end
pxdsTest = pixelLabelDatastore(strcat(path, '/', splits(2), '/', folders(2)),classNames,labelIDs);

% 在测试映像上运行网络。预测标签作为pixelLabelDatastore返回。
tic
pxdsResults = semanticseg(imdsTest,net, 'MiniBatchSize',batchsize,"WriteLocation", savePredictionsFolder);
toc

% 计算混淆矩阵和分割度量(根据实际情况评估预测结果)
metrics = evaluateSemanticSegmentation(pxdsResults,pxdsTest)
metrics.ClassMetrics
metrics.NormalizedConfusionMatrix
metrics.ConfusionMatrix
metrics.DataSetMetrics
% 设置保存目录

mkdir(['ExpUNet/',expName]);
% logs 保存
save(['ExpUNet/',expName, '/results'])
% 保存评价指标
writetable(metrics.DataSetMetrics,['ExpUNet/',expName,'/dataset.csv'])
writetable(metrics.ClassMetrics, ['ExpUNet/',expName,'/classmetrics.csv'])
writetable(metrics.ConfusionMatrix, ['ExpUNet/',expName,'/confusionmatrix.csv'])
writetable(metrics.NormalizedConfusionMatrix, ['ExpUNet/',expName,'/normconfusionmatrix.csv'])
% 测试 6 张图像 结果保存
saveTestImages(net, imdsTest, pxdsTest,classNames, ['ExpUNet/',expName,'/ejemplos.png'], labelIDs, isMAT)

end


function final_matrix = loadMAT(filename)
    load(filename)
end

代码链接:https://download.csdn.net/download/qq_45047246/89565243

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1944074.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

UE4/5 对话系统

参考教程:UE4甜筒教艺术生学蓝图#21.UE4对话系统(1)--唠嗑案例展示_哔哩哔哩_bilibili 说来惭愧两年前看的教程,现在才记录一下,很好的教程推荐大家观看 1.首先创建两个枚举,内容如下 2.创建三个结构体,内容如下 3.再…

SSRF:服务端请求伪造

SSRF漏洞原理 SSRF漏洞通常是因为服务端应用程序提供了从其他服务器获取数据的功能,但未对目标地址或协议进行适当的过滤和限制。攻击者可以通过这个漏洞发送构造好的恶意请求,让服务器以自己的身份去访问其他资源,与文件包含漏洞有些许相似…

遍历dom元素下面的子元素的方法,vue中原始标签的ref得到是该元素的dom及下面包含的子dom,与组件ref是引用不同

研究到这个的目的来源是 想用div 遍历方式 替代之前的table tr td 那种框选功能,觉得div灵活,可以随便在外面套层,td与tr之间就不能加div加了布局就乱,然后使用之前的原理( const cellList tableIdR.value.querySelec…

Caché 数据库摘要与手册索引

因为设置了 VIP 可见,对于无法直接阅读该篇博客的,建议直接阅读官方博客,链接如下: Cach & Ensemble 2018.1.4 – 2018.1.9 | Documentation Home Page (intersystems.com)https://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls 目录 一、简介 0、…

【Socket 编程】应用层自定义协议与序列化

文章目录 再谈协议序列化和反序列化理解 read、write、recv、send 和 tcp 为什么支持全双工自定义协议网络计算器序列化和反序列化 再谈协议 协议就是约定,协议的内容就是约定好的某种结构化数据。比如,我们要实现一个网络版的计算器,客户端…

掌握互联网路由选择协议:从基础入门到实战

文章目录 路由选择协议的基本概念路由选择算法的分类分层次的路由选择协议路由信息协议(RIP)内部网关协议:OSPF外部网关协议:BGP互联网中的实际应用总结 互联网的路由选择协议是网络通信的核心,它决定了数据包如何在网…

Artix7系列FPGA实现SDI视频编解码+图像缩放+多路视频拼接,基于GTP高速接口,提供4套工程源码和技术支持

目录 1、前言工程概述免责声明 2、相关方案推荐本博已有的 SDI 编解码方案本博已有的FPGA图像缩放方案本博已有的已有的FPGA视频拼接叠加融合方案本方案的无缩放应用本方案在Xilinx--Kintex系列FPGA上的应用本方案在Xilinx--Zynq系列FPGA上的应用 3、详细设计方案设计原理框图S…

nodejs编译报错 集合

目录 一、使用命令编译typescript时报错,报错文件tsconfig.json 二、npm start运行后报错,could not find module 一、使用命令编译typescript时报错,报错文件tsconfig.json npx tsc 报错: Specified include paths were [&…

Layer2区块链扩容方案(1)——总述

写在前面 这篇文章作为一个简单介绍,很多技术只是大致提及或者引用,之后会在详细学习后逐项解释。 补充知识 在了解扩容方案之前,我们最好了解一些相关的知识概念 EVM “EVM” 是“Ethereum Virtual Machine”(以太坊虚拟机&…

SSRF学习笔记

1.NAT学习 Nat(Network Address Translation,网络地址转换)是 一种网络通信技术主要用于将私有网络中的内部IP地址转换成公共网络中的公共IP地址,以实现局域网内部设备访问互联网的功能。具体来说,Nat有以下几个主要…

【Emacs有什么优点,用Emacs写程序真的比IDE更方便吗?】

🎥博主:程序员不想YY啊 💫CSDN优质创作者,CSDN实力新星,CSDN博客专家 🤗点赞🎈收藏⭐再看💫养成习惯 ✨希望本文对您有所裨益,如有不足之处,欢迎在评论区提出…

分析性能提升40%,阿里云Hologres流量场景最佳实践

在互联网和移动分析时代,流量数据成为了企业洞察用户行为、优化产品决策和提升运营效率的关键资源。流量数据主要来源于用户在使用APP、小程序或访问网站等媒介平台时产生的各种操作行为,如点击、浏览、注册、下单等。这些行为数据通过数据埋点技术被采集…

Python爬虫技术 第10节 requests库

requests 是 Python 中非常流行的 HTTP 库,它使得发送 HTTP/1.1 请求变得简单直观。下面我会通过几个实际案例来详细介绍如何使用 requests 库。 1. 发送 GET 请求 最简单的请求类型就是 GET 请求,通常用于获取网页或其他资源。 import requests# 发送…

大语言模型-RetroMAE-检索预训练模型

一、背景信息: RetroMAE是2022年10月由北邮和华为提出的一种密集检索预训练策略。 RetroMAE主要应用于检索模型的预训练,模型架构为非对称的Encoder-Decode结构。 二、整体结构: RetroMAE的模型架构为非对称的Encoder-Decode结构。 Encod…

ArcGIS Desktop使用入门(四)——ArcMap软件彻底卸载删除干净

系列文章目录 ArcGIS Desktop使用入门(一)软件初认识 ArcGIS Desktop使用入门(二)常用工具条——标准工具 ArcGIS Desktop使用入门(二)常用工具条——编辑器 ArcGIS Desktop使用入门(二&#x…

【逆向工程】十六进制编辑器与反编译的手写PE文件格式(详细教程)

原理 (1)程序如何在本地生成注册码 1.打开文件并写入MZ头部:打开一个二进制文件以进行写入操作。写入MZ头部,即前64字节,通常以字节序列 4D 5A 开始。 2.写入PE头部:PE头部紧随在MZ头部之后,其位置由MZ头部中的偏移…

构建稳固与安全的网络环境:从微软蓝屏事件看软件更新流程与应急响应

“微软蓝屏”事件暴露了网络安全哪些问题? 近日,由微软视窗系统软件更新引发的全球性“微软蓝屏”事件,不仅让科技领域为之震动,更是一次对全球IT基础设施韧性与安全性的深刻检验。这次事件源于美国电脑安全技术公司“众击”的一…

GIT新手提交操作

1、创建一个本地分支 进入Xshell已经拉取的该项目的项目代码路径下执行git checkout -b 姓名全拼音,例如:git checkout -b xiewei,当前显示已创建。 cuihengyidell-PowerEdge-T550:~/SVN/Git_R11/R11_V4.02.0_Source$ git checkout -b cuih…

数据库之PHP联动

目录 一、软件安装 二、软件讲解 三、搭配环境 四、编辑软件配置 五、成果展示 如果有人问:为什么非要用xampp、VS code编辑软件?不用phpstudy等其他工具。 那么我只想说:因为xampp、VS code编辑软件免费(ಡωಡ)hiahiahia 一、软件安装 下载连…

S-HTTP协议:确保网络通信安全的重要基石

随着互联网技术的飞速发展,网络通信安全已成为一个不可忽视的重要议题。在众多保障网络通信安全的协议中,S-HTTP(Secure Hypertext Transfer Protocol)以其独特的加密和认证机制,成为保护数据传输安全的重要工具。本文…