摘要:脑肿瘤MRI影像诊断工作量巨大,大型CNN、Transformer效果好但是参数量大,很难部署到移动端、嵌入式便携设备。本文基于Pytorch搭建MobileNetV3全家桶医学影像分类工程,数据集4000余张脑部MRI切片,完成glioma胶质瘤、meningioma脑膜瘤、notumor无肿瘤、pituitary垂体瘤四分类任务。工程支持MobileNetV3‑small/large一键切换,实现迁移学习、冻结微调、参数量与FLOPs统计、全套多分类指标、混淆矩阵、ROC曲线、训练曲线可视化;配套Streamlit网页推理程序,上传图片即可得到预测结果;附带可直接渲染的Mermaid网络结构图。本文从临床背景、数据集说明、MobileNetV3原理拆解、网络结构、完整代码解析、训练策略、指标解读、运行流程、落地局限与后续优化方向完整展开。
1 研究背景与临床意义
颅内脑肿瘤主要包含胶质瘤、脑膜瘤、垂体瘤等不同类型,不同肿瘤的治疗方案、预后情况差异巨大。
- glioma(胶质瘤):最常见原发性颅内恶性肿瘤,肿瘤浸润性生长,危害程度高;
- meningioma(脑膜瘤):大多为良性肿瘤,起源于脑膜组织;
- notumor(无肿瘤):脑部正常MRI影像,无肿瘤病灶;
- pituitary(垂体瘤):发生于垂体区域肿瘤,会引发内分泌异常等系列临床症状。
MRI是脑肿瘤首选无创影像学检查手段。但在大规模体检、基层医院场景,影像科医生资源紧张,阅片任务繁重;复杂病灶容易出现主观判读偏差。开发AI计算机辅助诊断系统,可以辅助医生快速初筛影像,优先标记高风险样本。
现有的很多脑肿瘤AI模型采用Heavy大模型,精度可观,但参数量巨大,对硬件算力要求高,很难部署到便携设备、平板、边缘硬件。MobileNetV3作为轻量级CNN代表,专门面向移动设备设计,分为small和large两个版本,通过深度可分离卷积降低计算开销,引入SE通道注意力强化有效特征,h‑swish激活兼顾性能与速度,非常适合医学影像边缘部署场景。
本数据集一共4000多张脑部MRI二维切片,属于中等规模医学数据集,利用迁移学习,把在自然图像上学到的底层纹理、边缘特征迁移到脑肿瘤病灶识别任务;同时提供Streamlit网页推理,不需要命令行,上传图片即可完成预测,方便做演示原型。
2 数据集说明
数据集标签json定义:
{
"0": "glioma",
"1": "meningioma",
"2": "notumor",
"3": "pituitary"
}
数据集采用ImageFolder标准目录组织格式:
data
├─train
│ ├─glioma
│ ├─meningioma
│ ├─notumor
│ └─pituitary
└─val
├─glioma
├─meningioma
└─......其余类别
数据预处理流水线
- 训练集:Resize(256) → RandomRotation(90)随机旋转 → CenterCrop(224) → ToTensor() → ImageNet标准化
mean=[0.485, 0.456, 0.406],std=[0.229, 0.224, 0.225] - 验证集:Resize(256) → CenterCrop(224) → ToTensor() → 同样标准化。
注意:MRI医学影像灰度分布和ImageNet自然图像存在域偏移。本项目使用ImageNet预训练权重做初始化,后续微调适配脑影像;如果追求更高精度,可以使用医学影像预训练权重。
3 MobileNetV3网络架构与Mermaid结构图
MobileNetV3核心基础单元是Bneck(倒残差瓶颈模块),融合:倒残差结构、深度可分离卷积、SE通道注意力模块、h‑swish激活函数。
- 1×1逐点卷积升维,把特征映射到高维空间;
- 3×3深度可分离卷积做空间特征提取;
- SE注意力模块,对各通道特征进行重标定,强化肿瘤病灶相关通道,抑制无效背景;
- 1×1逐点卷积降维压缩通道;
- 输入输出通道匹配时使用残差shortcut跳跃连接。
3.1 MobileNetV3整体文字结构
输入MRI图像 3×224×224
↓
Stem层:3×3 Conv + BN + h‑swish
↓
堆叠多组Bneck倒残差模块(small/large模块数量、通道数不同)
↓
1×1 Conv升维 + BN + h‑swish
↓
Global Average Pooling全局平均池化
↓
MobileNetV3‑Classifier头(Dropout+Linear)
↓
输出4维:glioma / meningioma / notumor / pituitary
3.2 Bneck倒残差模块内部子结构
Bneck模块输入特征图
↓
1×1 Pointwise升维卷积 + BN + h‑swish
↓
3×3 Depthwise深度可分离卷积 + BN + h‑swish
↓
SE通道注意力(GAP→两层全连接→hard‑sigmoid通道权重重标定)
↓
1×1 Pointwise降维卷积 + BN
↓
shortcut残差相加(通道匹配才启用)
输出特征图
3.3 Mermaid绘图代码

3.4 MobileNetV3‑small / large版本对比
| 模型 | 特点 | 参数量 | 适用场景 |
|---|---|---|---|
| MobileNetV3‑small | Bneck模块数量少,通道数更小,计算量极低 | 最小 | 嵌入式、边缘设备、快速推理,牺牲少量精度 |
| MobileNetV3‑large | Bneck模块更多,通道更大,特征提取能力更强 | 中等 | 服务器、PC端,平衡精度与速度,本项目优先基线 |
本项目通过命令行参数--model small/large切换;加载官方预训练权重之后,替换最后一层分类头输出维度为4,适配4类脑肿瘤任务;开启--freeze_layers True可以冻结主干网络,只训练最后的分类头,缓解4000张医学数据集的过拟合风险。
4 项目核心代码模块解读
整套工程包含四份核心脚本:train.py训练脚本、utils.py工具库、infer.py基于Streamlit网页推理脚本。
4.1 utils.py核心模块
- create_model():模型工厂函数,选择small/large版本,加载对应官方预训练权重,替换网络末尾classifier的全连接层,输出通道设置为类别数量。
get_device()自动获取cuda/cpu;mkdir()自动清空旧实验目录,新建weights权重文件夹;data_trans()训练集验证集两套数据增强。- ConfusionMatrix混淆矩阵类:计算多分类全套指标,准确率、每一类Precision精确率、Recall召回率、Specificity特异度、F1‑score,输出宏平均指标,自动绘制保存混淆矩阵图片。>
医学脑肿瘤任务重点指标:Recall召回率,保证肿瘤样本尽可能被检出,降低漏诊风险;混淆矩阵可以直观观察模型容易混淆的肿瘤类别,例如脑膜瘤和垂体瘤容易发生错分。
train_one_epoch()一轮训练,CrossEntropy交叉熵损失;evaluate()验证集评估。- 绘图工具函数:loss‑acc损失精度曲线;
plot_lr_decay()学习率变化曲线;plot_prsf()P‑R‑S‑F1指标曲线;plot_roc_curve()绘制多分类ROC曲线。 get_data()读取ImageFolder数据集;gen_json()生成class_indices.json类别映射;get_optim()支持SGD、Adam、AdamW优化器,医学影像优先AdamW。
4.2 train.py训练脚本完整流程
- 接收命令行参数,自定义实验保存目录
save_ret;调用mkdir清空旧文件;获取训练设备。 - 加载训练集、验证集MRI影像,打印样本数量,导出
class_indices.json。 - 创建MobileNetV3模型,thop工具统计总参数量、可训练参数量、FLOPs计算量,控制台打印输出。
freeze_layers=True时,冻结主干全部Bneck模块,仅训练最后的classifier分类头。- 筛选需要更新梯度的参数pg;选择优化器;设置LambdaLR余弦退火学习率调度器。
- epoch循环:
- 执行train_one_epoch训练一轮;scheduler更新学习率;evaluate验证;
- 每epoch全部指标保存到
train_log_results.json; - 对比验证集accuracy,保存最优
best.pth;训练结束保存last.pth。
- 训练结束自动绘制loss‑acc、lr、P‑R‑S‑F1曲线图。
- 加载best最优权重,计算并绘制训练集、验证集混淆矩阵;计算并绘制多分类ROC曲线。
参考训练超参数
--model large
--pretrained True
--freeze_layers True
--batch‑size 8
--epochs 20
--optim AdamW
--lr 0.01
--lrf 0.01
4.3 infer.py Streamlit网页推理脚本
基于Streamlit搭建简易网页版演示系统,无需QT界面,浏览器打开即可使用:
- 读取模型参数路径、class_indices.json类别映射、best.pth权重;
- 页面提供图片上传组件,支持本地上传脑部MRI图像;
- 如果不上传图片,会加载一张默认示例图片做演示;
- 图像预处理,模型推理softmax,取top‑3预测类别与概率;
- 在网页展示原图,同时输出每一类预测名称以及对应百分比分数。
运行网页推理命令:
streamlit run infer.py
5 多分类评价指标解读(4类脑肿瘤glioma/meningioma/notumor/pituitary)
本任务为四分类,代码采用宏平均macro‑average,平等对待4个类别,不受各类样本数量不均衡的干扰。
- Accuracy准确率:全部样本预测正确占总样本的比例;
- Precision精确率:预测为某一类肿瘤样本中,真实属于该肿瘤的比例,反映误判;
- Recall召回率:真实肿瘤样本被识别出来的比例,医学任务核心指标,召回率低代表漏诊风险高;
- Specificity特异度:不属于该类别的样本被正确判定为阴性;
- F1‑score:精确率召回率调和平均,综合评价类别识别性能;
- ROC‑AUC:衡量模型区分4类脑部MRI样本的整体能力;
- 混淆矩阵:4×4矩阵,对角线为各类别预测正确数量;非对角线观察哪两类肿瘤之间容易混淆。
过拟合判断:训练集指标很高,验证集指标明显下滑;医学小数据集常见;缓解方案:开启冻结训练、适当增加数据增强、控制epoch、权重衰减。
6 完整项目运行流程
-
环境依赖
pytorch、torchvision、opencv‑python、pillow、matplotlib、thop、tqdm、scikit‑learn、streamlit -
MRI数据集按照ImageFolder格式放到
./data/train与./data/val。 -
启动训练示例:
python train.py --model large --pretrained True --freeze_layers True --batch-size 8 --epochs 20 --optim AdamW --lr 0.01 --lrf 0.01
-
训练产物全部输出到
‑‑save_ret指定目录(默认runs)
- weights文件夹:best.pth、last.pth权重
- class_indices.json类别映射文件
- train_log_results.json完整训练日志
- loss_accuracy_curve.jpg、LR_decay.jpg、results.jpg指标曲线图
- roc_curve.jpgROC曲线图
- trainSet Confusion Matrix.jpg、valSet Confusion Matrix.jpg混淆矩阵
-
网页推理演示:
streamlit run infer.py
