U-Net: Convolutional Networks for Biomedical Image Segmentation(CVPR2015)

本文主要是介绍U-Net: Convolutional Networks for Biomedical Image Segmentation(CVPR2015),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


文章目录

  • Abstract
  • Introduction
  • Network Architecture
  • Conclusion
  • torch code

hh
源代码

Abstract

人们普遍认为,深度网络的成功训练需要成千上万个带注释的训练样本。在这篇论文中,我们提出了一个网络和训练策略,该策略依赖于数据增强的强大使用,以更有效地利用可用的注释样本该体系结构包括捕获上下文的收缩路径和支持精确定位的对称扩展路径。我们表明,这样的网络可以从很少的图像中进行端到端训练,并且在ISBI挑战中优于先前的最佳方法(滑动窗口卷积网络),以分割电子显微镜堆栈中的神经元结构。

使用在透射光显微镜图像(相位对比和DIC)上训练的相同网络,我们在这些类别中以很大的优势赢得了2015年ISBI细胞跟踪挑战赛。此外,网络速度很快。在最新的GPU上,512x512图像的分割需要不到一秒的时间。

Introduction

在本文中,我们构建了一个更优雅的架构,即所谓的“全卷积网络”[9]。我们修改和扩展了这种架构,使其适用于很少的训练图像,并产生更精确的分割;参见图1。[9]中的主要思想是通过连续的层来补充通常的收缩网络,其中池化算子被上采样算子取代。因此,这些层增加了输出的分辨率。为了定位,从收缩路径的高分辨率特征与上采样输出相结合。然后,连续的卷积层可以根据这些信息学习组装更精确的输出。

我们架构中的一个重要修改是,在上采样部分,我们也有大量的特征通道,这允许网络将上下文信息传播到更高分辨率的层因此,扩张路径或多或少与收缩路径对称,并产生u形架构。网络没有任何完全连接的层,只使用每个卷积的有效部分,即分割映射只包含像素,在输入图像中可以获得完整的上下文。该策略允许通过重叠贴图策略对任意大的图像进行无缝分割(见图2)。为了预测图像边界区域的像素,通过镜像输入图像来推断缺失的上下文。这种平铺策略对于将网络应用于大型图像非常重要,因为否则分辨率将受到GPU内存的限制。
为了实现输出分割映射的无缝平铺(参见图2),选择输入平铺大小是很重要的,这样所有2x2最大池化操作都应用于具有均匀x和y大小的层

任意大图像无缝分割的重叠贴图策略(这里是EM堆栈中的神经元结构分割)。对黄色区域的分割进行预测,需要蓝色区域内的图像数据作为输入。通过镜像推断缺失的输入数据

对于我们的任务,可用的训练数据很少,我们通过对可用的训练图像应用弹性变形来使用过度的数据增强。这允许网络学习这种变形的不变性,而不需要在注释的图像语料库中看到这些转换。这在生物医学分割中尤其重要,因为变形曾经是组织中最常见的变化,并且可以有效地模拟真实的变形。Dosovitskiy等人[2]在无监督特征学习的范围内证明了数据增强对学习不变性的价值。

在许多细胞分割任务中的另一个挑战是同一类触摸物体的分离;参见图3。为此,我们建议使用加权损失,其中触摸单元之间的分离背景标签在损失函数中获得较大的权重。

(a)原始图像。(b)叠加与地面真值分割。不同的颜色表示海拉细胞的不同实例。©生成分割蒙版(白色:前景,黑色:背景)。(d)使用逐像素的损失权值来强迫网络学习边界像素。

Network Architecture

网络体系结构如图1所示。它包括一条收缩路径(左侧)和一条扩张路径(右侧)。
收缩路径遵循卷积网络的典型架构。它由两个3x3卷积(未填充卷积)的重复应用组成,每个卷积后面都有一个整流线性单元(ReLU)和一个2x2 max池化操作,步幅为2,用于下采样在每个降采样步骤中,我们将特征通道的数量加倍

扩展路径中的每一步都包括特征映射的上采样2x2卷积(“反卷积”),将特征通道的数量减半,与收缩路径中相应裁剪的特征映射进行连接,以及两个3x3卷积,每个卷积都有一个ReLU由于在每次卷积中边界像素的损失,裁剪是必要的。在最后一层,使用1x1卷积将每个64个分量的特征向量映射到所需的类数,这个网络总共有23个卷积层。

每个蓝框对应一个多通道特征图。通道的数量表示在盒子的顶部。x-y尺寸在框的左下边缘提供。白框表示复制的特征图。箭头表示不同的操作。

Conclusion

UNet的收缩路径(左侧)进行特征提取,并且随着网络层次的加深,感受野也会逐渐扩大,分辨率低、语义强获取的是图像整体性的特征,而浅层网络呢(分辨率高、语义弱)获取的是细粒度特征。
右侧进行反卷积上采样,但因为卷积进行的下采样会导致部分边缘信息的丢失,失去的特征并不能从上采样中找回,因此作者采用了特征拼接操作来弥补,后续FPN貌似是延用了这一思想,通过横向连接将低分辨率语义强的特征和高分辨率语义弱的特征结合起来

torch code

import torch
import torch.nn as nn
import torch.nn.functional as Fclass double_conv2d_bn(nn.Module):def __init__(self,in_channels,out_channels,kernel_size=3,strides=1,padding=1):super(double_conv2d_bn,self).__init__()self.conv1 = nn.Conv2d(in_channels,out_channels,kernel_size=kernel_size,stride = strides,padding=padding,bias=True)self.conv2 = nn.Conv2d(out_channels,out_channels,kernel_size = kernel_size,stride = strides,padding=padding,bias=True)self.bn1 = nn.BatchNorm2d(out_channels)self.bn2 = nn.BatchNorm2d(out_channels)def forward(self,x):out = F.relu(self.bn1(self.conv1(x)))out = F.relu(self.bn2(self.conv2(out)))return outclass deconv2d_bn(nn.Module):def __init__(self,in_channels,out_channels,kernel_size=2,strides=2):super(deconv2d_bn,self).__init__()self.conv1 = nn.ConvTranspose2d(in_channels,out_channels,kernel_size = kernel_size,stride = strides,bias=True)self.bn1 = nn.BatchNorm2d(out_channels)def forward(self,x):out = F.relu(self.bn1(self.conv1(x)))return outclass Unet(nn.Module):def __init__(self):super(Unet,self).__init__()self.layer1_conv = double_conv2d_bn(1,8)self.layer2_conv = double_conv2d_bn(8,16)self.layer3_conv = double_conv2d_bn(16,32)self.layer4_conv = double_conv2d_bn(32,64)self.layer5_conv = double_conv2d_bn(64,128)self.layer6_conv = double_conv2d_bn(128,64)self.layer7_conv = double_conv2d_bn(64,32)self.layer8_conv = double_conv2d_bn(32,16)self.layer9_conv = double_conv2d_bn(16,8)self.layer10_conv = nn.Conv2d(8,1,kernel_size=3,stride=1,padding=1,bias=True)self.deconv1 = deconv2d_bn(128,64)self.deconv2 = deconv2d_bn(64,32)self.deconv3 = deconv2d_bn(32,16)self.deconv4 = deconv2d_bn(16,8)self.sigmoid = nn.Sigmoid()def forward(self,x):conv1 = self.layer1_conv(x)pool1 = F.max_pool2d(conv1,2)conv2 = self.layer2_conv(pool1)pool2 = F.max_pool2d(conv2,2)conv3 = self.layer3_conv(pool2)pool3 = F.max_pool2d(conv3,2)conv4 = self.layer4_conv(pool3)pool4 = F.max_pool2d(conv4,2)conv5 = self.layer5_conv(pool4)convt1 = self.deconv1(conv5)concat1 = torch.cat([convt1,conv4],dim=1)conv6 = self.layer6_conv(concat1)convt2 = self.deconv2(conv6)concat2 = torch.cat([convt2,conv3],dim=1)conv7 = self.layer7_conv(concat2)convt3 = self.deconv3(conv7)concat3 = torch.cat([convt3,conv2],dim=1)conv8 = self.layer8_conv(concat3)convt4 = self.deconv4(conv8)concat4 = torch.cat([convt4,conv1],dim=1)conv9 = self.layer9_conv(concat4)outp = self.layer10_conv(conv9)outp = self.sigmoid(outp)return outpmodel = Unet()
inp = torch.rand(10,1,224,224)
outp = model(inp)
print(outp.shape)
==> torch.Size([10, 1, 224, 224])

这篇关于U-Net: Convolutional Networks for Biomedical Image Segmentation(CVPR2015)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/528061

相关文章

.NET利用C#字节流动态操作Excel文件

《.NET利用C#字节流动态操作Excel文件》在.NET开发中,通过字节流动态操作Excel文件提供了一种高效且灵活的方式处理数据,本文将演示如何在.NET平台使用C#通过字节流创建,读取,编辑及保... 目录用C#创建并保存Excel工作簿为字节流用C#通过字节流直接读取Excel文件数据用C#通过字节

poj 1258 Agri-Net(最小生成树模板代码)

感觉用这题来当模板更适合。 题意就是给你邻接矩阵求最小生成树啦。~ prim代码:效率很高。172k...0ms。 #include<stdio.h>#include<algorithm>using namespace std;const int MaxN = 101;const int INF = 0x3f3f3f3f;int g[MaxN][MaxN];int n

如何在Visual Studio中调试.NET源码

今天偶然在看别人代码时,发现在他的代码里使用了Any判断List<T>是否为空。 我一般的做法是先判断是否为null,再判断Count。 看了一下Count的源码如下: 1 [__DynamicallyInvokable]2 public int Count3 {4 [__DynamicallyInvokable]5 get

2、PF-Net点云补全

2、PF-Net 点云补全 PF-Net论文链接:PF-Net PF-Net (Point Fractal Network for 3D Point Cloud Completion)是一种专门为三维点云补全设计的深度学习模型。点云补全实际上和图片补全是一个逻辑,都是采用GAN模型的思想来进行补全,在图片补全中,将部分像素点删除并且标记,然后卷积特征提取预测、判别器判别,来训练模型,生成的像

lvgl8.3.6 控件垂直布局 label控件在image控件的下方显示

在使用 LVGL 8.3.6 创建一个垂直布局,其中 label 控件位于 image 控件下方,你可以使用 lv_obj_set_flex_flow 来设置布局为垂直,并确保 label 控件在 image 控件后添加。这里是如何步骤性地实现它的一个基本示例: 创建父容器:首先创建一个容器对象,该对象将作为布局的基础。设置容器为垂直布局:使用 lv_obj_set_flex_flow 设置容器

.NET 自定义过滤器 - ActionFilterAttribute

这个代码片段定义了一个自定义的 ASP.NET Core 过滤器(GuardModelStateAttribute),用于在控制器动作执行之前验证模型状态(ModelState)。如果模型状态无效,则构造一个 ProblemDetails 对象来描述错误,并返回一个 BadRequest 响应。 代码片段: /// <summary>/// 验证 ModelState 是否有效/// </

2024年 Biomedical Signal Processing and Control 期刊投稿经验最新分享

期刊介绍 《Biomedical Signal Processing and Control 》期刊旨在为临床医学和生物科学中信号和图像的测量和分析研究提供一个跨学科的国际论坛。重点放在处理在临床诊断,患者监测和管理中使用的方法和设备的实际,应用为主导的研究的贡献。 生物医学信号处理和控制反映了这些方法在工程和临床科学的界面上被使用和发展的主要领域。期刊的范围包括相关的评论论文(review p

.Net Mvc-导出PDF-思路方案

效果图: 导语:     在我们做项目的过程中,经常会遇到一些服务性的需求,感到特别困扰,明明实用的价值不高,但是还是得实现;     因此小客在这里整理一下自己导出PDF的一些思路,供大家参考。     网上有很多导出PDF运用到的插件,大家也可以看看其他插件的使用,学习学习; 提要:     这里我使用的是-iTextSharp,供大家参考参考,借鉴方案,完善思路,补充自己,一起学习

.net MVC 导出Word--思路详解

序言:          一般在项目的开发过程中,总会接收到一个个需求,其中将数据转换成Work来下载,是一个很常见的需求;          那么,我们改如何处理这种需求,并输出实现呢?          在做的过程中,去思考 1、第一步:首先确认,Work的存在位置,并创建字符输出路:             //在的项目中创建一个存储work的文件夹             string

asp.net 中GridView的使用方法

可以看看,学习学习 https://blog.csdn.net/zou15093087438/article/details/79637042