RCNN系列算法优化策略与工业质检案例

2021/7/11 17:08:59

本文主要是介绍RCNN系列算法优化策略与工业质检案例,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

目录

  • 前言
  • 一、两阶段检测进阶模型
    • 1. FPN--多尺度金字塔
    • 2. Cascade R-CNN
    • 3. Libra R-CNN
  • 二、两阶段检测进阶模型优化策略
    • 1. 服务器端模型优化策略
    • 2. 移动端模型优化策略
  • 三、工业应用:铝压铸件质检
  • 总结

前言

首先回顾以下Faster R-CNN
在这里插入图片描述

Faster R-CNN的过程
首先对数据进行数据处理,包括水平翻转缩放等得到实际网络需要的输入,然后进入backbone(它可以是resnet50等),得到一个特征图,这个特征图会先进入RPN网络当中,去提取一些候选区域(也叫ROI),接着这些ROI再和这些特征图ROI pooling,或者叫RoI Align操作,提取处RoI对应的特征,最后再将这些提取出来的特征送到BBox Head(也就是第二阶段),进一步的分类和回归。
Faster R-CNN会在两个地方用到NMS
第一个部分是在RPN生成候选区域(ROI)的时候,它会把RPN输出的分类分支和回归分支与anchor配合起来,先进行一个解码,得到一些候选框,然后再做一些NMS刷选,刷选之后就会得到一些对应的bboxs和score;
第二个部分就是在BBox Head阶段,也就是最后的预测阶段,它会把BBox Head输出的分类分支和回归分支与ROI配合起来,先进行一个解码,得到一些bboxs,然后将其输入到NMS当中。

RPN和BBox是一起训练的。RPN和BBox都会有分类分支和回归分支的loss,最终的loss是这个四个loss的加和,一起去做优化的。

物体框的表示啊,IOU的概念啊,NMS,卷积,池化,BN。

Faster R-CNN的各个模块,其实这些模块都是有一些优化空间的,比如说,数据预处理,也叫数据增强,我们可以加一些颜色增强,随机裁剪等。
RPN也会设计到正负样本的采样,它能不能真正采集到正负样本,这也是有优化空间的。
ROI Align其实就是一个优化策略了,原先是采用的ROI Pooling。
BBox Head是对检测框做进一步的调整,如何更好的调整,也是有提升的空间。
这就隐身到Faster R-CNN的晋升版了。比如下图
在这里插入图片描述两阶段方法

  • 先使用anchor回归候选框,划分前景和背景
  • 使用候选目标框进一步回归和分类,输出最终目标框和对应的类别。
一、两阶段检测进阶模型

1. FPN–多尺度金字塔

在这里插入图片描述

  1. FPN的解说
    FPN实际上要解决的也就是多尺度问题,其实多尺度问题也是所有视觉任务中要解决的一个比较重要的问题。它期望模型能够具备检测不同大小尺度的能力,换言之,怎么在一张图上,检测出大象和老鼠。
    可以看一下之前的方式:
    首先是金字塔的方式(a图),将图片调整到不同大小的尺度,使用多个模型进行预测,这个方法就十分的耗时,也消耗存储的空间。
    b图,它仅使用了最后一层的特征作为检测模型后续部分的输入。这种方式对小物体就不够优化了,因为我们知道,卷积神经网络存在着下采样的过程,比如说特征图的下采样是16,那么特征图的点就代表着原图中1616的小区域,但是如果这个时候,我需要检测小老鼠,它在原图中的大小是1010,这就意味着这张特征图在原图中无法检测这个10*10的小老鼠了。
    c图,刚刚也说了,卷积神经存在下采样的过程,这就说明它天然地具备了特征金字塔的结构,什么意思呢,也就是说明了它在不同的深度对应了不同语义层次的特征。就比如说倒数第二个特征层,相比浅层的网络的话,它的分辨率就比较高,学习更多的是细节的特征,而深层的网络(最上面的那个),它的分辨率就比较低,学习更多的是语义特征,或者说是全局的特征。如果这个时候,我有一个小老鼠,我就可以通过浅层的网络去学习了。
    d图,FPN,就是将不同层的特征进行一个融合,就希望能够让不同尺度的这个特征都具备一个比较全面的信息。

  2. FPN网络结构
    在这里插入图片描述
    FPN的输入就是骨干网络每一层的输出,然后将每一个特征图进行一个上采样,与上一层特征图进行一个相加,最终得到FPN的输出,具体的关系,如上图左边。其实在yolov3系列网络中就是使用了这种方式。

  3. FPN目标检测实现方法
    在这里插入图片描述

原先的faster rcnn的骨干网络只输出一张特征图,在骨干网络之后加入FPN网络,此时输出多张特征图,这样的话,RPN和ROI Align就会受到影响,第二阶段BBox Head不变。

  1. FPN结构下的RPN网络
    在这里插入图片描述
    1)Anchor: {3232, 6464, 128128, 256256, 512*512} – > {p2, p3, p4, p5, p6}
    FPN的输出层,P2到P6,每一层只生成一种面积的anchor(长宽比不变1:1, 1:2, 2:1),P6就是P5直接下采样得到的。
    说到anchor,就要说到anchor要和真实框去做正负样本的匹配,后面再做采样和监督信息的分配,这个过程和faster rcnn的过程是一样的。
    2)RPN网络分为多个head预测不同尺度上的候选框。
    RPN网络部分,原先faster RCNN当中,RPN的网络结构,就是输入一个特征图,经过33卷积,再经过一个11卷积,分别得到分类分支和回归分支,然后去计算loss和输出的候选框。 如下图。
    在这里插入图片描述
    而现在,有多个输入了,也就是不同尺度的特征图,我就要用多个head去预测不同尺度上的候选框,在这里,这个不同head的权重是共享的。如下图。
    在这里插入图片描述
    3)RPN网络的预测结果和anchor解码得到的RoI会进行合并。
    每一个head都会输出一个候选框(ROI),在FPN下,会将这个多个尺度的ROI进行合并。合并的方法是:先根据他们对应的分数来进行排序(比如说取2000个),再进入到第二个阶段的网络计算当中。

  2. FPN结构下的RoI Align
    在这里插入图片描述
    在这里插入图片描述
    如何将ROI分配到不同层级呢?
    将FPN的特征金字塔类比为图像金字塔,也就是不同尺度的特征,它就象征着不同大小的输入图像,因此我们就可以考虑这些RoI按面积来分配,分配的方法,就是上面的公式进行计算的。简单来说,我们把大的ROI分到深层的特征去学习,小的ROI分到浅层的特征去学习。

FPN模型效果
在这里插入图片描述

2. Cascade R-CNN

IoU表示两个检测框之间的重叠程度。
cascade RCNN主要是围绕IOU这个概念来展开的。它能够来评价我们的预测框预测的质量好不好。

正负样本定义规则

  • 基于Anchor和真实框IoU匹配值
    IoU>0.7为正样本,IoU<0.3为负样本
  • 基于Proposals和真实框IoU匹配值
    IoU>0.7为正样本,IoU<0.3为负样本

cascade RCNN主要基于RoI和真实框匹配值来展开分析的
那么IoU选择0.5这个值会不会有点低呢?也就是说,它训练出来的检测器可能会带来一些噪声,就是会产生一些比较多的误检框,那么直观的想法就是把这个0.5提升到0.7,这样的话,进入到第二阶段的RoI质量不就变高了嘛,但是呢,如果只是简单粗暴将这个IoU阈值提高,检测性能是不会提升,反而是下降的,有这么几个原因第一,IOU值提高了,用于训练的正样本数量是会成指数倍数量减少的,这就会导致我的第二阶段的训练出现过拟合;第二个原因就是,如果使用了一个比较高的IOU阈值,就很容易导致输入的候选框和设定的阈值不匹配的问题,这个不匹配下面将具体分析一下。

  1. Cascade R-CNN的IoU分析
    faster RCNN第二阶段,它会学习ROI到真实框的偏移量,然后再通过这个偏移量来提高我们预测框的质量。先看一下下面的左图。横轴就体现了ROI和真实框的质量怎么样。纵轴就体现了最终的预测框的质量。自然希望纵轴的值是越高越好的。
    在这里插入图片描述
  2. Cascade R-CNN网络结构
    在这里插入图片描述
  3. Cascade R-CNN模型效果
    在这里插入图片描述

3. Libra R-CNN

  1. 检测中的不平衡问题
    在这里插入图片描述

  2. Libra R-CNN的特征融合
    在这里插入图片描述
    在这里插入图片描述

  3. Libra R-CNN的采样策略
    在这里插入图片描述
    在这里插入图片描述
    比如说,我们需要20个负样本,假如说这些负样本的阈值都是大于0.1的,那么我们的负样本的范例就读再0.1到0.5之间,然后我期望采集6个负样本,就根据iou分为两个桶,一个是0.1到0.3一个桶,0.3到0.5一个桶,然后属于每个桶的随机采样。有可能存在一个情况,就是出现某个桶的数据不足,就需要在低于这个阈值(0.1)的样本中随机采样补齐。

  4. Libra R-CNN的回归损失函数
    在这里插入图片描述
    主要是在回归损失的优化。
    在这里插入图片描述

  5. Libra R-CNN效果
    在这里插入图片描述

二、两阶段检测进阶模型优化策略

在这里插入图片描述
在这里插入图片描述

1. 服务器端模型优化策略

  1. 服务器端模型优化基线方案
    在这里插入图片描述
    AutoAugment,这里就是通过强化学习来作为搜素的方法,去搜出,针对这个任务而言,常用的数据预处理的操作和选择顺序是最有效的。
    backbone:可变性卷积的思想就是让卷积核多学习一个偏移量,然后卷积核落到更感兴趣的区域当中;半监督知识蒸馏的方式,是在我们图像分类中应用的,提高精度。
    RPN:
    Iou Loss,直接将预测结果,也就是预测框和真实框的IOU的值直接作为回归分支的损失函数。
    CIou Loss,考虑到了物体间的中心点的距离和长宽比,这样就更有效了表达了预测结果的质量了。

  2. 服务器端模型优化效果
    在这里插入图片描述

2. 移动端模型优化策略

  1. 移动端模型优化现状
    在这里插入图片描述
    在小目标上,两阶段的效果比较好。

1.基线方案
在这里插入图片描述
在这里插入图片描述
移动端采用了余弦的学习率调整策略。
2. 移动端模型优化:微调FPN结构
在这里插入图片描述
采用下采样的策略。 FPN的通道数进行了调整。
3. 移动端模型优化效果
在这里插入图片描述

三、工业应用:铝压铸件质检
  1. 工业质检
    在这里插入图片描述
  2. 铝压铸件视觉检测
    在这里插入图片描述
    在这里插入图片描述
  3. 铝压铸件视觉检测难点
    在这里插入图片描述
  4. 铝压铸件视觉检测方案
    在这里插入图片描述
总结

FPN:通过多尺寸融合的方式提高检测精度,FPN中根据RoI的面积来分配所属层级。
– 多尺度检测
– FPN结构下不同模块的调整

Cascade R-CNN:通过级联的方式不断对预测框的位置进行微调,Cascade R-CNN中使用了3个BBox Head完成目标检测。
– 两阶段模型中IoU的使用
– 通过3个级联检测头对预测框不断调优

Libra R-CNN:从多个角度解决两阶段检测中存在不平衡问题,Libra R-CNN从FPN特征,正负样本采样,Loss几个角度讨论增强了两个阶段检测模型。
– 两阶段模型中不平衡问题
– 提出新的FPN结构,采样策略和回归loss

服务器端模型优化策略
移动端模型优化策略
工业案例分享



这篇关于RCNN系列算法优化策略与工业质检案例的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程