目录

一、UNet模型

二、Encoder & Decoder

2.1 Encoder

2.2 Decoder

2.3 classifier


学习U-Net: Convolutional Networks for Biomedical Image Segmentation,记录一些自己认为重要的要点,以免日后遗忘。

代码:https://github.com/Ascetics/LaneSegmentation/blob/master/nets/unet.py

参考pytorch官方实现和文档做出自己的实现https://github.com/Ascetics/LaneSegmentation/blob/master/nets/unet.py

一、UNet模型

医学图像分类处理往往细化到像素级别。不仅仅是医学领域,语义分割都是像素级别的分类。于是U-Net诞生了,论文题目《U-Net:用于生物医学图像分割的卷积网络》,但是U-Net不仅仅是用于医学图像处理。

FCN的思想是特征提取阶段进行卷积、池化,图像分辨率减小,特征提取后面接上几层上采样(转置卷积)来提高分辨率。为提高分割精确度,将特征提取阶段的输出和上采样阶段输出做特征融合,这样网络就能学习到更精确的输出。

U-Net在FCN的基础上改造,需要的训练集更小,分割精确度更高。改造的部分是:上采样中仍保持特征的channel很大,特征融合直接使用特征提取阶段的输出,特征提取的输出直接concatenate到上采样输出的后面,保证更多的信息传递到分类阶段。于是形成了如论文图片中这样的U型结构。

U-Net左边是encoder阶段,由5个相似结构encode block构成。第一个encode block,2个不加padding的3×3卷积,每个卷积后面跟BN和ReLU激活函数;第二个到第五个encode block,先maxpool下采样,分辨率减小一倍通道增大一倍,再接2个不加padding的3×3卷积,每个卷积后面跟BN和ReLU激活函数。这5个encode block,除了最后一个之外,输出都要保留,再decoder里作为shortcut使用。

U-Net右边是decoder阶段,由相似结构decode block构成。每个结构里面先是转置卷积上采样2倍(kernel_size=2, stride=2),然后在后面拼接经过剪裁的对应encode block的输出(shortcut),然后是2个不加padding的3×3卷积,每个卷积后面跟BN和ReLU激活函数。每个decode block结构将通道减少一倍。

最后一个1×1卷积,将channel调整到n_class分类。

注意:图中对encoder阶段的剪裁是必要的,由于不加padding的卷积操作、池化等造成了边界像素的损失,必须经过剪裁才能让两个张量spatial大小一致,才能拼接。

二、Encoder & Decoder

Encoder & Decoder 实际上就是下采样、上采样的一种方式。U-Net提出的Encoder & Decoder并不是一定之规,encoder和decoder都可以根据需要用其他模型作为backbone进行替换,比如可以用ResNet作为backbone。记录一下Encoder & Decoder的细节,以及扩展应用方式。

2.1 Encoder

U-Net论文里面encoder的卷积操作不加padding,实际工程中可以改成加padding变成same卷积。

U-Net使用预训练的模型。U-Net更像一个框架,而不是一个模型。论文里面下采样每个结构都是两个卷积,也可以把这个结构替换成ResNet、ResNeXt、MobileNet等已经训练好的模型。Encoder中encode block的数量也不一定是5个,可以根据自己的需要加深。

以ResNet为例。

  • 第1个encode block和input一致,所以直接用输入作为输出,pytorch中用空的nn.Sequencial作为encode block。输出shortcut0。
  • 第2个encode block下采样2倍,所以用ResNet的Conv1、BN、ReLU作为encode block。输出shortcut1。
  • 第3个encode block下采样2倍,所以用ResNet的maxpool、layer1(论文Conv2_x不做下采样)作为encode block。输出shortcut2。
  • 第4个encode block下采样2倍,所以用ResNet的layer2(论文Conv3_x)作为encode block。输出shortcut3。
  • 第5个encode block下采样2倍,所以用ResNet的layer3(论文Conv4_x)作为encode block。输出shortcut4。
  • 第6个encode block下采样2倍,所以用ResNet的layer4(论文Conv5_x)作为encode block。输出不作为shortcut。

2.2 Decoder

U-Net的decoder是和encoder对称的逐层上采样,每个上采样后面跟了相似的结构,都是2个3×3卷积作为decode block,这就增加了decode的深度。

U-Net的上采样可以使用Transposed Convolution转置卷积,也可以使用Bilinear Interpolation双线性差值。对于不同的数据集可能要采取不同的上采样策略。

U-Net的特征融合,使用的是拼接concatenate,这与FCN的直接相加是不同的。

以ResNet为例。

  • 第1个decode block。用第6个encode block输出上采样2倍,和shortcut4做cat,然后2个3x3卷积。最终输出的channels应该是第6个encode block输出channels的一半。
  • 第2个decode block。用第1个decode block输出上采样2倍,和shortcut3做cat,然后2个3x3卷积。最终输出的channels应该是第1个decode block输出channels的一半。
  • 第3个decode block。用第2个decode block输出上采样2倍,和shortcut2做cat,然后2个3x3卷积。最终输出的channels应该是第2个decode block输出channels的一半。
  • 第4个decode block。用第3个decode block输出上采样2倍,和shortcut1做cat,然后2个3x3卷积。最终输出的channels应该是第3个decode block输出channels的一半。
  • 第5个decode block。用第4个decode block输出上采样2倍,和shortcut0做cat,然后2个3x3卷积。最终输出的channels应该是第4个decode block输出channels的一半。

2.3 classifier

最后一个decode block还需要经过1个1x1卷积,将输出channels调整到n_class个分类。

CV04-UNet笔记相关推荐

  1. 机器学习笔记: Upsampling, U-Net, Pyramid Scene Parsing Net

    前言 在CNN-based 的 模型中,我们可能会用到downsampling 操作来减少模型参数,以及扩大感受野的效果. 下图是一个graph segmentation的例子,就先使用 downsa ...

  2. unet论文_图像分割之RefineNet 论文笔记

    RefineNet: Multi-Path Refinement Networks forHigh-Resolution Semantic Segmentation (2017) 论文笔记 文章的创新 ...

  3. 最详细的U-net论文笔记

    个人博客:http://www.chenjianqu.com/ 原文链接:http://www.chenjianqu.com/show-84.html 论文:Olaf Ronneberger, Phi ...

  4. 使用Pytorch搭建U-Net网络并基于DRIVE数据集训练(语义分割)学习笔记

    使用Pytorch搭建U-Net网络并基于DRIVE数据集训练(语义分割)学习笔记 https://www.bilibili.com/video/BV1rq4y1w7xM?spm_id_from=33 ...

  5. 【阅读笔记】《CFUN: Combining Faster R-CNN and U-net Network for Efficient Whole Heart Segmentation》

    本文记录了博主阅读论文<CFUN: Combining Faster R-CNN and U-net Network for Efficient Whole Heart Segmentation ...

  6. 3D U-Net论文笔记

    3D U-Net论文笔记 原文地址:Learning Dense Volumetric Segmentation from Sparse Annotation Abstract 本文介绍了一种从稀疏标 ...

  7. 【论文笔记】UNet++:一种用于医学图像分割的嵌套U-Net结构

    本文是<UNet++: A Nested U-Net Architecture for Medical Image Segmentation>论文的阅读笔记.强烈建议大家去看下作者对这篇论 ...

  8. 医学图像分割——U-Net解读与个人笔记

    最近开始尝试医疗影像分割的任务,先从之前的Unet开始阅读,记录一部分笔记以供回顾. 论文地址:http://www.arxiv.org/pdf/1505.04597.pdf 摘要 作者提出了一个相对 ...

  9. 【论文笔记】基于U-Net的医学图像分割模型nnU-Net(no-new U-Net)

    本文是 nnU-Net 论文的笔记,稍微做了整合了一下,可能有些地方有所遗漏,等以后看完代码之后再补充. 1. 摘要 nnU-Net(no-new-Net)是基于 U-Net 的一种模型,它在达到很好 ...

  10. unet 层_【paper阅读笔记】UNet

    基本信息 全名:<U-Net: Convolutional Networks for Biomedical Image Segmentation> 文章地址:http://www.arxi ...

最新文章

  1. 李德毅院士:未来交通——自动驾驶与智能网联
  2. 皮一皮:直男相亲还想着龙珠...
  3. windows 11预览版来了!
  4. 基于数字移相信号发生器的频率相位差测量系统的FPGA实现
  5. 全国计算机一级计算机基础及WPS考试题型,计算机一级考试科目有哪些?Wps和ms考试的题目一样吗?...
  6. python常见内置函数_python常见的内置函数
  7. python网页登录验证码不显示_进网页需要验证码?不好意思,Python从来不惧各种验证码!...
  8. 17年数据分析经验告诉你大数据行业的门道
  9. Linux 设置环境变量导致bash:command not found
  10. leetcode 646 python
  11. 搭建java框架写CRD_硬核:如何开发一个Operator
  12. hdu 5175 Misaki's Kiss again
  13. 全网首发:gstreamer中正确使用avdec_h264插件
  14. 对于“增霸卡“的介绍跟使用
  15. 黑马程序员_面向对象简介
  16. RSS源推荐大全(it版)
  17. 深度学习笔记(19) 多任务学习
  18. 固定偏置放大电路为何不能保证静态工作点的稳定性?
  19. (幼儿园毕业)Javascript小学级随机生成四则运算
  20. 【愚公系列】2022年02月 微信小程序-数据绑定

热门文章

  1. c语言作业扩展名通常为什么,C语言的源程序通常的扩展名是( )
  2. Ubuntu16.04 搭建nexus 私服 学习步骤以及安装maven和git
  3. MultipartFile 使用 记录
  4. oracle导入索引b报错,impdp导入索引很慢
  5. 正则匹配出字符串中两串固定字符区间的所有字符
  6. CentOS 安装FTP
  7. X5同层播放器应用实践
  8. 排序学习之---快速排序
  9. 最常用的Linux命令
  10. iOS-ARC_Xcode检测循环引用