TransUnet官方代码测试自己的数据集(已训练完毕)

本文详细介绍了如何使用TransUnet模型进行测试,包括权重文件的加载、数据集路径的调整、测试代码的修改,以及如何通过像素调整将模型预测结果转化为彩色图像。重点在于展示如何从黑白输出到彩色显示的过程及测试结果的查看方法。
摘要由CSDN通过智能技术生成

***************************************************

码字不易,收藏之余,别忘了给我点个赞吧!

***************************************************

---------Start

首先参考上一篇的训练过程,这是测试过程,需要用到训练过程的权重。

1. TransUnet训练完毕之后,会生成权重文件(默认保存位置如下),snapshot_path为保存权重的路径。

在这里插入图片描述
权重文件
在这里插入图片描述

2. 修改test.py文件

调整数据集路径。
在这里插入图片描述
训练和测试时的图像设置相同大小,并设置主干模型的名称同训练时一致。
在这里插入图片描述

配置数据集相关信息。
在这里插入图片描述
手动添加权重。
在这里插入图片描述

3. 设置DataLoader

设置DataLoader中参数num_workers=0。
在这里插入图片描述

4. 修改utils.py文件

替换utils.py中的test_single_volume函数,原网络输出的是0,1,2,3,4像素的图片,分别代表5个类别,直接显示均呈黑色。对此,我们通过像素调整,使每个类别呈现不同的颜色。

def test_single_volume(image, label, net, classes, patch_size=[256, 256], test_save_path=None, case=None, z_spacing=1):
    image, label = image.squeeze(0).cpu().detach().numpy(), label.squeeze(0).cpu().detach().numpy()
    _,x, y = image.shape
    if x != patch_size[0] or y != patch_size[1]:
        #缩放图像符合网络输入
        image = zoom(image, (1,patch_size[0] / x, patch_size[1] / y), order=3)
    input = torch.from_numpy(image).unsqueeze(0).float().cuda()
    net.eval()
    with torch.no_grad():
        out = torch.argmax(torch.softmax(net(input), dim=1), dim=1).squeeze(0)
        out = out.cpu().detach().numpy()
        if x != patch_size[0] or y != patch_size[1]:
            #缩放图像至原始大小
            prediction = zoom(out, (x / patch_size[0], y / patch_size[1]), order=0)
        else:
            prediction = out

    metric_list = []
    for i in range(1, classes):
        metric_list.append(calculate_metric_percase(prediction == i, label == i))

    if test_save_path is not None:
        a1 = copy.deepcopy(prediction)
        a2 = copy.deepcopy(prediction)
        a3 = copy.deepcopy(prediction)

        a1[a1 == 1] = 255
        a1[a1 == 2] = 0
        a1[a1 == 3] = 255
        a1[a1 == 4] = 20

        a2[a2 == 1] = 255
        a2[a2 == 2] = 255
        a2[a2 == 3] = 0
        a2[a2 == 4] = 10

        a3[a3 == 1] = 255
        a3[a3 == 2] = 77
        a3[a3 == 3] = 0
        a3[a3 == 4] = 120

        a1 = Image.fromarray(np.uint8(a1)).convert('L')
        a2 = Image.fromarray(np.uint8(a2)).convert('L')
        a3 = Image.fromarray(np.uint8(a3)).convert('L')
        prediction = Image.merge('RGB', [a1, a2, a3])
        prediction.save(test_save_path+'/'+case+'.png')


    return metric_list


**方便小伙伴理解这部分代码,特意做了个图,a1,a2,a3分别代表RGB三个通道,开始它们的值通过deepcopy函数直接赋值,故三者的值都是一样的。
这里拿类别1举例:a1[a12]=0代表R通道中输出结果为2的赋值0,
a2[a2
2]=255代表G通道中输出结果为2的赋值255,
a3[a3==2]=77代表B通道中输出结果为2的赋值77,(0,255,77)对应就是绿色,类别2就是绿色(轮子)。
然后通过Image.merge(‘RGB’, [a1, a2, a3])函数合并三个通道,此时prediction就成了三通道彩色图。

在这里插入图片描述
在这里插入图片描述

至此,设置完毕,右键run运行。

5. 测试结束

测试结束后,会在根目录下生成predictions文件夹,文件夹的内容如下。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

  • 67
    点赞
  • 206
    收藏
    觉得还不错? 一键收藏
  • 118
    评论
TransUnet模型需要进行以下步骤: 1. 收集自己的数据集:首先,你需要收集一组适合你问题的图像数据集。这些图像应该包含你感兴趣的物体或场景。 2. 数据预处理:在训练之前,你需要对数据进行预处理,例如调整图像的大小、裁剪、旋转或者增加一些噪声,以增加模型的鲁棒性。 3. 划分训练集和验证集:将数据集划分为训练集和验证集,通常是按照一定的比例进行划分,以便在训练过程中评估模型的性能。 4. 构建TransUnet模型:使用你的数据集构建TransUnet模型。TransUnet是一种用于语义分割的模型,它结合了Transformer和U-Net的结构。你可以使用开源的TransUnet代码库或者自己实现该模型。 5. 定义损失函数和优化器:为了训练模型,你需要定义一个适合你的任务的损失函数。对于语义分割任务,常用的损失函数包括交叉熵损失函数和Dice损失函数。然后,选择一个合适的优化器,如Adam优化器。 6. 训练模型:使用训练集数据对TransUnet模型进行训练。在每个训练迭代中,将输入图像传递给模型,计算损失并更新模型的权重。通过迭代训练,模型将逐渐学习从图像中提取特征并进行语义分割。 7. 评估模型:在训练过程中,使用验证集数据对模型进行评估,计算模型在验证集上的性能指标,如准确率、召回率和F1分数。这些指标可以帮助你判断模型的性能和训练是否收敛。 8. 预测新数据:训练完成后,你可以使用训练好的TransUnet模型对新的图像进行语义分割预测。将图像输入模型,得到预测的分割结果。 注意:在上述过程中,引用提到了训练权重的保存路径,可以将训练好的权重保存下来,以便日后使用。而引用则提到了TransUnet模型在预测时对RGB三个通道的赋值过程,最后通过合并三个通道得到彩色图像。这些都是与TransUnet模型相关的内容。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
评论 118
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值