zoukankan      html  css  js  c++  java
  • 【检测分割算法整理】

    (部分可见 https://www.cnblogs.com/EstherLjy/p/9328996.html )

    一、理论效果对比:

     

    二、算法理论:

    1.Faster Rcnn

      1.1 框架

      1)用基础网络(VGG16)获得feature map;2)将feature map输入到RPN网络中,提取proposal,并将proposal映射到原feature上;3)将proposal的feature map用ROI pooling池化到固定长度;4)进行类别的分类和位置的回归。

      

      1.2 ROI-pooling

      1)目的:由于有全链接层,需要将proposal对应的feature_map转成固定长度

      2)方法:ROI-pooling,ROI-align

      ROI-pooling:直接量化,整个流程中有两次量化,一次是proposal对应到fature map(直接向下取整),一次是ROI-pooling,分n*n的块不能完全且分(舍弃一部分)

      ROI-align:对proposal对应的feature map(非整数)切成n*n,对每个cell双线性插值获得k(一般是4)个采样点,对采样点取最大值/平均值

      1.3 RPN

      思想:输入公共feature map,做3*3的卷积得到H*W*256的feature map,在feature map的每个cell上(真实是原图上,一个点对应原图上一个框)赋予9=3(3种size)*3(3种比例,1:1,1:2,2:1)个anchor,每个anchor需要检测该cell是不是目标(9*2=18维),以及目标的更精确的位置(9*4=36维),整个feature map得到W/4*H/4*(18+36=54)大小的feature map,接着就可以按分数取正负样本。

    2.Cascade Rcnn

      2.1 原因:

      1)BBox精度不够高,原因为RPN提取的proposal>0.5认为是正样本,输入到分类器进行回归;

      2)0.5附近这部分正样本并不太正,回归起来较难,且这种正样本输入训练出的分类器,容易把更高IOU(比如0.8)的的proposal回归的不好;

      3)单纯提高阈值会导致正样本比例不够,容易过拟合

      2.2 思路: 

      1)单次回归不足以产生准确的信息,需要多次迭代

      2)使用分类器集合,针对不同IOU层次的box进行不同回归,使得每个阶段的proposal都能较好回归

      3)前面分类器回归后的proposal(IOU从0.5到0.6)可以作为后面分类器的正样本,因此高层的正样本也是够的

      很难让一个在指定IOU阈值界定的训练集上训练得到的检测模型对IOU跨度较大的proposal输入都达到最佳,因此采取cascade的方式能够让每一个stage的detector都专注于检测IOU在某一范围内的proposal,因为输出IOU普遍大于输入IOU,因此检测效果会越来越好

    3.YOLO相关

      3.1 YOLO-V1

      1)将一幅图像分成SxS个网格(grid cell),如果某个object的中心 落在这个网格中,则这个网格就负责预测这个object。每个网络需要预测B个BBox的位置信息和confidence(置信度)信息,一个BBox对应着四个位置信息和一个confidence信息。confidence代表了所预测的box中含有object的置信度和这个box预测的有多准两重信息。

      2)由于存在全连接层输入大小需要固定;一个网格最多检测一个物体;损失是绝对值;效果不好;

      3.2 YOLO-V2

      1)分类和检测联合训练(类似扩充数据集并移植);放9个先验框;去除全连接层;约束学习到的边框;passthrough层;图像多尺度训练;

      3.2 YOLO-V3

      1)darknet53;sofmax->多个二分类;FPN;

      3.3 Yolo-v5

      1)数据增强(随机缩放、随机裁剪、随机排布),自适应锚框计算,自适应图片缩放 

    4.Fcos

       4.1 思想:避免anchor设置中的各种超参数

      1)把分割运用到检测,anchor free,对图上每个位置进行回归和分类

      2)负样本会很多,用与目标中心点的距离抑制错误

      4.2 做法:

      1)将feature_map的每一个cell映射回原图上成一个框,如果这个映射框处在待检测目标的范围内(有交集)则这个cell为正样本,否则为负样本

      2)模糊case(真实处在多个目标框)判为面积最小的边界框,

      3)确定GT后,回归与原图框的相对位移,不同层回归不同大小的目标

      4)分类回归的同时学习离目标中心的距离抑制错误

      4.3 与基于anchor的方法(下面称为anchor法)不同之处:

      1)Fcos对feature map对应的原图框进行回归,anchor法是对anchor进行回归;2)Fcos的gt是 如果原图框与真实框有交集就是正样本,anchor法是anchor与真实边框的iou大于一定阈值时正样本;3)Fcos训练C个二元分类器,anchor法回归一个多元分类器。4)FCOS通过直接限定不同特征级别的边界框的回归范围来解决模糊case。5)FCOS添加Center-ness分支,用于抑制低质量的预测边界框。

    5.OHEN

      5.1 目的:区分难分样本

      5.2 方法:多学习难例

      对于一次SGD迭代:先计算出特征图,可读RoI网络对所 有RoI执行前向计算并计算每个RoI的损失,然后选择hard RoIs。把这 些hard RoIs输入到可读可写的RoI网络中执行前向前向计算和反向传播更新网络,并把可读可写的RoI网络的参数赋值给只可读的网络,一次 迭代完成。

     

    6.Focol Loss

      6.1 目的:解决难易样本不均衡问题

      6.2 方法:降低易分类样本的权重

      

      6.2 与OHEM区别:ohem按loss大小选负样本,但忽略了那些loss较小的easy的负样本,虽然这些easy负样本loss很小,但数量多,加起来的loss较大,对最终loss有一定贡献。Focol Loss想把这些loss较小的也融入到loss计算中。想融入一些easy example,希望他们能有助于训练,但又不希望他们主导loss。

    7.RetinaNet:Resnet+FPN+FCN+Focal_loss,效果不如Faster Rcnn

    8.Mask Rcnn:在Faster Rcnn基础上添加一个Mask预测分支,每个类一张特征图

      8.1 网络框架  

      

     三、算法实践结论:

    1.OHEM一般用在RCNN层,在类别判断上效果明显,准召上提升也较明显

    2.Focol_Loss一般用在RPN层,可以提升目标召回,但会带来噪声

    3.deform可提升小目标召回,但会带来噪声

    4.Fcos比Faster召回高但带来大量噪声,实际可能不适用

    博文转载请注明出处。
  • 相关阅读:
    zoj1942Frogger
    阿里云api调用做简单的cmdb
    约瑟夫环
    Bag标签之中的一个行代码实行中文分词实例3
    用lua扩展你的Nginx(整理)
    Single Number III
    TCP/IP ---分层
    TCP/IP --概述
    adb命令学习
    How to set Selenium Python WebDriver default timeout?
  • 原文地址:https://www.cnblogs.com/EstherLjy/p/14696537.html
Copyright © 2011-2022 走看看