3.3实例分割
3.3.1 问题描述
实例分割:
- 在图像中将识别出像素属于哪个实例,并用颜色区分。
3.3.2 Mask R-CNN

Mask R-CNN是在Faster R-CNN的基础上改进得到的。其算法步骤为:
- 由RPN得到RoI(FPN算法);
- 由RoI Align(替换了Faster R-CNN中的RoI Pooling)将RoI统一为相同尺寸的特征;
- 由这些特征,使用Faster R-CNN进行分类和bbox回归;
- 在此基础上再加入一些卷积层用来判断RoI的每个像素的实例(这个卷积网络输出和RoI相同尺寸的矩阵,值为1表示为目标物体,0则为不是)。

这里的RoIAlign(划重点)比较重要,下面重点介绍下。
3.3.3 ROI Align
RoI Pooling存在的问题(不匹配问题):
- 将RoI区域量化为整数点坐标值;
- 将量化后的区域分割成
个单元(bin),即使不能整除时也将其量化。
上面的两个量化,会产生一定的偏差,导致检测和分割的准确度。

如上图中的红色框所示。
一只狗狗的bbox为。
- backbone之后
;
- 然后通过RoI Pooling之后
都没办法整除。
于是误差出来了。为解决该问题,引入了成为RoI Align的方法。

RoI Align的思想:
- 取消量化操作,采用双线性内插;
- 并不是简单的双线性内插,如图6所示;
举例来说:
- 把候选区域对于的特征区域(
)切分成
,那么我们得到的更小区域是
。
- 对这个这个更小区域进行max pooling。假设我们要进行
的max pooling,那么我们就可以把这个
的区域再切分成一个
的4个方框,然后对这4个方框的中心点求max pooling。
- 这4个中心点的坐标可能不是整数。那么在25x25的特征映射里找离它最近的4个点,然后进行双线性插值来估计这个点的值。


RoI Align的步骤为:
- 遍历每一个候选区域,保持浮点数边界不做量化
- 将候选区域分割成k x k个单元,每个单元的边界也不做量化。
- 在每个单元中计算固定四个坐标位置,用双线性内插的方法计算出这四个位置的值,然后进行最大池化操作。
这四个固定位置是指在每一个矩形单元(bin)中按照固定规则确定的位置。(这个采样点是指采样谁?初步认为是双线性插值相关的采样点)比如,如果采样点数是1,那么就是这个单元的中心点。如果采样点数是4,那么就是把这个单元平均分割成四个小方块以后它们分别的中心点。显然这些采样点的坐标通常是浮点数,所以需要使用插值的方法得到它的像素值。
3.3.4 损失函数
Mask R-CNN不仅损失函数包括:
- 分类
- bbox回归
- mask损失
网友评论