1. 任务简介
本案例旨在使用深度学习技术对脑部MRI图像进行病变区域分割。任务要求从处理好的MRI图像中分割出病变区域,使用Dice相似系数(DSC)作为主要评价指标。
2. 改进方法
2.1 网络结构改进
原始U-Net vs 改进U-Net 在unet.py中实现了改进的U-Net网络,主要改进点:
- 注意力机制:在解码器部分添加了注意力门控模块,使网络能够关注重要特征区域
- 残差连接:使用残差块替代普通卷积块,缓解梯度消失问题
- 深度监督:通过多尺度特征融合提升分割精度
- python
class ImprovedUNet(nn.Module): def __init__(self, in_channels=3, out_channels=1, init_features=32, use_attention=True, use_residual=True): # 包含注意力机制和残差连接的改进U-Net
2.2 损失函数优化
在loss.py中实现了多种损失函数组合:
- Dice Loss:专门处理类别不平衡问题
- Dice-BCE组合损失:结合Dice系数和二元交叉熵
- Focal Loss:解决难易样本不平衡问题
- 组合损失:综合多种损失函数的优点
- python
class ComboLoss(nn.Module): def __init__(self, dice_weight=0.5, bce_weight=0.3, focal_weight=0.2): # 组合多种损失函数
2.3 训练策略优化
在train.ipynb中实施了多项训练优化:
- 学习率调度:使用ReduceLROnPlateau自动调整学习率
- 优化器选择:使用AdamW优化器,具有更好的泛化能力
- 数据增强:增强的缩放、旋转和翻转增强
- 梯度裁剪:防止梯度爆炸
3. 实验结果
3.1 整体性能
| 指标 | 数值 |
|---|---|
| 最佳验证集DSC | 0.9163 |
| 训练轮数 | 150 |
3.2 病例分析
选择病例:最佳、中等、最差各选2个 其中:
- 最佳分割病例
- 病例ID:
kaggle_3m\TCGA_DU_6404_19850629 - DSC值: 0.9528
- 特点: 病变区域边界清晰,形状规则
- 病例ID:
- 最差分病例
- 病例ID:
kaggle_3m\TCGA_HT_7616_19940813 - DSC值: 0.8124
- 特点: 可能存在图像质量不佳或病变边界模糊 ![[Pasted image 20251113121730.png]]
- 病例ID:
3.3 训练过程分析
从训练日志可以看出:
- 模型在早期训练阶段快速收敛(前10个epoch DSC从0.3751提升到0.8148)
- 学习率调度器有效工作,在epoch 28、47、58等时刻自动降低学习率
- 验证集DSC在训练后期稳定在0.91-0.92之间
4. 可视化结果
4.1 DSC分布统计
生成的dsc.png图像显示:
- 大部分病例的DSC值集中在0.85-0.95之间
- 平均DSC线(红色)和中间值线(绿色)位置接近,说明分布相对对称
- 存在少量离群病例,DSC值低于0.85
- ![[dsc.png]]
4.2 病例示例对比
通过visualize_case_examples函数生成的对比图显示: 高质量分割特征:
- 预测边界与真实边界高度吻合
- 病变区域完整性好
- 误分割区域少 低质量分割问题:
- 病变区域边界模糊
- 存在欠分割或过分割现象
- 小病变区域检测困难
5. 改进效果分析
5.1 成功改进点
- 网络结构改进有效
- 注意力机制帮助网络聚焦重要区域
- 残差连接改善了梯度流动
- 最终DSC达到0.9163,相比原始实现有明显提升
- 损失函数组合优势
- 组合损失平衡了不同损失函数的特性
- 在处理类别不平衡问题上表现更好
- 训练策略优化
- 学习率调度避免了过拟合
- 数据增强提高了模型泛化能力
5.2 存在的挑战
- 病例间差异性
- 不同病例的图像质量和病变特征差异较大
- 部分病例的DSC值明显低于平均水平
- 小病变检测
- 对于小面积病变区域的分割精度仍有提升空间
- 边界模糊区域的划分存在困难
