Unet3D分割模型——pytorch

2023-11-05

from torch import nn


class pub(nn.Module):

    def __init__(self, in_channels, out_channels, batch_norm=True):
        super(pub, self).__init__()
        inter_channels = in_channels/2 if in_channels > out_channels else out_channels/2
        layers = [
                    nn.Conv3d(in_channels, inter_channels, 3, stride=1, padding=0),
                    nn.ReLU(True),
                    nn.Conv3d(inter_channels, out_channels, 3, stride=1, padding=0),
                    nn.ReLU(True)
                 ]
        if batch_norm:
            layers.insert(1, nn.BatchNorm3d(inter_channels))
            layers.insert(len(layers)-1, nn.BatchNorm3d(out_channels))
        self.pub = nn.Sequential(*layers)

    def forward(self, x):
        return self.pub(x)


class unet3dDown(nn.Module):

    def __init__(self, in_channels, out_channels, batch_norm=True):
        super(unet3dDown, self).__init__()
        self.pub = pub(in_channels, out_channels, batch_norm)
        self.pool = nn.MaxPool3d(2, stride=2)

    def forward(self, x):
        x = self.pool(x)
        x = self.pub(x)
        return x


class unet3dUp(nn.Module):
    def __init__(self, in_channels, out_channels, batch_norm=True, sample=True):
        super(unet3dUp, self).__init__()
        self.pub = pub(in_channels/2+in_channels, out_channels, batch_norm)
        if sample:
            self.sample = nn.Upsample(scale_factor=2, mode='nearest')
        else:
            self.sample = nn.ConvTranspose3d(in_channels, in_channels, 2, stride=2)

    def forward(self, x, x1):
        x = self.sample(x)
        c1 = (x1.size(2) - x.size(2)) // 2
        c2 = (x1.size(3) - x.size(3)) // 2
        x1 = x1[:, :, c1:-c1, c2:-c2, c2:-c2]
        x = torch.cat((x, x1), dim=1)
        x = self.pub(x)
        return x


class unet3d(nn.Module):
    def __init__(self, init_channels=1, class_nums=1, batch_norm=True, sample=True):
        super(unet3d, self).__init__()
        self.down1 = pub(init_channels, 64, batch_norm)
        self.down2 = unet3dDown(64, 128, batch_norm)
        self.down3 = unet3dDown(128, 256, batch_norm)
        self.down4 = unet3dDown(256, 512, batch_norm)
        self.up3 = unet3dUp(512, 256, batch_norm, sample)
        self.up2 = unet3dUp(256, 128, batch_norm, sample)
        self.up1 = unet3dUp(128, 64, batch_norm, sample)
        self.con_last = nn.Conv3d(64, class_nums, 1)
        self.sigmoid = nn.Sigmoid()

    def forward(self, x):
        x1 = self.down1(x)
        x2 = self.down2(x1)
        x3 = self.down3(x2)
        x4 = self.down4(x3)
        x = self.up3(x4, x3)
        x = self.up2(x, x2)
        x = self.up1(x, x1)
        x = self.con_last(x)
        return self.sigmoid(x)

    def _initialize_weights(self):
        for m in self.modules():
            if isinstance(m, nn.Conv3d):
                nn.init.kaiming_uniform(m.weight.data)
                if m.bias is not None:
                    m.bias.data.zero_()
            elif isinstance(m, nn.BatchNorm3d):
                m.weight.data.fill_(1)
                m.bias.data.zero_()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Unet3D分割模型——pytorch 的相关文章

  • 阿里云ecs服务器如何设置实现访问互联网

    概述 阿里云上新开了一台ecs服务器 想访问外网下载或安装一些源依赖或者应用 我们如何设置安全组实现访问外网 首先我们先要了解rfc1918 什么是rfc1918 本段转载自 What is RFC 1918 Definition from

随机推荐

  • python_字典列表嵌套的排序问题

    上一篇我们聊到python 字典和列表嵌套用法 这次我们聊聊字典和列表嵌套中的排序问题 这个在python基础中不会提到 但实际经常运用 面试中也喜欢问 我们娓娓道来 在说组合排序之前 先来看看排序有哪些函数 排序函数 使用排序有两个可用方
  • recyclerlistview

    RecyclerView的基本用法 和百分比布局类似 RecyclerView也是新增布局 因此需要在项目的build gradle添加相应的依赖库才行 打开app build gradle文件 在dependencies闭包中添加如下内容
  • 单源最短路径问题c++实现(贪心算法)

    文章目录 1 认真审阅题目 明确题目的已知条件和求解的目标 2 问题建模 3 算法设计 4 编码实现 5 测试数据 6 程序运行结果 1 认真审阅题目 明确题目的已知条件和求解的目标 给定一个有向带权图 G V E 其中每条边的权是一个非负
  • 实战wxPython:041 - 高级控件之树状控件TreeCtrl

    树形控件wx TreeCtrl将信息表示为层次结构 其中的项可以展开以显示更多的项 一 树状控件wx TreeCtrl wx TreeCtrl继承自wx WithImages类 因此提供了将图像与控件项关联的函数 通过wx WithImag
  • 链式队列的基本操作(c语言实现)

    队列类型定义 队列的操作与栈的操作类似 不同的是 删除是在队头进行 队列分类 顺序队列 与栈相似 数组 无非就是多了一个指针 简单的讲讲顺序队列 元素入队 队尾指针往后加一 元素出队 队头指针往后加一 现在我们设想一下 前面有一个数组 我们
  • 制作AR换装游戏(上篇AR识图)#1024程序员节#

    EasyAR制作AR游戏的方法我之前的文章讲过 只是当时用的旧版的 链接放上 Unity和Easy AR制作一个AR的APP alayeshi的专栏 CSDN博客这个不是什么正规的项目 就是觉得AR好玩 研究了一下 很早之前就玩过了 现在再
  • python的open函数使用

    在python中使用open函数对文件进行处理 1 open python打开文件使用open 函数 返回一个指向文件的指针 该函数常用以下三个参数 1 1 参数1 目标文件的路径 名字 最好使用r 路径 这种原始字符串写法 防止有转义字符
  • ajax返回request,ajaxRequest解析

    刚开始学习ajax 听网上的一下大佬说 ajax要与springMVC使用 让我对这个ajax有恐惧 不过慢慢学习了ajx后其实可以不用springMVC的 说回主题 ajaxREquest是一个模板 我们只要在调用时传了正确的参数即可调用
  • C++:CMake重要指令【cmake_minimum_required、project,set、STREQUAL ....】

    一 CMake重要指令 1 重要指令 1 1 cmake minimum required 指定CMake的最小版本要求 语法 cmake minimum required VERSION versionNumber FATAL ERROR
  • 高级加密标准AES的工作模式(ECB、CBC、CFB、OFB)

    最近在重构之前写的HTTP代理 这个代理是由代理客户端和代理服务端组成的 二者之前使用SSL保证通信内容不会受到中间人 MITM 攻击 而新的实现打算移除SSL 因为SSL握手的开销过大 尤其是客户端与服务端之间隔了个太平洋 另一方面本月中
  • 区间列表的交集

    LeetCode 986 区间列表的交集 给定两个由一些 闭区间 组成的列表 每个区间列表都是成对不相交的 并且已经排序 返回这两个区间列表的交集 形式上 闭区间 a b 其中 a lt b 表示实数 x 的集合 而 a lt x lt b
  • nginx实战

    1 nginx简介 1 1 什么是nginx Nginx 是高性能的 HTTP 和反向代理的web服务器 处理高并发能力是十分强大的 能经受高负 载的考验 有报告表明能支持高达 50 000 个并发连接数 其特点是占有内存少 并发能力强 事
  • 【面试】前端常见面试题总结

    1 什么是mvvm mvc 模型 MVVM是Model View ViewModel的简写 即模型 视图 视图模型 模型 指的是后端传递的数据 视图 指的是所看到的页面 视图模型 mvvm模式的核心 它是连接view和model的桥梁 总结
  • 矩阵置零(原地变换)

    将矩阵中0元素的行和列都变成0 如果正常做非常好做 只要遍历一遍记录0的位置 然后第二遍遍历将该行和列变成0即可 但这样需要用到空间复杂度为O mn 时间O m n 第二种在找0 的过程中就把矩阵中的行和列都变成一个设置的值 不是0 第二遍
  • 阿里云稳坐视频云实力第一,市场份额超二、三名之总和

    根据中国领先的大数据公司易观发布的 2019年中国视频云行业专题分析 报告 阿里云在资源技术 商业创新与市场份额三个分析维度全面领先 成为中国最具实力的视频云厂商 报告显示 2018年中国视频云市场规模已达91 3亿元 随着直播和短视频应用
  • Android Wi-Fi开关控制

    Android Wi Fi开关控制 在Android应用程序中 控制设备的Wi Fi开关是常见的任务 本文将详细介绍如何在Android应用程序中实现Wi Fi的开关控制 并提供相应的源代码示例 添加权限 首先 在应用程序的AndroidM
  • Python解决最长子串问题

    设有两个字符串abaabba和bbbabaa 问它们的最长子串是什么 这个问题的一个应用就是比较两个病毒的基因 从而给出两者的相似度 这里我们用递归方法解决这个难题 输入参数显然是两个字符串s1和s2 递归边界是s1和s2中至少有一个是空字
  • Unity API详解及实战系列之Object类

    作为万类之祖 Object类位于UnityEngine命名空间 它是Unity中所有类的基类 因此Object类中的属性及方法被Unity中所有的类继承 目录 实例属性 实例方法 静态方法 实例属性 一 接口 public string n
  • 配置Python(Anaconda)+Opencv的环境.Pycharm使用Opencv

    为了做图像识别 需要配置opencv python的环境 过程遇到很多坑 真是伤不起 下面记录一下 推荐直接第三步 使用pycharm中的opencv 1 版本控制的痛苦 另外 要注意 Opencv支持的版本 在OpenCV安装目录下 可以
  • Unet3D分割模型——pytorch

    from torch import nn class pub nn Module def init self in channels out channels batch norm True super pub self init inte