首页 > 其他分享 >RFNet学习

RFNet学习

时间:2023-06-23 20:33:41浏览次数:39  
标签:卷积 self RFNet 学习 特征 解码器 模型 通道

RFNet是一个深度学习模型,用于医学图像分割任务。下面是目录中各个文件的功能说明:

  1. data文件夹:包含数据处理相关的文件。

    • init.py:一个空文件,用于标识该文件夹是一个Python包。
    • data_utils.py:包含一些用于数据处理的实用函数。
    • datasets.py:定义了数据集的类,用于加载和处理训练和测试数据。
    • datasets_nii.py:包含处理.nii格式数据的类。
    • rand.py:包含生成随机数的函数。
    • sampler.py:定义了数据采样器,用于从数据集中获取样本。
  2. pertrain文件夹:包含预训练的模型文件。

    • model_last_brast2020.pth:预训练模型文件。
    • model_last_brats2015.pth:预训练模型文件。
    • model_last_brats2018_split1.pth:预训练模型文件。
    • model_last_brats2018_split2.pth:预训练模型文件。
    • model_last_brats2018_split3.pth:预训练模型文件。
  3. utils文件夹:包含一些实用工具和脚本文件。

    • layers.py:定义了一些自定义的神经网络层。
    • miccai.sh:一个Shell脚本文件,可能是用于运行训练或测试的脚本。
    • miccai2020.log:日志文件,可能包含训练或测试过程中的输出和记录。
    • models_miccai.py:定义了RFNet模型的网络结构。
    • piex_contrast_loss.py:定义了自定义的损失函数。
    • predict.py:用于进行图像分割预测的脚本。
    • train_miccai.py:用于进行模型训练的脚本。

配置shell脚本。

查询pythonname

which python3

查询cudapath

whereis cuda

 

models_miccai.py

总体:

  1. 定义了一个名为Encoder的类,用于实现编码器部分的网络结构。编码器由四个阶段组成,每个阶段包含三个卷积层。输入经过不同阶段的卷积层后,输出特征图。编码器的作用是逐渐提取图像特征。

  2. 定义了一个名为Decoder_sep的类,用于实现解码器部分的网络结构。解码器采用分离的方式进行解码,即对每个输入通道单独进行解码操作。解码器的结构与编码器相反,使用反卷积和上采样操作将特征图恢复到原始输入图像的尺寸,并最终生成预测结果。

  3. 定义了一个名为Decoder_fuse的类,用于实现解码器部分的网络结构。解码器采用融合的方式进行解码,即对不同输入通道的特征图进行融合后再进行解码操作。解码器利用区域感知的模态融合和渐进的融合机制,通过多层次的融合生成预测结果。

  4. 定义了一个名为Model的类,用于组合编码器和解码器,构成完整的网络模型。模型包括四个通道的编码器和两个解码器(分离解码器和融合解码器)。模型的前向传播过程中,将输入图像的不同通道分别送入对应的编码器,然后将编码器的输出作为解码器的输入,生成最终的预测结果。

  5. 在模型的初始化过程中,设置了一些参数和初始化权重的操作。

  6. 模型的前向传播过程中,根据是否训练的标志位,选择使用分离解码器还是融合解码器生成预测结果。如果训练模式下,还会返回其他中间结果,如分离解码器的预测结果和权重、融合解码器的权重等。

 

Encoder

#9 basic_dims = 16是什么?

basic_dims是一个表示基本维度或基本通道数的变量,其值为16。它用于定义卷积神经网络中的通道数(通道数在卷积神经网络中是指特征图中的特征通道数量,用于表示不同的特征信息),控制特征图的深度和模型的复杂度。

#12 调用super(Encoder, self).__init__()的目的是什么?

通过调用super().__init__(),可以确保在创建Encoder实例时,父类的构造函数被调用,从而初始化必要的属性和状态。

这里是为了调用父类nn.Module的构造函数,通过继承nn.ModuleEncoder类获得了许多用于构建神经网络模型的方法和属性,例如参数管理、前向传播等。通过将Encoder类定义为nn.Module的子类,可以方便地使用PyTorch提供的功能,构建和管理神经网络模型。

#18 stride=2是什么?

stride=2是卷积操作中的一个参数,用于指定卷积核在输入数据上的滑动步长。

在卷积操作中,卷积核会在输入数据上进行滑动,每次滑动的步长由stride参数决定。常见的步长设置为1,表示卷积核每次滑动1个像素;而stride=2表示卷积核每次滑动2个像素,即跳过一个像素进行下一次卷积。

使用stride=2的卷积操作可以减小输出特征图的尺寸,因为卷积核每次滑动的步长增大了。这在一些情况下可以起到下采样的效果,即通过减小特征图尺寸来提取更加抽象的特征。

#14 - #28 这些卷积层的作用是构建编码器的不同层级,通过多次卷积和池化操作逐渐提取输入数据的抽象特征。每个卷积层之后都有一个使用反射填充的卷积操作,用于增加网络的非线性能力。

#30 - #41 在forward方法中,将输入数据依次传递给这些卷积层,得到相应的特征表示输出。具体的过程是,将输入数据x分别传递给e1_c1e1_c2e1_c3,然后将输出与e1_c2的输出相加。接着,将得到的结果作为输入传递给下一层的卷积层,依次进行类似的操作,直到得到最后一层的特征表示。

Decoder_sep

#49 上采样层参数详解

self.d3 的作用是对输入特征图进行上采样操作,将其空间尺寸放大两倍。上采样后的特征图将用于后续的卷积操作,以恢复空间细节和特征的分辨率。

  • scale_factor=2:指定了上采样的尺度因子。在这种情况下,输入特征图的空间尺寸将会放大两倍。例如,如果输入特征图的尺寸为 (H, W, D),那么经过上采样后的输出特征图的尺寸将变为 (2H, 2W, 2D)。

  • mode='trilinear':指定了上采样的插值模式。在这里,使用了trilinear插值,它适用于三维数据,对于每个通道在三个维度上进行线性插值,以生成新的像素值。这种插值方法能够保持相对较好的空间一致性。

  • align_corners=True:指定是否将原始图像的角点与新图像的角点对齐。当align_corners=True时,上采样操作会保持输入和输出图像的角点对齐,这有助于避免图像拉伸或扭曲。这在处理像素级任务时通常是希望的设置。

#52 卷积层参数详解

self.d3_out 是一个包含 1x1x1 卷积核的卷积层,用于将输入特征图的通道数从 basic_dims*4 调整为 basic_dims*4,输出的特征图保持与输入特征图相同的空间尺寸。该层的作用是进行通道数的调整和特征的变换。

  • in_channels=basic_dims*4:指定输入特征图的通道数,即卷积操作的输入通道数。

  • out_channels=basic_dims*4:指定输出特征图的通道数,即卷积操作的输出通道数。

  • k_size=1:指定卷积核的大小。在这种情况下,卷积核的大小为 1x1x1,表示沿着三个维度的空间大小都为 1。

  • padding=0:指定卷积操作的填充大小。在这里,填充大小为 0,表示不进行填充操作。

  • pad_type='reflect':指定填充的类型。使用反射填充(reflect padding)意味着在边界上使用镜像反射的方式进行填充。

#64 解释该卷积层的目的

self.seg_layer是一个1x1x1的卷积层,将最后一组卷积层的输出特征图映射到num_cls个通道,即最终的分割结果的通道数。

#65 这是一个softmax层,用于对分割结果进行归一化,使每个通道的值在0到1之间,并且所有通道的和为1。

#70 将 de_x4 和输入张量 x3 在通道维度上进行拼接,dim参数用于指定在哪个维度上进行张量的拼接操作。在这种情况下,dim=1表示在通道维度上进行拼接。

Decoder_fuse

 

Model

当给定输入数据x和掩码mask时,该代码段实现了前向传播函数forward。下面是逐行分析的解释:

  1. 提取不同层的特征:

    • 通过self.flair_encoderx的第一个通道进行编码,得到flair_x1, flair_x2, flair_x3, flair_x4四个特征。
    • 通过self.t1ce_encoderx的第二个通道进行编码,得到t1ce_x1, t1ce_x2, t1ce_x3, t1ce_x4四个特征。
    • 通过self.t1_encoderx的第三个通道进行编码,得到t1_x1, t1_x2, t1_x3, t1_x4四个特征。
    • 通过self.t2_encoderx的第四个通道进行编码,得到t2_x1, t2_x2, t2_x3, t2_x4四个特征。
  2. 将特征进行堆叠:

    • 使用torch.stack函数将不同通道的特征进行堆叠,得到x1, x2, x3, x4四个张量。每个张量的维度为Bx4xCxHWZ,其中B是批量大小,C是通道数,H, W, Z是空间维度。
  3. 调用self.decoder_fuse进行融合解码:

    • x1, x2, x3, x4作为输入,以及掩码mask,调用self.decoder_fuse进行融合解码,得到融合预测fuse_pred、部件级预测prm_preds和融合预测的logitsfuse_logits
  4. 如果处于训练模式:

    • 进一步使用self.decoder_sep对每个编码器的特征进行单独解码,得到各个部件的预测flair_pred, t1ce_pred, t1_pred, t2_pred和logitst1ce_logits, t1_logits, t2_logits
    • 返回融合预测、部件预测、部件级预测和各项中间结果。
  5. 如果不处于训练模式:

    • 仅返回融合预测结果。

#178 if self.is_training:是什么意思

self.is_training是一个布尔值,用于表示当前模型是否处于训练模式。这个条件判断语句 if self.is_training: 是用来检查当前模型是否处于训练模式。

在训练模式下,模型通常会执行额外的操作,如计算损失、更新参数等。因此,当 self.is_trainingTrue 时,表示模型处于训练模式,接下来的代码块将会执行。

而在非训练模式(如测试或推断)下,模型通常只需要生成预测结果,而不需要执行训练相关的操作。因此,如果 self.is_trainingFalse,则相应的训练模式下的代码块将被跳过。

通常,self.is_training 的值由用户在使用模型时进行设置,以指示模型所处的模式。

 

 

data

Datasets_nii.py

(287条消息) os.path.join()用法_os.path.join()函数用法_MclarenSenna的博客-CSDN博客

 

标签:卷积,self,RFNet,学习,特征,解码器,模型,通道
From: https://www.cnblogs.com/yonuyeung/p/17497867.html

相关文章

  • 【js学习笔记二】innerHTML和innerText的使用
     目录前言导语代码部分 运行结果总结前言   我是歌谣我有个兄弟巅峰的时候排名c站总榜19叫前端小歌谣曾经我花了三年的时间创作了他现在我要用五年的时间超越他今天又是接近兄弟的一天人生难免坎坷大不了从头再来歌谣的意志是永恒的放弃很容易但是坚持一定很酷导语......
  • 【js学习笔记三】数组去重的第二种方式indexof
     目录前言导语代码部分 运行结果总结前言   我是歌谣我有个兄弟巅峰的时候排名c站总榜19叫前端小歌谣曾经我花了三年的时间创作了他现在我要用五年的时间超越他今天又是接近兄弟的一天人生难免坎坷大不了从头再来歌谣的意志是永恒的放弃很容易但是坚持一定很酷导语......
  • 吴恩达-斯坦福CS229机器学习课程-2017(秋)最新课程分享
    吴恩达主讲的机器学习-2017年秋季课程已经开课啦,今天跟大家分享这套课程。课程介绍本课程主要介绍机器学习和统计模式识别相关的知识。内容主要包括:监督学习(生成/判别学习,参数/非参数学习,神经网络,支持向量机);无监督学习(聚类,维数规约,核方法);学习理论(偏差/方差权衡;VC理论;大边缘概率......
  • 无监督对比学习(CL)最新必读经典论文整理分享
    对比自监督学习技术是一种很有前途的方法,它通过学习对使两种事物相似或不同的东西进行编码来构建表示。Contrastivelearning有很多文章介绍,区别于生成式的自监督方法,如AutoEncoder通过重建输入信号获取中间表示,ContrastiveMethods通过在特征空间建立度量,学习判别不同类型的输......
  • 表示学习(RL)研究领域细分及论文、课程、学术会议等资源分享
    表示学习是学习一个特征的技术的集合:将原始数据转换成为能够被机器学习来有效开发的一种形式。它避免了手动提取特征的麻烦,允许计算机学习使用特征的同时,也学习如何提取特征:学习如何学习。机器学习任务,例如分类问题,通常都要求输入在数学上或者在计算上都非常便于处理,在这样的前......
  • 840个最优的机器学习python开源项目整理分享
    本资源包含了840个很棒的机器学习开源项目,总共270万颗星分为32个类别。所有项目均按项目质量得分排名,该得分是根据从GitHub和不同程序包管理器自动收集的各种指标计算得出的。目录资源列表......
  • 机器学习从入门到进阶所需学习资料-包括书、视频、源码
    本文整理了一些入门到进阶机器学习所需要的一些免费的精品视频课程,一些优质的书籍和经典的代码实战项目。视频1.1吴恩达老师机器学习课程:•Coursera•网易云课堂•英文笔记•中文笔记、字幕1.2吴恩达深度学习课程•Coursera•网易云课堂•笔记1.3斯坦福CS231n:Co......
  • 基于深度学习的文本分类6大算法-原理、结构、论文、源码打包分享
    导读:文本分类是NLP领域一项基础工作,在工业界拥有大量且丰富的应用场景。传统的文本分类需要依赖很多词法、句法相关的human-extractedfeature,自2012年深度学习技术快速发展之后,尤其是循环神经网络RNN、卷积神经网络CNN在NLP领域逐渐获得广泛应用,使得传统的文本分类任务变得更加容......
  • 深度学习计算机视觉相关代码可复现论文整理分享
    因此,作为【论文复现项目】的补充,本项目的宗旨也是让世界上没有难读的论文。目录内容截图......
  • 最新《动手学习深度学习》配套课程视频、笔记、ppt等资源整理分享
        《动手学习深度学习》是李沐老师(AWS资深首席科学家,美国卡内基梅隆大学计算机系博士)主讲的一系列深度学习视频。本项目收集了我们在寒假期间学习《动手学习深度学习》过程中详细的markdown笔记和相关的jupyter代码。赠人玫瑰,手留余香,我们将所有的markdown笔记开源,希望在自......