基于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
发布评论