以下是对这篇文章精华部分的理解,随手记得,备忘而已,不适合新手来看,没有插图,但是语言表述个人认为已经很清楚了
在卷积特征图上进行如下操作,每个滑动窗的位置(中心),同时预测k个region proposals,所以之后的两个分支网络cls layer和reg layer分别产生2k和4k的输出。2k中的2是指每个region proposal被判断为是目标和不是目标的两个分数(这两个分数加起来应该为一吧),4k中的4指的就是每个region proposal的坐标值(左上角横、纵,width、hight?),作者取了9个锚盒作为每一个滑动窗位置(中心)的region proposal。因此,如果卷积特征大小是W*H,那总共就会有WHk个锚盒。
作者的锚盒可以看作是用锚盒金字塔代替了图片金字塔和滤波器金字塔
因此,作者的模型就是根据这些锚盒进行后面的bbox回归(给目标定位)和分类(给目标判类别)的。
LOSS FUNCTION
为了训练RPN,给每一个锚盒分配一个二分类标签(是否是目标),分配方法是根据锚盒与GT的IOU分配正负标签,具体很简单,就是个阈值划分,略。损失函数分为两部分,一部分训练分类分支cls layer,另一部分训练回归bbox分支reg layer,注意,reg layer的输出不是一个bbox的坐标值,而是k个bbox的坐标值,也就是说,它为每一个锚盒都生成了一个bbox用于后面的训练,用这两个分支的输出与前面被分配标签的锚盒的分数(正例为1,负例为0)和GT坐标作损失。其实也就是将GT的信息分散在了一个个具体的锚盒上面,怎么分散的得看代码
上面说到reg layer的输出用于后面的训练,其实它并不是简单的用输出的bbox的四个坐标值进行的损失值的计算,而是将输出的bbox坐标、对应锚盒的坐标(为什么是对应的,因为刚才说了它给每一个锚盒都生成了一个bbox嘛)进行了一个融合——产生4个值(作为网络输出值),将GT坐标、对应锚盒坐标进行融合——产生4个值(作为真实值),用这两组值计算reg layer部分的损失值,其目的就是在减小reg layer的损失值的同时,这两组值也就近似相同了,也就是说reg layer输出的bbox与GT越来越近了,多好。用锚盒做了一个过渡,锚盒作为桥梁。
训练RPN
一张图片产生许多mini-batch,从一幅图片中随机选取256个锚盒去计算损失,选取的时候正负锚盒比例为1:1,看代码。
下来是fast rcnn和RPN怎么一起训练的问题,作者提了三个方法,感觉其实就是联合训练嘛,分开训,又一起训。
下来是一些细节,在程序里都看得到。