利用FPN构建Faster R-CNN检测
FPN就是所谓的金字塔结构的检测器,(Feature Pyramid Network)
把FPN融合到Faster rcnn中能够很大程度增加检测器对全图信息的认知,
在我的另一篇博客中对多尺度融合有较为详细的介绍,https://www.cnblogs.com/ywheunji/p/11022674.html
步骤如图所示:
1.先将图像送入底层网络中得到一个feature map,可以用resnet等 网络
2.图中的1,2,3层即为预训练网络得到的特征,之后采取的操作是对于2层进行1*1的降维操作,然后与3层上采样之后的结果进行相加,得到5层,这就是FPN的操作。
3.对于6层是一样的操作,然后对于得到的4,5,6层(top-down网络,fpn的核心)进行RPN操作得到region proposal,之后与原始faster rcnn的操作一样,通过3*3的卷积之后连接分类层和回归层。
4.得到的结果进行roi pooling操作,即固定特征的大小。
5.最后,连接两个1024层的全连接层,然后分两个支路,连接最后对应的分类层和回归层
使用了更深网络来构造特征金字塔,能增加鲁棒信息;除此之外,将低层特征和高层特征累加,是因为低层特征可以提供更加准确的位置信息,而多次的降采样和上采样操作使得深层网络的定位信息存在误差,
浅层的网络更关注于细节(位置)信息,高层的网络更关注于语义信息,而高层的语义信息能够帮助我们准确的检测出目标。因此我们将其结合其起来使用,这样我们就构建了一个更深的特征金字塔,融合了多层特征信息,并在不同的特征进行输出。
0.浅层的网络更关注于细节(位置)信息,高层的网络更关注于语义信息
高层的语义信息能够帮助我们准确的检测出目标
1.融合深层特征适合做复杂任务
图像中存在不同尺寸的目标,而不同的目标具有不同的特征,利用浅层的特征就可以将简单的目标的区分开来;利用深层的特征可以将复杂的目标区分开来;这样我们就需要这样的一个特征金字塔来完成这件事。
图中我们在第4层输出较大目标的检测结果,在第5层输出次大目标的检测结果,
在第6层输出较小目标的检测结果。因为在大的feature map上进行操作,可以获得更多关于小目标的有用信息(分辨率有关,第三条);
检测也是一样,我们会在第4层输出简单的目标,第5层输出较复杂的目标,第6层输出复杂的目标。
2.下采样倍数小的特征感受野小,适合小目标
另外在yolov3中对多尺度检测的理解是,1/32大小的特征图下采样倍数高,所以具有大的感受野,适合检测大目标的物体,1/8的特征图具有较小的感受野,所以适合检测小目标。
3.小尺度分辨率信息不足不适合小目标
对于小目标,小尺度feature map无法提供必要的分辨率信息,所以还需结合大尺度的feature map