一种结合多种图像分割算法的实例分割方案
2020-04-10詹琦梁陈胜勇胡海根李小薪周乾伟
詹琦梁,陈胜勇,胡海根,李小薪,周乾伟
(浙江工业大学 计算机科学与技术学院,杭州 310000)
1 引 言
图像分割是计算机视觉、数字图像处理和自动驾驶等技术领域所研究的基本课题之一.图像分割是指根据图像的一致性特征在待分割的图像中划分具有相对均匀特征的区域,以此将图像划分为彼此不重叠的若干子区域,使得其中同一子区域内的特征具有某些相似性,不同子区域之间的特征具有显著差异[1],并且待分割的目标可以与背景分离,从而提取出目标.
目前,在图像分割领域众多国内外的专家学者进行了多年深入的研究,涌现出大量图像分割的算法,然而在图像分割效果方面,缺少能够实现通用效果的分割理论.如图像分类,图像分析等许多图像方面的工作能否达到预期的实验效果,在很大程度上受到图像分割质量的影响.因而获取具有精确边缘的分割图像具有重要的科研价值.
Mask RCNN(简称MRCNN)[2]是基于RCNN系列、FPN、FCIS等工作之上的图像分割算法.Mask RCNN算法是在Faster RCNN[3]算法的基础之上发展而来.Faster RCNN算法主要用来进行目标检测,其主要思想是针对每个检测候选区域有类别标签和bounding box偏移量两个输出,因此Mask RCNN就在Faster RCNN的基础上通过增加一个分支进而再增加一个输出,即输出物体掩膜(object mask).Mask RCNN是一个目标实例分割的框架(object instance segmentation),能够对图像中的各个目标进行类别的检测,同时还能为图像中的每个识别的物体生成一个高质量的分割掩膜(segmentation mask).
本文提出一种图像的自动精细分割方法.该方法在Mask RCNN输出的分割掩膜的基础上,使用超像素SLIC和形态学算法进行掩膜的后处理,得到待分割图像的确定前景、确定背景和待分割区域,再输入到改进后的GrabCut算法中进行迭代,最后对得到的结果进行CRF精细化处理,得到最后精确分割的目标图像.
2 分割理论介绍
2.1 Mask RCNN算法
Faster RCNN算法第一步先在输入图像上通过卷积提取特征图,其中共享卷积核.然后将得到的卷积特征图输入到RPN网络中,通过RPN网络生成待检测的RoI候选框并对RoI候选框进行位置的修正.再通过RoI Pooling层对RPN网络的输出在feature map上进行映射操作,输出每个RoI区域所对应的特征图,并将维度置为定值.最后,使用全连接层(FC Layer)对RoI区域特征图进行分类,并且对目标bounding boxes进行第二次修正.
Mask RCNN算法是RCNN系列算法的延续和扩展.Mask RC-NN算法对Faster RCNN中的RoI Pooling进行了改进并提出了RoI Align方法[4].RoI Align方法通过使用双线性插值来更精确地找到每个位置对应的特征.Mask RCNN算法流程图如图1所示.
在Mask Branch训练时,不使用FCN式的SoftmaxLoss,而是输出T个mask预测图(为每一个类都输出一张预测图),并采用average binary cross-entropy loss训练.在训练的时候,输出的T个特征图中,只有对应ground truth类别的特征图对mask loss有影响.Mask RCNN的训练损失函数可以描述为:
Lfinal=L({pi},{ti})+(Lcls+Lbox+Lmask)
(1)
其中L({pi},{ti})是训练RPN网络的损失函数,Lcls表示为分类损失,Lbox表示为边框回归损失,Lmask表示为掩膜的损失。
2.2 SLIC超像素算法
SLIC[5](simple linear iterative clustering)即简单的线性迭代聚类,是一种比较常用的超像素分割算法,实现起来方便、简单,在工程上有广泛的使用.SLIC主要使用了CIELAB颜色空间,将RGB彩色图像转化为CIELAB空间下的5维特征向量[l,a,b,x,y].
SLIC具体实现的步骤如下所示:
1) 初始化种子点(聚类中心)
类似于K-means[6]聚类算法,首先在程序的初始阶段设置K个分割超像素个数.假设输入图像的像素数量为N,则通过聚类算法图像将被分成K个超像素块,每个超像素块就是一个聚类结果,每个超像素块的大小是S*S,并且相邻种子点之间的距离大约为S=sqrt(N/K).
2) 邻域内重新选择种子点(假设取n=3)
在每个超像素块中随机采样一个点作为聚类中心.为了防止采样点落在图像梯度较大的轮廓边界上,影响后续聚类效果,对该采样点周围n*n邻域内计算所有像素点的梯度值,找到该邻域内梯度最小的像素点,将聚类中心移动到该点上.
3) 在采样点周围的邻域内为每个像素点分配类标签
在2S*2S范围内搜索像素点,S指的是期望的超像素边长,其目的是可以加快算法收敛速度,而K-means的搜索范围是整张图片.
4) 距离度量
分别计算每个搜索到的像素点Ci=[li,ai,bi,xi,yi]和该超像素点中心Cj=[lj,aj,bj,xj,yj]的距离.具体的计算公式如下:
(2)
(3)
(4)
(5)
其中,Ns是类内的最大空间距离,Ns=S=sqrt(N/K),dc指的是颜色距离,ds指的是空间距离.最大的颜色距离Nc=m,m为常数,取值范围为[1,40],一般取10.最终的距离度量D′如下所示:
(6)
对于每个像素点,选择与该像素点距离最小的超像素作为该像素点的聚类中心,为该像素打上类标签.
5) 迭代优化
不断迭代上述步骤直到误差收敛,通过实验发现绝大部分图片在10次迭代内可以得到较理想效果,所以迭代次数取10.
6) 增强连通性
在上述迭代优化的过程中可能会出现超像素尺寸过小、多连通情况,这些情况可以通过增强连通性解决.
2.3 GrabCut算法介绍
GrabCut[7]图像分割算法是一种有效的从复杂背景中提取前景目标的交互式分割算法,由微软研究院基于Grap hCuts[8]算法的原理改进而来,是目前比较优秀实用的算法之一,主要功能是用来从待分割图像中分割出前后景.该算法需要通过用户的交互操作,指定图像中的前后景信息,使用高斯混合模型(GMM)对图像建模,最后采用迭代估计法实现能量最小化得到最终的分割结果.
对于一幅包含N个像素点的图像,GrabCut将其映射成一张加权网络图并建立相应的能量函数,最后通过最大流/最小割来对图像进行最后的分割.图片中的像素对应的分割结果只有两类:一类属于前景,用1表示,一类属于背景,用0表示.GrabCut分割算法分别用一个K维的高斯混合模型(Gaussian Mixture Model,GMM)对图像中的前景和背景建模.其中单高斯模型的概率密度函数为:
(7)
高斯混合模型就是由k个单高斯模型所组成,如下式所示:
(8)
由此可见,整个高斯混合模型就是多个单高斯模型密度加权之和,其中,t(i)就是每个高斯模型的权重.
GrabCut算法通过能量函数求解最优分割.能量函数主要包括了两项:区域惩罚项和边界惩罚项.区域惩罚项又称为数据惩罚项,而边界惩罚项主要用来邻接像素点的空间和颜色之间的关系.能量函数用如下形式表示:
E(α,k,θ,z)=U(α,k,θ,z)+V(α,z)
(9)
其中,U定义为:
(10)
式中:
D(αn,kn,θ,zn)=-logp(zn|αn,kn,θ)-logπ(αn,kn)
(11)
且p(·)是一个高斯概率分布,π(·)是混合权重系数.
此时高斯参数模型为:
θ={π(α,k),μ(α,k),∑(α,k),α=0,1;k=1…K}
(12)
其分别对应第k个高斯模型的权值π、均值μ和协方差∑.平滑项V可用RGB空间的欧氏距离求出:
(13)
GrabCut算法中把图像的像素点分为4大类:{F,B,PF,PB}.其中F代表确定的前景像素点,B代表确定的背景点,PF代表可能的前景点,PB代表可能的背景点.在GrabCut算法中,用户先通过人工标注在图像上用矩形框选择需要分割的区域,区域外的为确定的背景像素点,区域内的为可能是前景也可能是背景的像素点,统称为不确定项,以此为依据建立GMM模型并初始化.其次,GrabCut算法为用户还提供了另一个接口,可由用户指定图像中的某些像素分别属于{F,B,PF,PB}中的哪些类,这样可以通过人工指定的方式提高算法分割的准确度.
2.4 改进GMM初始化
通过前期形态学的预处理,可以得到分割图像的三元图,即确定的背景区域、确定的前景区域和可能的前景区域,GrabCut算法将这些区域中的像素划分为背景和前景两个类别,对于背景和前景均采用高斯混合模型(GMM)算法进行建模,在建模的过程中首先对这两类像素使用k-means算法进行聚类,将每个类别分别聚类为K类(K取5),即GMM中的K个高斯混合模型分量.然后通过每个高斯模型中已有的样本像素集的RGB值来估计每个高斯模型的参数均值和协方差.而最终的高斯混合模型需要通过K个高斯分量加权求和得到,因此每个高斯分量的权值也需要通过属于该高斯分量的像素个数与总像素个数的比值来确定.由此可知,k-means算法的聚类结果将决定该像素属于哪个GMM分量并影响最终分割结果.
然而GrabCut算法在执行k-means算法聚类时仅考虑了像素的RGB颜色信息,其结果是使GMM中各分量的分布不均匀,不利于后续迭代中能量函数的收敛,影响最终的分割结果.本文基于参考文献[9]在使用k-means算法进行聚类时加入改进的像素位置信息的方法.为了获得更合理的初始GMM参数,本文将位置信息修改如下.
原始像素对应特征向量为:
xi=(Pr,Pg,Pb)
(14)
其中,Pr,Pg,Pb分别是图像的RGB三通道分量.本文所采用位置信息的计算步骤如下:
1.通过得到的MaskRCNN掩膜计算得到掩膜的质心Pc.
2.遍历待分割区域每一个像素点,计算得到离质心距离最大的一个点的距离,记为dm,计算公式如(16)所示:
dm=max(‖P-Pc‖)
(15)
计算每个像素点与质心的距离d,计算公式如下所示.
d=‖P-Pc‖
(16)
3.通过dm、d计算得到位置信息.加入位置信息后本文特征向量为:
(17)
将位置信息可视化如图2所示.
图2 位置信息可视化
加入的位置信息能够减小背景的像素差异,使属于背景的一类像素点能够更容易聚类成一类.越靠近目标前景区域的像素点越能够保留较大的像素差异.
实验结果如图3所示,图3(a)中原始的聚类算法将作为前景飞机的像素分类成了两类,作为背景的天空中的像素分类到了三个高斯分量中,背景结构复杂.图3(b)是采用加入位置信息后的聚类算法处理后得到的图片,从图中可以看出,飞机的大部分像素点被分为了一类,并且天空的像素点也只剩下了两类,背景像素类别大大简化,这种方法可以使前景目标的像素位于较少的高斯分量上,产生分布更加合理的高斯分量,有利于后续能量函数的收敛.
图3 k-means聚类效果对比Fig.3 Comparison of k-means cluster results
3 结合多种图像分割算法的实例分割流程
本文采用Keras[10]深度学习库来复现Mask RCNN算法,该深度学习库以TensorFlow[11]框架作为后端,该框架具有对模型进行快速实现,支持GPU加速等优点.同时采用MS COCO数据集训练该模型,最后用训练好的模型进行预测.
本文以Mask RCNN预分割掩膜为起点,结合多种图像分割算法的优点,提出一种能够得到精细边缘的图像分割方案,通过该方案可以解决Mask RCNN分割掩膜边缘精度不高的问题.具体的方案流程如图4所示.
图4 分割流程图Fig.4 Segmentation flowchart
首先输入待分割RGB图像,通过Mask RCNN算法得到初始的各个物体的实例分割掩膜,同时通过SLIC算法得到图像的超像素标签图,结合实例分割掩膜采用形态学方法得到GrabCut算法分割初始掩膜,最后将原始的RGB图像输入GrabCut算法得到精细化后的分割掩膜.
3.1 Mask RCNN算法预分割
本文选取如图5(a)所示的图片进行实验.首先,Mask RCNN使用ResNet-101残差卷积网络对输入图像进行整体特征的提取,得到图像的共享卷积特征图,该特征提取过程继承自Faster RCNN网络中的特征提取过程.其次使用已经训练好的RPN网络来生成多个ROI候选区域,然后将ROI候选区域映射到共享卷积特征图上以获得每个ROI区域的卷积特征图,同时对每个ROI区域使用ROI Align方法进行像素校正.对每个ROI的分类和bounding box的预测在ROI区域的特征图上来进行.最后,使用FCN框架来预测ROI区域的每个像素点所属的类别,最终获得图像分割的结果.
图片经过Mask RCNN算法处理后能够得到三个预测结果:1)图片中的物体所对应的目标检测框.2)图片中的物体所对应的类别置信度(score).3)图片中的每个物体所对应像素上覆盖的分割掩膜(mask).从分割结果中选择分割掩膜显示,如图5(b)所示.
3.2 基于SLIC超像素算法掩膜扩展
此方法是将掩膜边缘所对应的超像素块添加扩展到初始mask上,具体的方法流程如下:
1) 输入待分割原图和Mask RCNN分割后的初始掩膜,记为m1.
2) 直接将原图放在SLIC超像素算法中进行超像素分割,根据多次实验比较,超像素块数量设置为:
(18)
最后得到一张超像素图,该超像素图中分别为每个超像素块设置一个标签,每个超像素块集合中的像素点的标签就是该超像素块聚类中心的标签,标签从0开始排序,超像素图记为s1.
3) 将初始掩膜m1腐蚀一次,得到腐蚀后的掩膜,记为m2.
4) 将初始掩膜减去腐蚀后的掩膜,即m1-m2,得到初始掩膜的边缘区域,记为m3.如图5(c)所示.
5) 将边缘区域m3与超像素图s1相乘,得到边缘处每个像素点所对应的标签.对边缘处的标签去重,根据边缘标签在超像素图中找到标签所对应的超像素块,将超像素块与初始掩膜相加,得到扩展之后的掩膜m4.如图5(d)所示
图5 实验结果图Fig.5 Experimental result chart
3.3 掩膜形态学处理
在正式输入GrabCut算法进行分割之前,还需要对得到的扩展后的掩膜进行分割前预处理.具体的步骤如下:
1) 对初始掩膜m1进行多次形态学腐蚀操作.该操作的目的是由于Mask RCNN分割的掩膜边缘精细度不高,对物体内部的空间不做分割,目标物体内部细节的空间信息无法体现,导致掩膜只是内部完全相连的一块,不够精细.而作为GrabCut的分割原始mask,将视为确定的前景,因此需要腐蚀到合适的大小,既能作为确定的前景来生成GrabCut分割的初始mask,又不会引入过多的背景,导致分割结果不理想.根据多次试验比较,将初始掩膜腐蚀到面积只占原掩膜面积的1/3能得到比较好的实验效果.该部分像素点置为1,即确定的前景,记作m5,周围其他区域都是背景(像素点值为0).
2) 与对Mask RCNN分割掩膜进行简单的膨胀不同,本方案对经过超像素扩展后的掩膜m4进行多次膨胀(经过试验对比,当膨胀的面积为超像素扩展后掩膜面积的1/3时可以达到比较满意的效果).其目的是尽可能多的扩展待分割的区域,因为Mask RCNN分割的掩膜的边缘信息存在缺失,缺失的部分在形态上可能比较尖锐或者比较狭长,像素点之间可能存在大面积的连通,简单的膨胀无法把缺失的部分覆盖进来.而超像素扩展后的图像对物体的边缘已经进行了一定的延伸和扩展,对缺失部分有了一定的填补,通过多次膨胀就能够尽可能多的将目标前景缺失的部分都填补上.但是也不能扩展的过大,导致分割时将不属于目标物体但像素值与初始掩膜相近的物体误认为是目标而引入.该部分像素点置为2,即不确定区域,记作m6,周围其他区域都是背景(像素点值为0).
3) 然后计算m5+m6,将值为3的像素点仍置为1,其他的不变,得到GrabCut分割初始掩膜m7,将其可视化如图5(e)所示.该图是一幅三元图,其中具有三个区域,从外到内分别为确定背景区域,不确定区域和确定的前景区域,后续的操作主要是对不确定区域进行分割.
3.4 GrabCut算法分割
最后将分割初始掩膜m7输入到改进的GrabCut程序中,同时输入原图,GrabCut算法通过初始掩膜在分割原图上使用改进的GMM建模,再计算各个分量,最后通过最大流最小割得到最终分割结果.
后续再对分割结果进行CRF(Conditional Random Field,条件随机场)处理,能够使边缘更加精细.最终得到的分割结果如图5(f)所示.
4 实验结果及分析
4.1 分割结果比较
本文的实验设备为64位四核CPU,8GB内存PC机,系统和软件环境为Ubuntu18.04和python3.6.本实验使用MSRA10K数据集,该数据集被广泛用于评价显著性检测和分割方法,该数据集包含10000张图像,并包含真实标注的像素级基准图像(GT),可以用来主观和客观地评价算法的性能.从中选择5张比较典型的包含自然界常见类别的实例物体进行检测.
为了验证本文所提方法的精确度,本文主要采用三种方法进行实验比较:1)Faster RCNN结合GrabCut算法(通过Faster RCNN目标检测算法检测到图像中的物体,得到物体的初始框,再通过GrabCut算法进行分割,这里简记为FRCNN+).2)显著性检测结合GrabCut算法(本文参考文献[12]中的方法,参考文献中初始掩膜的获取采用显著性FT算法,为保证更好的分割效果和对比性,本文采用最新的MR显著性算法[13],其他算法处理流程与文献相同,该方法简记为显著性+).3)本文方法.比较的结果如图6所示.
图6 多种分割算法结果比较Fig.6 Comparison of segmentation results in different algorithms
第一组图像中由于FasterRCNN所检测到的物体不完全,所以人物的下半部分有明显的缺失,且人物的右侧脸和肩膀有缺失;基于显著性算法的分割方法,由于显著性检测缺少约束,结果导致人物的右腿下半部分缺失,而本文的方法能够很好地回避这些问题,同时因为在Mask RCNN实例分割阶段把人物左下角的包也检测了出来,因此在分割的时候没有将其作为person类分割进去,保证了人物分割的合理性.第二组图片中FasterRCNN的分割结果右边有明显的边框痕迹,而显著性检测分割的结果人物的下半部分也存在缺失的情况,而本文算法所得到的分割效果与标签掩膜基本一致.第三组分割结果中,FasterRCNN分割结果可以看到,汽车的轮胎部分有明显的缺失,汽车顶部也没有分割到位,显著性分割效果比FasterRCNN分割效果略好,但是也存在着轮胎部分缺失的情况.第四组分割结果中,FasterRCNN分割把部分背景也当做前景分割进来,显著性方法虽然不存在背景问题,但是没有把鸟的腿部分割进来,而本文的算法能够检测到鸟的腿部,也没有引入多余的背景.第五组结果中,由于FasterRCNN分割在检测的过程中检测框并没有把飞机的所有部分都框入在待检测区域内,导致分割后飞机的机头部分没有分割出来,而显著性分割和本文算法完整的分割出来飞机,并且分割效果与标签基本一致.
4.2 不同算法分割性能比较
本文对分割方法的评价方式主要有以下几种:
1) Jaccard系数
Jaccard系数指的是两个集合A和B交集元素的个数占集合A和B并集元素个数所占的比例,用符号J(A,B)表示.Jaccard系数是一种用来衡量两个集合相似度的指标,系数越大,两个集合之间的相似度越高;反之,系数越小,两个集合的相似度越小.具体的计算公式如公式(19)所示.
(19)
本文将Jaccard系数作为图像分割精确度的计算方式,其中集合A指物体实例分割的标签,集合B指的是经过本文方法处理后得到的实验分割结果.
2) 欠分割率
欠分割率指的是对于分割目标而言,没有分割的物体部分占总的分割部分的比值.具体计算公式如公式(20)所示.
(20)
3) 过分割率
过分割率指的是对于分割目标而言,过多分割的物体部分占总的分割部分的比值.具体计算公式如公式(21)所示.
(21)
从表1-表3可以看出,本文算法正确率明显高于基于FasterRCNN的GrabCut算法和基于显著性的GrabCut算法,欠分割率略低于其他两种方法,过分割率三种方法基本相当.
表1 正确率对比
Table 1 Comparison of segmentation accuracy
图像正确率FRCNN+显著性+本文方法Person10.88590.85740.8841Person20.96310.88560.9911Car0.85370.91290.9684Bird0.84360.89360.9374Aeroplane0.83990.97410.9774平均值0.87720.90470.9517
由于分割时间也是影响分割效率的因素之一,因此本文对各算法的的分割时间进行了比较,如表4所示.其中,FRCNN+算法需要先通过Faster RCNN算法预处理图片得到目标物体的初始位置框,再通过GrabCut算法使用位置框得到分割掩膜,在得到初始位置框的过程中消耗了大量的时间.
表2 欠分割率对比
Table 2 Comparison of under-segmentation rate
图像欠分割率FRCNN+显著性+本文方法Person10.10990.13900.1084Person20.03110.10970.0028Car0.14410.07530.0282Bird0.11270.10110.0518Aeroplane0.16010.02590.0146平均值0.11160.09020.0412
表3 过分割率对比
Table 3 Comparison of over-segmentation rate
图像过分割率FRCNN+显著性+本文方法Person10.00430.00360.0075Person20.00600.00500.0062Car0.00220.01180.0034Bird0.04370.00530.0108Aeroplane0.00000.00000.0080平均值0.01120.00510.0072
显著性+算法需要先通过MR显著性算法得到图片中物体的显著性位置,再通过后续的像素扩展和GrabCut操作得到掩膜.本文方法需要先通过Mask RCNN算法初步得到图片中物体的掩膜,再结合SLIC超像素扩展和形态学操作得到初始的待分割掩膜,最后使用GrabCut算法得到分割结果.Mask RCNN算法之后的操作步骤较多且复杂,但从实验的结果来看并没有消耗太多的运行时间,大量的时间主要消耗在Mask RCNN的实例分割阶段.本文实验中没有使用GPU加速,由于Mask RCNN算法涉及到目标检测和分割两个步骤,运行时间接近为Faster RCNN算法的两倍,因此该实验结果也在合理的范围之内.
表4 不同算法的分割时间对比
Table 4 Runtime comparison of different methods
图像分割时间(s)FRCNN+显著性+本文方法Person131.47+1.100.08+69.7665.96+1.19Person230.49+1.260.10+74.9366.33+1.05Car28.93+1.130.12+48.6461.12+0.88Bird31.25+1.120.11+14.2765.57+0.96Aeroplane30.40+0.950.11+26.7565.16+1.03
综上所述,本文所提出的方法能够有效的分割出不同类型图像中的目标.与其他算法相比,在分割精度上平均提高了6.9%左右,在整个MSRA10K数据集上的测试平均精度为0.7334(其中不包含Mask RCNN算法识别出的置信度小于0.9的物体和长宽较短的掩膜面积不到原图五分之一以上的物体),而没有经过本文方法处理的Mask RCNN算法识别出的掩膜平均精度为0.7053,在客观上提高了分割的精确度,适合用于自动分割处理批量的图片.
5 结 论
本文通过MaskRCNN算法对输入的待检测图像进行初级的实例分割,得到图像中的物体类别和物体的初级掩膜,再通过SLIC超像素分割算法对原图进行超像素分割得到超像素图,基于超像素图对初级分割掩膜进行边缘的扩展延伸,用以填补分割时缺失的边缘信息,接着对初级掩膜和扩展后的掩膜进行形态学操作,得到GrabCut分割算法的初始三元图掩膜,最后通过改进的GrabCut算法得到最终的分割结果.与其他算法进行对比发现,本文分割精确度更高,欠分割率更低,很好的保持了分割目标的完整性,证明了本文所提方法的可靠性.