当前位置: 首页 > article >正文

第7章:基于EfficientNet v2网络实现的迁移学习图像分类任务:人体皮肤病识别

目录

1. 前言

2. EfficientNet v2

3. 人体皮肤病识别

3.1 数据集

3.2 训练

3.3 训练结果

3.4 推理

4. 下载


1. 前言

针对EfficientNet V1 ,作者提出了以下的三个缺点

当训练图像的size很大时,网络中传递的特征图尺寸就会很大,这样训练就会慢得多。当降低了图像的尺寸,可以使用更大的batch size,这对于BN层来说是更好的

浅层的dw卷积速度很慢,这里采用Fuse-MBConv卷积

超参数按照相同的比例,改变网络深度或者宽度效果不是那么好

关于EfficientNet v1版本的分类任务:第5章:基于EfficientNet 网络实现的图像分类任务:104种花种类识别-CSDN博客

2. EfficientNet v2

最重要的是渐进的学习方法吧,根据体系的尺寸动态的正则化

对于不同的图像大小保持相同的正则化并不理想:对于相同的网络,较小的图像大小导致较小的网络容量,因此需要弱正则化;反之亦然,较大的图像尺寸需要更强的正则化来对抗过拟合。


我们提出了一种改进的渐进式学习方法:在早期训练阶段,我们用小图像大小和弱正则化(例如,dropout和数据增强)训练网络,然后我们逐渐增加图像大小并添加更强的正则化。建立在逐步调整大小的基础上,但通过动态调整正则化,我们的方法可以在不导致准确性下降的情况下加速训练。

3. 人体皮肤病识别

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

这里提供了三种网络结构,分别对应efficientnet v2的 small、medium、lagrge

net = m.efficientnet_v2_s(weights=m.EfficientNet_V2_S_Weights.DEFAULT if weights else False,progress=True)

net = m.efficientnet_v2_m(weights=m.EfficientNet_V2_M_Weights.DEFAULT if weights else False,progress=True)

net = m.efficientnet_v2_l(weights=m.EfficientNet_V2_L_Weights.DEFAULT if weights else False,progress=True)

3.1 数据集

数据集文件如下:

标签如下:

{
    "0": "Actinic keratosis",
    "1": "Basal cell carcinoma",
    "2": "Benign keratosis",
    "3": "Dermatofibroma",
    "4": "Melanoma",
    "5": "None of the above",
    "6": "Squamous cell carcinoma",
    "7": "Vascular lesion"
}

其中,训练集的总数为17736,验证集的总数为7595

3.2 训练

训练的参数如下:

    parser = argparse.ArgumentParser(description="classification")
    parser.add_argument("--model", default='s', type=str,help='s,m,l')
    parser.add_argument("--pretrained", default=True, type=bool)       # 采用官方权重
    parser.add_argument("--freeze_layers", default=True, type=bool)    # 冻结权重

    parser.add_argument("--batch-size", default=16, type=int)
    parser.add_argument("--epochs", default=50, 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": "s",
        "pretrained": true,
        "freeze_layers": true,
        "batch_size": 16,
        "epochs": 50,
        "optim": "SGD",
        "lr": 0.01,
        "lrf": 0.001,
        "save_folder": "runs"
    },
    "dataset": {
        "trainset number": 17736,
        "valset number": 7595,
        "number classes": 8
    },
    "model": {
        "total parameters": 20187736.0,
        "train parameters": 10248,
        "flops": 2900665408.0

3.3 训练结果

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

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

这里只展示部分结果:

训练日志:

    "epoch:42": {
        "train info": {
            "accuracy": 0.6573635543523583,
            "Actinic keratosis": {
                "Precision": 0.4215,
                "Recall": 0.168,
                "Specificity": 0.9918,
                "F1 score": 0.2402
            },
            "Basal cell carcinoma": {
                "Precision": 0.5685,
                "Recall": 0.6691,
                "Specificity": 0.9233,
                "F1 score": 0.6147
            },
            "Benign keratosis": {
                "Precision": 0.5133,
                "Recall": 0.2515,
                "Specificity": 0.9725,
                "F1 score": 0.3376
            },
            "Dermatofibroma": {
                "Precision": 0.5357,
                "Recall": 0.0893,
                "Specificity": 0.9993,
                "F1 score": 0.1531
            },
            "Melanoma": {
                "Precision": 0.5531,
                "Recall": 0.3819,
                "Specificity": 0.9329,
                "F1 score": 0.4518
            },
            "None of the above": {
                "Precision": 0.715,
                "Recall": 0.9076,
                "Specificity": 0.6263,
                "F1 score": 0.7999
            },
            "Squamous cell carcinoma": {
                "Precision": 0.5119,
                "Recall": 0.0977,
                "Specificity": 0.9976,
                "F1 score": 0.1641
            },
            "Vascular lesion": {
                "Precision": 0.7778,
                "Recall": 0.5112,
                "Specificity": 0.9985,
                "F1 score": 0.6169
            },
            "mean precision": 0.5746,
            "mean recall": 0.38453750000000003,
            "mean specificity": 0.930275,
            "mean f1 score": 0.4222874999999999
        },
        "valid info": {
            "accuracy": 0.4501645819612243,
            "Actinic keratosis": {
                "Precision": 0.3115,
                "Recall": 0.0731,
                "Specificity": 0.9943,
                "F1 score": 0.1184
            },
            "Basal cell carcinoma": {
                "Precision": 0.144,
                "Recall": 0.1044,
                "Specificity": 0.9063,
                "F1 score": 0.121
            },
            "Benign keratosis": {
                "Precision": 0.1241,
                "Recall": 0.0457,
                "Specificity": 0.9627,
                "F1 score": 0.0668
            },
            "Dermatofibroma": {
                "Precision": 0.1429,
                "Recall": 0.0141,
                "Specificity": 0.9992,
                "F1 score": 0.0257
            },
            "Melanoma": {
                "Precision": 0.2386,
                "Recall": 0.1195,
                "Specificity": 0.9171,
                "F1 score": 0.1592
            },
            "None of the above": {
                "Precision": 0.5322,
                "Recall": 0.7944,
                "Specificity": 0.2775,
                "F1 score": 0.6374
            },
            "Squamous cell carcinoma": {
                "Precision": 0.3636,
                "Recall": 0.0426,
                "Specificity": 0.9981,
                "F1 score": 0.0763
            },
            "Vascular lesion": {
                "Precision": 0.4286,
                "Recall": 0.28,
                "Specificity": 0.9963,
                "F1 score": 0.3387
            },
            "mean precision": 0.2856875,
            "mean recall": 0.184225,
            "mean specificity": 0.8814375,
            "mean f1 score": 0.1929375
        }
    },

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

3.4 推理

推理是指没有标签,只有图片数据的情况下对数据的预测,这里直接运行predict脚本即可

需要把待推理的数据放在 inference/img 

4. 下载

 关于本项目代码和数据集、训练结果的下载:基于EfficientNetv2轻量级网络实现的图像识别实战:8种人体常见皮肤病识别资源-CSDN文库

关于图像分类网络的改进可以参考:

改进系列_Ai 医学图像分割的博客-CSDN博客

图像分类网络改进_Ai 医学图像分割的博客-CSDN博客


http://www.kler.cn/a/460065.html

相关文章:

  • 基于Matlab的变压器仿真模型建模方法(12):单相降压自耦变压器的等效电路和仿真模型
  • HarmonyNext 鸿蒙开发中,在H5 页面如何下载图片保存到媒体库。
  • 【Rust自学】9.1. 不可恢复的错误以及panic!
  • 机器学习 学习知识点
  • Vue3 + ElementPlus动态合并数据相同的单元格(超级详细版)
  • flink cdc oceanbase
  • C语言自定义类型与文件操作
  • 洛谷 P1614 爱与愁的心痛 C(滑动窗口)
  • Django serializers:把ValidationError处理的更优雅
  • 计算机网络与通信复习
  • Dockerfile 实战指南:解锁高效容器化开发
  • Android 旋转盘导航栏
  • 【UE5 C++课程系列笔记】15——Assert的基本使用
  • vue3<script setup>中使用Swiper
  • 第八节:GLM-4v-9b模型的大语言模型源码解读(ChatGLMForConditionalGeneration)
  • windows C#-带有命名方法的委托与匿名方法
  • 基于springboot的校园新闻网站系统
  • [创业之路-225]:《华为闭环战略管理》-4-华为的商业智慧:在价值链中探索取舍之道与企业边界
  • WAP短信格式解析及在Linux下用C语言实现
  • 【Spring MVC 核心机制】核心组件和工作流程解析
  • 【OTA】论文学习笔记--《基于RTOS的车载ECU双分区OTA升级技术分析报告》
  • 3.阿里云flinkselectdb-py作业
  • 什么是微服务、微服务如何实现Eureka,网关是什么,nacos是什么
  • PyTorch快速入门教程【小土堆】之Sequential使用和小实战
  • 【RK3588 Linux 5.x 内核编程】-内核IO复用与select
  • 防火墙基础-工作原理