图像语义分割算法(FCN/U-net)

news2024/11/26 2:43:31

Some definitions

 与目标检测不同,语义分割任务不但要对图片中的物体的位置和类别进行预测,还要精确地描绘出不同类物体之间的边界(注意是不同类物体,而不是不同物体。若对同一类的不同物体也进行区分,则为实例分割(instance segmentation)。语义分割只考虑类别。)。因此,对图像的语义分割可以看成是对图像中的每个像素点的逐点分类。

图像语义分割相对于整图分类或者目标检测的一个重要的困难点在于:该任务一方面要求高层语义特征(正确分类),又要求轮廓尽可能贴合真实的边界(像素级别要对齐)。这两个要求实际上是相反的,语义层级高意味着整体、coarse,也就是不关注具体的像素细节,而关注整体的形态。而像素级别的轮廓则要求特征尽可能的fine-grained,即少关注高层语义,多关注边缘、细节这类low-level的特征。语义分割的优化,基本就是以解决此问题为最终目标,对模型进行改进。

Evaluations of semantic segmentation task

  • pixel accuracy: 分类正确的像素点占总体的比例。相当于普通样本分类问题中的acc。
  • mean accuracy: 每个类别的分类的acc的平均值。类似目标检测中的mAP。
  • mean IU: 平均IoU,即每个类别的IoU的平均值。
  • frequency weighted IU: 对mean IU进行加权,权重为该类别的比例。
  • BF(Boundary F1-score): 对所有的ground-truth和prediction的轮廓(contour)点进行比较,计算准确率和召回率,得到F1-score。注意,由于轮廓不会完全精准,因此这里的准确指的是在一定容忍范围内的相等(distance error tolerance),即prediction的轮廓上点与gt上点的距离小于某个阈值。(Reference : [1] Csurka, G., D. Larlus, and F. Perronnin. "What is a good evaluation measure for semantic segmentation?" Proceedings of the British Machine Vision Conference, 2013, pp. 32.1-32.11.)

FCN

reference: Fully Convolutional Networks for Semantic Segmentation

Jonathan Long_ Evan Shelhamer_ Trevor Darrell

UC Berkeley

FCN是第一个用分类CNN处理图像语义分割的模型。实际上,如果不考虑分类CNN的全连接层, 仅考虑conv和pool的话,最终生成的二维图形其实就是对应的每个位置(区域)的类别的heatmap,只不过在整图分类的任务中,这个heatmap中的信息被整合在一起了。关于CNN全连接层之前的feature map可以表示对应区域的预测结果这一结论,早在整图分类的某经典模型中就已经提出了,FCN处理语义分割就是沿用了这一思路。

FCN的基本网络结构如下:

可以看出,FCN首先按照整图分类的方式,对原始图像进行卷积+下采样,直到某个较高的层次(小尺寸feature map),此时网络已经提取了各个位置的高层语义信息。然后,将最后这个含有语义信息的feature map上采样到原图的大小,然后加上一个1x1的conv层,conv层共有21个filter(即输出的channel数目为21),分别预测该像素属于21个类别的概率(20个object类别+1个背景)。并与原图的GT 分割轮廓标签对齐,进行训练优化。

对于FCN来说,由于多次池化后,feature map的尺寸非常小,虽然包含了较多的语义信息,但是并不精确,无法做到像素级别的要求,因此,考虑将前面的语义较低但是细节较丰富的feature map与最后一层进行结合,并基于此结果进行升采样和预测。如图所示:

根据包含的最细(fine-grained)grid的feature map的下采样/池化倍数(可以理解为conv的stride的大小),获得的三种不同模型分别称为FCN-32s、FCN-16s和FCN-8s。其中s前面的数表示和原图相比分辨率降了几倍。可以看出,8s的相对细节更多,实验结果也证实了这一结论。

不同分辨率的feature map的合并方式如下:以FCN-8s为例,首先对conv7的结果进行4x上采样,然后对pool4结果进行2x上采样,此时这三个(包括pool3的结果)feature map已经大小相同了。然后将三者进行求和。

除了与前面的feature map合并以外,作者还提到有另一种可以获得finer detailed prediction的方法,即shift-and-stitch。

U-net

reference: U-Net: Convolutional Networks for Biomedical Image Segmentation
Olaf Ronneberger, Philipp Fischer, and Thomas Brox
Computer Science Department and BIOSS Centre for Biological Signalling Studies,
University of Freiburg, Germany

U-Net最初是用于医学图像分割的,现在仍然再医学影像处理中有应用。其网络的基本结构如下:

Ciresan et al.先前的工作利用一个滑动窗对每个像素进行预测,输入是一个局部的区域(patch),然后通过CNN预测出中心点所属的类别(该类型方法再高光谱分类任务中也有应用)。这样做可以预测位置的类别,但是滑动窗切出来的patch数量要远远超过图像本身的数量,而且,由于patch有很多重叠部分,重复计算较多,效率比较低。另外,还有一个问题在于,patch的大小(对context的使用)和定位的准确性这两者之间具有一个trade-off的过程,patch越大,能利用的信息就越多,但是max pooling也更多,导致分类的结果不一定就是中心点的类别,有可能会受到其它点的影响,因此定位会不准确。而如果要得到一个准确的定位,那么势必要减少外围的干扰,即减小patch的尺寸,但这样又会导致语义信息不全面。

因此,U-net复用了FCN的基本思路,但是再后面的上采样阶段上做了改进。首先,增加了上采样阶段(网络后半段)的feature map数量,并且通过跳线将原始的像素级的底层特征合并到后面的预测阶段,从而增加定位的准确性。整个网络为U型,前后基本对称。相同层级的下采样和上采样上的feature map都通过跳线进行合并。

除此以外,由于U-net处理的是尺寸较大的医学图像,因此也需要切分成小一些的区域分别进行训练,为了处理边界问题,对于大图内部的小区域,可以切的大一些,然后输出只保留内部的部分(相当于用周围真实的图像内容进行镶边);对边界的区域,镜像外推插值(extrapolation),从而使得最终的输出在valid卷积的情况下,输出刚好等于设定的大小。

U-net的loss函数就是类别的交叉熵:

但是对于细胞分割,不同的instance之间的交界问题比较明显,因此,还加入了一个权重变量:

其中,wc是用来平衡不同类别的权重map,w0是预设的参数,d1和d2分别表示到距离最近和第二近的细胞边界的距离。也就是说,对于距离边界越近的pixel惩罚越大,反之,越远的惩罚越小,以此在训练中关注border pixels。

另外,考虑到样本量小的情况,U-net的作者对已有的图像进行了大量的数据增广,比如:旋转、平移,模拟人体组织中的形变。增加数据量,并且让网络学习到这些形变下的不变性。最终,U-net在很小的标注样本集上(30张图像,512*512)进行训练,花了10个GPU hour(Titan 6GB),比较高效地获得了很好的效果。

SegNet

reference: SegNet: A Deep Convolutional Encoder-Decoder Architecture for Image Segmentation
Vijay Badrinarayanan, Alex Kendall, Roberto Cipolla, Senior Member, IEEE,

SegNet设计的初衷是为了处理街景理解任务(road scene understanding),它的最主要的特点在于它的非线性上采样(non-linear upsampling)。SegNet的encoder部分采用了VGG16的结构,然后将全连接去除,加上上采样的decoder网络,实现端到端的训练。SegNet文章对它的decoder与FCN的decoder进行的分析。

SegNet的基本结构如下所示:

首先,SegNet也是一个encoder-decoder架构,encoder阶段就是常规的conv+BN+ReLU,然后接上max pooling进行下采样。但是在SegNet中,max pooling阶段取出每个max的所在的位置index,然后将其储存起来,并传到decoder中对应的上采样步骤,然后,在通过多次conv+BN+ReLU,对上采样的结果进行处理,并输出给下一层。这种架构的思路来源于无监督的图像分类pretrain模型,以及神经网络可视化也用到了类似的模型。与pretrain模型最终只保留encoder有所不同,SegNet是端到端的网络,encoder和decoder都用来训练和预测。

上图表示的即SegNet的max pooling indeces的上采样方法。不同于直接进行插值或者deconv得到更大尺寸的feature map,SegNet存储的是每一级max pooling时那些被转移到下一级的最大值的坐标点的位置index。因此,通过这种方式上采样后的直接输出是一个稀疏矩阵,只在那些产生局部max的点处有值。然后,将这个稀疏矩阵用具有可学习的参数的decoder filters进行卷积滤波,得到输出结果。

实际上,为了保持高分辨率的细节,最好的方法自然是将所有的encoder的feature map都存起来(右图的FCN即如此,先将encoder的feature map进行通道压缩,得到和deconv后的feature map同样大小的tensor,然后直接逐点相加)。但是这只是在预测时间以及存储空间无限制的情况下的方案。SegNet仅仅保存max pooling的indices,那么,以2x2的pooling为例,每个2x2中的位置只需要2个bit就能存储。大大减小了资源消耗。

在SegNet的文章中,作者发现各种分割网络的encoder都区别不大,主要的差异在decoder部分,因此,文章对比了多种decoder的方法,结果如下:

通过上述比较可以得出一些结论:首先,双线性插值效果最差,说明需要学习decoder中的deconv卷积。另外,在同等效果的情况下,SegNet相比于FCN具有效率上的优势,即存储空间小。SegNet的参数量和直接bilinear插值的参数量是基本一样的,因为2bit的位置记录所占的空间相对可以忽略不计。另外,通过BF metric的结果可以看出,加入encoder的feature map有助于对边界的刻画。总的来说,效果最好的方法就是讲整个encoder feature map直接用上,但是这也是效率上最差的解决方案。

SegNet的训练阶段细节如下:损失函数是交叉熵,下降方式为带有动量的SGD,参数初始化用的是He方法,每个epoch对所有样本进行shuffle,然后取mini-batch逐批次训练。除此之外,考虑到不同类别的频率不同,对样本进行了平衡,用的方法为 median frequency balancing(中位数频率平衡),基本思路是对不同类别施加不同的权重,权重为 频率中位数/该类别频率 (median of class frequency / class frequency)。这样一来,类别越少的,权重越大,避免长尾类别对训练的贡献被高频类别压制。

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

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

相关文章

【CentOS】配置 Apache 服务

yum install httpd -y# 查看是否安装成功 httpd -v # 出现版本号表示成功# 启动服务 systemctl start httpd# 查看状态 systemctl status httpd # running 即可成功 ● httpd.service - The Apache HTTP ServerLoaded: loaded (/usr/lib/systemd/system/httpd.service; disable…

Unity环境配置并解决visual studio 不能智能代码提示Unity代码问题(一)

1、请先安装好unity和Visual Studio 2019 2、Visual Studio需要安装如图(2019才会有那个移动的可以勾选) 3、Unity配置 file->build setting windows->package manager 安装如下图 edit->preferences 3、创建c#脚本 如果还是没能智能提…

JDBC简介及快速入门-黑马(P1)

黑马视频b站链接: 01-JDBC简介&快速入门_哔哩哔哩_bilibili 🐶一、JDBC 简介 JDBC 概念: JDBC 就是使用 Java 语言操作关系型数据库的一套 API。 全称(Java DataBase Connectivity) Java 数据库连接 JDBC 本质…

佳易王会员管理软件店铺积分以及积分兑换系统

一、佳易王会员管理软件大众版 部分功能简介: 1、会员信息登记 :可以直接使用手机号登记,也可以使用实体卡片,推荐用手机号即可。 2、会员卡类型 :可以自由设置卡的类型,比如:充值卡、计次卡、…

使用Docker在Debian上构建GRBL模拟器镜像:简明步骤和操作指南

概述编译编写 Dockerfile构建镜像运行测试其他 概述 本文将详细介绍如何在Debian系统上通过Docker构建GRBL模拟器镜像,以便进行数控机床的仿真测试。GRBL是一种开源的控制系统,用于控制三轴CNC机床、激光雕刻、激光切割,而在Docker容器中运…

力扣第374场周赛题解

这一场周赛的题目是比较难的一次,写了1个多小时就写了两个题目。 首先第一题: 纯水题,遍历然后进行一下判断就可以解决了。这边就不放代码了。 第二题: 这个题目,我觉得难度非常大,其实代码量也不大都是很…

二维码智慧门牌管理系统升级:强化信息安全的防伪技术

文章目录 前言一、解决方案概览二、具体措施 前言 随着二维码智慧门牌管理系统在城市管理、企业形象展示和商铺门店等领域的广泛应用,信息安全问题愈发凸显。如何保障二维码门牌信息的安全性成为当前迫切需要解决的难题。 一、解决方案概览 专码专用:每…

每日3道PWN(第二天)

ciscn_2019_n_1 参考: [BUUCTF-pwn]——ciscn_2019_n_1-CSDN博客 [BUUCTF]PWN5——ciscn_2019_n_1_ciscn_2019_n_4-CSDN博客 BUUCTF—ciscn_2019_n_1 1-CSDN博客 checksec一下 64位栈溢出 按f5查看main函数,双击可疑函数 发现含有命令执行的且发现fl…

不愧是字节出来的,真的太厉害了。。。

前段时间公司缺人,也面了许多测试,一开始瞄准的就是中级水准,当然也没指望能来大牛,提供的薪资在15-20k这个范围,来面试的人有很多,但是平均水平真的让人很失望。看了简历很多上面都是写有4年工作经验&…

反三角函数基本性质和函数图形

文章目录 反三角函数反三角函数图形利用反函数的性质绘制反三角图形反三角函数的定义域&值域反三角函数的恒等式推导 反三角函数 反三角函数 (wikipedia.org) 反三角函数图形 sin ⁡ ( x ) , arcsin ⁡ ( x ) \sin(x),\arcsin(x) sin(x),arcsin(x) cos ⁡ ( x ) , arccos …

2022年11月10日 Go生态洞察:十三年的Go之旅

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…

11、信息打点——红队工具篇FofaQuakeSuize水泽Arl灯塔

网络空间测绘引擎 Fofa Quake shodan Zoomeye 主要搜关联资产、特征资产、资产信息(在测绘引擎上直接搜IP,它会显示所有与该域名有关的信息。) fofa和Quake测绘引擎集成化工具:Finger 自动化信息收集项目 ARL灯塔 Suize水泽 …

微信如何批量发送朋友圈?

批量发送朋友圈 发朋友圈 支持发送图片或者图文,可选择多个在线微信一起发,可立即发送,也可定时发送; 1、点击【发朋友圈】,选择要发圈的微信号和朋友圈类型(立即/定时),编辑设置好…

python精细讲解,从代码出发,适合新手宝宝食用的python入门教学【持续更新中】

文章目录 1、输入输出1.1 输入语句1.2 输出语句 2、List列表操作2.1 取值取单个元素:[]取出现的第一个元素:index 2.2 添加操作追加:append插入:insert 2.3 删除操作removepopdelclear清空 copy复制操作列表相关的数学操作数数&am…

类和对象——(7)this指针

归纳编程学习的感悟, 记录奋斗路上的点滴, 希望能帮到一样刻苦的你! 如有不足欢迎指正! 共同学习交流! 🌎欢迎各位→点赞 👍 收藏⭐ 留言​📝 人生就像骑单车,想保持平衡…

vmware ubuntu22 安装vmtools并设置共享文件夹

我是你爹,再不会就紫砂。 权限不够或没读写权限自己改下就行。 1. 主机下新建文件夹,并如下图设置成共享 2. 把上面文件夹路径添加到共享文件夹里面 3. 开启ubuntu,在登陆界面显示之前我们会看到下图的重新安装vmware tools由灰变黑&#x…

C语言--每日选择题--Day36

第一题 1. 以下关于指针的说法,正确的是() A:int *const p 与 int const *p等价 B:const int *p 与 int *const p等价 C:const int *p 与 int const *p 等价 D:int *p[10] 与 int (*p)[10] 等价 答案及解析 C const 在*的左侧&…

坚鹏:中国工商银行内蒙古分行数字化转型发展现状与成功案例培训

中国工商银行围绕“数字生态、数字资产、数字技术、数字基建、数字基因”五维布局,深入推进数字化转型,加快形成体系化、生态化实施路径,促进科技与业务加速融合,以“数字工行”建设推动“GBC”(政务、企业、个人&…

人工智能学习6(贝叶斯实现简单的评论情感分析)

编译工具PyCharm 文章目录 编译工具PyCharm 文本分析与表示实现方式:文本表示方法文本相似度计算LDA主题模型 朴素贝叶斯算法应用:评论情感分析,工具评论分析是好评还是差评获取数据加载停用词内容标准化(将每一句话划分成一个个的…

语义分割网络-FCN全卷积网络

全卷积神经网络FCN整体概述 FCN是首个端对端针对像素级预测的全卷积网络。FCN会用到分类网络作为backbone FCN的网络结构类比分类网络 分类网络经过卷积操作后,接全连接层,最后一个全连接层输出长度与分类类别数量相同,最后经过softmax得到术…