基于深度学习的医学影像新冠肺炎图像分类(含完整代码)

一、绪论

        新冠肺炎(COVID-19),由严重急性呼吸综合征冠状病毒2型(SARS-CoV-2)引起,自2019年底首次在中国武汉爆发以来,迅速蔓延至全球,成为一场影响深远的全球性大流行病。

        在这场疫情中,快速、准确地诊断新冠肺炎患者,对于控制疫情的蔓延、减轻医疗系统的压力、及时治疗患者至关重要。传统的诊断方法主要依赖于病毒核酸检测,如逆转录聚合酶链反应(RT-PCR)测试,但这些方法存在检测周期长、资源有限和假阴性率较高等问题。因此,医学影像,特别是胸部X光和计算机断层扫描(CT)成像,成为了辅助诊断新冠肺炎的重要手段。通过影像学检查,医生可以观察到肺部的典型病变,如地图样改变、毛玻璃影和肺实质的炎症渗透,这些特征有助于快速筛查和诊断新冠肺炎患者。

        随着人工智能技术的快速发展,基于深度学习的图像分类任务在医学影像分析领域显示出了巨大的潜力。利用深度学习模型,可以自动学习和提取影像数据中的复杂特征,实现对新冠肺炎等疾病的高效、准确诊断。在新冠肺炎疫情期间,研究人员和医生尝试使用深度学习模型对胸部X光和CT影像进行分析,以自动检测和分类新冠肺炎病例,这不仅可以加快诊断速度,还可以减轻医务人员的工作负担,提高诊断的准确性和效率。

        新冠肺炎图像分类任务的目标是开发出能够自动识别和分类医学影像中新冠肺炎特征的深度学习模型。这项任务通常涉及收集和预处理大量的胸部X光或CT影像数据,设计和训练深度神经网络模型,以及评估模型的性能。成功的模型可以帮助医生快速筛选出疑似新冠肺炎患者,为进一步的诊断和治疗提供重要信息。此外,这些模型还可以应用于疫情监测和管理,为公共卫生决策提供数据支持,对抗击新冠肺炎疫情具有重要意义。

二、项目完整地址

https://github.com/Hjananggch/Deep-learning-based-image-classification-of-medical-imaging-COVID-19-images.git

三、实验数据

 数据集来自kaggle:Covid-19 Image Dataset (kaggle.com)

四、部分参考代码

from torchvision import transforms
import os
from torchvision import datasets
import numpy as np
from torch.utils.data import DataLoader
from torchvision import models
import torch.optim as optim
import torch.nn as nn
import torch
import tqdm
from torch.optim import lr_scheduler
from sklearn.metrics import precision_score
from sklearn.metrics import recall_score
from sklearn.metrics import accuracy_score
from sklearn.metrics import f1_score
from sklearn.metrics import roc_auc_score
import pandas as pd
import time

# 训练集图像预处理:缩放裁剪、图像增强、转 Tensor、归一化
train_transform = transforms.Compose([transforms.RandomResizedCrop(224),
                                      transforms.RandomHorizontalFlip(),
                                      transforms.ToTensor(),
                                      transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
                                      ])

# 测试集图像预处理-RCTN:缩放、裁剪、转 Tensor、归一化
test_transform = transforms.Compose([transforms.Resize(256),
                                     transforms.CenterCrop(224),
                                     transforms.ToTensor(),
                                     transforms.Normalize(
                                         mean=[0.485, 0.456, 0.406],
                                         std=[0.229, 0.224, 0.225])
                                     ])


def train_one_batch(images, labels):
    
    images = images.to(device)
    labels = labels.to(device)

    outputs = model(images)  
    loss = criterion(outputs, labels)  

    # 优化更新权重
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()

   
    _, preds = torch.max(outputs, 1)  
    preds = preds.cpu().numpy()
    loss = loss.detach().cpu().numpy()
    outputs = outputs.detach().cpu().numpy()
    labels = labels.detach().cpu().numpy()

    # 计算分类评估指标
    train_loss = loss
    train_accuracy = accuracy_score(labels, preds)
    train_precision = precision_score(labels, preds, average='macro')
    # train_recall = recall_score(labels, preds, average='macro')
    # train_f1 = f1_score(labels, preds, average='macro')
    print(f"train_loss:{train_loss}", f"train_acc:{train_accuracy}", f"train_pre:{train_precision}")


#     return log_train

def evaluate_testset():
    loss_list = []
    labels_list = []
    preds_list = []

    with torch.no_grad():
        for images, labels in test_loader:  
            images = images.to(device)
            labels = labels.to(device)
            outputs = model(images)  

            _, preds = torch.max(outputs, 1)  
            preds = preds.cpu().numpy()
            loss = criterion(outputs, labels)  
            loss = loss.detach().cpu().numpy()
            outputs = outputs.detach().cpu().numpy()
            labels = labels.detach().cpu().numpy()

            loss_list.append(loss)
            labels_list.extend(labels)
            preds_list.extend(preds)

    # 计算分类评估指标
    test_loss = np.mean(loss_list)
    test_accuracy = accuracy_score(labels_list, preds_list)
    test_precision = precision_score(labels_list, preds_list, average='macro')
    test_recall = recall_score(labels_list, preds_list, average='macro')
    # test_f1 = f1_score(labels_list, preds_list, average='macro')
    print(f"test_loss:{test_loss}", f"test_acc:{test_accuracy}", 
          f"test_pre:{test_precision}",f"test_recall:{test_recall}")
    


if __name__ == "__main__":
    device = torch.device('cuda:0' if torch.cuda.is_available() else 'cpu')
    # 数据集文件夹路径
    dataset_dir = r""
    train_path = os.path.join(dataset_dir, 'train')
    test_path = os.path.join(dataset_dir, 'test')

    # 载入训练集
    train_dataset = datasets.ImageFolder(train_path, train_transform)
    # 载入测试集
    test_dataset = datasets.ImageFolder(test_path, test_transform)

    BATCH_SIZE = 32
    # 训练集的数据加载器
    train_loader = DataLoader(train_dataset,
                              batch_size=BATCH_SIZE,
                              shuffle=True,
                              num_workers=4
                              )

    # 测试集的数据加载器
    test_loader = DataLoader(test_dataset,
                             batch_size=BATCH_SIZE,
                             shuffle=False,
                             num_workers=4
                             )

    model = models.resnet50(pretrained=True)  # 载入预训练模型
    model.fc = nn.Linear(model.fc.in_features, 3)
    optimizer = optim.Adam(model.fc.parameters())

    model = model.to(device)

    # 交叉熵损失函数
    criterion = nn.CrossEntropyLoss()

    # 学习率降低策略
    lr_scheduler = lr_scheduler.StepLR(optimizer, step_size=5, gamma=0.5)

    # 训练轮次 Epoch
    EPOCHS = 1000

    best_test_accuracy = 0

    for epoch in range(1, EPOCHS + 1):

        print(f'Epoch {epoch}/{EPOCHS}')

        ## 训练阶段
        model.train()
        for images, labels in train_loader:  
            train_one_batch(images, labels)

        lr_scheduler.step()
        ## 测试阶段
        model.eval()
        evaluate_testset()

五、实验结果

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

uniapp富文本文字长按选中(用于复制,兼容H5、APP、小程序三端)

方案&#xff1a;使用u-parse的selectable属性 <u-parse :selectable"true" :html"content"></u-parse> 注意&#xff1a;u-parse直接使用是不兼容小程序的&#xff0c;需要对u-parse进行改造&#xff1a; 1. 查看u-parse源码发现小程序走到以…

《C++ Primer Plus》《5、循环和关系表达式》

文章目录 1 for循环1.1for循环的组成部分1.2回到for循环1.3修改步长1.4使用for循环访问字符串1.5递增运算符和递减运算符1.6副作用和顺序点&#xff08;了解&#xff09;1.7前缀格式和后缀格式1.8递增/递减运算符和指针1.9组合赋值运算符1.10复合语句&#xff08;语句块&#x…

【Redis快速入门】深入解读哨兵模式

个人名片&#xff1a; &#x1f43c;作者简介&#xff1a;一名大三在校生&#xff0c;喜欢AI编程&#x1f38b; &#x1f43b;‍❄️个人主页&#x1f947;&#xff1a;落798. &#x1f43c;个人WeChat&#xff1a;hmmwx53 &#x1f54a;️系列专栏&#xff1a;&#x1f5bc;️…

2024年 前端JavaScript入门到精通 第一天 笔记

主要讲解JavaScript核心知识&#xff0c;包含最新ES6语法&#xff0c;从基础到API再到高级。让你一边学习一边练习&#xff0c;重点知识及时实践&#xff0c;同时每天安排大量作业&#xff0c;加深记忆&#xff0c;巩固学习成果。 1.1 基本软件与准备工作 1.2 JavaScript 案例 …

新年红包的题解

目录 原题描述&#xff1a; 题目描述 题目背景 题目描述 输入格式 输出格式 样例 Input 1 Output 1 Input 2 Output 2 数据范围 主要思路&#xff1a; 代码code&#xff1a; 原题描述&#xff1a; 题目描述 题目背景 龙飞凤舞迎跨年&#xff0c;瑞雪飘飘送祝愿…

陇剑杯 2021刷题记录

题目位置&#xff1a;https://www.nssctf.cn/上有 陇剑杯 2021 1. 签到题题目描述分析答案小结 2. jwt问1析1答案小结 问2析2答案小结 问3析3答案 问4析4答案 问5析5答案 问6析6答案 3. webshell问1析1答案 问2析2答案 问3析3答案 1. 签到题 题目描述 此时正在进行的可能是_…

【Deep Learning 5】自编码和Transformer

&#x1f31e;欢迎来到Pytorch的世界 &#x1f308;博客主页&#xff1a;卿云阁 &#x1f48c;欢迎关注&#x1f389;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; &#x1f31f;本文由卿云阁原创&#xff01; &#x1f4c6;首发时间&#xff1a;&#x1f339;2024年2月19日&a…

互联网使用代理IP的作用

互联网使用代理IP主要有以下作用&#xff1a; 1. 隐私保护&#xff1a; - 使用代理IP&#xff0c;用户的原始IP地址会被代理服务器的IP地址所替代&#xff0c;从而隐藏用户的真实身份和地理位置信息&#xff0c;增加网络匿名性。 2. 安全防护&#xff1a; - 代理服务器可以作为…

基于Java (spring-boot)的校园二手交易平台

一、项目介绍 基于Java (spring-boot)的校园二手交易平台&#xff1a;前端主要包含登录注册、求购商品、发布商品、举报、评论五个核心管理模块。后端则主要包含系统设置、物品管理、学生管理、评论管理、举报管理、新闻公告六个核心管理模块。通过此模式不同属性的用户可在系统…

服务器遭受 DDoS 攻击的常见迹象有哪些?

服务器遭受 DDoS 攻击的现象很常见&#xff0c;并且有时不容易预防&#xff0c;有部分原因是它们的形式多种多样&#xff0c;而且黑客手段越来越隐蔽。如果您怀疑自己可能遭受 DDoS 攻击&#xff0c;可以寻找多种迹象。以下是 DDoS 攻击的5个常见迹象&#xff1a; 1.网络流量无…

微信美容预约小程序开发实战教程,快速上手的技术解析

随着移动设备的普及和互联网技术的不断发展&#xff0c;小程序成为了一种越来越受欢迎的轻量级应用程序。特别是在美容美发行业&#xff0c;小程序可以提供便捷的服务&#xff0c;吸引更多的客户。本文将为您提供一份详细的美容美发小程序开发搭建指南。 注册并登录乔拓云平台&…

扫码即可快速协作:草料二维码底部协作面板功能详解

功能介绍 在二维码上添加 底部协作面板 功能后 &#xff0c;扫码后不仅可以阅读设备信息、产品资料等基本信息&#xff0c;还可以在二维码底部输入内容评论并他人快速协作&#xff0c;支持添加图文、语言、手写签名等操作。 底部协作面板是提供给组织内部成员快速协作的功能&…

机器学习之梯度下降法直观理解

形象化举例&#xff0c;由上图所示&#xff0c;假如最开始&#xff0c;我们在一座大山上的某处位置&#xff0c;因为到处都是陌生的不知道下山的路&#xff0c;所以只能摸索着根据直觉&#xff0c;走一步算一步。在此过程中&#xff0c;每走到一个位置的时候&#xff0c;都会求…

2024热门韩剧推荐

《与恶魔有约》详情介绍_与恶魔有约已完结在线观看_与恶魔有约迅雷下载_连续剧_萌番(゜-゜)つロ 年轻人都在用~-BILFUN - www.bilfun.cc 《杀人者的难堪》详情介绍_杀人者的难堪已完结在线观看_杀人者的难堪迅雷下载_连续剧_萌番(゜-゜)つロ 年轻人都在用~-BILFUN - www.bilfun…

※【回溯】【深度优先前序】Leetcode 257. 二叉树的所有路径

※【回溯】【深度优先前序】Leetcode 257. 二叉树的所有路径 解法0 迭代法解法1 深度优先 前序解法2 深度优先 前序 添加了StringBulider ---------------&#x1f388;&#x1f388;257. 二叉树的所有路径 题目链接&#x1f388;&#x1f388;------------------- 解法0 迭代法…

CI/CD部署

什么是CI&#xff0c;什么是CD CI和CD是软件开发中持续集成和持续交付的缩写。 CI代表持续集成&#xff08;Continuous Integration&#xff09;&#xff0c;是一种实践&#xff0c;旨在通过自动化构建、测试和代码静态分析等过程&#xff0c;频繁地将代码变更合并到共享存储…

探索Linux系统中HTTP隧道技术的原理与实践

在Linux的世界里&#xff0c;HTTP隧道技术就像是一个神秘的魔法师&#xff0c;它能让你的网络请求穿越重重障碍&#xff0c;安全地到达目的地。今天&#xff0c;我们就来一起探索这个魔法师的奥秘&#xff0c;看看它是如何在Linux系统中施展魔法的。 首先&#xff0c;我们要明…

如何通过AI作画?

网址&#xff1a;https://huggingface.co/spaces/prodia/fast-stable-diffusion 模板网址&#xff1a;https://prompthero.com/prompt/96ee86ae9e2 打开模板网址&#xff0c;选择Stable Diffusion 选择图片&#xff0c;复制prompt和Negative prompt 打开https://huggingface.…

代码随想录算法训练营第54天 | 123.买卖股票的最佳时机III 188.买卖股票的最佳时机IV

买卖股票的最佳时机III 最多只能完成两笔交易&#xff0c;那么对于每一天的股票可以有5种状态&#xff1a; 没有操作第一次持有股票第一次不持有股票第二次持有股票第二次不持有股票 所以设计的 dp 数组应该有5个维度&#xff0c;分别计算可能得到的最大利润。对于如何递推&a…
最新文章