目标分割
今儿这一篇文章来谈谈目标分割那点事...
首先,计算机视觉的三大任务:图像分类、目标检测、目标分割。前面两篇文章对分类和检测的模型做了一个相对详细的阐述,现在来了解下图像分割。
图像分割也分为三种:
普通分割:不同物体的像素区域分开
语义分割:在普通分割的基础上,分类出每一块区域的语义(即不仅区分了还识别不同物体的名称)
实例分割:实例就是对象,每一个抽象的具体化表达。在语义分割的基础上,给每个物体编号,比如识别到图中有两个人,A和B
下面简单介绍一下几个常见的数据集:
Pascal VOC:有20个类别,6929张标注图片,可以用于以上三种分割。
MS COCO:语义与实例分割最大数据集,80种类别,30万张以上的图片有20万张标注
接下来走一遍图像分割思路:
1.FCN:
之前介绍过全卷积网络FCN可以接受任意尺寸的输入图像,现在把它再深入展开。FCN将传统CNN(卷积神经网络)的全连接层转化为一个个的卷积层,用1*1的卷积来替代全连接层。采用转置卷积层对最后一个卷积层的特征图进行上采样,使得它恢复到输入图像相同的尺寸,这样就可以对每个像素都产生一个预测,同时保留了图像中的空间信息,最后在上采样的特征图上进行像素分类。
2.卷积后再进行转置卷积
多次卷积和池化后,得到的图像越来越小同时分辨率越来越低。FCN使用上采样恢复原图的分辨率。举个例子图像的分辨率依次缩小2,4,8,16,32倍,对于最后一层的输出图像,需要进行32倍的上采样才能得到原图一样大小。复习一下转置卷积,卷积逆过程,又称为反卷积,小图片放大为大图。上采样的跳级(skip)结构如图:
3.损失函数和结构预测:采用softmax分类逐个求N(分类数)的最大概率。
大致思路捋一遍后看看语义分割评价算法,先约定一下设总共有k+1类,L0到Lk(空类和背景也包含),P_ij表示属于i的类别被预测为j的像素数量,P_ji反之。即,只有p_ii表示识别正确的样本数量。下图展示几个常用的衡量算法公式:
上述作为目标分割基础知识引出Mask R-CNN实例分割算法,可以用来做目标检测,实例分割,目标关键点检测。实力分割的难度在于要先对一张图片所有目标进行正确的检测的同时,还要对每个实例进行分割,检测的目的在于把每一个单个目标分类然后用bounding box标定出来,实力分割的目的是区分每一个像素为不同的分类。下图为Mask R-CNN结构:
来仔细观察一下不同于Faster-RCNN的地方,先看ROI Align之后的整体分为三大部分,分别为:分类、回归、mask三个分支。双线性插值把28*28mask变换到原图box大小,mask做变换的时候有个形变,每一个类都输出mask,激活函数为sigmoid,取0.5为阈值,得二值化mask。head这部分主要作用是使用转置卷积将ROI Align的输出特征图扩大,预测Mask时会更加精确。
现在来观察下ROI Align和Faster-RCNN中的ROI Pooling的差异,先分析下ROI Pooling的局限性。在Faster-RCNN中ROI Pooling的作用是根据预选框位置坐标在特征图中将相对应区域池化为固定尺寸的特征图。(如果有遗忘请翻阅至Faster-RCNN那一篇查看)。由于候选框的位置是由回归得到的,一般为浮点数,而池化后要求尺寸固定,故ROI Pooling这个操作要存在两次量化过程:
1.将候选框边界量化为整数点坐标
2.量化后的边界区域平均分割成k*k个单元,再对每一个单元的边界进行量化。
这样两次后,此时的候选框和最开始回归得到的位置有了一定的偏差,进而影响分割和检测效果,论文中总结为“不匹配问题”。如下图:
ROI Align针对ROI Pooling做出改进,思路很简单:取消量化操作,使用双线性插值法的方法获得坐标为浮点数的像素点上的图像数值,进而整个特征聚集过程转化为一个连续操作,ROI Align设计了一套流程:
1.遍历每一个候选区域,保持浮点数边界不做量化
2.将候选区域分割为k*k个单元,每个单元边界也不量化
3.每个单元中计算固定四个坐标位置,把这个单元平均分割成四个小方块再分别取中心点。用双线性插值法计算着四个位置的值,最后最大池化操作。如下图:
以上便是关于目标分割的分享啦,感谢您的阅读!
- 点赞
- 收藏
- 关注作者
评论(0)