• 目标检测网络系列——Faster-RCNN(实验部分)



    上一篇已经将Faster-rcnn的原理讲了一遍:
    Faster RCNN论文基本原理解析

    这一篇来说说论文中的对比实验部分。

    实验网络实现细节

    • 使用单尺寸图像做训练和测试,所有的图像全部resize到了600(短边,并保持纵横比),论文中提到不使用金字塔的image图像来使用多尺度训练的原因是,多尺度训练会增加训练时间,再说原理中提到,faster rcnn中引入的anchor就已经引入了多尺度训练的逻辑。所以也不需要再使用多尺度的图像进行训练了。Multi-scale feature extraction (using an image pyramid) may improve accuracy but does not exhibit a good speed-accuracy trade-off。
    • resize后,anchor在ZF和VGG两个模型出来后的特征图上的stride步长都是用的16像素。
    • anchor的scale的三个尺寸为:128,256,512
    • anchor的三中纵横比是:1:1, 1:2, 2:1
    • 之前那一篇,提到了对于训练过程中筛选了anchor的过程。论文中重点提到了超出边界的anchor的问题。因为RPN中的3 * 3卷积核的感受野是针对全图像了,自然有很多anchor会超出。如果这些anchor进入训练过程的话,会导致训练不收敛的问题。If the boundary-crossing outliers are not ignored in training, they introduce large, difficult to correct error terms in the objective, and training does not converge.
    • 如果是一张1000 × 600尺寸的图像,那么大约有 20000 (≈ 60 × 40 × 9)个anchor,去掉cross-boundary,也就是超出边框的anchor,一张图像大约有6000个anchor。
    • NMS引入进来,去除很多冗余的anchor,去除之后大概就是2000个左右的anchor,也就是候选框。如果还多的,就直接取评分最高的前2000个。

    对比实验

    anchor的感受野

    从结果来看Faster rcnn可以检测到图像中较大的物体和纵横比比较大的物体:

    学习到的anchor平均尺寸还做了一下统计:

    所以,基于上面两点,有些物体可能只有中间部分较为清晰,但是实际尺寸较大的情况下,也是可能被识别到的,因为anchor就有那么大的尺寸和几种纵横比。Such predictions are not impossible—one may still roughly infer the extent of an object if only the middle of the object is visible.

    PASCAL VOC 2007数据集

    实验中使用的两个baseline结构为:

    • ZF网络是5个卷积层+3个全连接层
    • VGG16是13个卷积层+3个全连接层

    RPN的有效性

    因为Faster RCNN主要的贡献就是提出了RPN,所以基于Fast RCNN的backbone结构,论文首先就比对了RPN的有效性。也就是和其他的候选框挑选方法做比对:Selective Search和EdgeBoxes。

    候选框挑选算法对比实验

    • RPN只需要300个候选框就可以达到更高的准确率:59.9%
    • RPN只有300个候选框,后续的推理运算自然就更快。

    对于这个时间的效率,论文也提供了一个实验对比:

    候选框算法时间对比

    • 不管是VGG的深度模型,还是ZF的较浅一点的模型,配合上RPN,在速度上都不是SS能匹配的
    • VGG比ZF更慢一点,毕竟多出8个卷积层。

    其他RPN有效性的实验

    • 论文中的下一个实验是想发现共享卷积层对于RPN的有效性。实验步骤就是将上一篇提到的4-step的训练过程,在RPN和Fast RCNN训练完成之后就不继续后面两步训练了,实际上就是不去共享两者的权重参数,在论文中是通过shared和unshared来区分。如果缺乏后两步训练过程,准确率会降低到58.7%,在下图中有列出来。论文中解释实际上这个共享卷积层权重参数的过程就是两个网络互相fine-tuning的过程,所以会对准确率有提升作用。We observe that this is because in the third step when the detector tuned features are used to fine-tune the RPN, the proposal quality is improved.

    各项RPN的对比实验

    • 上图将这部分的实验对比都列出来了。
    • 接下里就是不用RPN自己生成的候选框来训练,直接用SS候选框算法挑选出的2000个候选框来训练Fast RCNN(基于ZF的backbone)。然后看RPN的测试准确率如何(同样使用unshared的策略)。
      • 如果RPN在测试过程中生成的是300个候选框,准确率为56.8。比58.7要低是因为训练集和测试集不一样,这个正常。这个指标只是作为下面两个实验的基准值。The loss in mAP is because of the inconsistency between the training/testing proposals. This result serves as the baseline for the following comparisons.
      • 如果RPN在测试过程中生成的是100个候选框,准确率下降到了55.1%(top-ranked),虽然如此,但是配合上另外一个实验,就知道这100个候选框挑的还是很准的。另一个实验就是不使用NMS的情况下,如果RPN输出6000个候选框,那么准确率下降到了55.2%,也就是说anchor的筛选过程是有效的。
      • 但是筛选多少anchor是有效的呢,100到300的准确率是增加的,所以又做了一个实验是将筛选的anchor增加到了1000,准确率比300的还要低上一点。也就是这个筛选的个数在300是一个比较合适的数字。
    • 下一个实验是验证RPN网络的两条分支cls和box reg的有用性。
      • 首先是在test过程中,去掉了cls分支,也就是没有了score,那么由reg分支生成的anchor对应的9个框就没法做NMS和rank了,那么就随机挑选N个anchor作为候选框,经过回归调整后作为RPN的输出。从上图中可以看到,N从100开始一直到1000,mAP是上升的,但是到了1000再往上,就没有变化了。The mAP is nearly unchanged with N = 1000 (55.8%), but degrades considerably to 44.6% when N = 100. This shows that the cls scores account for the accuracy of the highest ranked proposals. 这里也能说明cls提供的score是有效的,因为有了score后做的筛选,才能以更少的anchor box达到较高的准确率。
      • 其次是去掉reg这条分支。因为reg分支得到的4个参数室anchor的偏移量,所以去掉reg分支就是所有的anchor直接作为候选框输出,不再通过box regressor做调整。这样的话,准确率降到了52.1%。也就是说明这个回归器是有效的。

    VGG16 + RPN

    上面都是较浅的网络ZF作为backbone,和RPN一起使用,自然实验中肯定要与更深的网络VGG16进行比较。
    下图中给出了VGG相关实验对比数据:

    VGG + RPN

    • VGG + RPN在未共享(微调)卷积层的情况下,准确率可以到达68.5%,比SS的baseline要好一点(参考Fast RCNN),这点准确率的提升归功于RPN比SS选的候选框要好。
    • 在做了两个网络的权重微调,保持统一之后。准确率上升到了69.9%。
    • 然后在07的数据集上叠加12的数据集,可以使准确率进一步上升到73.2%。
    • 单独在2012数据集上的实验结果如下:
    • 不同类别的mAP结果:

    网络超参数的对比

    • 一个重要的超参数就是anchor的尺度数目和纵横比数目:

      • 从图中证明了多尺度的anchor对于提升准确率有帮助。
      • 尺度和纵横比影响差不多,因为3个尺度+1中纵横比和1个尺度+3个纵横比的结果差不多。
    • λ \lambda λ的影响,也就是cls和reg在损失函数中的比重。


      从图中看出, λ \lambda λ在两个数量级之间变化,但是准确率只在1%的范围内变化,所以对这个超参数的选择不敏感。

    IoU与召回率的关系

    在确认目标检测的正确率的时候说过,哪些proposal算成正例是和IoU强相关的(预测框与Ground Truth box的IoU)。如果交并比设置的太高,也就是正样本要和Ground Truth box非常相像才行。那么肯定会漏掉很多正例,所以recall率就会低。
    实验对比了SS,EB和RPN三个方法,在使用300,1000,2000个候选框中的情况。

    图中最重要的一点就是说,在候选框比较多的情况下,像SS,EB的性能还不错。但是在proposal降低到300的时候,随着IoU的增高,召回率就下降的比RPN更快。所以就能解释为什么RPN可以用少的proposal得到更好的结果,也就是不会漏。

    one stage vs two stage

    目标检测里面有两种pipeline,一个是two stage,就是RCNN系列这种的,先通过一种方法选出候选框,然后再针对候选框做预测。还有就是one stage,选框和预测一把梭哈,代表是YOLO系列。后续我们肯定会说到,这里论文中是用的OverFeat做对比,后续说one stage的时候再说,先贴论文中的结论:

    MS COCO数据集

    MS COCO数据集情况

    • 80个类别
    • 80k的训练集,40k的验证集,20k的测试集
    • mAP averaged for IoU ∈ [0.5 : 0.05 : 0.95]
    • RPN增加了一个尺度:64 * 64,处理数据集中的小图片使用。也就是总共3种纵横比,4个尺度。
    • 负样本从IoU为[0,0.5)改成了[0.1,0.5)

    对比结果

    • 经过一些小改动(We conjecture that the reason for this gap is mainly due to the definition of the negative samples and also the changes of the mini-batch sizes),在COCO数据集上,Fast RCNN比之前的那片论文给出的结果要好一点,而且在0.05和0.95这两个IoU上区别不大。
    • Faster RCNN在COCO上的表现比Fast RCNN更好。也是RPN能选出更好的候选框的原因。
    • RPN还配合ResNet-101一起配合使用,有更深的卷积网络,得到了更高的准确率。

    COCO数据集到PASCAL数据集的迁移学习

    • 实验中将COCO数据集训练出来的模型作为baseline,不使用PASCAL数据集做任何的微调作为基准值,为后续的迁移做对比。
    • 然后通过PASCAL的数据去进行微调。

  • 相关阅读:
    基于java的动漫网购商城【原创】
    应届女生美团 Java 岗 4 面,一次性斩 offfer,我受到了万点暴击
    TensorFlow入门实战|第R1周:RNN-心脏病预测
    山东省专精特新|山东省“专精特新”条件|专业申报认定补贴
    Python学习:整数类型(int)详解
    Python in Visual Studio Code 2023年10月发布
    用 Hugging Face 推理端点部署 LLM
    最大公约数循环与递归版本
    【手把手教你写Go】01.为什么要选择Go语言
    springMvc2-spring jar包下载
  • 原文地址:https://blog.csdn.net/pcgamer/article/details/133316962