第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博客


http://www.niftyadmin.cn/n/5839701.html

相关文章

hdfs:介绍三个脚本

1、jps-cluster.sh 如果我们想在Bigdata01 这台电脑上,查看整个集群的服务启动情况,可以使用这个脚本文件。 #!/bin/bash USAGE"使⽤⽅法:sh jps-cluster.sh" NODES("bigdata01" "bigdata02" "bigdata03…

Github 2025-01-31Java开源项目日报 Top10

根据Github Trendings的统计,今日(2025-01-31统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Java项目10C项目1Kotlin项目1Bazel:快速、可扩展的多语言构建系统 创建周期:3564 天开发语言:Java协议类型:Apache License 2.0Star数量:2…

浅谈RTB场景中的动态出价算法

一、RTB与动态出价的基本概念 实时竞价(Real-Time Bidding, RTB) 是一种程序化广告交易方式,当用户访问网页或应用时,广告展示机会会通过实时拍卖机制出售给广告主。整个过程通常在毫秒级完成,涉及以下步骤&#xff1…

【cocos官方案例改】跳跃牢猫

自制游戏【跳跃牢烟】 案例解析 案例需求,点击鼠标控制白块左右。 资源管理器部分 在body创建一个2d精灵用作玩家。 在地下在创建一个2d精灵用来代表地面。 在body下挂在脚本。 全部脚本如下 (在二次进行复刻时候,发现把代码复制上去无法…

Flink Connector 写入 Iceberg 流程源码解析_confluent icebergsinkconnector

// 添加 Writer 算子&#xff0c;有并行度SingleOutputStreamOperator<WriteResult> writerStream appendWriter(distributeStream, flinkRowType, equalityFieldIds);// 添加 Commit 算子&#xff0c;并行度固定为 1 SingleOutputStreamOperator<Void> committerS…

扩展无限可能:Obsidian Web Viewer插件解析

随着 Obsidian 1.8.3 正式版的发布&#xff0c;备受期待的官方核心插件——Web Viewer 也终于上线。本文将从插件启用、设置以及应用场景三个方面详细介绍如何使用这一新功能&#xff0c;和大家一起更好地利用 Obsidian 进行内容管理和知识整理。 插件启用 Web Viewer作为官方…

web前端11--伪类与过渡

1、状态伪类选择器 选择元素在不同状态下的样式 - :hover 当鼠标悬停在元素上时&#xff08;重点!!!&#xff09; cssdiv:hover{width: 600px;transform: rotate(15deg);}- :active&#xff1a;元素被激活(鼠标按下时)的状态。 - :focus&#xff1a;元素获得焦点时。(输入框…

FBX SDK的使用:基础知识

Windows环境配置 FBX SDK安装后&#xff0c;目录下有三个文件夹&#xff1a; include 头文件lib 编译的二进制库&#xff0c;根据你项目的配置去包含相应的库samples 官方使用案列 动态链接 libfbxsdk.dll, libfbxsdk.lib是动态库&#xff0c;需要在配置属性->C/C->预…