基于深度学习的乳腺癌超声图像智能诊断系统

Intelligent Breast Cancer Diagnosis System Based on Deep Learning

代码获取地址:https://mbd.pub/o/bread/YZWbkphxZQ==

本系统是面向医学影像分析领域的项目,旨在利用先进的深度学习技术,解决乳腺癌超声图像(Breast Ultrasound Images, BUSI)的自动分类与辅助诊断问题。系统集成了改进的 ResNet50 卷积神经网络、CBAM 注意力机制以及 Grad-CAM 可解释性分析算法,并提供了功能完备的 Web 可视化交互平台。


在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

📖 项目摘要 (Abstract)

乳腺癌是威胁女性健康的头号杀手,早期筛查对于降低死亡率至关重要。传统的超声诊断依赖医生的主观经验,存在耗时长、易误诊等问题。本项目提出了一种基于 ResNet50 + CBAM 的端到端乳腺癌分类模型,通过引入卷积块注意力模块(Channel & Spatial Attention),显著增强了模型对微小病灶特征的提取能力。此外,项目实现了 Grad-CAM 可视化技术,能够生成病灶热力图,为医生提供“白盒”诊断依据。系统采用 B/S 架构,实现了从数据上传、模型训练到智能诊断的全流程自动化。


🛠️ 核心创新点 (Key Innovations)

  1. 算法改进 (Algorithm Optimization):

    • 主干网络: 采用 ResNet50 作为特征提取器,利用其残差结构解决梯度消失问题。
    • 注意力机制: 嵌入 CBAM (Convolutional Block Attention Module),结合通道注意力(Channel Attention)和空间注意力(Spatial Attention),使模型能够自适应地关注图像中的关键病灶区域,抑制背景噪声干扰。
  2. 可解释性增强 (XAI Integration):

    • 集成 Grad-CAM 算法,将模型决策过程可视化。
    • 输出类激活热力图 (Heatmap),直观展示模型关注的感兴趣区域 (ROI),辅助医生验证 AI 诊断的合理性。
  3. 全栈可视化平台 (Full-Stack Visualization):

    • 智能诊断: 一键式拖拽上传,毫秒级输出“良性/恶性/正常”概率及热力图。
    • 在线训练: 创新的 Web 端训练模块,支持可视化配置超参数(Epochs, Batch Size, LR),实时动态绘制 Loss/Accuracy 曲线。
    • 历史回溯: 完整的实验记录管理系统,自动归档每次训练的日志、权重与评估报表,方便实验对比分析。

💻 系统功能详解 (System Functions)

1. 🏥 智能辅助诊断 (AI Diagnosis)
  • 功能描述: 对输入的超声图像进行自动化分析。
  • 输入: 支持 JPG/PNG 格式的超声图像。
  • 输出:
    • 预测类别:良性 (Benign)恶性 (Malignant)正常 (Normal)
    • 置信度:各各类别的概率分布。
    • 病灶定位: 叠加在原图上的 Grad-CAM 热力图(红色高亮区域即为疑似病灶)。
2. 💪 可视化模型训练 (Visual Training)
  • 功能描述: 允许用户使用本地数据集重新训练或微调模型。
  • 配置: 在界面直接调整训练参数。
    • Epochs: 训练轮数
    • Batch Size: 批大小
    • Learning Rate: 学习率
  • 实时监控:
    • 实时日志流:显示当前 Batch 的 Loss 和 Acc。
    • 动态图表:实时更新训练集/验证集的损失函数和准确率曲线。
    • 自动热重载: 训练结束后,系统自动加载最新的最佳权重 (Best Model),无需重启服务。
3. 📜 历史实验记录 (Experiment History)
  • 功能描述: 自动管理所有历史训练任务。
  • 特性:
    • 时间戳归档: 每次训练生成独立的时间戳文件夹,防止覆盖。
    • 一键回溯: 下拉选择任意历史节点,立刻复现当时的训练曲线、混淆矩阵和完整日志。

⚙️ 环境依赖与安装 (Installation)

推荐使用 conda 创建独立的虚拟环境。

1. 基础环境

  • Python >= 3.8
  • CUDA Toolkit (推荐,如有 NVIDIA 显卡)

2. 安装依赖

# 1. 克隆或下载项目代码
# 2. 进入项目目录
cd BC

# 3. 安装 Python 依赖库
pip install -r requirements.txt

依赖库说明:

  • torch, torchvision: 深度学习核心框架
  • gradio: 构建 Web 可视化界面
  • opencv-python, pillow: 图像处理
  • matplotlib, seaborn: 数据分析与绘图

🚀 运行指南 (Usage Guide)

python src/web_interface.py

启动成功后,控制台会输出访问地址(通常为 http://127.0.0.1:7860),在浏览器中打开该地址即可使用。


📂 项目目录结构 (Structure)

BC/
├── Dataset_BUSI_with_GT/       # 乳腺癌超声数据集 (原始数据)
│   ├── benign/                 # 良性样本
│   ├── malignant/              # 恶性样本
│   └── normal/                 # 正常样本
├── checkpoints/                # 模型权重存储 (存放 best_model.pth)
├── logs/                       # 系统运行日志
├── results/                    # 历史训练记录 (按时间戳归档)
│   └── 2024-xx-xx_xx-xx-xx/    # 单次训练结果
│       ├── training_history.png # 训练曲线图
│       ├── confusion_matrix.png # 混淆矩阵图
│       └── training_log.txt     # 完整训练日志
├── src/                        # 源代码目录
│   ├── config.py               # 全局路径配置
│   ├── dataset.py              # 数据加载与预处理 (Dataset类)
│   ├── model.py                # 网络结构定义 (ResNet50 + CBAM)
│   ├── gradcam.py              # Grad-CAM 可解释性算法实现
│   ├── train.py                # 模型训练核心逻辑 (生成器模式)
│   ├── web_interface.py        # Gradio 前端界面入口
│   ├── train_utils.py          # 绘图与评估工具函数
│   └── utils.py                # 通用工具 (随机种子固定等)
├── requirements.txt            # 项目依赖列表
└── run_project.bat             # Windows 启动脚本

� 数据集说明 (Dataset Details)

本项目采用公开的标准医学图像数据集 Breast Ultrasound Images (BUSI),该数据集源自开罗大学附属医院,共包含 780 张乳腺超声图像,分为三类:

  • benign (良性): 437 张
  • malignant (恶性): 210 张
  • normal (正常): 133 张

数据预处理策略:
为了适应深度学习模型的输入要求并防止过拟合,本项目实施了以下预处理与增强策略:

  1. 尺寸归一化: 所有图像统一调整大小为 256x256,并在输入模型前随机裁剪中心区域为 224x224
  2. 数据增强 (Data Augmentation):
    • 随机水平翻转 (Random Horizontal Flip): 模拟不同角度的拍摄。
    • 随机旋转 (Random Rotation): ±15度旋转,增加模型对角度变化的鲁棒性。
  3. 标准化 (Normalization): 使用 ImageNet 数据集的均值 [0.485, 0.456, 0.406] 和标准差 [0.229, 0.224, 0.225] 进行 z-score 标准化,加速模型收敛。

🧠 算法原理 (Algorithm Principle)

本项目提出了一种改进的卷积神经网络架构,旨在提升乳腺病灶的特征提取效率。

1. 骨干网络:ResNet50

ResNet50 通过引入残差连接 (Residual Connection),解决了深层网络中的梯度消失问题。其核心公式为:
y = F ( x , { W i } ) + x y = F(x, \{W_i\}) + x y=F(x,{Wi})+x
其中 x x x 为输入, F ( x ) F(x) F(x) 为残差映射, y y y 为输出。这种结构允许信息直接流层网络深层,保留了原始细节特征。

2. 注意力机制:CBAM (Convolutional Block Attention Module)

为了让模型“看”得更准,我们在 ResNet50 的特征提取末端嵌入了 CBAM 模块。CBAM 包含两个子模块:

  • 通道注意力 (Channel Attention Module, CAM):
    关注**“什么特征是重要的”**。它对特征图进行全局平均池化和最大池化,通过共享 MLP 学习通道权重。
    M c ( F ) = σ ( M L P ( A v g P o o l ( F ) ) + M L P ( M a x P o o l ( F ) ) ) M_c(F) = \sigma(MLP(AvgPool(F)) + MLP(MaxPool(F))) Mc(F)=σ(MLP(AvgPool(F))+MLP(MaxPool(F)))

  • 空间注意力 (Spatial Attention Module, SAM):
    关注**“哪里是重要的”**(即病灶位置)。它在通道维度上进行池化,通过卷积层生成空间权重图。
    M s ( F ) = σ ( C o n v 7 × 7 ( [ A v g P o o l ( F ) ; M a x P o o l ( F ) ] ) ) M_s(F) = \sigma(Conv^{7\times7}([AvgPool(F); MaxPool(F)])) Ms(F)=σ(Conv7×7([AvgPool(F);MaxPool(F)]))

最终特征图 F ′ ′ F'' F′′ 的计算过程为:
F ′ = M c ( F ) ⊗ F F' = M_c(F) \otimes F F=Mc(F)F
F ′ ′ = M s ( F ′ ) ⊗ F ′ F'' = M_s(F') \otimes F' F′′=Ms(F)F


💻 关键代码实现 (Key Implementation)

1. CBAM 模块定义 (src/model.py)
class CBAM(nn.Module):
    def __init__(self, planes):
        super(CBAM, self).__init__()
        self.ca = ChannelAttention(planes)  # 通道注意力
        self.sa = SpatialAttention()        # 空间注意力

    def forward(self, x):
        out = x * self.ca(x)
        out = out * self.sa(out)
        return out
2. 自定义数据集加载 (src/dataset.py)
class BreastCancerDataset(Dataset):
    def __init__(self, root_dir, transform=None, mode='train'):
        # ... (略)
        self.classes = ['benign', 'malignant', 'normal']
        
    def __getitem__(self, idx):
        img_path, label = self.images[idx]
        image = Image.open(img_path).convert('RGB')
        if self.transform:
            image = self.transform(image)
        return image, label
3. 可解释性分析 Grad-CAM (src/gradcam.py)
# 获取目标层的梯度和激活值
def save_gradient(self, module, grad_input, grad_output):
    self.gradients = grad_output[0]

def save_activation(self, module, input, output):
    self.activations = output

# 计算类激活图 (CAM)
def __call__(self, x, class_idx=None):
    # ...
    # 梯度加权
    pooled_gradients = torch.mean(gradients, dim=[2, 3], keepdim=True)
    weighted_activations = activations * pooled_gradients
    cam = torch.sum(weighted_activations, dim=1).squeeze(0)
    # ReLU激活 + 归一化
    cam = F.relu(cam) 
    # ...

�📊 实验环境 (Experimental Setup)

  • 硬件配置:
    • CPU: Intel Core i7 或同等级别
    • GPU: NVIDIA GeForce RTX 3060 及以上 (推荐 6GB+ 显存)
    • RAM: 16GB 及以上
  • 软件配置:
    • OS: Windows 10/11 或 Linux
    • Python: 3.8+
    • PyTorch: 1.10+

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐