医学图像分割UNet
UNet图像分割
- pytorch-gpu环境配置
- 安装pytorch-gpu
- 验证安装是否成功
- 数据预处理
- 训练模型
- 测试并显示结果
- 完整代码
pytorch-gpu环境配置
安装pytorch-gpu
1、在线安装
(已配置CUDA11.3,Cudnn8.0,Anaconda新建环境Python=3.9)
进入官网
//配置清华源
http://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud//pytorch/win-64
http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/win-64
http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/win-64
//去掉-c pytorch,使用清华源进行下载安装
conda install pytorch torchvision torchaudio cudatoolkit=11.3
2、离线安装
首先查询需要安装的各版本对应情况
我安装的是torch = 1.10.0,torchvision= 0.11.1, torchaudio = 0.10.0
下载对应的文件(注意如果要安装gpu版本的pytorch,请选择标注了cuda版本的文件并保证cuda与torch的版本对应)下载地址
其中cu113表示对应的是cuda11.3版本
下载完成后将文件放在对应的 lib/site-packages文件夹下,开始安装:
验证安装是否成功
//进入Python3.9环境
import torch
torch.__version__ # 查看torch版本
torch.cuda.is_available() # 查看gpu是否可用(返回true表示pytorch-gpu安装成功)
若输出结果如下,则安装成功:
数据预处理
下载BraTS19数据集
将三维数据转换为二维数据(自行选择如何切分训练集和测试集),并保存至文件夹中
def read_img(img_path):return sitk.GetArrayFromImage(sitk.ReadImage(img_path))if __name__ == '__main__':flair_train = glob.glob(r'F:/MICCAI_BraTS_2019_Data_Training/MICCAI_BraTS_2019_Data_Training/HGG/*/*flair.nii.gz')seg_train = glob.glob(r'F:/MICCAI_BraTS_2019_Data_Training/MICCAI_BraTS_2019_Data_Training/HGG/*/*seg.nii.gz')flair_test = glob.glob(r'F:/MICCAI_BraTS_2019_Data_Training/MICCAI_BraTS_2019_Data_Training/*/*flair.nii.gz')seg_test = glob.glob(r'F:/MICCAI_BraTS_2019_Data_Training/MICCAI_BraTS_2019_Data_Training/*/*seg.nii.gz')print('begin')for i in range(len(flair_train)):print(i)img1 = (read_img(flair_train[i])[100]).astype(np.uint8)img2 = (read_img(seg_train[i])[100]).astype(np.uint8)dir = 'data/train/'filename1 = dir + format(str(i), '0>3s') + '.png'plt.imshow(img1)plt.axis('off')plt.savefig(filename1, bbox_inches='tight',pad_inches=0)filename2 = dir + format(str(i), '0>3s') + '_mask.png'plt.imshow(img2)plt.axis('off')plt.savefig(filename2, bbox_inches='tight',pad_inches=0)print('over')
训练模型
def train_model(model, criterion, optimizer, dataload, num_epochs=20):for epoch in range(num_epochs):print('Epoch {}/{}'.format(epoch, num_epochs - 1))print('-' * 10)dt_size = len(dataload.dataset)epoch_loss = 0step = 0for x, y in dataload:step += 1inputs = x.to(device)labels = y.to(device)# zero the parameter gradientsoptimizer.zero_grad()# forwardoutputs = model(inputs)labels = labels[:,0,:,:]print(labels.shape)loss = criterion(outputs, labels)loss.backward()optimizer.step()epoch_loss += loss.item()print("%d/%d,train_loss:%0.3f" % (step, (dt_size - 1) // dataload.batch_size + 1, loss.item()))# # 可视化# writer = SummaryWriter(log_dir='logs', flush_secs=60)# writer.add_scalar('Train_loss', loss, epoch)torch.save(model.state_dict(), 'weights_%d.pth' % epoch)return model# 训练模型
def train():model = Unet(3, 1).to(device)batch_size = args.batch_sizecriterion = torch.nn.BCELoss()optimizer = optim.Adam(model.parameters())liver_dataset = LiverDataset("data/train", transform=x_transforms, target_transform=y_transforms)dataloaders = DataLoader(liver_dataset, batch_size=batch_size, shuffle=True, num_workers=4)# print(dataloaders)train_model(model, criterion, optimizer, dataloaders)
测试并显示结果
def test():model = Unet(3, 1)model.load_state_dict(torch.load(args.ckp, map_location='cpu'))liver_dataset = LiverDataset("data/val", transform=x_transforms, target_transform=y_transforms)dataloaders = DataLoader(liver_dataset, batch_size=1)model.eval()# plt.ion()with torch.no_grad():for x, true_y in dataloaders:y = model(x)img_y = torch.squeeze(y).numpy()x = tensor_to_PIL(x)true_y = tensor_to_PIL(true_y)plt.figure()plt.subplot(1, 3, 1)plt.imshow(x)plt.subplot(1, 3, 2)plt.imshow(img_y)plt.subplot(1, 3, 3)plt.imshow(true_y)plt.pause(0.1)plt.show()
完整代码
链接:https://pan.baidu.com/s/15odtjD6HGdBcPl7YBPiw2Q
提取码:ky78
医学图像分割UNet相关推荐
- 医学图像分割 | U-Net网络及他的变体
点击上方"AI算法修炼营",选择"星标"公众号 精选作品,第一时间送达 今天来简单归纳一下,医学图像分割的内容,还有很多代表性的工作在之后的文章中不断更新,由于 ...
- 医学图像分割——U-Net解读与个人笔记
最近开始尝试医疗影像分割的任务,先从之前的Unet开始阅读,记录一部分笔记以供回顾. 论文地址:http://www.arxiv.org/pdf/1505.04597.pdf 摘要 作者提出了一个相对 ...
- 医学图像分割 unet实现(一)
这次实验用来学习unet网络实现图像分割(keras, backend: tensorflow). 数据集DRIVE:为眼部图像,目的是分割出眼部血管. 数据集结构: 上面分别是训练的原始图片imag ...
- 医学图像分割 基于深度学习的肝脏肿瘤分割 实战(一)
在之前的一篇博客里:医学图像分割 unet实现(一),是学习并复现别人的实验.这篇将记录下自己毕设第一阶段的实验.毕设题目为:基于深度学习的肝脏肿瘤分割. 经过几番调整,最终确定:第一阶段分割出腹部图 ...
- 基于U-Net系列算法的医学图像分割(课程设计)
基于U-Net系列算法的医学图像分割(课程设计) 参考论文:包括U_Net/R2U_Net/AttU_Net/R2AttU_Net,如下图所示: 基于Pytorch的代码和数据集下载地址:下载地址 运 ...
- Unet神经网络为什么会在医学图像分割表现好?
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 问题:Unet神经网络为什么会在医学图像分割表现好? https: ...
- FCN、Unet、Unet++:医学图像分割网络一览
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 作者丨Error@知乎 来源丨https://zhuanlan.z ...
- 基于深度学习的医学图像分割学习笔记(九)UNet 3+
UNet 3+: A Full-Scale Connected UNet for Medical Image Segmentation 原文链接 代码 dateset:131例腹部增强CT(3D)用于 ...
- 医学图像分割基石-UNet
医学图像分割基石-UNet 一 医学图像分割 1.1 处理对象 1.2 应用方向 1.3 应用场景 1.4 应用思路 1.5 主要存在难点 二 U-Net成果及意义 三 U-Net摘要 四 引言 4. ...
最新文章
- 2021第12届蓝桥杯省赛Python题目
- Pytorch教程(十八)tensor的保存为csv,并加载
- 20159206 《网络攻防实践》第九周学习总结
- python中的pickle解析
- 恢复计算机注册表命令,电脑的注册表如果损坏怎么恢复
- 哈希---平方探测法
- 机器人抓取(六)—— 抓取点检测(抓取位姿估计) gqcnn代码测试与解读
- 数字证书有什么作用?
- linux centOS6.5防火墙
- AcWing 188. 武士风度的牛
- Required view 'XXX' with ID XXX for field 'xxx' was not found
- 3D 建模费时费力,Python 让照片秒变模型
- MATLAB矩阵分块拼装 .
- web前端基础——第八章
- 全员“拉踩”苹果,入局一年多的苹果芯片已成“行业标杆”?
- 【东大自控笔记9】一文掌握根轨迹法
- Python 决策树预测 分类算法
- 【软件构造】静态域与静态方法
- 如何用matlab画北极熊,中班幼儿美术画动物:水彩画北极熊(步骤图解)
- android view 半透明图片,Android ImageView 图片设置为透明