首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对Unet CNN(Unet)型结构的投入

对Unet CNN(Unet)型结构的投入
EN

Stack Overflow用户
提问于 2022-07-30 17:34:18
回答 1查看 115关注 0票数 0

我一直在研究我的论文(大脑语义分割&用基因组学的飞溅预测生存)。在处理成像部分时,我遵循了文献,并了解到,一些适当的方法去分割一个大脑是与Unet。我看到了用奇怪的方式制作数据集的2D和3D实现。因为这是我的论文,我不想直接抄袭别人的作品,所以我得自己做一些事情。我被困在一个特定的部分,我无法获得我的输入,以连接到网络。据我所知,网络需要一个2D图像(H,W),一个用于您试图在一起传递的图像数量的通道,以及另一个用于您试图分割的类数量的通道。在本例中,我从'18,'19,'20‘获取了BraTS数据集。从最初的数据集中,我解压缩了nifti文件,并使用NLM滤波和N4BiasFieldCorrection执行了两步预处理,然后跨Z轴将图像保存在2D切片中(这转换成每个模式(flair、t1、t1c、t2)获取自己包含155 png图像的文件夹。对于掩码,我只是将4个类编码为0、1、2、3,并将它们保存为Z轴上的2D pngs。

我使用以下代码创建自定义生成器。

代码语言:javascript
复制
import numpy as np
from skimage.io import imread
from keras.utils import to_categorical

def load_img(file_list):
    images = []
    for i in range(len(file_list)):
        x = imread(file_list[i])
        norm_img = (x - np.min(x)) / (np.max(x) - np.min(x))
        images.append(norm_img)
    images = np.array(images)

    return (images)


def load_mask(file_list):
    masks = []
    for i in range(len(file_list)):
        mask = imread(file_list[i])
        enc_mask = to_categorical(mask, num_classes=4)
        masks.append(enc_mask)
    masks = np.array(masks)

    return masks


def imageLoader(img_list, mask_list, batch_size):
    L = len(img_list)

    while True:

        batch_start = 0
        batch_end = batch_size

        while batch_start < L:
            limit = min(batch_end, L)

            X = load_img(img_list[batch_start:limit])
            Y = load_mask(mask_list[batch_start:limit])

            yield (X, Y)  # tuple

            batch_start += batch_size
            batch_end += batch_size

'to_categorical‘步骤有一个问题,我认为这是因为每当它到达一个没有4个当前类的图像时,它就会崩溃。

我接触到的Unet架构是https://github.com/jordan-colman/DR-Unet104/blob/main/Dr_Unet104_model.py的一个稍微修改过的版本,我对它所做的修改就是改变它的输出,给我我想要的多通道语义掩码。

代码语言:javascript
复制
outputs = Conv2D(num_classes, (1, 1), name='output_layer', activation='softmax')(X)

我对分割任务的想法,是使用这个Unet并训练其中的四个。每个模式(flair,t1,t1c,t2),然后冻结它们的重量,并将它们组合在一起。

代码语言:javascript
复制
Input 0 of layer "conv2d_106" is incompatible with the layer: expected min_ndim=4, found ndim=3. Full shape received: (None, None, None)

Call arguments received by layer "model_5" (type Functional):
  • inputs=tf.Tensor(shape=(None, None, None), dtype=uint8)
  • training=True
  • mask=None

我知道,它要求我交换我的输入,以适应它的输入,但我不确定如何进行。我一直试图用tensorflow.expand_dims()命令扩展图像2D输入的维数,结果没有结果。如有任何关于解决方案或阅读材料的建议,将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-04 10:22:19

我做了一些非常需要的阅读&在这方面做了一些工作,它起了作用:

mistakes)

  • fixed

  • 用一个小脚本解决了这个分类问题,

  • 修复了来自tensorflow的未知py崩溃,因为它找不到zlibstat (pycharm due 显示错误--它只是返回了一个非常长的退出代码,这没有什么意义,总是尝试从终端孩子那里运行您的脚本,从tensorflow那里学到另一个来自tensorflow的错误,因为我的GPU只有4GB的VRAM,无法运行这样的模型,通过请求访问一个更好的GPU,显然CUDA不会使用共享内存。

  • 通过适当扩展输入轴来解决输入的问题。最后,输入示例是一个四重模型,t1,t1ce,t2 2D堆叠的numpy数组,我在https://www.youtube.com/watch?v=oB35sV1npVI中看到了Sreenivas Bhattiprolu博士。网络的最终输入是H、W、X1、X2,从左到右,H:高度,W:宽度,X1: numpy堆栈(又称图像通道)中不同模式的数目,X2:需要在掩码上注释的不同类的数量。对于我的情况,这是一个240,240,4,4输入形状。

最后,我发现要训练一个参数为74.6m的模型,需要大量的数据,所以我恳请您研究角点数据增强技术。我很确定我的模型在我让它运行的100个时期已经安装好了。

我会在出版后的某个时候回来,并发布一个链接,git,我会上传它,以防其他人发现自己在泡菜。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73177803

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档