Paddle-CheXNet

December 16, 2021 · View on GitHub

一、简介

二、复现精度

  • 测试精度:

    The final AUROCs: 
    The average AUROC is 0.847
    The AUROC of Atelectasis is 0.8292392176490241
    The AUROC of Cardiomegaly is 0.9142859299652238
    The AUROC of Effusion is 0.8875584024095078
    The AUROC of Infiltration is 0.711814559849058
    The AUROC of Mass is 0.8647347811493854
    The AUROC of Nodule is 0.7921467608091082
    The AUROC of Pneumonia is 0.7684077120089262
    The AUROC of Pneumothorax is 0.8770951989569952
    The AUROC of Consolidation is 0.8160893266094902
    The AUROC of Edema is 0.8986931866913855
    The AUROC of Emphysema is 0.9302391831183919
    The AUROC of Fibrosis is 0.837411708221408
    The AUROC of Pleural_Thickening is 0.7962435140282585
    The AUROC of Hernia is 0.9311000806021127
    
  • 精度对比:

    PathologyWang et al.Yao et al.CheXNetarnoweng/CheXNet Release Modelarnoweng/CheXNet Improved ModelPaddle-CheXNet
    Atelectasis0.7160.7720.80940.82940.83110.8292
    Cardiomegaly0.8070.9040.92480.91650.92200.9143
    Effusion0.7840.8590.86380.88700.88910.8876
    Infiltration0.6090.6950.73450.71430.71460.7118
    Mass0.7060.7920.86760.85970.86270.8647
    Nodule0.6710.7170.78020.78730.78830.7921
    Pneumonia0.6330.7130.76800.77450.78200.7684
    Pneumothorax0.8060.8410.88870.87260.88440.8771
    Consolidation0.7080.7880.79010.81420.81480.8161
    Edema0.8350.8820.88780.89320.89920.8987
    Emphysema0.8150.8290.93710.92540.93430.9302
    Fibrosis0.7690.7670.80470.83040.83850.8374
    Pleural Thickening0.7080.7650.80620.78310.79140.7962
    Hernia0.7670.9140.91640.91040.92060.9311
    Avg AUROCs0.8410.8430.8480.847

三、数据集

  • 项目使用的数据集为 dataset
  • ChestX-ray 数据集包含 30,805 名患者的 112,120 张正面视图的X射线图像,以及利用 NLP 从相关放射学报告挖掘的 14 类疾病的图像标签(每个图像可以有多个标签)。
  • 数据集含有 14 类常见的胸部病理,包括肺不张、变实、浸润、气胸、水肿、肺气肿、纤维变性、积液、肺炎、胸膜增厚、心脏肥大、结节、肿块和疝气
  • 下载链接:dataset dataset

四、环境依赖

  • 本项目依赖如下模块:

    scikit-learn
    paddlepaddle-gpu
    opencv-python
    numpy
    pillow
    
  • 可通过如下命令安装依赖:

    $ pip install -r requirements.txt
    

五、快速使用

  • 同步项目代码

  • 下载数据集并解压至 dataset 文件夹

  • 使用如下命令进行模型训练:

    $ python train.py \
        --data_dir=dataset/images \
        --train_list=dataset/labels/train_list.txt \
        --val_list=dataset/labels/val_list.txt \
        --save_dir=save \
        --batch_size=128 \
        --learning_rate=0.001 \
        --decay_epochs=10,15,18 \
        --decay_factor=0.1 \
        --epoch=20
    
      Epoch 1/20
      step  10/614 - loss: 0.1650 - AUROC_Atelectasis: 0.5343 - AUROC_Cardiomegaly: 0.5442 - AUROC_Effusion: 0.5442 - AUROC_Infiltration: 0.5400 - AUROC_Mass: 0.4854 - AUROC_Nodule: 0.5043 - AUROC_Pneumonia: 0.5403 - AUROC_Pneumothorax: 0.5507 - AUROC_Consolidation: 0.5129 - AUROC_Edema: 0.5020 - AUROC_Emphysema: 0.5979 - AUROC_Fibrosis: 0.5571 - AUROC_Pleural_Thickening: 0.5663 - AUROC_Hernia: 0.5823 - AUROC_avg: 0.5401 - 3s/step
      step  20/614 - loss: 0.1895 - AUROC_Atelectasis: 0.5719 - AUROC_Cardiomegaly: 0.5691 - AUROC_Effusion: 0.6262 - AUROC_Infiltration: 0.5605 - AUROC_Mass: 0.5333 - AUROC_Nodule: 0.5022 - AUROC_Pneumonia: 0.5410 - AUROC_Pneumothorax: 0.5947 - AUROC_Consolidation: 0.5511 - AUROC_Edema: 0.5663 - AUROC_Emphysema: 0.5629 - AUROC_Fibrosis: 0.4929 - AUROC_Pleural_Thickening: 0.5867 - AUROC_Hernia: 0.6170 - AUROC_avg: 0.5626 - 3s/step
      step  30/614 - loss: 0.1637 - AUROC_Atelectasis: 0.5881 - AUROC_Cardiomegaly: 0.5548 - AUROC_Effusion: 0.6691 - AUROC_Infiltration: 0.5767 - AUROC_Mass: 0.5438 - AUROC_Nodule: 0.5179 - AUROC_Pneumonia: 0.5331 - AUROC_Pneumothorax: 0.6317 - AUROC_Consolidation: 0.5818 - AUROC_Edema: 0.6350 - AUROC_Emphysema: 0.5629 - AUROC_Fibrosis: 0.5629 - AUROC_Pleural_Thickening: 0.6101 - AUROC_Hernia: 0.7026 - AUROC_avg: 0.5908 - 3s/step
      ...
    
  • 使用如下命令进行模型精度测试(默认使用本项目训练的最佳模型参数):

    $ python eval.py \
        --data_dir=dataset/images \
        --test_list=dataset/labels/test_list.txt \
        --batch_size=128 \
        --ckpt=pretrained_models/model_paddle.pdparams
    
      => loading checkpoint
      => loaded checkpoint
      100%|█████████████████████████████████████████| 176/176 [12:56<00:00,  4.41s/it]
      The final AUROCs: 
      The average AUROC is 0.847
      The AUROC of Atelectasis is 0.8292392176490241
      The AUROC of Cardiomegaly is 0.9142859299652238
      The AUROC of Effusion is 0.8875584024095078
      The AUROC of Infiltration is 0.711814559849058
      The AUROC of Mass is 0.8647347811493854
      The AUROC of Nodule is 0.7921467608091082
      The AUROC of Pneumonia is 0.7684077120089262
      The AUROC of Pneumothorax is 0.8770951989569952
      The AUROC of Consolidation is 0.8160893266094902
      The AUROC of Edema is 0.8986931866913855
      The AUROC of Emphysema is 0.9302391831183919
      The AUROC of Fibrosis is 0.837411708221408
      The AUROC of Pleural_Thickening is 0.7962435140282585
      The AUROC of Hernia is 0.9311000806021127
    

六、代码结构与详细说明

  • 代码结构

    │  train.py # 模型训练脚本
    eval.py # 模型测试脚本
    │  vis_cam.py # CAM 可视化脚本
    │  requirements.txt # 依赖环境列表
    
    ├─chexnet # ChexNet 代码
    │      data.py # 数据处理
    │      densenet.py # DenseNet
    │      model.py # CheXNet Model
    │      utility.py # 功能代码
    
    ├─dataset
    │  ├─images # 数据集图像
    │  │
    │  └─labels # 数据集列表
    │          test_list.txt # 测试集
    │          train_list.txt # 训练集
    │          val_list.txt # 验证集
    
    ├─logs # 训练 log
    
    └─pretrained_models # 预训练模型
            model_paddle.pdparams # 本项目训练的参数文件
            model_torch.pdparams # 转换自参考项目的参数文件
    
  • 参数说明:

    参数默认值说明适用脚本
    data_dirdataset/images数据集图片目录train / eval / vis_cam
    save_dirsave保存目录train / vis_cam
    train_listdataset/labels/train_list.txt数据集训练集列表train
    val_listdataset/labels/val_list.txt数据集验证集列表train
    test_listdataset/labels/test_list.txt数据集测试集列表eval
    batch_size128数据处理批大小train / eval / vis_cam
    epoch20训练轮次train
    learning_rate0.001学习率train
    decay_epochs10,15,18学习率衰减轮次train
    decay_factor0.1学习率衰减因子train
    ckptpretrained_models/model_paddle.pdparams预训练模型路径eval / vis_cam
    showFalse是否展示预览 CAM 图像vis_cam

七、模型信息

  • 模型的总体信息如下:

    信息说明
    框架版本Paddle 2.1.2
    骨干网络DenseNet 121
    应用场景多标签分类(胸部 X 光片肺炎检测)
    支持硬件GPU / CPU
  • 具体的网络结构如下图: