maskrcnn模型添加了mask分支,模型整体结构包括,主干网络生成特征图,然后RPN生成框,通过ROIalign裁剪特征图获得固定尺寸的特征图。然后经过框预测头生成类别预测和框预测,经过mask头生成mask。
其中主干网络采用的是FPN结构,最后应用哪几个特征层我也没搞清楚。
RPN输入的就是主干网络输出的特征层,假设为c*h*w,经过一次3*3卷积操作256*h*w,然后经过1*1卷积后得到两个分支的结果:2k*h*w和4k*h*w,通过阈值还有边界条件等删除一些框。
将PRN的输出结果,在特征图上进行裁剪,就是进行roialign操作,实际是经过线性插值生成统一的尺寸7*7*c,然后一个分支经过两次FCN操作生成框预测头,用于进行类别损失和框几何损失计算,另一个分支经过FPN操作生成m*m*k的结果,k为类别数,最后需要进行阈值分割确定前景和背景。
其中有个问题没有很清楚,对于mask分支的输入只是整个特征图的一部分,然而输出的结果确实整张图的mask。有两个可能,一个是在mask生成过程中用0值填充了非roi部分,第二种可能是最后的m*m大小只是roi区域的,需要通过后处理算法,将结果再整合到一张图上。