• 目标检测算法-CRAFT


    目标检测任务中通常分为两个子任务:产生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个输出分数,最后的输出分数为每类的输出分数乘以对应类的原分数。

  • 相关阅读:
    写在博客前面
    JavaAPI学习(一):API && String类 && Stringbuffer && StringBuilder
    Java面向对象(七):Object类 & 内部类 & 单例模式
    Java面向对象(六):抽象方法 & 接口 & 递归
    Java面向对象(五):OOP三大特性之多态 — final 关键字
    Java面向对象(四):OOP三大特性之封装与继承
    Java面向对象(三):Java权限修饰符—static关键字
    Java面向对象(二):成员变量—OOP中的内存管理—构造函数
    Java面向对象(一):方法—初识面向对象
    JavaSE学习(六):随机数—简单的排序算法
  • 原文地址:https://www.cnblogs.com/cucwwb/p/13286301.html
Copyright © 2020-2023  润新知