maskrcnn的原理按照我自己的理解来讲,分为如下几步:
1、将image输入resnet获取5组大小不同的特征图
2、在这5组特征图上逐点确定3种长宽比例不同的边框,并将这些边框对应的位置映射回原图像(就是一个比例映射)
3、在特征图上使用卷积预测每个点每个框对应的两组数据(2维度:前后景的概率值,4维度:与真实边框的中心点位置差距和长宽缩放因子总共4个值)
4、之前映射回原图的框有很多,每个框都有自己的前后景概率和偏移量,根据每个框的前后景概率排序选出前6000个框,其他框舍去,根据iou条件确定框是正样本或负样本(即前景或者是背景,例如至少和一个框的iou大于0.5则为前景),对于正样本需要计算与真实框之间的偏移量,这里计算的是否是正样本、偏移量将作为后面计算rpn损失的label
5、上一步中预测了框的便偏移量,对框执行这些偏移量(此时框与真实框之间仍存在差值,因为执行的是预测的偏移量,而非上一步中所说的label)
6、类似于4中计算三组label,首先是框的类别,判断方法就是这个框与哪个真实框之间的iou最大,那么5他的类别就是这个,其次是偏移量,就是这个框与真实框之间还存在多少差距(因为之前移动的并不是真正的差距,而是预测的,所以现在肯定还存在差距),最后是mask值,这个mask值是指在一个框中每个元素对应是前景或者是背景,直接使用的是iou最大的那个真实框的mask
7、经过上面的步骤我们获取了5类标签rpn_class, rpn_bbox, marcnn_class, marcnn_bbox, marcnn_mask,这些标签是用来计算loss的,接下来需要预测后三个值,因为前两个已经在rpn网络中预测了
8、这一步是需要将原图中的框映射到特征图上,使用比例映射,之后对映射后的框进行池化,池化为7*7大小的特征,对每一个特征图都进行操作映射为7*7(但比例映射的比例不同,因为特征图大小不同)
9、经过上面的操作后每个框有许多的7*7,将这么多7*7用于预测class,bbox,mask,具体映射方式不难,通过卷积或者全连接都可以实现。
10、最后计算5个损失值,进行梯度下降就可