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相关推荐

  1. 医学图像分割 | U-Net网络及他的变体

    点击上方"AI算法修炼营",选择"星标"公众号 精选作品,第一时间送达 今天来简单归纳一下,医学图像分割的内容,还有很多代表性的工作在之后的文章中不断更新,由于 ...

  2. 医学图像分割——U-Net解读与个人笔记

    最近开始尝试医疗影像分割的任务,先从之前的Unet开始阅读,记录一部分笔记以供回顾. 论文地址:http://www.arxiv.org/pdf/1505.04597.pdf 摘要 作者提出了一个相对 ...

  3. 医学图像分割 unet实现(一)

    这次实验用来学习unet网络实现图像分割(keras, backend: tensorflow). 数据集DRIVE:为眼部图像,目的是分割出眼部血管. 数据集结构: 上面分别是训练的原始图片imag ...

  4. 医学图像分割 基于深度学习的肝脏肿瘤分割 实战(一)

    在之前的一篇博客里:医学图像分割 unet实现(一),是学习并复现别人的实验.这篇将记录下自己毕设第一阶段的实验.毕设题目为:基于深度学习的肝脏肿瘤分割. 经过几番调整,最终确定:第一阶段分割出腹部图 ...

  5. 基于U-Net系列算法的医学图像分割(课程设计)

    基于U-Net系列算法的医学图像分割(课程设计) 参考论文:包括U_Net/R2U_Net/AttU_Net/R2AttU_Net,如下图所示: 基于Pytorch的代码和数据集下载地址:下载地址 运 ...

  6. Unet神经网络为什么会在医学图像分割表现好?

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 问题:Unet神经网络为什么会在医学图像分割表现好? https: ...

  7. FCN、Unet、Unet++:医学图像分割网络一览

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 作者丨Error@知乎 来源丨https://zhuanlan.z ...

  8. 基于深度学习的医学图像分割学习笔记(九)UNet 3+

    UNet 3+: A Full-Scale Connected UNet for Medical Image Segmentation 原文链接 代码 dateset:131例腹部增强CT(3D)用于 ...

  9. 医学图像分割基石-UNet

    医学图像分割基石-UNet 一 医学图像分割 1.1 处理对象 1.2 应用方向 1.3 应用场景 1.4 应用思路 1.5 主要存在难点 二 U-Net成果及意义 三 U-Net摘要 四 引言 4. ...

最新文章

  1. 2021第12届蓝桥杯省赛Python题目
  2. Pytorch教程(十八)tensor的保存为csv,并加载
  3. 20159206 《网络攻防实践》第九周学习总结
  4. python中的pickle解析
  5. 恢复计算机注册表命令,电脑的注册表如果损坏怎么恢复
  6. 哈希---平方探测法
  7. 机器人抓取(六)—— 抓取点检测(抓取位姿估计) gqcnn代码测试与解读
  8. 数字证书有什么作用?
  9. linux centOS6.5防火墙
  10. AcWing 188. 武士风度的牛
  11. Required view 'XXX' with ID XXX for field 'xxx' was not found
  12. 3D 建模费时费力,Python 让照片秒变模型
  13. MATLAB矩阵分块拼装 .
  14. web前端基础——第八章
  15. 全员“拉踩”苹果,入局一年多的苹果芯片已成“行业标杆”?
  16. 【东大自控笔记9】一文掌握根轨迹法
  17. Python 决策树预测 分类算法
  18. 【软件构造】静态域与静态方法
  19. 如何用matlab画北极熊,中班幼儿美术画动物:水彩画北极熊(步骤图解)
  20. android view 半透明图片,Android ImageView 图片设置为透明

热门文章

  1. 神经网络基础05-注意力机制
  2. 绘图---PS使用教程总结(一)基本操作
  3. solr中竞价排名实现
  4. 学校热水系统服务认证
  5. 男人的魅力不在于财富,而在于精神深度
  6. 不用sqrt()函数,求平方根的三种方法
  7. 在知乎逮到一个腾讯10年老测试开发,聊过之后收益良多...
  8. 梁启超死亡真相:主刀医生错把健康的肾切除
  9. 4、SRS4.0源代码分析之RTMP推流处理
  10. 数学建模--图与网络(1)