无论是目标检测,还是一个end-to-end的文本检测识别,只要是two-stage,都是分为 rpn和roi。为什么一定要分为两部分。
因为目标检测还有一个隐功能(分类),文本检测识别还有一个识别功能。这第二个功能都是要交给roi去做。其实可以把roi当作一个独立的模块,前面的rpn只是用来给roi提供一个区域让它去分类或者识别。因此roi一般要做(loss函数)就是分类损失或者是回归损失,公式就不写了,没有意义。
上段提到了rpn是给roi提供区域的,因此rpn的loss函数分为两部分,第一,回归损失,这个是必须要有的,而且不要以为回归是网络最后在做的,在rpn已经做好了(为了确保精度更高,会在roi层之后再做一次回归损失)。第二,分类损失,这个分类,是指,这块区域到底要不要给roi,因此,通常都是2分类。
在训练阶段,为了不让rpn的性能影响到roi,最好直接用ground truth提供的区域去进行分类,而不是用rpn层提取的区域来输入到roi层。如果rpn层训练好了,也可以将rpn层训练好的作为roi的输入。注意,是训练阶段,因此,训练阶段把两个当作单独的模块就可以了。
关于one-stage和two-stage的区别。我的个人理解,就是one-stage把two-stage的roi分类结合到了rpn层,就成了one-stage。