图像目标分割_3 SegNet + U-Net

6.3.1 SegNet背景

SegNet的主要动机是场景理解的应用。

  • 难点:因此它在设计的时候考虑了要在预测期间保证内存和计算时间上的效率。分割的任务其实应用非常地广,需要理解各个像素之间的关系,比如要区分出人行道和车行道,建筑物和道路,并且还要能够检测识别到小的物体,比如路边的小狗,小猫。所以这个任务需要很高的精度,也很具有挑战性。
  • 思想:所以为了有个好的区分度,需要对物体的边界有一个非常好的效果,特别是在特征提取的时候,需要保持这些边界的信息(忽略高分辨率的特征图(conv1,conv2的特征图)肯定会导致边缘信息的丢失)。另外在计算时间上面的要求也比较高。所以综合这些原则考虑起来,想像着就比较有挑战性。 FCN的解码的部分的上采样是可以学习的,这样导致有很多的参数需要学习,这样在end to end 训练的时候比较难。

6.3.2 SegNet介绍

6.3.2.1 特点

  • 1、编码网络和VGG-16的卷积层相同
  • 2、移除了全连接层
  • 3、解码器使用从相应的编码器接受的max-pooling indices来进行输入特征图的非线性upsampling
  • 结构:
    • 编码网络(encoder network):由13个卷积层组成(使用的时预训练的VGG16的前13层),该部分提取输入特征,用于目标分类,这就是使用预训练的VGG原理所在,至于丢弃FC层是为了保持更高的分辨率,同时也减少了参数。
      • 总共5个Block,每个Block都由Conv + Batch Norm + ReLU组成
    • 解码网络(decoder network):每个encoder会对应一个decoder,故decoder具有13层,将低分辨率的feature map映射回和输入一样大小分类器(mask)。Decoder交替采用conv+upsampling
      • 每个block由Upsampling + Conv + BN组成
    • 像素分类层(pixelwise classification layer):decoder的输出会送到分类层,最终为每个像素独立的产生类别概率

6.3.2.2 max-pooling与deconvolution对比

  • 首先做maxpooling的时候得到的数的原始的位置要记住
  • 然后在上采样的时候,在把这些值给还原到原位置,相当于得到了一个稀疏的上采样feature,而FCN里面直接是deconvolution进行的上采样。

索引记录:

解码网络中max-pooling indics的好处:

  • 1、减少了端到端训练的参数量
  • 2、仅需要少量的修改而可合并到任何编码-解码形式的架构
  • 3、改善了边界划分

decoder阶段是没有加非线性激活的(即没有ReLU)

在上采样部分,卷积操作不使用偏置和ReLU

  • 上采样过程,就是通过卷积将稀疏的特征图稠密化,ReLU激活引入非线性时产生很多0稀疏化了结果,起了反作用,因此不需要ReLU
  • 偏置其实可以看做ReLU作用的阈值,没有ReLU自然不需要偏置,总体都加上一个常数但没有ReLU操作,这个值就没有起到是否需要激活的作用,所以加不加没有区别

6.3.2.3 训练细节

1、使用数据集

使用CamVid路景数据集来对基于解码器变体的性能进行基准测试.该数据集很小,由360×480分辨率的367次训练和233次测试RGB图像(白天和黄昏场景)组成。挑战是划分道路,建筑,汽车,行人,标志,极点,侧路等11类.

2、图像处理

  • 使用BN改变数据分布,归一化加速收敛

3、训练

  • 1、使用固定学习率0.1和动量0.9的随机梯度下降(SGD)
  • 2、每轮之前,训练集被shuffle,然后按顺序挑选每个小批量(12张图像),从而确保每个图像在一个epoch只被使用一次
  • 3、使用交叉熵损失作为训练网络的目标函数,损失在一个小批量的所有像素上求和得到
  • 4、训练集中的每个类别(例如,道路,天空和建筑像素占主导地位的CamVid数据集)中像素数量的变化很大时,根据真实类别不同地加权.
    • 这被称为class balancing.使用median frequency balancing
    • 分配给损失函数中的类的权重是在整个训练集上计算的类频率的中值除以类频率的比率。这意味着训练集中的较大类的权重小于1,最小类的权重最高
    • 尝试了不同类型的训练,无需类平衡,也可以等效地使用natural frequency balancing

6.3.2.4 效果对比

SegNet并将其性能与FCN(解码器结构不同的)进行比较,我们使用较小版本的SegNet,称为SegNet-Basic,它具有4个编码器和4个解码器。然后创建了FCN-Basic,一个可比较的FCN版本

1、SegNet-Basic-SingleChannelDecoder:显着减少了可训练参数的数量和推理时间

  • 2、内存扩大型SegNet(SegNet-Basic-EncoderAddition):这里使用上采样的max-pooling indices,随后进行卷积步骤以使其稀疏输入变得更加密集.然后将其逐个添加到相应的编码器特征图,以产生解码器输出

  • 结论:最好的情况下,当内存和推理时间都不受约束时,比如FCN-Basic-NoDimReduction和SegNet-EncoderAddition之类的较大型号比其他变体更准确.

  • 特别地,在FCN-Basic模型中丢弃维数降低导致具有高BF分数的FCN Basic变体中的最佳性能。这再次强调了分割架构中存储器与精度之间的权衡。

评测标准

  • G值是global accuracy,测量数据集中所有像素正确分类的百分比。C值class average accuracy,所有类的预测准确度的平均值.还有就是在Pascal VOC12挑战中使用的所有类的mIoU.
度量标准含义
global accuracy (G)在数据集上总体的准确率
class average accuracy (C)平均每个类别的准确率
mean intersection over union (mIoU)类平均IoU
bf score(少用)f1分数(机器学习中的f1计算)

6.3.3 SegNet总结

  • SegNet一种用于语义分割的深度卷积网络架构。SegNet背后的主要动机是需要设计一种有效的道路和室内场景理解架构,这在存储和计算时间方面都是有效的。

  • SegNet更有效率,因为仅存储特征映射的最大池索引,并将其用于解码器网络以实现良好的性能。在大型和众所周知的数据集中,SegNet具有竞争力,实现道路现场理解的高分。

6.3.4 U-Net-用于生物医学图像分割的卷积网络(冠军)

6.3.4.1 医疗影像的特点

生物学医学领域:在许多视觉任务中,尤其是在生物医学图像处理中,所期待的输出结果中应包括如位置和每一像素的类别标签等信息。而且,在生物医学任务中通常难以获取数以千计的训练图像。

  • 1、图像语义较为简单、结构较为固定。比如就用脑CT和脑MRI,由于器官本身结构固定和语义信息没有特别丰富,所以高级语义信息和低级特征都显得很重要(UNet的skip connection和U型结构就派上了用场)
    • 脑出血: 在CT影像上,高密度的区域就大概率是一块出血,如下图红色框区域。

  • 2、数据量少。医学影像的数据获取相对难一些,很多比赛只提供不到100例数据。所以我们设计的模型不宜多大,参数过多,很容易导致过拟合。

6.3.5 U-Net 详解

U-Net提出了一种新的网络结构和训练方法,依靠数据增强将有效的标注数据更为有效地使用。

  • 该网络由收缩路径(contracting path)和扩张路径(expanding path)组成。其中,收缩路径用于获取上下文信息(context)扩张路径用于精确的定位(localization),且两条路径相互对称。
  • 该网络能够从极少图像端对端进行训练,并且在ISBI竞赛中,对于分割电子显微镜中的神经元结构的表现好于以前最好的方法(滑动窗口卷积网络)。除此之外,该网络的运行速度非常快,在最新一个GPU上,分割一张512*512的图像不到一秒即可完成。

6.3.5.1 结构

一个contracting path即收缩路径(左侧)和一个expansive path即扩展路径(右侧)组成。

  • 1、收缩路径遵循卷积网络的典型架构。它包括重复使用两个3x3卷积(无填充卷积),每个卷积后跟一个线性修正单元(ReLU)和一个2x2最大池化操作,步长为2的下采样。
    • 在每个下采样步骤中,我们将特征通道的数量加倍。
  • 2、扩展路径中的每一步都包括特征映射的上采样
    • 1、进行2x2卷积(“反卷积”),将特征通道数量减半,与来自收缩路径的相应裁剪特征映射串联
    • 2、然后是两个3x3卷积,每个卷积后面接ReLU。
      • 由于每一次卷积都会丢失边界像素,因此裁剪是必要的。在最后一层,使用1x1卷积将每个64分量特征向量映射到所需数量的类别上。
  • 3、网络采样细节
    • UNet的encoder下采样4次,一共下采样16倍,对称地,其decoder也相应上采样4次,将encoder得到的高级语义特征图恢复到原图片的分辨率。网络较小运行速度快

图中箭头解释:

* 每一步都首先使用反卷积(up-convolution),每次使用反卷积都将特征通道数量减半,特征图大小加倍。(绿箭头)
* 反卷积过后,将反卷积的结果与contracting path中对应步骤的特征图拼接起来。(白/蓝块)
* contracting path中的特征图尺寸稍大,将其修剪过后进行拼接。(左边深蓝虚线)
* 对拼接后的map再进行2次3*3的卷积。(右侧蓝箭头)
* 最后一层的卷积核大小为1*1,将64通道的特征图转化为特定类别数量(分类数量,二分类为2)的结果。(青色箭头)

为什么效果好

1、底层(深层)信息:经过多次下采样后的低分辨率信息。能够提供分割目标在整个图像中上下文语义信息,可理解为反应目标和它的环境之间关系的特征。这个特征有助于物体的类别判断(所以分类问题通常只需要低分辨率/深层信息,不涉及多尺度融合)

2、高层(浅层)信息:经过concatenate操作从encoder直接传递到同高度decoder上的高分辨率信息。能够为分割提供更加精细的特征。

6.3.5.2 训练细节

  • 1、采用随机梯度下降法训练。为了最小化开销并最大限度地利用GPU内存,使用大的输入图块而不是大的batch size,从而将批处理减少到单个图像。最后一层使用交叉熵函数与softmax
  • 2、为了凸显某些像素点更加重要,作者在公式中引入了w(x)(类别不均衡)
    • 对每一张标注图像预计算了一个权重图,来补偿训练集中每类像素的不同频率,使网络更注重学习相互接触的细胞之间的小的分割边界
    • 权重计算公式如下:使用形态学操作计算分割边界,w​c​​是用于平衡类别出现频率的权重, d1d1代表到最近细胞的边界的距离, d2代表到第二近的细胞的边界的距离。基于论文经验设定w​0​​=10, σ≈5像素

  • 网络的权重进行高斯分布初始化,分布的标准差为2/N2/N,N为每个神经元的输入节点数量。

  • 例如,对于一个上一层是64通道的3x3卷积核来说,N=9x64

6.3.5.3 数据增强

  • 1、平移与旋转不变性,并且对形变和灰度变化鲁棒
  • 2、将训练样本进行随机弹性形变是训练分割网络的关键
    • 使用随机位移矢量在粗糙的3x3网格上(random displacement vectors on a coarse 3 by 3 grid)产生平滑形变(smooth deformations)。
      • 位移是从10像素标准偏差的高斯分布中采样的。然后使用bic插值计算每个像素的位移。在contracting path的末尾采用drop-out 层更进一步增加数据(bilinear与bicubic 插值图像处理介绍)

6.3.6 U-net实验效果

下面是U-Net在两种不同的分割任务中的应用效果

1、U-Net应用于光学显微图像中的细胞分割任务

ISBI细胞跟踪挑战的结果。(a)“PhC-U373”数据集的输入图像的一部分 (b)分割结果(青色掩模)和人工标注的GT(黄色边框) (c)“DIC-HeLa”数据集的输入图像 (d)分割结果(随机彩色掩模)和人工GT(黄色边框)

评估结果:包含35个部分注释的训练图像。实现了92%的平均IOU

其中“DIC-HeLa”另外一个数据集,这里不做介绍了。

2、总结

U-Net结构在不同的生物医学分割应用中都取得了非常好的性能。由于弹性形变的数据增强,它只需要很少的标签图像,并且有一个非常合理的训练时间,在英伟达Titan GPU(6GB)只需10小时。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/469461.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MIPI屏数据发送命令解析

MIPI数组发送那里有一个数组,这个数组包含寄存器和寄存器的值: 相当于: 0XC480寄存器下参数0X9C; 0XFF00寄存器下参数0XFF,0XFF,0XFF; 0XC0B5 尝试一下寄存器 0x08 0x18 0x48 0x58 试一下能不能旋转

面向对象之类的内建函数

类的特殊成员 上文介绍了Python的类成员以及成员修饰符,从而了解到类中有字段、方法和属性三大类成员,并且成员名前如果有两个下划线,则表示该成员是私有成员,私有成员只能由类内部调用。无论人或事物往往都有不按套路出牌的情况&…

图像目标分割_4 DeepLab-V1

6.4.1 DeepLab 背景 相比于传统的视觉算法(SIFT或HOG),Deep-CNN以其end-to-end方式获得了很好的效果。这样的成功部分可以归功于Deep-CNN对图像转换的平移不变性(invariance),这根本是源于重复的池化和下采样组合层。平移不变性增强了对数据分层抽象的能…

Python多线程单例的几种实现方式

目录: 单例模式在类中实现装饰器批量装饰实现单例模式 ,且不丢失类型提示限制实例个数 1.重写__new__方法实现多线程情况下的单例模式 用new方法实现单例模式 import time, threadingclass Singleton:"""单例模式————最多只允许创…

图像目标分割_5 DeepLab V2 V3 V3+

6.5.1 DeepLab V2 6.5.1.1 改变特点 atrous convolution采用ASPP ( atrous spatial pyramid pooling) 多尺度获得更好的分割效果合并深度卷积网络和概率图模型方法,增强对物体边界的定位。基础层由VGG16转为ResNet 和v1不同: 通过多尺度输入处理或者多…

jQuery / zepto ajax 全局默认设置

jQuery / zepto 的 $.ajax 方法需要配置很多选项, 有些是很常用的每个 ajax 请求都要用到的, 可以全局设置, 避免每次都写. 注意: 此处用的 jQuery 版本是 1.8.3, zepto 版本是 1.1.6 和 1.2.0. 使用别的版本的要自己测试下. jQuery 的方法是 jQuery.ajaxSetup() $.ajaxSetup(…

Python导包、模块报错的问题

import报错No module named "xxx"的问题 如何将指定目录作为项目根目录,让项目根目录下的包/模块都可以直接导入?(linux下) Python导入模块时,解释器如何定位模块: 1.当前目录 2.内置模块列表 3…

CC2540 串口0 通道2配置

从图里面可以看出来,串口0有两个通道,一个通道是P02 P03两个GPIO口。 还有一个通道是P14 P15两个GPIO口。 在软件配置的时候,主要是配置的是一个通道相关的寄存器。 7.6.4 USART 0 The SFR register bit PERCFG.U0CFG selects whether to u…

图像目标分割_6 Mask RCNN

6.6.0 背景 目标检测和语义分割的效果在短时间内得到了很大的改善。在很大程度上,这些进步是由强大的基线系统驱动的,例如,分别用于目标检测和语义分割的Fast/Faster R-CNN和全卷积网络(FCN)框架。这些方法在概念上是直观的,提供…

cf 621E. Wet Shark and Blocks

神奇,矩阵乘法23333333333333333 递推式是很简单的(连我这种不会DP的人都写出来了。) 需要求出的是转移矩阵(还是叫系数矩阵的),也是最这个东西用快速幂。 这个东西的i,j大概就表示从i到j的方案…

Python enum的使用总结

Python enum的使用总结 枚举(enumeration)在许多编程语言中常被表示为一种基础的数据结构使用,枚举帮助组织一系列密切相关的成员到同一个群组机制下,一般各种离散的属性都可以用枚举的数据结构定义,比如颜色、季节、国家、时间单位等 在Pyt…

ascii码转字符

在C语言中,ASCII码转字符非常简单。但是之前因为没有用到就没有去关注这方面的问题。 printf("%c\n",char(69)); E 下面是ASCII码表: BinDecHex缩写/字符解释0000 0000000NUL(null)空字符0000 0001101SOH(start of headline)标题开始0000…

SCI论文写作训练营笔记汇总01_概述+文献检索与管理

1 概述 1.1 适用人群 ①初涉科研, 目前或将来有英文科技论文发表需求的科研工作者 ②正在撰写或准备撰写英文科技论文的科研工作者 1.2 科技论文的基本结构 1.3 科技论文组成部分的写作方法 1.4 阅读文献的重要性 2、文献检索与管理 2.1 如何查找文献参考 2.2 文…

天猫11.11:搜索引擎实时秒级更新(转载)

搜索是很多用户在天猫购物时的第一入口,搜索结果会根据销量、库存、人气对商品进行排序,而商品的显示顺序往往会决定用户的选择,所以保证搜索结果的实时性和准确性非常重要。在电商系统中,特别是在“双十一”这样的高并发场景下&a…

pandas处理日期的几种常用方法

1.读取字符串日期 写入csv 文件 csv_text """date, value 2022-01-01, 1 2022-01-05, 5 2022-11-05, 5 """ with open("date_text.csv", "w") as f:f.write(csv_text)读取日期 df pd.read_csv("date_text.csv"…

OAD 空中升级

http://www.deyisupport.com/question_answer/wireless_connectivity/bluetooth/f/103/p/69222/172351.aspx#172351第二十三节 OAD空中升级 通过仿真器更新程序或者通过USB更新固件那都是一般人都可以实现的操作,但是要想实现OAD空中升级…

SCI论文写作训练营笔记汇总02_英文科技论文阅读与解析

3、英文科技论文阅读与解析的方法 3.1 科技论文介绍 3.1.1 科技论文的类型 • Research • Review • Theoretical • Methodological • Case study 3.1.2 研究型论文的结构 3.1.3 科技论文的基本结构 3.2 文献阅读 3.2.1 文献选择的原则 3.2.2 文献阅读顺序 3.2.2 文献阅读…

9.带有返回值的函数

<!DOCTYPE html><html><body> <p>本例调用的函数会执行一个计算&#xff0c;然后返回结果&#xff1a;</p> <p id"demo"></p> <script>function myFunction(a,b){return a*b;} document.getElementById("demo&…

报错curl: (7) Failed to connect to 127.0.0.1 port xxxx: Connection refused

&#xff08;pyenv install xxx&#xff09; 报错curl: (7) Failed to connect to 127.0.0.1 port xxxx: Connection refused的解决方法 问题重现截图&#xff1a; 在查看下面的原因和使用解决方法之前&#xff0c;确保自己的pyenv已经安装好了最新的python-build&#xff0c…

linux通过I2C地址查看设备名称

 root@android:/sys/bus/i2c # cd devices cd devices root@android:/sys/bus/i2c/devices # ls ls 0-0020 0-0022 0-0036 0-0078 1-000c 1-000d 1-001d 1-0028 1-0029 1-002a 1-0038 1-0060 1-0068 2-001c i2c-0 i2c-1 i2c-2 root@android:/sys/bus/i2c/devices # cd 0-00…