基于Paddle2.0的新冠X-射线图像分类

本文介绍了基于Paddle2.0框架在AI Studio平台上进行新冠X-射线图像分类的实验过程,包括数据准备、ResNet、DenseNet、MLP-mixer模型的搭建、训练和预测。尽管测试集规模较小影响了模型评估,但该实验重点在于加深对深度学习模型构建的理解。
摘要由CSDN通过智能技术生成


前言

本实验基于数据集“新冠x-射线影像图片数据集”,实现在百度的 AI Studio 平台上,使用Paddle2.0框架编写。

(别问我为啥用Paddle,我也想知道呜呜)

本篇博客的内容是作者学校一门课的结课考试题,在此为各位同学整理分享,大家共同学习进步~

在这里插入图片描述
新冠一般指新型冠状病毒肺炎。 新型冠状病毒肺炎(Corona Virus Disease 2019,COVID-19),简称“新冠肺炎”,世界卫生组织命名为“2019冠状病毒病”,是指2019新型冠状病毒感染导致的肺炎。2019年末2020年初,新冠大爆发,为全世界人民带来了巨大的灾难。

患新型冠状病毒肺炎的患者,肺部x-射线影像中会有病毒感染的特征性表现,因此,准确识别出x-射线影像中的新冠阳性影像,具有重要的现实意义。

数据集中包括正常、病毒性肺、新冠阳性三种影像。

本比赛使用科研学者们收集并开源的新冠肺炎阳性患者的胸部x线影像数据库,旨在通过深度学习建模,准确识别出其中的新冠阳性影像。


一、数据准备

1. 调库

(直接粘贴的,可能有没有用到的代码,没有筛选…)

#引入你可能需要的库
import os
import sys
import zipfile
import random
import json
import cv2
import codecs
import numpy as np
from PIL import Image, ImageEnhance
import paddle
import paddle.fluid as fluid
import matplotlib.pyplot as plt
from multiprocessing import cpu_count
import math
import argparse
import ast
import random
from paddle.fluid.layer_helper import LayerHelper
from paddle.fluid.dygraph.base import to_variable
from paddle.fluid import framework
from paddle.fluid.param_attr import ParamAttr
import paddle.vision.transforms as T
from paddle import Model
from paddle.nn import MaxPool2D, Sequential, Conv2D, BatchNorm2D, Linear, ReLU, AvgPool2D
import zipfile
import paddle.nn.functional as F
from paddle.nn.layer.common import Dropout 
import paddle.nn as nn

2. 数据划分

解压数据集的压缩文件到指定路径,读取文件并划分训练集和测试集。

#数据解压
#选择你的数据集的路径和目标解压路径
!unzip  -qo data/data119913/dataset.zip -d 'dataset/'
lab_dir = {
   'COVID-19' : 0, 'NORMAL' : 1, 'Viral Pneumonia' : 2}
#生成数据列表
with open('data/train_list.txt', 'w') as fw:
    path = 'dataset/train'
    for i in os.listdir(path):
        if i.startswith('.'):
            continue
        lab_path = os.path.join(path, i)
        for j in os.listdir(lab_path):
            if j.startswith('.'):
                continue
            fw.write(os.path.join(lab_path, j) + '\t' + str(lab_dir[i]) + '\n')
#划分数据集
all_path = os.path.join('data', 'train_list.txt')
train_path = os.path.join('data', 'my_train_list.txt')
eval_path = os.path.join('data', 'my_eval_list.txt')
with open(all_path, 'r') as file_read:
    with open(eval_path, 'w') as file_write_eval:
        lines = file_read.readlines()
        for i in range(len(lines) // 10):
            j = random.randint(0, len(lines) - 1)
            line = lines.pop(j)
            file_write_eval.write(line)
    with open(train_path, 'w') as file_write_train:
        file_write_train.writelines(lines)
`

3. 初始化数据集

我在这里进行了一下简单的数据增强,图像翻转、缩放。

为了更好的训练效果,大家可以多多扩充数据增强的方法。

class Dataset(paddle.io.Dataset):
    def __init__(self, mode='train'):
        """
        初始化函数
        """
        assert mode in ['train', 'eval'], 'mode is one of train, eval.'
        self.data = []
        
        with open('data/my_{}_list.txt'.format(mode)) as f:
            for line in f.readlines():
                info = line.strip().split('\t')
                if len(info) > 0:
                    self.data.append([info[0].strip(), info[1].strip()])
                    
        if mode == 'train':
        	#进行适当的数据增强
            self.transforms = T.Compose([
                T.Resize((224,224)),    # 随机裁剪大小
                T.RandomHorizontalFlip(0.5),        # 随机水平翻转
                T.ToTensor(),                       # 数据的格式转换和标准化、 HWC => CHW 
                T.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])  # 图像归一化
            ])
        else:
            self.transforms = T.Compose([
                T.Resize((224,224)),                 # 图像大小修改
                T.ToTensor(),                  # 数据的格式转换和标准化 HWC => CHW
                T.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])   # 图像归一化
            ])
        
    def __getitem__(self, index):
        """
        根据索引获取单个样本
        """
        image_file, label = self.data[index]
        image = Image.open(image_file)

        if image.mode != 'RGB':
            image = image.convert('RGB'</
  • 9
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Br111an

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值