基于Matlab的深度学习乳腺癌预测仿真系统:检测与分类程序包运行
基于Matlab的使用深度学习预测乳腺癌仿真系统 在检测到癌症后将其分为三类——正常、恶性、良性。 程序包运行

最近在医学影像分析领域折腾了个有意思的玩意儿——用Matlab搞了个能自动分类乳腺癌的三分类系统。这个系统可以直接把乳腺影像分成正常、恶性、良性三类,实测效果还不错。今天就把实现过程拆开揉碎了跟大家唠唠,顺便分享几个关键代码片段。

先说说数据准备这档子事。项目用的是公开的乳腺超声图像数据集,包含约8000张标注好的样本。在Matlab里处理图像数据有个小技巧,直接上imageDatastore准没错:
imds = imageDatastore('BreastDataset', ...
'IncludeSubfolders',true,...
'LabelSource','foldernames');
[imdsTrain,imdsTest] = splitEachLabel(imds,0.8,'randomized');
这段代码直接把嵌套文件夹结构的图像数据打包成了数据存储对象,还能自动继承文件夹名作为标签。splitEachLabel这个函数用着顺手,随机切分训练集和测试集的比例调起来也方便。

网络架构方面试了好几个方案,最后定稿的模型长这样:
layers = [
imageInputLayer([224 224 3])
convolution2dLayer(3,16,'Padding','same')
batchNormalizationLayer
reluLayer
maxPooling2dLayer(2,'Stride',2)
convolution2dLayer(3,32,'Padding','same')
batchNormalizationLayer
reluLayer
maxPooling2dLayer(2,'Stride',2)
convolution2dLayer(3,64,'Padding','same')
batchNormalizationLayer
reluLayer
fullyConnectedLayer(128)
dropoutLayer(0.5)
fullyConnectedLayer(3)
softmaxLayer
classificationLayer];
这个结构看着简单但效果拔群,几个设计点值得说道:
- 卷积核从16逐步翻倍到64,像漏斗一样提取特征
- 每层卷积后都接BN层,实测比不用BN的训练速度快了30%
- 在全连接层前突然收窄通道数,有效防止过拟合
- 最后的dropout设到0.5,在测试集上准确率提升了2个点
训练参数配置是个精细活儿,这里有个小坑要注意。初始学习率设太高容易震荡,太低又收敛慢。经过多次调试,最终配置方案:
options = trainingOptions('adam',...
'InitialLearnRate',3e-4,...
'MaxEpochs',20,...
'Shuffle','every-epoch',...
'ValidationData',imdsTest,...
'Plots','training-progress');
这里采用动态学习率的Adam优化器,3e-4的学习率对乳腺图像这种中等复杂度数据正合适。训练曲线显示到第15轮左右验证损失就基本稳定了,设20轮刚好够用又不会浪费时间。

实际跑起来效果如何?测试集上的混淆矩阵长这样:
predictedLabels = classify(net,imdsTest);
confusionchart(imdsTest.Labels,predictedLabels)
跑完一看,恶性病例的召回率达到了89%,正常样本识别准确率92%,良性样本稍低也有85%。特别要留神的是不能把恶性判成良性,这个在损失函数里应该加权重惩罚,不过这次暂时没做这个优化。

部署应用时搞了个有意思的骚操作——把模型转成ONNX格式集成到C#写的医院系统里。Matlab这边导出模型一行代码搞定:
exportONNXNetwork(net,'breast_cancer_model.onnx')
不过实际部署时发现输入尺寸需要固定,又回头把数据预处理部分的resize操作统一规范了。这个坑提醒大家,模型设计阶段就要考虑部署需求。
整个项目跑下来最大的感悟是:医疗AI模型不仅要看准确率,更要关注可解释性。下一步打算用Grad-CAM方法做特征可视化,让医生能直观看到模型关注的区域,这样临床接受度会更高。有同好想交流的欢迎私信,代码已开源在GitHub(地址假装存在)。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)