目标检测任务中通常分为两个子任务:产生proposal以及将proposal分类,CRAFT对Faster-RCNN进行改进,分别对Faster-RCNN中的两个阶段进行了一定的改进,对于生成目标proposal阶段,在RPN的后面加了一个二值的Fast-RCNN分类器来对RPN生成的proposals进行进一步的筛选,留下一些高质量的proposals,对于第二阶段的目标proposals分类,在原来的分类器后又级联了N个类别(不包含背景类)的二值分类器以进行更精细的目标检测。
由于R-CNN产生的区域建议包含过多背景区域,导致物体类内差异小于物体与背景的差异,从而引入很多相似类间的假正例。"分而治之":RPN后面增加一个基于CNN的分类器来区分物体与背景。
一.区域建议
RPN(基线)
覆盖几乎所有物体实例的同时,理想的区域建议产生器产生的建议越少越好。RPN 能够获取不同物体的相似性。然而,分类区域的目的是区分物体与非物体 。RPN 难以获得极限尺度或形状的物体 (比如瓶子和船),还包括表面不复杂或者藏在杂物中的物体 (比如植物,电视和椅子)。
级联建议生成器
RPN 后引入1个2类检测网络 (FRCN) 来区分真实物体与背景 (或误定位区域)。RPN 输入一般的图像块,输出类似纹理的一般模式。FRCN 输入为 RPN 输出,学习更细致的模式。
训练步骤:
(1)单独训练RPN网络,网络参数由预训练模型载入。
(2)单独训练Fast-RCNN网络,将第一步RPN的输出候选框区域作为检测网络的输入,具体而言,RPN输出一个候选框,通过候选框截取原图像,并将截取后的图像通过几次conv-pool,然后再通过roi-pooling和fc在输出两条支路,一条是目标分类softmax,另一条是bbox回归。截止到现在,两个网络并没有共享参数,只是分开训练了。
(3)再次训练RPN,此时固定网络公共部分的参数,只更新RPN独有部分的参数。
(4)RPN的结果再次微调Fast-RCNN网络,固定网络公共部分的参数,只更新Fast-RCNN独有部分的参数。
实现细节:
RPN网络得到大约2万个anchor但是不是全部都给Fast-RCNN,因为由很多重叠的框。使用NMS方法,设定IOU为0.7的阈值最后留下大约2000个anchor,然后再取前N个box(比如300个)给Fast-RCNN。Fast-RCNN将输出300个判定类别及其box,对类别分数采用阈值为0.3的NMS,并取分数大于某个分数的目标结果。
二.物体分类
快速 R-CNN (基线)
RPN 产生大量背景区域建议,所以快速 R-CNN 分类时增加背景类。用 Softmax 层的多类交叉熵训练分类器 (假正例太多),辅以边界框回归。
级联分类器
太多假正例造成误分类。R-CNN 框架中用1对多的2类SVM分类。每个2类分类器专注于找类内的差异。
最后,FRCN-1用来产生区域建议,FRCN-2目标函数为N个二分类交叉熵函数损失的和,测试时,RPN产生300个区域建议,FRCN-1产生约20个原检测,每个原检测有N个分数。FRCN-2对原检测在分类,有N个输出分数,最后的输出分数为每类的输出分数乘以对应类的原分数。