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.rhkb.cn/news/461043.html

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

相关文章

为何我们要将测试左移?回到过去的美好时光

以下为作者观点: 为何我们将测试左移?在传统的开发周期中,测试通常在功能完成后甚至在开发阶段结束时进行。左移测试通过从开发过程开始到整个开发过程整合测试活动来挑战这一点。 让我们首先讨论一下为什么我们选择“左移”,因…

java项目之基于智能推荐的卫生健康系统(springboot)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的基于智能推荐的卫生健康系统。项目源码以及部署相关请联系风歌,文末附上联系信息 。 项目简介: 基于智能推荐…

性能测试详解

🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 一、 性能测试术语解释 1. 响应时间 响应时间即从应用系统发出请求开始,到客户端接收到最后一个字节数据为止所消耗的时间。响应时间按软件的特点…

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

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

【工具变量】自由贸易试验区试点DID数据集(2003-2023年)

数据简介:自由贸易试验区(Free Trade Zone,简称FTZ)是中国ZF在新形势下为了推进GG开放、提高开放型经济水平而采取的重要战略举措。自贸试验区在一国的部分领土内运入任何货物,被认为在关境以外,免于实施惯…

Flask

创建项目 Pycharm专业版 默认文件 Pycharm社区版没有自动创建这几个文件,手动创建即可。 运行 常规功能 debug模式 修改内容自动更新,否则需要重新启动运行项目才生效。 修改host 通网络内其他人可以通过我得ip访问该服务。 修改端口号 空格分隔…

[Wireshark] 使用Wireshark抓包https数据包并显示为明文、配置SSLKEYLOGFILE变量(附下载链接)

前言 wireshark安装包 链接:https://pan.quark.cn/s/febb28f57c01 提取码:fUCQ 链接失效(可能会被官方和谐)可评论或私信我重发 chrome与firefox在访问https网站的时候会将密钥写入这个环境变量SSLKEYLOGFILE中,在wir…

野火鲁班猫4 (RK3588)系统配置

烧写系统 参考文档 : https://doc.embedfire.com/linux/rk3588/quick_start/zh/latest/quick_start/apt/apt.html 先装第一个软件,然后打开第二个软件。点固件,选择Ubuntu最新的固件,这边目前是20240911这个。 我这边直接烧写到…

Servlet 3.0 新特性全解

文章目录 Servlet3.0新特性全解Servlet 3.0 新增特性Servlet3.0的注解Servlet3.0的Web模块支持servlet3.0提供的异步处理提供异步原因实现异步原理配置servlet类成为异步的servlet类具体实现异步监听器改进的ServletAPI(上传文件) Servlet3.0新特性全解 tomcat 7以上的版本都支…

[OceanBase-不止于记录]:揭秘双引擎战略,共探AI时代数据架构未来

前言 又到了一年一度大家最爱的探会文章,非常荣幸收到OceanBase官方的邀请参加2024 OceanBase 年度发布会,作为一个经常参加线下探会的博主,每一次体验都有所不同,每一次新技术的突破都让人感到无比兴奋。同时,作为数…

【论文复现】短期电力负荷

作者主页: 七七的个人主页 文章收录专栏: 论文复现 欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖💖 短期电力负荷 论文发表问题背景一. 基本问题二. 本论文发现的问题 对于论文发现问题的解决方案:复现…

Java-I/O框架:FileReader类使用、FileWriter类的使用、字符流复制文件

视频链接:16.19 字符流复制文件_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1Tz4y1X7H7?spm_id_from333.788.videopod.episodes&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5&p19 1.FileReader类(文件字符输出流)使用 pac…

快速生成高质量提示词,Image to Prompt 更高效

抖知书老师推荐: 随着 AI 技术的不断发展,视觉信息与语言信息之间的转换变得越来越便捷。在如今的数字化生活中,图像与文字的交互需求愈发旺盛,很多人都希望能轻松将图像内容直接转化为文本描述。今天我们来推荐一款实用的 AI 工…

网安秋招面试

《Java代码审计》http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247484219&idx1&sn73564e316a4c9794019f15dd6b3ba9f6&chksmc0e47a67f793f371e9f6a4fbc06e7929cb1480b7320fae34c32563307df3a28aca49d1a4addd&scene21#wechat_redirect 《Web安全》h…

Python小游戏14——雷霆战机

首先,你需要确保安装了Pygame库。如果你还没有安装,可以使用pip来安装: bash pip install pygame 代码如下: python import pygame import sys import random # 初始化Pygame pygame.init() # 设置屏幕大小 screen_width 800 scr…

编程之路:蓝桥杯备赛指南

文章目录 一、蓝桥杯的起源与发展二、比赛的目的与意义三、比赛内容与形式四、比赛前的准备五、获奖与激励六、蓝桥杯的影响力七、蓝桥杯比赛注意事项详解使用Dev-C的注意事项 一、蓝桥杯的起源与发展 蓝桥杯全国软件和信息技术专业人才大赛,简称蓝桥杯&#xff0c…

Python3 No module named ‘pymysql‘

在使用python3链接数据库时,总是提示 No module named pymysql 错误,执行pip3 install pymysql后,提示安装成功,但是执行py文件还是提示此错误。 使用python2 执行时,链接数据库正确,百思不得其解 先使用…

SpringBoot调用SOAP接口步骤详解。

1、引入依赖 <dependency><groupId>org.springframework.ws</groupId><artifactId>spring-ws-core</artifactId></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-oxm</ar…

移远通信闪耀2024香港秋灯展,以丰富的Matter产品及方案推动智能家居产业发展

10月27-30日&#xff0c;2024香港国际秋季灯饰展在香港会议展览中心盛大开展。 作为全球领先的物联网整体解决方案供应商&#xff0c;移远通信再次亮相&#xff0c;并重点展示了旗下支持Matter协议以及亚马逊ACK ( Alexa Connect Kit ) SDK for Matter方案的Wi-Fi模组、低功耗蓝…

【万户软件-注册安全分析报告-无验证方式导致安全隐患】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 1. 暴力破解密码&#xff0c;造成用户信息泄露 2. 短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉 3. 带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造…