EfficientNet-B6模型实现ISIC皮肤镜图像数据集分类

项目源码获取方式见文章末尾! 回复暗号:13,免费获取600多个深度学习项目资料,快来加入社群一起学习吧。

《------往期经典推荐------》

项目名称
1.【基于opencv答题卡识别判卷】
2.【卫星图像道路检测DeepLabV3Plus模型】
3.【GAN模型实现二次元头像生成】
4.【CNN模型实现mnist手写数字识别】
5.【fasterRCNN模型实现飞机类目标检测】
6.【CNN-LSTM住宅用电量预测】
7.【VGG16模型实现新冠肺炎图片多分类】
8.【AlexNet模型实现鸟类识别】
9.【DIN模型实现推荐算法】
10.【FiBiNET模型实现推荐算法】
11.【钢板表面缺陷检测基于HRNET模型】

1. 项目简介

项目A065的目标是使用EfficientNet-B6模型实现皮肤镜图像分类,帮助识别皮肤病变的类型。随着深度学习技术的快速发展,计算机辅助诊断(CAD)工具逐渐在医疗影像分析中得到广泛应用。该项目聚焦于皮肤镜图像的分类,通过训练模型自动识别不同类型的皮肤病变,如黑色素瘤(MEL)、痣(NV)、基底细胞癌(BCC)等,从而为临床诊断提供支持。

项目采用EfficientNet-B6模型,该模型通过复合缩放方法在保持较高性能的同时减少计算资源的消耗。数据集使用ISIC 2018挑战赛提供的皮肤镜图像,经过数据预处理后,输入EfficientNet-B6进行特征提取和分类。项目的核心目标是提升分类精度,降低漏诊和误诊率,从而为皮肤病变检测提供一个可靠的自动化工具。

2.技术创新点摘要

EfficientNet-B6模型的应用与优化: 该项目采用了EfficientNet-B6模型,这是一种高效的卷积神经网络结构。EfficientNet通过复合缩放方法,在提升模型精度的同时降低了计算成本,尤其适用于计算资源受限的环境。EfficientNet-B6相较于较小的模型具备更高的参数量和计算复杂度,因此在处理高分辨率皮肤镜图像时能够提取更多细节特征,提升分类精度。此外,模型的分类器部分进行了定制,原有的分类层被替换为适应特定分类任务的输出层,确保其与皮肤病变分类任务的需求相匹配。

自定义数据集类与高效数据预处理: 项目中引入了自定义数据集类CustomDataset,不仅将图像和标签进行了对应管理,还通过标签映射实现了多类别标签的高效处理。数据预处理中,项目对输入图像进行尺寸调整,使其适应EfficientNet-B6的输入要求(528x528像素)。这种预处理保证了不同分辨率的皮肤镜图像能够一致输入模型,避免了图像尺寸差异带来的影响。同时,标准化操作(mean和std)也确保了图像输入的像素值分布在一定范围内,有助于模型更快收敛。

高效的优化器与损失函数选择: 项目选择了Ranger优化器,这是一个结合了Rectified Adam(RAdam)和Lookahead的混合优化器。Ranger优化器不仅拥有自适应的学习率调整机制,还结合了Lookahead策略的长远步长搜索,确保在深度学习训练过程中能够获得更稳定且高效的收敛效果。相比传统的SGD或Adam优化器,Ranger在这种复杂的多类别分类任务中能够更好地平衡模型的精度和收敛速度。此外,项目选择了交叉熵损失函数(CrossEntropyLoss),这是多类别分类任务中常见且有效的损失函数。

集成性能评估与可视化分析: 项目中不仅实现了模型的训练和验证流程,还设计了评估函数evaluate_model,使用准确率、精确率、召回率和F1评分等多种指标对模型性能进行综合评价。这些指标的选择有助于在不平衡数据集下全面评估模型的表现。为了便于直观分析,项目还集成了Matplotlib绘图工具,通过柱状图的方式将训练集、验证集和测试集的模型性能可视化。这种方式可以帮助研究者快速发现模型在不同数据集上的表现差异,从而进行针对性的优化调整。

3. 数据集与预处理

该项目使用的数据集来源于ISIC 2018挑战赛,这是一个公开的皮肤镜图像数据集,专门用于皮肤病变的分类任务。该数据集包含数千张标注了皮肤病变的高分辨率皮肤镜图像,类别包括黑色素瘤(MEL)、痣(NV)、基底细胞癌(BCC)、鳞状细胞癌(AKIEC)、良性角化病(BKL)、皮肤纤维瘤(DF)和血管病变(VASC)等。每张图像都配有相应的类别标签,便于监督学习。

数据预处理流程:

  1. 图像尺寸调整: EfficientNet-B6模型要求输入图像的尺寸为528x528像素。因此,在预处理过程中,所有的图像都被统一调整为这个尺寸,以保证输入模型时的格式一致。这一步骤有助于避免不同分辨率的图像对模型性能产生影响。
  2. 图像归一化: 归一化是深度学习图像处理中的重要步骤,该项目对每张图像进行了标准化处理。通过使用ImageNet的预训练模型参数,项目分别使用均值([0.485, 0.456, 0.406])和标准差([0.229, 0.224, 0.225])对图像的RGB通道进行归一化。归一化能够确保输入图像的像素值分布在合理的范围内,避免特定通道的亮度差异对模型造成干扰,加快模型的训练收敛速度。
  3. 标签处理: 项目使用的标签格式为多类别分类,涉及到皮肤病变的七个类别。数据集中,标签通过字典映射被转换为整数标签,便于模型进行分类任务。此操作不仅使标签与模型输出格式相匹配,还为后续的损失函数计算提供了便利。

总体来说,该项目的数据预处理步骤充分考虑了图像的尺寸、色彩信息以及标签处理等问题,为EfficientNet-B6模型的训练和推理提供了高质量的输入数据。这些预处理步骤在医学图像分析中十分关键,有助于提升模型的精度和泛化能力。

在这里插入图片描述

4. 模型架构

1) 模型结构的逻辑

该项目的核心模型架构基于EfficientNet-B6,这是EfficientNet系列中的一种大型变体。EfficientNet通过一种称为复合缩放的技术优化了模型的宽度、深度和分辨率,从而在减少计算资源的同时提高了模型的准确性。EfficientNet-B6相较于其他版本(如B0-B5)具有更大的深度和更高的分辨率(528x528像素输入),使其在处理高分辨率图像(如皮肤镜图像)时表现更优。

模型架构的核心逻辑如下:

  • EfficientNet-B6预训练模型:该项目加载了预训练的EfficientNet-B6模型,并通过ImageNet进行初始权重加载。这有助于模型在新的任务上进行迁移学习,避免从头开始训练,提高了模型的效率和性能。
  • 分类器调整:EfficientNet-B6的原始分类器被替换为适应皮肤病变分类的输出层。在代码中,将EfficientNet-B6的分类器部分修改为5个输出节点,以匹配皮肤病变的类别数。这种方法确保了模型能够输出相应类别的概率分布,适应多类别分类任务。

整个模型架构的设计旨在利用EfficientNet的高效特征提取能力,结合医学图像的复杂性,帮助模型识别和区分细微的皮肤病变特征。

2) 模型的整体训练流程与评估指标

模型训练流程:
  1. 数据加载与准备:首先,通过自定义的CustomDataset类加载训练、验证和测试数据集。每个数据集都经过了统一的预处理,包括图像尺寸调整、归一化等。

  2. 模型初始化:加载EfficientNet-B6模型,并替换其分类器层。使用Ranger优化器(结合了RAdam和Lookahead的优势)和交叉熵损失函数(CrossEntropyLoss)来定义模型的优化策略和损失计算。

  3. 训练循环

    1. 模型训练过程中,数据通过DataLoader以批次的形式输入到EfficientNet-B6模型中。
    2. 对每个批次的数据,模型计算输出并与真实标签进行对比,通过交叉熵损失函数计算损失值。
    3. 使用Ranger优化器反向传播损失,更新模型的权重。
    4. 训练过程中输出每个epoch的累计损失,以跟踪训练进度。
  4. 模型评估:训练完成后,使用验证集和测试集对模型进行评估。评估流程包括在验证集和测试集上运行模型,获取预测结果,并与真实标签进行对比。

评估指标:
  • 准确率(Accuracy) :表示模型预测正确的样本占总样本的比例,反映了模型整体的正确性。
  • 精确率(Precision) :表示模型在所有预测为正类的样本中,实际为正类的比例,适合在关注模型预测的精度时使用。
  • 召回率(Recall) :表示模型在所有实际为正类的样本中,成功被模型预测为正类的比例,适合在不希望漏检时使用。
  • F1评分(F1 Score) :精确率和召回率的调和平均数,用于平衡精度和召回率之间的关系,特别适合不平衡数据集的评价。

5. 核心代码详细讲解

1. 数据预处理与特征工程

暂时无法在飞书文档外展示此内容

  • class CustomDataset(Dataset) :定义了一个自定义的数据集类,该类继承自torch.utils.data.Dataset,用于管理和处理输入的图像和标签。
  • self.img_paths = img_paths:存储传入的图像文件路径列表。
  • label_to_int:将字符串标签转换为整数标签的映射字典。每个类别(如’MEL’, 'NV’等)被映射为一个唯一的整数,便于模型进行分类任务。
  • self.labels = [label_to_int[label] for label in labels] :根据映射字典,将标签转换为对应的整数形式。
  • self.transform = transform:存储数据增强或预处理操作,用于后续对图像的处理。

暂时无法在飞书文档外展示此内容

  • getitem(self, index) :这是数据集类的核心方法,用于根据索引获取图像及其对应的标签。
  • Image.open(img_path).convert('RGB') :通过PIL库打开图像文件,并将其转换为RGB格式,以确保图像输入的颜色通道一致。
  • self.transform(image) :如果指定了预处理(如图像归一化或尺寸调整),则应用这些操作。
  • return image, label:返回处理后的图像及其对应的标签。

2. 模型架构的构建

暂时无法在飞书文档外展示此内容

  • efficientnet_b6(pretrained=True) :加载预训练的EfficientNet-B6模型。通过设置pretrained=True,模型使用在ImageNet上预训练的权重,这有助于在皮肤镜图像分类任务上进行迁移学习,提升模型的收敛速度和准确性。
  • model.classifier[1] = nn.Linear(model.classifier[1].in_features, 5) :EfficientNet-B6的原始分类器被替换。nn.Linear创建了一个线性层,将分类器的输出调整为5个节点,对应项目中的5个皮肤病变类别。model.classifier[1].in_features提取分类器的输入特征数量,以适应新任务。

3. 模型训练与优化

暂时无法在飞书文档外展示此内容

  • optimizer = Ranger(model.parameters(), lr=1e-3) :使用Ranger优化器,这是一种结合了RAdam和Lookahead的优化算法。它比传统的SGD或Adam更高效,能够在复杂的多类别分类任务中实现更快的收敛和更好的性能。lr=1e-3设置了学习率。
  • criterion = nn.CrossEntropyLoss() :使用交叉熵损失函数(CrossEntropyLoss),这是多类别分类任务中最常用的损失函数。它能够衡量模型输出的概率分布与真实标签之间的差异。

暂时无法在飞书文档外展示此内容

  • model.train() :将模型设置为训练模式。这一步很重要,因为它启用了诸如Dropout等训练时特有的操作。
  • for epoch in range(num_epochs) :定义训练的轮次。num_epochs参数控制模型将经过多少次完整的训练集迭代。
  • images, labels = data:从数据加载器中获取图像及其对应的标签。
  • images, labels = images.to(device), labels.to(device) :将图像和标签移动到GPU或CPU上,具体取决于设备配置。
  • optimizer.zero_grad() :每个训练步骤开始前,将优化器中的梯度清零,以避免梯度累积。
  • outputs = model(images) :将图像输入模型,获得预测结果。
  • loss = criterion(outputs, labels) :计算模型输出与真实标签之间的损失。
  • loss.backward() :进行反向传播,计算每个参数的梯度。
  • optimizer.step() :更新模型的参数,使得损失减少。
  • running_loss += loss.item() * images.size(0) :累计当前批次的损失值。
  • epoch_loss = running_loss / len(dataloader.dataset) :计算平均损失,输出每个epoch的损失值。

4. 模型评估与可视化

暂时无法在飞书文档外展示此内容

  • model.eval() :将模型设置为评估模式,停用Dropout等仅在训练时启用的操作。
  • with torch.no_grad() :在评估时禁用梯度计算,以减少内存开销并提高评估效率。
  • outputs = model(images) :将测试集的图像输入模型,获得输出。
  • _, predicted = torch.max(outputs, 1) :通过torch.max函数获取每个图像的预测类别。
  • accuracy_score, precision_score, recall_score, f1_score:计算多种评估指标,包括准确率、精确率、召回率和F1评分。这些指标帮助全面衡量模型的性能。

6. 模型优缺点评价

模型优点:

  1. 高效的特征提取能力:该项目使用EfficientNet-B6模型,该模型通过复合缩放技术在保证高精度的同时减少了计算开销。对于皮肤镜图像这种高分辨率且细节丰富的数据,EfficientNet-B6能够有效提取细微特征,帮助模型更好地区分类别。
  2. 迁移学习的应用:使用预训练的EfficientNet-B6模型,使得训练过程更加高效,并且在皮肤镜图像分类任务上能快速达到较好的精度。预训练的权重来自ImageNet大规模数据集,提供了很好的初始特征表示,减少了训练所需的数据量和时间。
  3. 创新的优化器选择:项目选择了Ranger优化器,这是结合了RAdam和Lookahead两种优化策略的混合优化器,能够在复杂的多类别分类任务中实现更快的收敛和更好的模型性能。
  4. 多种评估指标:模型不仅采用了准确率作为评估标准,还包括精确率、召回率和F1评分,确保模型在不平衡数据集下能够综合评估分类效果,全面衡量模型性能。

模型缺点:

  1. 数据增强不足:代码中未显示数据增强的详细实现。对于医学影像这种可能存在数据不均衡和有限的数据集,数据增强(如旋转、翻转、随机裁剪等)可以进一步提升模型的鲁棒性,减少过拟合。
  2. 分类器输出层较单一:虽然分类器输出被调整为适合皮肤病变的5个类别,但仍然可以考虑进一步调整分类器的结构,使得其更好适应特定的医学图像分类任务。
  3. 超参数调整有限:项目中使用的学习率为1e-3,但未进行其他超参数(如batch size、学习率衰减等)的探索,这可能导致模型在某些情况下无法充分发挥其潜力。

改进方向:

  1. 数据增强:可以增加数据增强方法,如旋转、随机裁剪、颜色抖动等,以提高模型对不同变形图像的鲁棒性,尤其在医学图像领域,这对小样本数据非常有帮助。
  2. 模型结构优化:可以尝试在EfficientNet的基础上增加特定的医学图像分类模块,如多分支网络或注意力机制,进一步提升模型的特征提取能力。
  3. 超参数调优:进行更多的超参数搜索,如学习率、优化器类型、batch size等,找到最优的组合以提升模型的训练速度和最终性能。
  4. 多任务学习:引入多任务学习,结合分类任务和分割任务,进一步提升模型的泛化能力。

👍感谢小伙伴们点赞、关注! 如有其他项目需求的,可以在评论区留言,抽空制作更新!
✌粉丝福利:点击下方名片↓↓↓
回复暗号:13,免费获取600多个深度学习项目资料,快来加入社群一起学习吧。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/57508.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

扫雷游戏(C语言详解)

扫雷游戏(C语言详解) 放在最前面的1、前言(扫雷游戏的简介)2、扫雷游戏的规则(简易版)3、代码实现(3.1)提醒一下:( i ) 提醒1:( ii ) 提醒2: &…

影刀RPA自动化按钮参数详解

文章目录 一、基础识别参数1. 文本内容(Text)2. ID属性3. Name属性4. Class属性 二、高级定位参数1. XPath路径2. CSS选择器3. 图像识别 三、动态等待参数1. 等待超时2. 重试间隔 四、操作参数1. 点击类型2. 点击位置 五、最佳实践1. 按钮定位优先级2. 常…

WPF+MVVM案例实战(十四)- 封装一个自定义消息弹窗控件(下)

文章目录 1、案例效果2、弹窗控件使用1.引入用户控件2、按钮命令实现 3、总结4、源代码获取 1、案例效果 2、弹窗控件使用 1.引入用户控件 打开 Wpf_Examples 项目,在引用中添加用户控件库,在 MainWindow.xaml 界面引用控件库,代码如下&…

C++(类继承、虚函数、多重继承)

类继承 (1)当创建一个类时,不需要重新编写新的成员变量和成员函数,只需要新建的类继承了一个已有的类的成员。已有的类称为基类或父类,新建的类称为派生类或子类。 (2)一个类可以有多个…

深度学习基础—循环神经网络(RNN)

引言 从本系列博客开始,我们将来一起学习一下NLP领域的相关基础知识,NLP领域重要的模型是RNN,在此之前,先来了解一些符号的含义。 1.符号定义 (1)符号定义 假设建立一个能够自动识别句中人名位置的序列模型…

Web测试和APP测试的区别

🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 最近听到有些朋友说,移动端要比web端稍微难一些,涉及到的细节笔记要多,有转去做web测试的想法,看看在具体测试的时…

Linux TCP CC状态机

万字详文:TCP 拥塞控制详解 - 知乎bcc/tools/tcpcong.py at master iovisor/bccbcc/tools/tcpcong_example.txt at master iovisor/bcc 1.状态机 2.tcp map 拥塞算法历史 1974年,3次握手被提出;1978年,TCP和IP拆分成TCP/IP&…

视频设备一体化监控运维方案

随着平安城市、雪亮工程等项目建设的号召,视频监控系统的建设如火如荼地开展。无论在公共场所、企业单位、住宅小区、矿山工地还是交通枢纽,视频监控系统已成为保障安全、维护秩序和提升管理效率的重要工具。但由于对视频监控系统中的前端设备&#xff0…

深度数据修复软件哪个好?盘点2024年好用的4个数据恢复工具。

深度数据修复软件可以帮助用户深入存储设备,找回丢失的数据。它们可以有效解决很多场景下的数据丢失问题,如果大家平时会有数据丢失的情况,可以用这几个工具去尝试一些自己进行数据恢复。 1、福昕深度恢复软件 直通车:http://www…

leetcode-73-矩阵置零

题解: 1、初始化变量ls_row与ls_col分别用来存储元素0的所在行与列; 2、获取矩阵的行数M与列数N; 3、遍历矩阵matrix的每一个元素。如果这个元素为0,则将该元素所在行数append到ls_row,所在列append到ls_col。 4、…

树莓派基本设置--2. raspi-config工具介绍

raspi-config是树莓派操作系统Raspberry Pi OS中预装的配置工具;raspi-config提供了一种简单便捷的命令行界面来管理树莓派系统的配置,使用户可以轻松地定制和优化其系统设置。 如果使用的是树莓派桌面系统,可以直接在桌面左上角的应用菜单&…

五、鸿蒙开发-组件状态管理

提示:本文根据b站尚硅谷2024最新鸿蒙开发HarmonyOS4.0鸿蒙NEXT星河版零基础教程课整理 链接指引 > 尚硅谷2024最新鸿蒙开发HarmonyOS4.0鸿蒙NEXT星河版零基础教程 文章目录 一、状态管理入门1.1 State1.2 Prop1.3 Link1.4 Provide和Consume 二、状态管理深入2.1 …

STM32学习笔记-GPIO

参考江科大32单片机学习相关知识 GPIO基本构造 APB2(Advanced Peripheral Bus 2)是STM32微控制器架构中的一个外设总线,用于连接一些高性能外设,如定时器、USART、ADC和GPIO等。这些外设通常对性能要求较高,需要更快的…

java陕西民俗网源码(springboot)

项目简介 陕西民俗网实现了以下功能: 中国陕西民俗网的主要使用者分为: 管理员增删改查商品信息和商品信息资料,审核商品信息预订订单,查看订单评价和评分,通过留言功能回复用户提问。 💕💕作…

【python】OpenCV—WaterShed Algorithm

文章目录 1、功能描述2、代码实现3、完整代码4、效果展示5、涉及到的库函数5.1、cv2.pyrMeanShiftFiltering5.2、cv2.morphologyEx5.3、cv2.distanceTransform5.4、cv2.normalize5.5、cv2.watershed 6、更多例子7、参考 1、功能描述 基于分水岭算法对图片进行分割 分水岭分割…

选择最佳SCRM系统的综合指南

内容概要 在如今竞争激烈的市场中,企业不能仅仅依靠传统的客户管理方式,需要借助现代化的SCRM系统来提升效率和服务水平。SCRM系统,就是“社交客户关系管理”系统,旨在通过社交媒体等渠道与客户进行更深层次的互动。在选择合适的…

学习threejs,导入OBJ格式的模型

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言1.1 ☘️THREE.OBJLoader OBJ模型加…

动态规划 —— 路径问题-下降路径最小和

1. 下降路径最小和 题目链接: 931. 下降路径最小和 - 力扣(LeetCode)https://leetcode.cn/problems/minimum-falling-path-sum/description/ 2. 算法原理 状态表示:以莫一个位置位置为结尾 dp[i,j]表示:到…

ubuntu20.04 加固方案-设置限制su命令用户组

一、编辑/etc/pam.d/su配置文件 打开终端。 使用文本编辑器(如vim)编辑/etc/pam.d/su文件。 vim /etc/pam.d/su 二、添加配置参数 在打开的配置文件的中,添加以下参数: auth required pam_wheel.so 创建 wheel 组 并添加用户 …

ElementUI学习笔记

一、ElementUI概述 官网:https://element.eleme.cn/#/zh-CN (一)定义 Element,一套为开发者、设计师和产品经理准备的基于 Vue 2.0 的桌面端组件库。是基于Vue的一个UI框架,该框架基于Vue开发了很多相关组件&#xf…