笔记︱图像语义分割(FCN、CRF、MRF)、论文延伸(Pixel Objectness、)
图像语义分割的意思就是机器自动分割并识别出图像中的内容,我的理解是抠图…
之前在Faster R-CNN中借用了RPN(region proposal network)选择候选框,但是仅仅是候选框,那么我想提取候选框里面的内容,就是图像语义分割了。
简单的理解就是,图像的“分词技术”。
参考文献:
1、知乎,困兽,关于图像语义分割的总结和感悟
2、微信公众号,沈MM的小喇叭,十分钟看懂图像语义分割技术
.
.
一、FCN全卷积:Fully Convolutional Networks
一些简单的名词,下采样=卷积+池化(像素缩小),
上采样=反卷积(像素放大)Caffe和Kera里叫Deconvolution,而tensorflow里叫conv_transpose。CS231n这门课中说,叫conv_transpose更为合适。
- 卷积与反卷积过程:
- 池化与上池化:
池化层作用:池化操作能够减少计算量,同时也能防止计算结果过拟合
上池化作用:上池化的实现主要在于池化时记住输出值的位置,在上池化时再将这个值填回原来的位置,其他位置填0即OK。
1、反卷积
那么反卷积是一种认识”卷积“是什么的好办法。反卷积可以在任何卷积层上进行。那么得到的图像就是一些缩略图形式。
每一种反卷积的样子:
可以发现卷积程度越高,32x图像越模糊,8x跟ground truth还是挺接近的。这里就是感受野(receptive field),8x感受野较小,适合感受细节;32x感受野较大,适合感受宏观。
.
.
2、“带hole”的卷积——Dilated Convolutions
简单的卷积过程有一些问题:精度问题,对细节不敏感,以及像素与像素之间的关系,忽略空间的一致性等问题。那么新卷积方式hole卷积,用hole卷积核取代池化。
Dilated Convolutions:没有了池化感受野就不会变大,“疏松的卷积核”来处理卷积,可以达到在不增加计算量的情况下增加感受域,弥补不进行池化处理后的精度问题。
操作方式:人为加大了卷积核内部元素之间的距离:
这是水平X轴方向上的扩展,在Y轴上也会有同样的扩展,感受域在没有增加计算(相对于池化操作后)的情况下增大了,并且保留了足够多的细节信息,对图像还原后的精度有明显的提升。
.
.
.
3、DenseCRF Conditional Random Field:全连接条件随机场(DenseCRF)
每个像素点作为节点,像素与像素间的关系作为边,即构成了一个条件随机场。
其中:yi:卷积后的值;i:像素;xi:类别标签
条件随机场符合吉布斯分布。
在全链接的 CRF 模型中,有一个对应的能量函数:
那么E(x)由两个部分组成,可以简单理解为:
E(x)=一元函数+二元函数
一元函数:来自于前端FCN的输出
二元函数:是描述像素点与像素点之间的关系,鼓励相似像素分配相同的标签,而相差较大的像素分配不同标签,而这个“距离”的定义与颜色值和实际相对距离有关。所以这样CRF能够使图片尽量在边界处分割。
全连接条件随机场的不同就在于,二元势函数描述的是每一个像素与其他所有像素的关系,所以叫“全连接”。
通过对这个能量函数优化求解,把明显不符合事实识别判断剔除,替换成合理的解释,得到对FCN的图像语义预测结果的优化,生成最终的语义分割结果。
4、马尔科夫随机场(MRF)
在Deep Parsing Network中使用的是MRF,它的公式具体的定义和CRF类似,只不过作者对二元势函数进行了修改:
其中,作者加入λk为label context,因为只是定义了两个像素同时出现的频率,而λk可以对一些情况进行惩罚。
比如,人可能在桌子旁边,但是在桌子下面的可能性就更小一些。所以这个量可以学习不同情况出现的概率。
而原来的距离d(i,j)只定义了两个像素间的关系,作者在这儿加入了个triple penalty,即还引入了j附近的z,这样描述三方关系便于得到更充足的局部上下文。
5、高斯条件随机场(G-CRF)
这个结构使用CNN分别来学习一元势函数和二元势函数。
.
.
二、一些成型的分割结构
知乎,困兽,关于图像语义分割的总结和感悟在文中提到通用框架:
前端使用FCN进行特征粗提取,后端使用CRF/MRF优化前端的输出,最后得到分割图。
1、“Normalized cut”的图划分方法
它的思想主要是通过像素和像素之间的关系权重来综合考虑,根据给出的阈值,将图像一分为二。在实际运用中,每运行一次N-cut,只能切割一次图片,为了分割出图像上的多个物体,需要多次运行,下图示例了对原图a进行7次N-cut后,每次分割出的结果。
2、Grab Cut
增加了人机交互,在分割过程中,需要人工干预参与完成。需要人工选择主体候选框,然后将中部作为主体参考,然后剔除和主体差异较大的部分,留下结果。
此技术中,抠出来的部分叫“前景”,剔除的部分叫“背景”。缺点也很明显,首先,它同N-cut一样也只能做二类语义分割,说人话就是一次只能分割一类,非黑即白,多个目标图像就要多次运算。其次,它需要人工干预,这个弱点在将来批量化处理和智能时代简直就是死穴。
3、segNet
4、DeconvNet
这样的对称结构有种自编码器的感觉在里面,先编码再解码。这样的结构主要使用了反卷积和上池化。
5、DeepLab
现在的很多改进是基于这个网络结构的进行的。
为了保证之后输出的尺寸不至于太小,FCN的作者在第一层直接对原图加了100的padding,可想而知,这会引入噪声。
DeepLab非常优雅的做法:将pooling的stride改为1,再加上 1 padding。这样池化后的图片尺寸并未减小,并且依然保留了池化整合特征的特性。
因为池化层变了,后面的卷积的感受野也对应的改变了,这样也不能进行fine-tune了。所以,Deeplab提出了一种新的卷积,带孔的卷积:Atrous Convolution.
.
延伸一:Pixel Objectness —— 更好的自动抠图、图像检索、图像重定向技术
论文《Pixel Objectness》提出了一个用于前景对象分割的端到端学习框架。给定一个单一的新颖图像,我们的方法为所有“像对象”区域 - 即使对于在训练期间从未见过的对象类别,产生像素级掩码。我们将任务制定为使用深完全卷积网络实现的将前景/背景标签分配给每个像素的结构化预测问题。
我们的想法的关键是采用训练与图像级对象类别示例,以及采用相对较少的注释的边界级图像合。我们的方法大大改善了ImageNet和MIT数据集上的前景分割的最先进的水平 - 在某些情况下,有19%的绝对改进。此外,在超过100万的图像,我们显示它很好地归纳到用于训练的前景地图中看不见的对象类别。
最后,我们演示了我们的方法如何有利于图像检索和图像重定向,这两种方法在给定的高质量前景图的领域将会有好的效果。
论文成果在caffe有成品案例
github:https://github.com/suyogduttjain/pixelobjectness
paper:https://arxiv.org/abs/1701.05349
官方网址:http://vision.cs.utexas.edu/projects/pixelobjectness/
笔记︱图像语义分割(FCN、CRF、MRF)、论文延伸(Pixel Objectness、)的更多相关文章
- 笔记:基于DCNN的图像语义分割综述
写在前面:一篇魏云超博士的综述论文,完整题目为<基于DCNN的图像语义分割综述>,在这里选择性摘抄和理解,以加深自己印象,同时达到对近年来图像语义分割历史学习和了解的目的,博古才能通今!感 ...
- 【Keras】基于SegNet和U-Net的遥感图像语义分割
上两个月参加了个比赛,做的是对遥感高清图像做语义分割,美其名曰"天空之眼".这两周数据挖掘课期末project我们组选的课题也是遥感图像的语义分割,所以刚好又把前段时间做的成果重新 ...
- 使用Keras基于RCNN类模型的卫星/遥感地图图像语义分割
遥感数据集 1. UC Merced Land-Use Data Set 图像像素大小为256*256,总包含21类场景图像,每一类有100张,共2100张. http://weegee.vision ...
- 使用LabVIEW实现基于pytorch的DeepLabv3图像语义分割
前言 今天我们一起来看一下如何使用LabVIEW实现语义分割. 一.什么是语义分割 图像语义分割(semantic segmentation),从字面意思上理解就是让计算机根据图像的语义来进行分割,例 ...
- 基于FCN的图像语义分割
语义图像分割的目标在于标记图片中每一个像素,并将每一个像素与其表示的类别对应起来.因为会预测图像中的每一个像素,所以一般将这样的任务称为密集预测.(相对地,实例分割模型是另一种不同的模型,该模型可以区 ...
- 图像语义分割出的json文件和原图,用plt绘制图像mask
1.弱监督 由于公司最近准备开个新项目,用深度学习训练个能够自动标注的模型,但模型要求的训练集比较麻烦,,要先用ffmpeg从视频中截取一段视频,在用opencv抽帧得到图片,所以本人只能先用语义分割 ...
- 推荐一些用CRF做图像语义分割的资源
原文地址:http://blog.sina.com.cn/s/blog_5309cefc01014nri.html 首先是code,以前找了很多,但发现比较好用的有: 1. Matlab版的UGM:h ...
- CRF图像语义分割
看了Ladicky的文章Associative Hierarchical CRFs for Object Class Image Segmentation,下载他主页的代码,文章是清楚了,但代码的RE ...
- 语义分割--全卷积网络FCN详解
语义分割--全卷积网络FCN详解 1.FCN概述 CNN做图像分类甚至做目标检测的效果已经被证明并广泛应用,图像语义分割本质上也可以认为是稠密的目标识别(需要预测每个像素点的类别). 传统的基于C ...
随机推荐
- 监控mysql主从同步状态
在高并发网站架构中,MySQL数据库主从同步是不可或缺的,不过经常会发生由于网络原因或者操作错误,MySQL主从经常会出现不同步的情况,那么如何监控MySQL主从同步,也变成网站正常运行的重要环节. ...
- JAVA设计模式---模板方法
1.定义: 在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中,模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤. (为了防止子类改变模板方法中的算法,可以将模板方法声明为 ...
- 精通libGDX游戏开发-RPG实战-欢迎来到RPG的世界
欢迎来到RPG的世界 本章我会快速的使用tiled这样的瓷砖地图工具,来带领大家创造所设想的世界. 创建并编辑瓷砖地图 瓷砖地图(tile-based map)是广泛应用于各种游戏类型的地图格式,li ...
- javascript中的字符串对象和数组对象
1.javascript的对象的概念 在javascript中,除了null和undefined以处,其他的数据类型都被定义成了对象 也可以用创建对象的方法定义变量,string,math,array ...
- Install MongoDB on Linux Systems 速记
下载mongodb最新版本: 下载链接:http://pan.baidu.com/s/1kTDnkyz curl -O http://downloads.mongodb.org/linux/mongo ...
- 创建一个vue项目的过程
创建一个vue项目: 1.首先从UI手上拿到PSD设计图,然后看设计搞的内容,需要做个大概的页面布局 2.做vue之前不许安装node,因为做vue项目要和node结合使用 3.然后安装vue脚手架: ...
- HDU [P2819] swap
二分图行列匹配+输出路径 经典题,当且仅当一行匹配一列的时候,符合题意. 本题的难点在于如何输出路径,我们发现这个移动的过程就是将所有匹配选择排序,在选择排序时输出路径即可 #include < ...
- USACO 状压DP练习[3]
1725 题意:$m*n:\ m,n \le 12$的牧场,有的格子不能选,相邻不能同时选,求方案数 $f[i][j]$前$i$行当前行选的集合为$j$ #include <iostream&g ...
- 微信小程序模板发送,openid获取,以及api.weixin.qq.com不在合法域名内解决方法
主要内容在标题三,老手可直接跳到标题三. 本文主要解决个人开发者模板消息发送的问题(没有服务器,不能操作服务器的情况) 针对api.weinxin.qq.com不在以下合法域名列表内的问题提出的解决方 ...
- appium如何切换Native和WebView
方法一: Set<String>contexts=driver.getContextHandles(); driver.context((String)contexts.toArray() ...