本科毕业设计研究知识蒸馏在胸部 X 光多标签分类中的应用:使用 CNN 与 Transformer 教师模型指导轻量化学生模型 EEEA-Net-C2,在降低参数量和计算量的同时改善分类指标。

返回项目实践 · 毕业设计资料(提取码:3ezu

本文记录本科研究与实验结果,仅用于学习和复盘,不构成临床诊断建议,也不代表模型已经完成真实医疗场景验证。

1、课题信息

项目 内容
学习阶段 大四下学期
完成时间 2024 年 4 月
正式题目 知识蒸馏的轻量化迁移模型在肺部疾病诊断中的应用研究
任务类型 ChestX-ray14 多标签胸部 X 光分类
学生模型 EEEA-Net-C2
教师模型 OFA-595、CheXNet、Visformer-small、AutoFormerV2-base
评价指标 AUC、Accuracy、F1、参数量、FLOPs

2、研究问题

高性能医学影像模型往往需要较多参数和计算资源。本研究尝试回答:能否把较大教师模型的知识迁移给轻量化学生模型,使学生模型在资源需求较低的同时,保持或改善胸部 X 光分类性能?

研究流程包括:

  1. 预处理并划分 ChestX-ray14 数据集。
  2. 分别评估学生模型和四个候选教师模型。
  3. 使用不同教师对 EEEA-Net-C2 进行知识蒸馏。
  4. 比较蒸馏前后的 AUC、Accuracy 和 F1。
  5. 统计参数量与 FLOPs,讨论轻量化效果。

3、实验设计

教师模型同时包含 CNN 和 Transformer 架构,用于比较跨架构知识迁移。学生模型 EEEA-Net-C2 是基于 MobileNetV3 改进的轻量网络。

蒸馏过程使用教师输出指导学生训练。论文还讨论了结合二元交叉熵与均方误差的混合损失,以及类别不平衡条件下的训练问题。

4、主要结果

指标 基线或教师 蒸馏后结果
学生模型 AUC EEEA-Net-C2:80.2% CheXNet 教师:83.8%
AUC 提升 - 相比学生基线提升 3.6 个百分点
最高 Accuracy 学生基线:93.1% AutoFormerV2-base 教师:93.7%
最高 F1 学生基线:92.7% OFA-595 或 CheXNet 教师:93.1%
参数量 6.97M 4.73M
FLOPs 2.896B 0.311B

CheXNet 作为教师时取得最高蒸馏 AUC。需要注意,蒸馏后的学生模型并未在所有指标上超过所有教师模型;结论应理解为学生模型在效率与性能之间取得了更好的平衡。

5、实现思路整理

我目前没有找到单独的训练源码包,因此这里不把下面内容写成“原始源码”。它是根据论文与答辩材料整理出来的复盘版伪代码,用来说明毕业设计的核心训练流程。

5.1 模型复杂度统计

1
2
3
4
def count_model_cost(model, example_input):
params = sum(p.numel() for p in model.parameters())
flops = profile(model, inputs=(example_input,))
return params, flops

参数量用于衡量模型规模,FLOPs 用于衡量单次前向推理的大致计算成本。论文中正是用这两个指标说明 EEEA-Net-C2 的轻量化价值。

5.2 蒸馏训练框架

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
def train_distillation(student, teacher, train_loader, optimizer,
temperature=4.0, alpha=0.5):
teacher.eval()
student.train()

for images, labels in train_loader:
with torch.no_grad():
teacher_logits = teacher(images)

student_logits = student(images)
hard_loss = binary_cross_entropy_with_logits(student_logits, labels)
soft_loss = mse_loss(
softmax(student_logits / temperature),
softmax(teacher_logits / temperature),
) * (temperature ** 2)

loss = alpha * hard_loss + (1 - alpha) * soft_loss
optimizer.zero_grad()
loss.backward()
optimizer.step()

这段伪代码对应论文中的核心思路:真实标签约束学生模型的基本分类能力,教师输出提供软目标,让学生模型在轻量结构下尽量靠近教师模型的预测分布。

5.3 评估流程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
def evaluate(model, valid_loader):
model.eval()
all_logits, all_labels = [], []

with torch.no_grad():
for images, labels in valid_loader:
logits = model(images)
all_logits.append(logits.sigmoid())
all_labels.append(labels)

return {
"auc": mean_auc(all_labels, all_logits),
"accuracy": multilabel_accuracy(all_labels, all_logits),
"f1": multilabel_f1(all_labels, all_logits),
}

多标签胸部 X 光任务不能只看 Accuracy,AUC 和 F1 更能补充观察类别不平衡下的模型表现。

6、研究局限

  • 使用约 50GB 的 ChestX-ray14,数据规模和训练条件有限。
  • 数据中的图像质量与标签质量并不完全一致。
  • 部分训练没有达到理想收敛状态,计算资源限制了更大规模实验。
  • 泛化能力尚未在独立数据集和真实临床流程中验证。
  • 模型可解释性、隐私、偏差和部署安全仍需进一步研究。

7、后续方向

  1. 扩充数据量,并在独立数据集上做外部验证。
  2. 比较更多教师模型、蒸馏温度和损失权重。
  3. 加入可解释性分析,观察模型关注区域是否合理。
  4. 结合剪枝、量化和神经架构搜索继续压缩模型。
  5. 建立完整实验配置、随机种子和复现实验记录。

8、个人复盘

毕业设计让我完整经历了文献检索、模型选择、数据准备、训练评估、论文写作和答辩。最大的收获不是某个单独指标,而是开始理解实验结论必须和数据规模、训练条件、统计方式及适用边界一起表达。