IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 图像分割UNet (1) : 网络结构讲解 -> 正文阅读

[人工智能]图像分割UNet (1) : 网络结构讲解

UNet 简介

UNet 论文:Convolutional Networks for Biomedical Image Segmentation

在这里插入图片描述
这篇论文主要是针对生物医学影像这个领域提出的,所以一提到UNet一般都会联想到医学影像。

UNet 网络结构

在这里插入图片描述
UNet它是一个encoder - decoder的结构,那么encoder对应就是这个u型网络左边这半部分,也就是我们特征提取及下采样这部分。decoder解码就是右边部分通过一系列上采样,我们得到最终的一个分割图。 对于网络结构左边这一侧,作者叫做contracting path,对于右边这一侧作者称为expansive path

在上图的网络结构中,每一个长条的矩形对应的都是一个特征层,其中箭头表示是一种操作。图中右下角列出了每一种箭头它所对应的操作类型。下面详细的介绍网络的搭建过程:

U型网络的左半部分

  • 这里输入是以572x572的单通道的图像为例的,首先通过一个卷积层,它的卷积核大小为3x3的,并且后面跟一个Relu激活函数。注意对于这个卷积层它的步距是等于1的,其次是没有padding操作的,所以你会发现通过这个卷积层,它的高和宽都会减少。比如这里通过第一个3x3的卷积,它的高和宽从572变为570,再通过一个3x3卷积层又变为568.由于这篇论文是2015年发表的,当时BN(batch normalization)还没火起来,所以按时还没有使用BN这个模块。
  • 接下来,通过一个max pooling下采样,池化核大小为2x2,步距为2,那么经过下采样特征层的高和宽就会减半。由568变成这里的284,channel是没有发生变化的还是64.再通过两个3x3的卷积核,这里注意每个下采样后,通过卷积层都会对channel进行翻倍。比如这里下采样后的channel为64,通过3x3卷积后channel变为128
  • 接下来,通过下采样max-pooling,将特征层的高和宽由280变为140,然后再通过两个3x3的卷积层,将通道由128调整为256.
  • 接下来,再通过下采样max-pooling,将特征层的高和宽由136变为68,然后再通过两个3x3的卷积层,将channel由256调整为512.
  • 然后,再通过下采样max-pooling,将特征层的高和宽由64变为32,然后再通过两个3x3的卷积层,将channel由512调整为1024.

U型网络的右半部分

  • 接下来这一部分需要注意了,首先对于绿色箭头部分,这里有写是一个上采样(up conv),这里上采样采用的是转置卷积,通过转置卷积后它将特征层的宽和高变为原来的两倍,比如这里由28变成56,然后channel会减半,由这里的1024变为512.对应图中的蓝色部分。
    在这里插入图片描述
    注意这里旁边有个灰色的箭头(copy and crop),比如灰色箭头左侧对应64x64大小的特征层,但箭头右侧蓝色部分的特征图为56x56,没法直接将他们进行拼接。那么就需要对左侧64x64大小的特征层进行一个中心裁剪,就是将中间56x56部分裁剪过来和右侧蓝色部分进行channel 方向的concat拼接,拼接后channel就变为1024了。然后再通过2个3x3的卷积核将channel调整成512
  • 然后再通过上采样将特征图的高和宽由52调整到这里的104,然后channel减半为256.然后将灰色箭头右侧的特征层通过中心裁剪的方式,将中间104x104的区域裁剪过来与箭头右侧蓝色部分进行concat拼接,通道由256变为512。然后再通过两个3x3的卷积进一步融合,并且通道由512变为256
  • 然后再通过上采样将特征图的高和宽由100调整到这里的200,然后channel减半为128.然后将灰色箭头右侧的特征层通过中心裁剪的方式,将中间200x200的区域裁剪过来与箭头右侧蓝色部分进行concat拼接,通道由128变为256。然后再通过两个3x3的卷积进一步融合,并且通道由256变为128
  • 然后再通过上采样将特征图的高和宽由196调整到这里的392,然后channel减半为64.然后将灰色箭头右侧的特征层通过中心裁剪的方式,将中间392x392的区域裁剪过来与箭头右侧蓝色部分进行concat拼接,通道由64变为128。然后再通过两个3x3的卷积进一步融合,得到388x388,通道为64的特征层。
  • 再通过一个1x1的卷积核,将channel调整为我们的分类个数。论文中是为2表示只有两个类别,前景和背景。最终输出的特征图大小为388x388x2,注意最后一个1x1卷积是没有relu激活函数的。

注意我们输入的图片大小为572x572,但是我们得到的分割图是388x388的,所以我们这里得到分割图并不是针对我们原图的一个分割图,而是只有中间388x388那个区域的分割图。

但是现在比较主流的实验方式github所实现的一系列源码当中,大家并不是严格按照原论文给的方式去实现的,现在主流的实现方式是将3x3的卷积加上一个padding,就是说我们每次通过3x3的卷积层不会改变特征层的高和宽。并且我们在卷积核Relu之间会加上一个Bn层。这样做会给我们带来一个怎样的变化呢,由于卷积后不改变特征层大小,两个特征图可以直接拼接,就不需要中心裁剪了,并且最终得到的卷积层高和宽与输入的卷积层高和宽是保持一致的。所以后面要实现可以按照当前主流的方式。

在这里插入图片描述
假设我们要用原论文提出的UNet的话,其实是有一定的问题的,比如我们要得到上图中黄色区域的分割图片,其实我们需要更大的输入图片如蓝色部分才可以得到中间黄色区域的分割图片。

但对于边缘区域,边缘之外的像素我们是没有的,为了应对这个问题作者说对于那些缺失的数据,它就直接采用镜像的策略,通过沿边框进行镜像得到。但如果按照目前主流的实现方式,输出的分割图与原图保持一致的话,其实我们根本不用考虑边缘缺失数据这个情况。

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-06-18 23:24:40  更:2022-06-18 23:25:23 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/30 0:51:27-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码