Bootstrap

第11章:根据 ShuffleNet V2 迁移学习医学图像分类任务:甲状腺结节检测

目录

1. Shufflenet V2

2. 甲状腺结节检测

2.1 数据集

2.2 训练参数

2.3 训练结果

2.4 可视化网页推理

3. 下载


1. Shufflenet V2

shufflenet v2 论文中提出衡量轻量级网络的性能不能仅仅依靠FLOPs计算量,还应该多方面的考虑,例如MAC(memory access cost),还应该比较在不同的硬件设备下的性能等等

因此,基于多方面的考虑。shufflenet v2 通过大量的实验和测试总结了轻量化网络的四个准则,然后根据这四条准则搭建了shufflenet v2网络

 

  1.  输入输出通道个数相同的时候,内存访问量MAC最小
  2. 分组卷积的分组数过大会增加MAC
  3. 碎片化操作会并行加速并不友好
  4. element-wise 操作带来的内存和耗时不可以忽略

每条原则的具体解释参考:ShuffleNet V2 迁移学习对花数据集训练_shufflenetv2进行预训练的效果-CSDN博客

2. 甲状腺结节检测

Shufflenet V2 实现的model部分代码如下面所示,这里如果采用官方预训练权重的话,会自动导入官方提供的最新版本的权重

这里提供了4种网络结构,分别对应output channels参数

2.1 数据集

数据集文件如下:

标签如下:

{
    "0": "0",
    "1": "1"
}

其中,训练集的总数为5103,验证集的总数为2185

2.2 训练参数

训练的参数如下:

    parser.add_argument("--model", default='x0_5', type=str,help='x0_5,x1_0,x1_5,x2_0')
    parser.add_argument("--pretrained", default=True, type=bool)       # 采用官方权重
    parser.add_argument("--freeze_layers", default=True, type=bool)    # 冻结权重

    parser.add_argument("--batch-size", default=8, type=int)
    parser.add_argument("--epochs", default=10, type=int)

    parser.add_argument("--optim", default='SGD', type=str,help='SGD,Adam,AdamW')         # 优化器选择

    parser.add_argument('--lr', default=0.01, type=float)
    parser.add_argument('--lrf',default=0.001,type=float)                  # 最终学习率 = lr * lrf

    parser.add_argument('--save_ret', default='runs', type=str)             # 保存结果
    parser.add_argument('--data_train',default='./data/train',type=str)           # 训练集路径
    parser.add_argument('--data_val',default='./data/val',type=str)               # 测试集路径

需要注意的是网络分类的个数不需要指定,摆放好数据集后,代码会根据数据集自动生成!

网络模型信息如下:

{
    "train parameters": {
        "model": "x0_5",
        "pretrained": true,
        "freeze_layers": true,
        "batch_size": 8,
        "epochs": 10,
        "optim": "SGD",
        "lr": 0.01,
        "lrf": 0.001,
        "save_folder": "runs"
    },
    "dataset": {
        "trainset number": 5103,
        "valset number": 2185,
        "number classes": 2
    },
    "model": {
        "total parameters": 343842.0,
        "train parameters": 2050,
        "flops": 43550112.0
    },

2.3 训练结果

所有的结果都保存在 save_ret 目录下,这里是 runs 

weights 下有最好和最后的权重,在训练完成后控制台会打印最好的epoch

这里只展示部分结果:可以看到网络没有完全收敛,增大epoch会得到更好的效果

训练日志:

    "epoch:9": {
        "train info": {
            "accuracy": 0.6607877718975881,
            "0": {
                "Precision": 0.6989,
                "Recall": 0.4334,
                "Specificity": 0.8471,
                "F1 score": 0.535
            },
            "1": {
                "Precision": 0.646,
                "Recall": 0.8471,
                "Specificity": 0.4334,
                "F1 score": 0.733
            },
            "mean precision": 0.67245,
            "mean recall": 0.64025,
            "mean specificity": 0.64025,
            "mean f1 score": 0.634
        },
        "valid info": {
            "accuracy": 0.5711670480523059,
            "0": {
                "Precision": 0.5455,
                "Recall": 0.2866,
                "Specificity": 0.8043,
                "F1 score": 0.3758
            },
            "1": {
                "Precision": 0.5791,
                "Recall": 0.8043,
                "Specificity": 0.2866,
                "F1 score": 0.6734
            },
            "mean precision": 0.5623,
            "mean recall": 0.54545,
            "mean specificity": 0.54545,
            "mean f1 score": 0.5246
        }
    }

 

训练集和测试集的混淆矩阵:

2.4 可视化网页推理

推理是指没有标签,只有图片数据的情况下对数据的预测,这里使用了网页推理

值得注意的是,如果训练了自己的数据集,需要对infer脚本进行更改,如下:

  • 都需要绝对路径,这个是代码自动生成的类别文件,在runs下
  • IMAGE_PATH 是默认展示的demo图片位置

在控制台输入下面命令即可:

streamlit run D:\project\shufflenetV2\infer.py

 

3. 下载

关于本项目代码和数据集、训练结果的下载:

计算机视觉项目:计算机视觉项目:ShufflenetV2模型实现的图像识别项目:甲状腺结节识别资源-CSDN文库

关于Ai 深度学习图像识别、医学图像分割改进系列:AI 改进系列_听风吹等浪起的博客-CSDN博客

神经网络改进完整实战项目:改进系列_听风吹等浪起的博客-CSDN博客

;