图像分割实战-系列教程8:unet医学细胞分割实战6(医学数据集、图像分割、语义分割、unet网络、代码逐行解读)

news2025/4/7 15:44:21

🍁🍁🍁图像分割实战-系列教程 总目录

有任何问题欢迎在下面留言
本篇文章的代码运行界面均在Pycharm中进行
本篇文章配套的代码资源已经上传

unet医学细胞分割实战1
unet医学细胞分割实战2
unet医学细胞分割实战3
unet医学细胞分割实战4
unet医学细胞分割实战5
unet医学细胞分割实战6

10、val.py解读

在结束训练后,已经保存了模型,现在可以对模型进行验证,运行过程需要指定参数:

"""
需要指定参数:--name dsb2018_96_NestedUNet_woDS
"""

10.1 main函数解析

def main():
    args = parse_args()

    with open('models/%s/config.yml' % args.name, 'r') as f:
        config = yaml.load(f, Loader=yaml.FullLoader)

    print('-'*20)
    for key in config.keys():
        print('%s: %s' % (key, str(config[key])))
    print('-'*20)

在train.py中已经把所有参数都通过配置文件保存,这里直接读配置文件就行了

    cudnn.benchmark = True
    # create model
    print("=> creating model %s" % config['arch'])
    model = archs.__dict__[config['arch']](config['num_classes'],
                                           config['input_channels'],
                                           config['deep_supervision'])

    model = model.cuda()
  1. 启用 CUDA 深度神经网络(cuDNN)的自动调优器
  2. 模型初始化
  3. 模型进入cuda
    # Data loading code
    img_ids = glob(os.path.join('inputs', config['dataset'], 'images', '*' + config['img_ext']))
    img_ids = [os.path.splitext(os.path.basename(p))[0] for p in img_ids]

    _, val_img_ids = train_test_split(img_ids, test_size=0.2, random_state=41)

    model.load_state_dict(torch.load('models/%s/model.pth' %
                                     config['name']))
    model.eval()

读取数据,分出验证集,取出验证集
加载本地预训练模型,开启推理模式

    val_transform = Compose([
        transforms.Resize(config['input_h'], config['input_w']),
        transforms.Normalize(),
    ])

    val_dataset = Dataset(
        img_ids=val_img_ids,
        img_dir=os.path.join('inputs', config['dataset'], 'images'),
        mask_dir=os.path.join('inputs', config['dataset'], 'masks'),
        img_ext=config['img_ext'],
        mask_ext=config['mask_ext'],
        num_classes=config['num_classes'],
        transform=val_transform)
    val_loader = torch.utils.data.DataLoader(
        val_dataset,
        batch_size=config['batch_size'],
        shuffle=False,
        num_workers=config['num_workers'],
        drop_last=False)

    avg_meter = AverageMeter()

数据增强,制作验证集Dataloader

    for c in range(config['num_classes']):
        os.makedirs(os.path.join('outputs', config['name'], str(c)), exist_ok=True)
    with torch.no_grad():
        for input, target, meta in tqdm(val_loader, total=len(val_loader)):
            input = input.cuda()
            target = target.cuda()

            # compute output
            if config['deep_supervision']:
                output = model(input)[-1]
            else:
                output = model(input)

            iou = iou_score(output, target)
            avg_meter.update(iou, input.size(0))

            output = torch.sigmoid(output).cpu().numpy()

            for i in range(len(output)):
                for c in range(config['num_classes']):
                    cv2.imwrite(os.path.join('outputs', config['name'], str(c), meta['img_id'][i] + '.jpg'),
                                (output[i, c] * 255).astype('uint8'))

    print('IoU: %.4f' % avg_meter.avg)
    
	    plot_examples(input, target, model,num_examples=3)
    torch.cuda.empty_cache()
  1. 创建验证集文件夹,取出对应分类种类各自建立文件夹,按照分类种类得到输出的图像
  2. 避免梯度计算,按照Dataloader取数据
  3. 然后基本和train.py差不多,是否在每个位置上加上监督,计算iou、计算损失、把最后预测的数据用OpenCV生成图像

10.3 验证结果展示

def plot_examples(datax, datay, model,num_examples=6):
    fig, ax = plt.subplots(nrows=num_examples, ncols=3, figsize=(18,4*num_examples))
    m = datax.shape[0]
    for row_num in range(num_examples):
        image_indx = np.random.randint(m)
        image_arr = model(datax[image_indx:image_indx+1]).squeeze(0).detach().cpu().numpy()
        ax[row_num][0].imshow(np.transpose(datax[image_indx].cpu().numpy(), (1,2,0))[:,:,0])
        ax[row_num][0].set_title("Orignal Image")
        ax[row_num][1].imshow(np.squeeze((image_arr > 0.40)[0,:,:].astype(int)))
        ax[row_num][1].set_title("Segmented Image localization")
        ax[row_num][2].imshow(np.transpose(datay[image_indx].cpu().numpy(), (1,2,0))[:,:,0])
        ax[row_num][2].set_title("Target image")
    plt.show()
  1. 图像分别为原始图像、分割图像、标签图像,为一行,样本数为行数
  2. 遍历样本数
  3. 每个遍历,分别读取原始图像,从模型中生成图像,读取标签图像
  4. 分别设置对应的标题

最终输出结果显示:
在这里插入图片描述
以上就是此次医学细胞分割项目的全部内容了

unet医学细胞分割实战1
unet医学细胞分割实战2
unet医学细胞分割实战3
unet医学细胞分割实战4
unet医学细胞分割实战5
unet医学细胞分割实战6

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1358099.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

麒麟KYLINOS操作系统上扩容系统盘

原文链接:麒麟KYLINOS操作系统上扩容系统盘 hello,大家好啊!继之前我们讨论了如何在统信UOS上扩容数据盘之后,今天我要给大家带来的是在麒麟KYLINOS操作系统上扩容系统盘与数据盘的方法。随着数据的不断增长,系统盘或数…

Nginx 的SSL证书配置

目录 1.申请域名,证书下载 2.准备站点源代码 3.修改nginx 对应网站的配置文件 4.修改 host 文件 http协议访问的网站默认会显示不安全,因为数据默认是明文传输的 https是httpssl,ssl是加密协议,通过证书来进行加密的&#xff…

promethues grafana 安装和使用

文章目录 1、promethues安装2、node-exporter安装3、grafana安装4、配置promethues监控node节点5、grafana操作外传 Docker 镜像下载地址: https://hub.docker.com 比较好的hub.docker.com///-- https://hub.docker.com/u/bitnami grafana监控面板:https…

使用Docker方式安装Artifactory

1、安装前环境准备 首先要关闭防火墙,关闭Selinux,准备好安装好的docker。以下安装版本:7.19.10 ##关闭防火墙,并设置开机自关闭 systemctl stop firewalld.service systemctl disable firewalld.service ##查看防火墙状态 sy…

越早学会这个配电柜技术,对你的帮助越大!

在当今数字化时代,电力作为社会生产和生活的基石之一,其可靠性和稳定性对于各行各业至关重要。 配电柜作为电力系统的核心组件,其有效的监控与管理成为确保电力供应安全的关键环节。为了满足这一需求,配电柜监控系统应运而生&…

【shell漫步】2 运算符

碎碎念 上一章介绍了各种变量的定义和使用,这次要针对数字和文本这两种基本数据类型进行运算和判断了,shell中的运算包括: 对数字类型 算术运算(对数字的 数学 运算)关系运算(用来做数字的条件判断&…

力扣-42.接雨水

题目: 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 示例 1: 输入:height [0,1,0,2,1,0,1,3,2,1,2,1] 输出:6 解释:上面是由数组[0,1,0,2…

GraphQL 工具推荐:打造高效的开发环境

GraphQL 工具 本文章,会列举一些好用的 GraphQL 工具,他们可以大大提升你在开发中使用 GraphQL 的效率哦! Prisma 你可以这么理解,Prisma 是一个 ORM 的库,让你使用 GraphQL 查询时,可以使用对象的形式去…

图像分割-Grabcut法

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 本文的C#版本请访问:图像分割-Grabcut法(C#)-CSDN博客 GrabCut是一种基于图像分割的技术,它可以用于将图像…

vue中key的用法

加key是提升vue渲染效率,减少DOM操作。 vue列表元素的更新机制: 当列表元素没有设置key的时候,vue判断是否操作这个DOM元素,是根据新旧两次数据的元素顺序进行对比,看一下元素内容是否发生变化。发生变化vue就操作这个…

关于Python里xlwings库对Excel表格的操作(二十八)

这篇小笔记主要记录如何【如何使用“Chart类”和“Api类"为新图表设置标题文本内容、字体、字号、粗细、正斜、颜色】。 前面的小笔记已整理成目录,可点链接去目录寻找所需更方便。【目录部分内容如下】【点击此处可进入目录】 (1)如何…

大数据Doris(四十六):物化视图查询改写和适用场景

文章目录 物化视图查询改写和适用场景 一、查询改写

移动神器RAX3000M路由器不刷固件变身家庭云之六(高级应用):设置https

本系列文章: 移动神器RAX3000M路由器变身家庭云之一:开通SSH,安装新软件包 移动神器RAX3000M路由器变身家庭云之二:安装vsftpd 移动神器RAX3000M路由器变身家庭云之三:外网访问家庭云 移动神器RAX3000M路由器变身家庭云…

c# 学习笔记 - 枚举

文章目录 1. 枚举1.1 枚举结构梳理1.2 枚举完整代码1.3 枚举知识点补充 2. 迭代两种命名空间接口3. yield语句 1. 枚举 1.1 枚举结构梳理 结构图   上图内容可能依旧不通俗易懂,这里使用最简明的话语告诉大家实现方式. foreach语句就是集合的遍历操作&#xff0c…

彻底弄懂MySQL事务隔离级别

并发事务中存在以下 3 个问题。 1 脏读 指的是读到了其他事务未提交的数据,未提交意味着这些数据可能会保存到数据库,也可能会回滚,不保存到数据库。当这个数据发生了回滚,就意味着读到的这个数据不存在,这就是脏读! 2 不可重复读 在同一个事务中,同一个查询在不同的…

Spring Cloud Alibaba 介绍与版本映射关系

目录 前言 一、Spring Cloud Alibaba 是什么? 二、Spring Cloud Alibaba 版本依赖 前言 Spring Cloud 本身并不是一个拿来即可用的框架,它是一套微服务规范,这套规范共有两代实现。 (子项目): ● 第一代实现: Spr…

yolov5旋转目标检测-遥感图像检测-无人机旋转目标检测(附代码和原理)

目前,无人机技术的快速发展带来了遥感图像处理领域的革命性改变。然而,由于无人机在飞行时可能会出现旋转的情况,因此对于旋转目标的检测也成为了一个重要的问题。针对这个问题,yolov5可以提供一种高效的解决方案。 以下是介绍的分…

SSCI及SCI撰写|查找文献doi的八大方法

一、前言 (一)文献DOI概念介绍 DOI(Digital Object Identifier)是一种用于标识数字对象的持久性标识符系统。在学术出版领域,DOI通常用于标识和定位学术文献,包括期刊文章、会议论文、报告等。以下是 DOI 的一些重要特点和介绍&a…

法二(命令行):YOLOv5打包.exe

0 准备工作 yolov5环境配置完毕安装pyinstaller,命令为 pip install pyinstallerps: 为了避免可能的错误,所有操作请在英文路径下进行。 1 修改detect_qt5.py或者相关文件 如果是使用我的检测界面的,应该是修改detect_qt5.py这个文件&#x…

HTTP和TCP代理原理及实现,主要是理解

Web 代理是一种存在于网络中间的实体,提供各式各样的功能。现代网络系统中,Web 代理无处不在。我之前有关 HTTP 的博文中,多次提到了代理对 HTTP 请求及响应的影响。今天这篇文章,我打算谈谈 HTTP 代理本身的一些原理,…