关于Mask R-CNN
Mask R-CNN
忽然发现rpn的训练反向过程有点迷,之前没想这么多也没想这么细,后来发现其实还有很多细节问题,因为对keras和tensorflow机制并不清楚,很多地方还有疑问。
RPN
在外层大Model里嵌套了一个RPN的Model,这个RPN的Model在模型里循环了5次,为了接收不同尺寸的特征图,然后把5次的输出组合在了一起。之前有考虑这个反向过程,是要反5遍?还是反一遍?
后来考虑,5次的输出已经组合在一起了,而且训练的时候,其实分类损失只计算了256个,回归损失只计算了128个,这些个anchor来自哪一层每张图也是不固定的,所以在训练的时候不存在要统一按层训练。损失求的是平均损失,梯度当然也是平均梯度,并不存在循环训练。
Head Network
很多文章讲mask损失是 分类损失+回归损失+mask损失,但其实真正训练的时候,这三个损失并没有真正数值相加,至少在编码阶段没有。之前想的是,既然没有手动相加的操作过程,那训练就是分开依次进行的,有顺序的。
后来一想并非如此
整个训练过程,每训练一次,也就是迭代一次,按mini-batch随机梯度下降法优化,是batch size个样本同时送到网络里,进行相同的算法,求batch size的平均损失,进行一次参数更新,那这样不可能存在有序依次训练。更新的过程中,原始参数和更新的参数都是最后都计算完一次性更新的,过程都需要存储空间。