基于Paddle2.0的新冠X

编程入门 行业动态 更新时间:2024-10-06 16:31:18

基于Paddle2.0的新冠X

基于Paddle2.0的新冠X

目录

  • 前言
  • 一、数据准备
    • 1. 调库
    • 2. 数据划分
    • 3. 初始化数据集
  • 二、搭建模型
    • 1.ResNet
    • 2. DenseNet
    • 3.MLP-mixer
  • 三、模型训练
  • 四、模型预测
  • 总结
    • 1.实验回顾
    • 2.存在的问题
  • 结尾


前言

本实验基于数据集“新冠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.layermon 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('.'):continuelab_path = os.path.join(path, i)for j in os.listdir(lab_path):if j.startswith('.'):continuefw.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 => CHWT.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])   # 图像归一化])def __getitem__(self, index):"""根据索引获取单个样本"""image_file, label 

更多推荐

基于Paddle2.0的新冠X

本文发布于:2024-02-13 14:20:45,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1759231.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!