目标检测:Two-stage
RPN
寻找每一个anchor匹配到的GT box,所以是多对一(不一定每个anchor都能找到匹配的GT box,原因见第三行)
假设有m个GT box,n个anchor,则有一个mxn的矩阵M, M[i,j]代表第j个anchor与第i个GT box之间的IOU
anchor和GT box的IOU大于0.7,则该anchor为正样本,小于0.2则该anchor为负样本,其余不考虑直接忽略该anchor(除非启用set_low_quliaty,解释:注意还有一个特殊情况,可能有一个gt没有与之匹配的anchor,即该groud-truth和所有的bbox的iou都小于high_threshold,那么我们允许“与这个gt最大iou的bbox”被认为是正样本,确保每个gt都有配对的bbox)
之后再使用nms过滤得到包含正样本和负样本的anchor
最终的正负样本数量是不一致的,并且负样本数量远远大于正样本数量(emm,也不完全是)
选取一定数量的正负样本anchor用于loss计算(可以控制正负样本比例以及正负样本的总个数,比如总个数是256,正负样本比例是0.5,如果正样本不足128,则多用一些负样本以满足有256个Proposal可以用于训练,反之亦然.)
计算loss(L1 Smoth+BinaryCrossEntropy),边界框回归损失只计算正样本的,目标预测概率损失同时计算正样本和负样本的,即:
L1 Smoth(预测的正样本相对于anchor的偏移参数,真实的GT box相对于anchor的偏移参数)
+
BinaryCrossEntropy(预测结果,真实label(0 or 1))
正负样本这里指的是anchor