Image Segmentation

article/2025/10/9 15:50:24

先介绍几个概念,也是图像处理当中的最常见任务.

1. 语义分割(semantic segmentation)

2. 目标检测(object detection)

3. 目标识别(object recognition)

4. 实例分割(instance segmentation)

一、语义分割

首先需要了解一下什么是语义分割(semantic segmentation).

语义分割,简单来说就是给定一张图像,对图片中的每一个像素点进行分类

比如说原始图片是一张街景图片,经过语义分割之后的图片就是一个包含若干种颜色的图片,其中每一种颜色都代表一类. 

图像语义分割是AI领域中一个重要的分支,是机器视觉技术中关于图像理解的重要一环.

有几个比较容易混淆的概念,分别是目标检测(object detection),目标识别(object recognition),实例分割(instance segmentation),下面来一一介绍.

二、目标检测

目标检测,就是在一张图片中找到并用box标注出所有的目标

注意,目标检测和目标识别不同之处在于,目标检测只有两类,目标和非目标.

三、目标识别

目标识别,就是检测和用box标注出所有的物体,并标注出类别

四、实例分割

实例分割,对图像中的每一个像素点进行分类,同种物体的不同实例也用不同的类标进行标注。

五、PASCAL VOC

PASCAL VOC是一个正在进行的,目标检测,目标识别,语义分割的挑战.

这里是它的主页,这里是leader board,很多公司和团队都参与了这个挑战,很多经典论文都是采用这个挑战的数据集和结果发表论文,包括RCNN,FCN等.

关于这个挑战,有兴趣的同学可以读一下这篇论文

FCN

FCN,全卷积神经网络,是目前做语义分割的最常用的网络.

Fully convolutional networks for semantic segmentation 是2015年发表在CVPR上的一片论文,提出了全卷积神经网络的概念,差点得了当前的最佳论文,没有评上的原因好像是有人质疑,全卷积并不是一个新的概念,因为全连接层也可以看作是卷积层,只不过卷积核是原图大小而已.

FCN与CNN

在一般的卷积神经网络中,一般结构都是前几层是卷积层加池化,最后跟2-3层的全连接层,输出分类结果,如下图所示:

这个结构就是AlexNet的结构,用来进行ImageNet中的图片分类,最后一层是一个输出为1000*1向量的全连接层,因为一共有1000个类,向量中的每一维都代表了当前类的概率,其中tabby cat的概率是最大的.

而在全卷积神经网络中,没有了全连接层,取而代之的是卷积层,如下图所示:

最后一层输出的是1000个二维数组,其中每一个数组可以可视化成为一张图像,图中的每一个像素点的灰度值都是代表当前像素点属于该类的概率,比如在这1000张图像中,取出其中代表tabby cat的概率图,颜色从蓝到红,代表当前点属于该类的概率就越大.

可以看出FCN与CNN之间的区别就是把最后几层的全连接层换成了卷积层,这样做的好处就是能够进行dense prediction.

从而可是实现FCN对图像进行像素级的分类,从而解决了语义级别的图像分割(semantic segmentation)问题。与经典的CNN在卷积层之后使用全连接层得到固定长度的特征向量进行分类(全联接层+softmax输出)不同,FCN可以接受任意尺寸的输入图像,采用反卷积层对最后一个卷积层的feature map进行上采样, 使它恢复到输入图像相同的尺寸,从而可以对每个像素都产生了一个预测, 同时保留了原始输入图像中的空间信息, 最后在上采样的特征图上进行逐像素分类。

FCN语义分割

在进行语义分割的时候,需要解决的一个重要问题就是,如何把定位和分类这两个问题结合起来,毕竟语义分割就是进行逐个像素点的分类,就是把where和what两个问题结合在了一起进行解决.

在前面几层卷积层,分辨率比较高,像素点的定位比较准确,后面几层卷积层,分辨率比较低,像素点的分类比较准确,所以为了更加准确的分割,需要把前面高分辨率的特征和后面的低分辨率特征结合起来.


 

如上图所示,对原图像进行卷积conv1、pool1后原图像缩小为1/2;之后对图像进行第二次conv2、pool2后图像缩小为1/4;接着继续对图像进行第三次卷积操作conv3、pool3缩小为原图像的1/8,此时保留pool3的featureMap;接着继续对图像进行第四次卷积操作conv4、pool4,缩小为原图像的1/16,保留pool4的featureMap;最后对图像进行第五次卷积操作conv5、pool5,缩小为原图像的1/32,然后把原来CNN操作中的全连接变成卷积操作conv6、conv7,图像的featureMap数量改变但是图像大小依然为原图的1/32,此时进行32倍的上采样可以得到原图大小,这个时候得到的结果就是叫做FCN-32s.

这个时候可以看出,FCN-32s结果明显非常平滑,不精细. 针对这个问题,作者采用了combining what and where的方法,具体来说,就是在FCN-32s的基础上进行fine tuning,把pool4层和conv7的2倍上采样结果相加之后进行一个16倍的上采样,得到的结果是FCN-16s.

之后在FCN-16s的基础上进行fine tuning,把pool3层和2倍上采样的pool4层和4倍上采样的conv7层加起来,进行一个8倍的上采样,得到的结果就是FCN-8s.

可以看出结果明显是FCN-8s好于16s,好于32s的.


 

上图从左至右分别是原图,FCN-32s,FCN-16s,FCN-8s.

FCN的优点,能够end-to-end, pixels-to-pixels,而且相比于传统的基于cnn做分割的网络更加高效,因为避免了由于使用像素块而带来的重复存储和计算卷积的问题。

FCN的缺点也很明显,首先是训练比较麻烦,需要训练三次才能够得到FCN-8s,而且得到的结果还是不精细,对图像的细节不够敏感,这是因为在进行decode,也就是恢复原图像大小的过程时,输入上采样层的label map太稀疏,而且上采样过程就是一个简单的deconvolution. 
其次是对各个像素进行分类,没有考虑到像素之间的关系.忽略了在通常的基于像素分类的分割方法中使用的空间规整步骤,缺乏空间一致性.

U-net

U-net 是基于FCN的一个语义分割网络,适合用来做医学图像的分割.

下面是U-net 的结构图:


 

结构比较清晰,也很优雅,成一个U状.

和FCN相比,结构上比较大的改动在上采样阶段,上采样层也包括了很多层的特征.

还有一个比FCN好的地方在于,Unet只需要一次训练,FCN需要三次训练.

我实现了unet的网络结构,代码在: https://github.com/zhixuhao/unet, 
是用keras实现的,关于数据集和训练测试,可以参考我这一篇博文: http://blog.csdn.net/u012931582/article/details/70215756

SegNet

SegNet 是一个encoder-decoder结构的卷积神经网络.

这里是官方网站:http://mi.eng.cam.ac.uk/projects/segnet/

SegNet 的结构如下所示:


 

可以看出,整个结构就是一个encoder和一个decoder.前面的encoder就是采用的vgg-16的网络结构,而decoder和encoder基本上就是对称的结构.

SegNet和FCN最大的不同就在于decoder的upsampling方法,上图结构中,注意,前面encoder每一个pooling层都把pooling indices保存,并且传递到后面对称的upsampling层. 进行upsampling的过程具体如下:


 

左边是SegNet的upsampling过程,就是把feature map的值 abcd, 通过之前保存的max-pooling的坐标映射到新的feature map中,其他的位置置零.

右边是FCN的upsampling过程,就是把feature map, abcd进行一个反卷积,得到的新的feature map和之前对应的encoder feature map 相加.

实验

文章中说,他们用了CamVid 这个数据集进行了一下,这个数据集主要是街景图片,总共有11个类,367张训练图片,233张测试图片,是一个比较小的数据集.

下图是分割结果的对比:


 

DeconvNet

DeconvNet 是一个convolution-deconvolution结构的神经网络,和SegNet非常相似

是一篇2015年ICCV上的文章: Learning Deconvolution Network for Semantic Segmentation

下面是它的结构图:


 

前面的convolution network 和SegNet的encoder部分是一样的,都是采用了VGG16的结构,只不过DeconvNet后面添加了两个全连接层.

在进行upsampling的时候,SegNet和DeconvNet基本上是一致的,都是进行了unpooling,就是需要根据之前pooling时的位置把feature map的值映射到新的feature map上,unpooling 之后需要接一个反卷积层.

总结

可以看出,这些网络的结构都是非常相似的,都是基于encoder-decoder结构的,只不过说法不同,前面是一些卷积层,加上池化层,后面的decoder其实就是进行upsampling,这些网络的最主要区别就是upsampling的不同.

FCN进行upsampling的方法就是对feature map进行反卷积,然后和高分辨率层的feature map相加.

Unet进行upsampling的方法和FCN一样.

DeconvNet进行upsampling的方法就是进行unpooling,就是需要根据之前pooling时的位置把feature map的值映射到新的feature map上,unpooling 之后需要接一个反卷积层.

SegNet进行upsampling的方法和DeconvNet一样.


http://chatgpt.dhexx.cn/article/gMv2ICpX.shtml

相关文章

unable to execute command: Segmentation

编译时出错: clang: error:unable to execute command: Segmentation fault: 11 clang: error:linker command failed due to signal (use -v to see invocation) Architectures的debug改为NO就可以 以上方法不行: enable bitcode改成No。原因是第三方库…

Segmentation Fault错误原因总结

一、 什么是“Segmentation fault in Linux” 所谓的段错误就是指访问的内存超过了系统所给这个程序的内存空间,通常这个值是由gdtr来保存的,他是一个48位的寄存器,其中的32位是保存由它指向的gdt表,后13位保存相应于gdt的下标&am…

Segmentation Fault原因总结

转载链接:https://www.cnblogs.com/silence-hust/p/4487026.html 最近在项目上遇到了Segmentation Fault的错误,一直调试不出来是哪里出了问题,对于刚接触嵌入式的,也不知道该如何去调试一个项目,定位内存问题&#x…

segmentation fault 段错误解决方法

一、出现Segmentation Fault 1. 文件打开失败却使用了fclose();fclose找不到指针fp。 解决方法: 当打开文件成功,即成功获得文件句柄后,再进行关闭句柄操作。 2. 文件正在写操作,异常断电、程序异常中断,导…

Segmentation-传统分割算法

“图像分割就是把图像分成若干个特定的、具有独特性质的区域并提出感兴趣目标的技术和过程。它是由图像处理到图像分析的关键步骤。”---百度百科 本文将继续介绍常见的图像处理算法之图像分割算法,图像分割是从图像中找出目标所在的区域,把图像分成若干个特定的、…

图像分割(Segmentation)

文章目录 图像分割FCNU-NetSegNetDeepLab图像分割常用数据集 图像分割 图像分割是预测图像中每一个像素所属的类别或者物体。基于深度学习的图像分割算法主要分为两类: 语义分割(Semantic Segmentation) 为图像中的每个像素分配一个类别。 …

网站中木马病毒了怎么办

不少站长们辛辛苦苦的创建了一个网站,却由于安全维护措施做的不到位,最终导致网站中木马病毒,网站被跳转或无法打开等棘手情况,或点击进去是杂七杂八的灰色网站。若处理不及时,容易受到搜索引擎的惩罚,如官…

查找网站代码漏洞对网站木马后门查杀的清除

收到阿里云的短信提醒说是网站存在后门,webshell恶意通信行为,紧急的安全情况,我第一时间登录阿里云查看详情,点开云盾动态感知,查看了网站木马的详细路径以及webshell的特征,网站从来没有出现过这种情况&a…

查杀webshell木马

1.上传webshell 往DVWA上传一个webshell 一句话木马 2.D盾功能介绍 功能特性简介 一句话免疫,主动后门拦截,SESSION保护,防WEB嗅探,防CC,防篡改,注入防御,防XSS,防提权,上传防御,未知0day防御,异 形脚本防御等等。 防止黑客入侵和提权,让服务器更安全。 『目录限制』 有效防止…

病毒木马查杀实战第018篇:病毒特征码查杀之基本原理

前言 在本系列的导论中,我曾经在“病毒查杀方法”中简单讲解过特征码查杀这种方式。而我也在对于实际病毒的专杀工具编写中,使用过CRC32算法来对目标程序进行指纹匹配,从而进行病毒判定。一般来说,类似于MD5以及CRC32这样的算法&a…

WebShell(脚本木马)查杀思路

0x1、介绍 在web服务器上留下一个WEBSHELL后门是黑客最常见的留后门方法,传统意义上的系统后面,在各种云查杀的追缴下,基本上已经毫无出路(某些特殊工具除外),所以WEBSHELL最为一个最经济、方便、稳定的后门,已经是黑…

木马程序(病毒)

木马的由来 "特洛伊木马"(trojan horse)简称"木马",据说这个名称来源于希腊神话《木马屠城记》。古希腊有大军围攻特洛伊城,久久无法攻下。于是有人献计制造一只高二丈的大木马,假装作战马神&…

如何做好计算机病毒的查杀,电脑中的木马病毒如何彻底查杀?

在用电脑的过程中,经常会遇到一些木马病毒,中病毒后,很多人都会表示用电脑杀毒软件杀毒就可以了,还有一些人在使用杀毒软件后发现,病毒在重启电脑之后又再次出现了,那么怎么样才能彻底查杀电脑中的木马病毒…

一次PHP网站木马查杀记录

公司网站是PHP开发的,之前因为工作重点原因没注意,最近因域名备案变更问题重新关注了一下,发现竟然被注入木马,会跳转到赌博之类的违法站点,作为技术人员当然不能放过。 因为网站还可以访问,虽然每天来访I…

Linux下手动查杀木马

一、 模拟木马程序病原体并让木马程序自动运行 黑客让脚本自动执行的三种方法: 计划任务,crontab;开机启动;系统命令被替换,使用命令后被触发。 1、 生成木马程序病原体 [rootxuegod120 ~]# vim /usr/bin/fregonnzkq #…

黑客攻击-木马程序(1)

声明:禁止用作非法目的,谢绝一切形式的转载。 当你在无意间点击一个链接后,当你在不明情况安装一个程序时,当你忍不住点击一个美女图片的时候,你的设备可能就此沦陷了,成为了黑客眼中的"肉鸡"。…

应急响应 Windows和Linux操作系统(查杀 后门木马,处理 勒索病毒.)

网络安全--应急响应 应急响应”对应的英文是“Incident Response”或“Emergency Response”等,通常是指一个组织为了应对各种意外事件的发生所做的准备以及在事件发生后所采取的措. 网络安全应急响应:针对已经发生的或可能发生的安全事件进行监控、分析…

Linux 下手动查杀木马过程

模拟木马程序病原体并让木马程序自动运行黑客让脚本自动执行的 3 种方法: (1)、计划任务: crontab (2)、开机启动 (3)、系统命令被人替换,定一个触发事件生成木马程序病原…

php网站源码木马查杀检测工具

简介: 今天发现我授权的网站 突然多出来几个不认识的PHP文件 ,打开一看,哇塞 什么时间被挂马了 就开发了这么个工具 网站文件特别多的话,手工查找到什么时候 用工具检索肯定会更快点 这个软件的优点:可以自己添加特…