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


训练过程图

算法简介:
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 == trueimdsTrain = imageDatastore(strcat(path, '/', splits(1), '/', folders(1)), 'FileExtensions','.mat', 'ReadFcn', @loadMAT);
elseimdsTrain = imageDatastore(strcat(path, '/', splits(1), '/', folders(1)));
endpxdsTrain = pixelLabelDatastore(strcat(path, '/', splits(1), '/', folders(2)),classNames,labelIDs);tbl = countEachLabel(pxdsTrain)imageFreq = tbl.PixelCount ./ tbl.ImagePixelCount;medFreqClassWeights = median(imageFreq) ./ imageFreqlayer_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==trueimdsVal = imageDatastore(strcat(path, '/', splits(3), '/', folders(1)), 'FileExtensions','.mat', 'ReadFcn', @loadMAT);
elseimdsVal = 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==trueimdsTest = imageDatastore(strcat(path, '/', splits(2), '/', folders(1)), 'FileExtensions','.mat', 'ReadFcn', @loadMAT);
elseimdsTest = 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)endfunction final_matrix = loadMAT(filename)load(filename)
end
代码链接:https://download.csdn.net/download/qq_45047246/89565243
相关文章:
【MATLAB实战】基于UNet的肺结节的检测
数据: 训练过程图 算法简介: UNet网络是分割任务中的一个经典模型,因其整体形状与"U"相似而得名,"U"形结构有助于捕获多尺度信息,并促进了特征的精确重建,该网络整体由编码器,解码器以及跳跃连接三部分组成。 编码器由…...
Elasticsearch基础(五):使用Kibana Discover探索数据
文章目录 使用Kibana Discover探索数据 一、添加样例数据 二、数据筛选 三、保存搜索 使用Kibana Discover探索数据 一、添加样例数据 登录Kibana。在Kibana主页的通过添加集成开始使用区域,单击试用样例数据。 在更多添加数据的方式页面下方,单击…...
爬取百度图片,想爬谁就爬谁
前言 既然是做爬虫,那么肯定就会有一些小心思,比如去获取一些自己喜欢的资料等。 去百度图片去抓取图片吧 打开百度图片网站,点击搜索xxx,打开后,滚动滚动条,发现滚动条越来越小,说明图片加载…...
HTTP 缓存
缓存 web缓存是可以自动保存常见的文档副本的HTTP设备,当web请求抵达缓存时,如果本地有已经缓存的副本,就可以从本地存储设备而不是从原始服务器中提取这个文档。使用缓存有如下的优先。 缓存减少了冗余的数据传输缓存环节了网络瓶颈的问题…...
设计模式实战:图形编辑器的设计与实现
简介 本篇文章将介绍如何设计一个图形编辑器系统,系统包括图形对象的创建、组合、操作及撤销等功能。我们将通过这一项目,应用命令模式、组合模式和备忘录模式来解决具体的设计问题。 问题描述 设计一个图形编辑器系统,用户可以创建并操作图形对象,将多个图形对象组合成…...
.NET 情报 | 分析某云系统添加管理员漏洞
01阅读须知 此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失…...
vue检测页面手指滑动距离,执行回调函数,使用混入的语法,多个组件都可以使用
mixin.ts 定义滑动距离的变量和检测触摸开始的方法,滑动方法,并导出两个方法 sendTranslateX.value > 250 && sendTranslateY.value < -100是向上滑动,满足距离后执行回调函数func,并在一秒内不再触发,一…...
opencv 优势
OpenCV(开源计算机视觉库)是一个广泛使用的计算机视觉和机器学习软件框架。它最初由Intel开发,后来由Itseez公司维护,最终于2015年成为非营利组织OpenCV.org的一部分。OpenCV的目的是实现一个易于使用且高效的计算机视觉框架,支持实时视觉应用。 以下是关于OpenCV的一些关…...
1-如何挑选Android编译服务器
前几天,我在我的星球发了一条动态:入手洋垃圾、重操老本行。没错,利用业余时间,我又重新捣鼓捣鼓代码了。在接下来一段时间,我会分享我从服务器的搭建到完成Android产品开发的整个过程。这些东西之前都是折腾过的&…...
【JS逆向课件:第十六课:Scrapy基础2】
ImagePipeLines的请求传参 环境安装:pip install Pillow USER_AGENT Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36需求:将图片的名称和详情页中图片的数据进行爬取&a…...
使用 PowerShell 自动化图像识别与鼠标操作
目录 前言功能概述代码实现1. 引入必要的程序集2. 定义读取文件行的函数3. 定义加载图片的函数4. 定义查找小图像在大图像中的位置的函数5. 定义截取全屏的函数6. 定义模拟鼠标点击的函数7. 定义主函数 配置文件示例运行脚本结语全部代码提示打包exe 下载地址 前言 在日常工作…...
组队学习——支持向量机
本次学习支持向量机部分数据如下所示 IDmasswidthheightcolor_scorefruit_namekind 其中ID:1-59是对应训练集和验证集的数据,60-67是对应测试集的数据,其中水果类别一共有四类包括apple、lemon、orange、mandarin。要求根据1-59的数据集的自…...
【数据中心】数据中心的IP封堵防护:构建网络防火墙的基石
数据中心的IP封堵防护:构建网络防火墙的基石 引言一、理解IP封堵二、IP封堵的功能模块及其核心技术三、实施IP封堵的关键策略四、结论 引言 在当今高度互联的世界里,数据中心成为信息流动和存储的神经中枢,承载着企业和组织的大量关键业务。…...
LangChain的使用详解
一、 概念介绍 1.1 Langchain 是什么? 官方定义是:LangChain是一个强大的框架,旨在帮助开发人员使用语言模型构建端到端的应用程序,它提供了一套工具、组件和接口,可简化创建由大型语言模型 (LLM) 和聊天模型提供…...
Modbus转BACnet/IP网关快速对接Modbus协议设备与BA系统
摘要 在智能建筑和工业自动化领域,Modbus和BACnet/IP协议的集成应用越来越普遍。BA(Building Automation,楼宇自动化)系统作为现代建筑的核心,需要高效地处理来自不同协议的设备数据,负责监控和管理建筑内…...
万字长文之分库分表里无分库分表键如何查询【后端面试题 | 中间件 | 数据库 | MySQL | 分库分表 | 其他查询】
在很多业务里,分库分表键都是根据主要查询筛选出来的,那么不怎么重要的查询怎么解决呢? 比如电商场景下,订单都是按照买家ID来分库分表的,那么商家该怎么查找订单呢?或是买家找客服,客服要找到对…...
如何查看jvm资源占用情况
如何设置jar的内存 java -XX:MetaspaceSize256M -XX:MaxMetaspaceSize256M -XX:AlwaysPreTouch -XX:ReservedCodeCacheSize128m -XX:InitialCodeCacheSize128m -Xss512k -Xmx2g -Xms2g -XX:UseG1GC -XX:G1HeapRegionSize4M -jar your-application.jar以上配置为堆内存4G jar项…...
科研绘图系列:R语言TCGA分组饼图(multiple pie charts)
介绍 在诸如癌症基因组图谱(TCGA)等群体研究项目中,为了有效地表征和比较不同群体的属性分布,科研人员广泛采用饼图作为数据可视化的工具。饼图通过将一个完整的圆形划分为若干个扇形区域,每个扇形区域的面积大小直接对应其代表的属性在整体中的占比。这种图形化的展示方…...
ReadAgent,一款具有要点记忆的人工智能阅读代理
人工智能咨询培训老师叶梓 转载标明出处 现有的大模型(LLMs)在处理长文本时受限于固定的最大上下文长度,并且当输入文本越来越长时,性能往往会下降,即使在没有超出明确上下文窗口的情况下,LLMs 的性能也会随…...
构建智能:利用Gradle项目属性控制构建行为
构建智能:利用Gradle项目属性控制构建行为 Gradle作为一款强大的构建工具,提供了丰富的项目属性管理功能。通过项目属性,开发者可以灵活地控制构建行为,实现条件编译、动态配置和多环境构建等高级功能。本文将详细解释如何在Grad…...
C++ 模板与泛型编程入门
C 模板与泛型编程入门 模板把类型(及非类型参数)作为参数,在编译期由编译器按用法生成具体函数或类,是 C 泛型编程与 STL 的基础。下文以 Max、简单类模板、选择排序及可定制比较器为例说明常见写法;排序复杂度为 (O(…...
【2026最新】AI产品经理学习路径全解析:顺序错了,努力全白费!
导语 为什么90%的人学不好AI产品经理? 在2025年这个AI爆发的时代,AI产品经理已成为最炙手可热的职业之一。然而,许多“转行者”却在学习过程中频频踩坑: 学了3个月Python却连模型调参都不会?看懂了Prompt Engineeri…...
光伏储能管理系统:绿虫赋能,破解行业流程痛点
光伏储能产业迎来高速发展期,但其全业务流程的复杂性却成为企业发展的桎梏。从项目开发的多环节审批,到建设阶段的进度质量管控,再到运维结算的数据协同,各环节割裂、部门协作不畅、数据杂乱无章等问题频发,不少企业负…...
MindSpore mint 模块学习
1. 模块概述mindspore.mint是 MindSpore 框架提供的一个功能接口子模块,旨在提供大量与业界主流深度学习框架(如 PyTorch)保持一致的 functional、nn、优化器等 API。使熟悉主流框架的用户能够快速上手。性能特点:在图编译模式为 …...
OpenClaw技能调试:GLM-4.7-Flash功能开发排错指南
OpenClaw技能调试:GLM-4.7-Flash功能开发排错指南 1. 为什么需要关注技能调试 上周我在为团队开发一个基于GLM-4.7-Flash的自动化周报生成技能时,遇到了一个棘手的问题:技能在本地测试时运行完美,但部署到OpenClaw后却频繁超时。…...
域环境基础知识
Active Directory(AD) 域控制器功能: 集中管理所有域用户统一身份认证组策略分发资源访问控制 Windows Server域环境搭建 推荐版本: Windows Server 2003Windows Server 2008Windows Server 2012 域环境组成: 域控制器…...
FreeTTS实战:Java离线TTS引擎的集成、局限与替代方案
1. FreeTTS简介与适用场景 FreeTTS是一个基于Java的开源文本转语音(TTS)引擎,它最大的特点就是完全离线运行,不需要依赖任何云端服务。我在几年前的一个物联网项目中第一次接触它,当时需要给设备添加语音播报功能&…...
SSHFS-Win许可证完全指南:GPLv2+、GPLv3与FLOSS异常条款解析
SSHFS-Win许可证完全指南:GPLv2、GPLv3与FLOSS异常条款解析 【免费下载链接】sshfs-win SSHFS For Windows 项目地址: https://gitcode.com/gh_mirrors/ss/sshfs-win SSHFS-Win是一个让Windows用户通过SSH协议挂载远程服务器目录的开源工具,其许可…...
3步搞定B站音频提取:BilibiliDown开源工具的终极指南
3步搞定B站音频提取:BilibiliDown开源工具的终极指南 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https://gitcode.com/gh_mirrors/bi…...
3大核心能力:黑苹果爱好者的系统构建指南
3大核心能力:黑苹果爱好者的系统构建指南 【免费下载链接】Hackintosh 国光的黑苹果安装教程:手把手教你配置 OpenCore 项目地址: https://gitcode.com/gh_mirrors/hac/Hackintosh 评估硬件兼容性 为什么同样的硬件配置,别人的黑苹果…...
