news 2026/9/7 20:25:16

ResNet18、DenseNet121和ResNet50胸片三分类对比

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ResNet18、DenseNet121和ResNet50胸片三分类对比

一、为什么要训练三个模型

三个模型解决的是同一个任务,但网络结构不同:

  • ResNet18:层数较浅,残差结构简单,推理速度快;
  • ResNet50:网络更深,使用瓶颈残差块,参数量更大;
  • DenseNet121:层与层之间密集连接,特征复用能力较强。

对比实验必须尽量控制变量。三个模型应使用相同的数据划分、输入尺寸、数据增强、类别顺序和评价方法。否则指标差异可能来自实验条件,而不是网络结构。

二、实验结果

本项目得到的测试结果如下:

模型参数量/M准确率Macro-F1正常召回细菌性召回病毒性召回推理耗时/ms
ResNet1811.180.82370.82390.89310.78200.831035.70
DenseNet1216.960.80680.80670.88050.77160.795886.20
ResNet5023.510.80170.80200.92450.75780.753584.10

从结果看,ResNet18 的准确率和 Macro-F1 最高,同时推理速度最快,因此被选为系统默认模型。

三、为什么模型更深却不一定更准确

“网络越深,效果越好”只在一定条件下成立。ResNet50 在本项目中没有超过 ResNet18,可能有以下原因:

  1. 数据集规模有限,深层模型更容易过拟合;
  2. 胸片类别之间的差异较细,数据质量和标签噪声可能成为主要瓶颈;
  3. 不同架构对学习率、冻结层数和训练轮数的最佳设置不同;
  4. 更大的模型需要更多训练数据和更充分的超参数搜索;
  5. 单次实验会受到随机初始化和数据顺序影响。

因此,选择部署模型不能只看网络深度或参数量。

四、为什么使用Macro-F1

准确率的计算方式是:

Accuracy = 正确预测数量 / 总样本数量

当各类别样本数量不均衡时,准确率可能被数量最多的类别主导。Macro-F1 会分别计算每个类别的 F1,再取算术平均:

Macro-F1 = (F1_normal + F1_bacteria + F1_virus) / 3

它给予三个类别相同权重,更适合观察模型是否只擅长某一个类别。

五、如何理解类别召回率

召回率表示某一类别的真实样本中,有多少被模型成功找出:

Recall = TP / (TP + FN)

ResNet50 的正常类召回率达到 0.9245,但细菌性和病毒性肺炎召回率较低。这说明它更容易识别正常胸片,却可能漏掉更多肺炎样本。医疗辅助场景不能只追求某一个类别的高指标,需要综合观察各类别表现。

六、选择部署模型的原则

模型选择可以综合考虑:

  • Macro-F1 和准确率;
  • 重点类别召回率;
  • 单张推理耗时;
  • 参数量和内存占用;
  • Grad-CAM 是否关注合理区域;
  • 在真实部署环境中的稳定性。

本项目最终选择 ResNet18,是因为它在效果和效率之间取得了更好的平衡,而不是因为它名字更简单。

七、实验还可以怎样改进

更严格的实验可以让每个架构使用不同随机种子重复训练三至五次,并报告平均值和标准差。例如:

ResNet18 Macro-F1 = 0.824 ± 0.006

还可以增加交叉验证、置信区间、ROC-AUC、PR 曲线以及错误样本分析。毕业设计如果时间有限,至少要保证三个模型的数据划分和评价流程一致。

八、总结

训练多个模型的目的不是凑数量,而是通过受控实验回答“哪种架构更适合当前任务”。本实验说明,参数更多、网络更深并不必然带来更好的结果,最终模型应依据效果、速度和风险共同选择。

参考标签

ResNet18ResNet50DenseNet121模型对比深度学习胸片分类

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/7 20:22:43

conda完全指南:环境管理、包管理与常见报错一次讲清

见字如面。搞 Python 开发这两年,我最常被实习生问的就是“conda 到底怎么用”。那本期就把 conda 的常见指令一次性盘清楚,包括环境管理、包管理、换源、跨平台迁移、以及一堆让你怀疑人生的报错处理。这篇文我尽量用大白话讲透,全程干货&am…

作者头像 李华
网站建设 2026/9/7 20:22:02

FlyEnv:PHP多版本管理与本地部署的一体化解决之道

如果你曾经像我一样,为了把一个项目从代码仓库变成浏览器里能访问的网站,生生耗掉一整个下午,那你大概率能理解我写下这篇东西的动机。装 PHP、配 Nginx、折腾 MySQL、设置伪静态、处理端口冲突,每一步单看都不难,但串…

作者头像 李华
网站建设 2026/9/7 20:21:02

MMO无缝地图过渡架构实战:从Region切分到跨进程迁移

做MMO服务器这些年,我最大的体感是:开放世界“看起来”和“做起来”是两回事。画面够大只是第一步,真正让玩家觉得“这是一个完整世界”而不是“一堆房间拼在一起”的,恰恰是那些他们几乎没有感知的技术——比如从一个区域跑进另一…

作者头像 李华
网站建设 2026/9/7 20:18:12

一篇文章多个号发?公众号多账号矩阵管理的工程化做法

公众号矩阵是很多团队和个人的选择:一个领域开几个号、或者一个号试几个方向。但号一多,问题就来了——登录切换麻烦、内容重复发容易乱、各号数据难对比。这篇讲公众号矩阵的工程化管理思路:账号怎么分层、内容怎么分发、日常怎么维护。一、…

作者头像 李华
网站建设 2026/9/7 20:18:11

NSCAT L3海面风场数据处理全指南:从NetCDF读取到绘图

手上刚好整理过一批 NSCAT 3 级风场数据,翻了翻当时的处理脚本和踩坑记录,干脆把这些东西梳理成一篇完整的说明。无论你是刚接触散射计数据、准备做海面风场分析,还是想在论文里引用这套历史数据,这篇内容应该能帮你少走不少弯路。…

作者头像 李华
网站建设 2026/9/7 20:16:52

PostgreSQL 19新特性:FOR PORTION OF子句如何优雅修改时态数据

写了个招聘系统里的人员工时表,结果被吐槽"数据改得乱七八糟"——后来我发现,几乎所有业务系统里"带有效时间的数据"都在被一种粗暴的方式折腾着:要改某段时间里的状态,大家习惯直接UPDATE整行或DELETE后重插…

作者头像 李华