文章目录

  • 设计神经网络的一般步骤
  • Unet网络设计的步骤
  • Unet网络最重要的特征
  • 示例代码

设计神经网络的一般步骤

  1. 设计框架
  2. 设计骨干网络

Unet网络设计的步骤

  1. 设计Unet网络工厂模式
  2. 设计编解码结构
  3. 设计卷积模块
  4. unet实例模块

Unet网络最重要的特征

编解码结构。
2. 解码结构,比FCN更加完善,采用连接方式。
3. 本质是一个框架,编码部分可以使用很多图像分类网络。

示例代码

import torch
import torch.nn as nnclass Unet(nn.Module):#初始化参数:Encoder,Decoder,bridge#bridge默认值为无,如果有参数传入,则用该参数替换Nonedef __init__(self,Encoder,Decoder,bridge = None):super(Unet,self).__init__()self.encoder = Encoder(encoder_blocks)self.decoder = Decoder(decoder_blocks)self.bridge = bridgedef forward(self,x):res = self.encoder(x)out,skip = res[0],res[1,:]if bridge is not None:out = bridge(out)out = self.decoder(out,skip)return out
#设计编码模块
class Encoder(nn.Module):def __init__(self,blocks):super(Encoder,self).__init__()#assert:断言函数,避免出现参数错误assert len(blocks) > 0#nn.Modulelist():模型列表,所有的参数可以纳入网络,但是没有forward函数self.blocks = nn.Modulelist(blocks)def forward(self,x):skip = []for i in range(len(self.blocks) - 1):x = self.blocks[i](x)skip.append(x)res = [self.block[i+1](x)]#列表之间可以通过+号拼接res +=  skipreturn res
#设计Decoder模块
class Decoder(nn.Module):def __init__(self,blocks):super(Decoder, self).__init__()assert len(blocks) > 0self.blocks = nn.Modulelist(blocks)def ceter_crop(self,skips,x):_,_,height1,width1 = skips.shape()_,_,height2,width2 = x.shape()#对图像进行剪切处理,拼接的时候保持对应size参数一致ht,wt = min(height1,height2),min(width1,width2)dh1 = (height1 - height2)//2 if height1 > height2 else 0dw1 = (width1 - width2)//2 if width1 > width2 else 0dh2 = (height2 - height1)//2 if height2 > height1 else 0dw2 = (width2 - width1)//2 if width2 > width1 else 0return skips[:,:,dh1:(dh1 + ht),dw1:(dw1 + wt)],\x[:,:,dh2:(dh2 + ht),dw2 : (dw2 + wt)]def forward(self, skips,x,reverse_skips = True):assert len(skips) == len(blocks) - 1if reverse_skips is True:skips = skips[: : -1]x = self.blocks[0](x)for i in range(1, len(self.blocks)):skip = skips[i-1]x = torch.cat(skip,x,1)x = self.blocks[i](x)return x
#定义了一个卷积block
def unet_convs(in_channels,out_channels,padding = 0):#nn.Sequential:与Modulelist相比,包含了forward函数return nn.Sequential(nn.Conv2d(in_channels, out_channels, kernal_size = 3, padding = padding, bias = False),nn.BatchNorm2d(outchannels),nn.ReLU(inplace = True),nn.Conv2d(in_channels, out_channels, kernal_size=3, padding=padding, bias=False),nn.BatchNorm2d(outchannels),nn.ReLU(inplace=True),)
#实例化Unet模型
def unet(in_channels,out_channels):encoder_blocks = [unet_convs(in_channels, 64),\nn.Sequential(nn.Maxpool2d(kernal_size = 2, stride = 2, ceil_mode = True),\unet_convs(64,128)), \nn.Sequential(nn.Maxpool2d(kernal_size=2, stride=2, ceil_mode=True), \unet_convs(128, 256)),nn.Sequential(nn.Maxpool2d(kernal_size=2, stride=2, ceil_mode=True), \unet_convs(256, 512)),]bridge = nn.Sequential(unet_convs(512, 1024))decoder_blocks = [nn.conTranpose2d(1024, 512), \nn.Sequential(unet_convs(1024, 512),nn.conTranpose2d(512, 256)),\nn.Sequential(unet_convs(512, 256),nn.conTranpose2d(256, 128)), \nn.Sequential(unet_convs(512, 256),nn.conTranpose2d(256, 128)), \nn.Sequential(unet_convs(256, 128),nn.conTranpose2d(128, 64))]return Unet(encoder_blocks,decoder_blocks,bridge)

全卷积神经网路【U-net项目实战】论文中U-Net网络实现相关推荐

  1. 全卷积神经网路【U-net项目实战】U-Net源码上实现自己数据集的分割任务

    文章目录 环境: 数据集准备: 主要代码: 接下来是训练,此处将训练和测试分开在两个.py文件中,好调用! 接下来就是愉快的测试了:main_test.py 测试结果部分展示:(裂缝检测) 问题 : ...

  2. 全卷积神经网路【U-net项目实战】语义分割之U-Net详解

    文章目录 1.简介 2.U-net典型应用 3. U-net详解 4.参考文献 1.简介 语义分割(Semantic Segmentation)是图像处理和机器视觉一个重要分支.与分类任务不同,语义分 ...

  3. 全卷积神经网路【U-net项目实战】LUNA 2016 数据集详解

    文章目录 1.LUNA 2016 数据集详解 2.mdh数据格式详解 3.python读取mdh的方法 4.annotations.csv坐标转换 5.LUNA16数据集肺结节显示 1.LUNA 20 ...

  4. 全卷积神经网路【U-net项目实战】Unet++

    文章目录 前言 概述 细节部分 1.一张结构图 & 解释: 2.loss:binary cross-entropy和dice coefficient两部分的组合.以下的loss应用到每一个不同 ...

  5. 全卷积神经网路【U-net项目实战】U-Net网络练习题: Kaggle - 2018 Data Science Bowl

    因为Kaggle有该比赛,而且code写的很简单易懂,于是乎拿来玩一下. https://www.kaggle.com/keegil/keras-u-net-starter-lb-0-277?scri ...

  6. 全卷积神经网路【U-net项目实战】ISBI 挑战数据集图像分割-keras实现

    文章目录 1.数据准备 2.程序准备 3.运行网络 4.测试结果 5.参考 1.数据准备 原始数据:首先准备数据,参考数据来自于 ISBI 挑战的数据集.数据可以在(https://github.co ...

  7. 全卷积神经网路【U-net项目实战】肺结节分割案例分析:DSB3Tutorial

    文章目录 本文要分析的代码作者是jonrmulholland 数据集: 重要文件介绍: 第一步:运行LUNA_mask_extraction.py,生产images_#.npy,masks_#.npy ...

  8. 全卷积神经网路【U-net项目实战】U-net网络结构为什么在医学影像分割上表现不错

    文章目录 前言 个人的理解: 1.医学图像边界模糊.梯度复杂,需要较多的高分辨率信息,深度学习可以做到这一点,比如上采样下采样以及skip connection和concatenation 2.待分割 ...

  9. 目标检测——卷积神经网路基础知识

    目标检测--卷积神经网路基础知识 卷积神经网络 LeCun的LeNet(1998)网络结构 卷积神经网络发展历史 卷积神经网络可以做什么 全连接层 介绍 BP神经网络 通过BP神经网络做车牌数字识别 ...

最新文章

  1. 到底什么是hash?它起什么作用?
  2. 前端使用vue-i18n做中英文翻译
  3. VC6.0环境设置说明
  4. yolov4负样本_了解各种挂件--帮助读懂YOLOV4
  5. 京东SSO单点登陆实现分析
  6. 单位阶跃信号是周期信号吗_手机信号变成“HD”,是代表没有信号吗?你的手机正在被扣费...
  7. fork source exec区别差异
  8. python移位操作困惑
  9. SAP License:第三方运输业务的外币付款处理
  10. 最大的PHP开源网店系统ECShop简介
  11. 使用Tin快速安装 Apache APISIX(全网最快)
  12. 【python】sys模块操作使用
  13. Fits文件在天文方面的应用(数据处理部分)
  14. Jira 和 国内替代品TAPD的对比
  15. Qt之移动无边框窗体
  16. java数据结构与算法之顺序表与链表深入分析
  17. 面试官:请你讲讲Saas应用的架构规范?
  18. NAS折腾系列二:番外篇之瘦客户机+DoraOS实现远程办公
  19. 发生了一次 MySQL 误操作导致的事故,「高可用」都顶不住了
  20. vue3+vite UC浏览器兼容

热门文章

  1. torch转caffe
  2. peleenet测试
  3. python reshape transpose
  4. “std::invoke”: 未找到匹配的重载函数
  5. TensorFlow入门教程
  6. unknown type name 'uint32_t'
  7. 在OpenCV中图像边界扩展 copyMakeBorder 的实现
  8. 企业内网中的WSUS更新服务 服务器连接到Microsoft Update来获取更新程序
  9. php和mysql入门_PHP和MySQL入门(10)
  10. node2vec文献出处_详解Node2vec以及优缺点