将检测看做机器学习问题

检测问题经典的建模

检测的问题是输入为一张图片,输出一些可能是框,并且对框进行分类。
所以检测的建模可以形式化的表达成:
Detection = classification(boxes)

  • label
    对于分类来说,背景类别为0,前景类别为1
    对于box来说,一个图像可以输出的框的数量是无穷的
  • 分类的规则(对每个框归属一个类别)
    如果一个框在GT的集合里,则类别为{1,C}
    否则,为背景,设为0

经典建模的问题

  1. 一张图里的box太多。(用有限的输出去近似)
  2. 分类的规则没有明确定义。(设计一个label assignment的规则)
  3. 输出非常冗余。(将输出聚类到实例上)
  4. 前景背景的平衡。(数据平衡,新的loss,级联)

问题1:box太多的问题

检测的输出空间是无穷的。
所以,一个办法是可以用一个有限的集合去近视无穷的输出空间,即生成一些可能的框(quantize),然后直接对框进行分类,但这个会有一个量化的损失,但我们可以去预测这些框的量化的error,就是回归的问题。
例1:Deformable part models
1. 量化框:利用滑动窗口在hog金字塔特征进行滑动
2. 对每个框进行分类:对每个框进行分类
3. 回归:原始的版本没有进行回归
例2:RetinaNet
1. 量化框:anchor
2. 分类:对每个anchor进行分类
3. 回归:对每个anchor进行回归quantise error
例3:CenterNet
1. 量化框:将box转换成一些点的集合
2. 分类:对每个点的特征向量进行分类
3. 回归:使用点对的特征向量回归一个框
例4:DeTR
1. 量化框:object qurry
2. 分类:对每个object qurry decoder输出进行分类
3. 回归:对每个object qurry decoder输出进行回归

问题2:分类规则不明确

GT一般都不在上述的量化的框里。分类的规则也没有明确定义。所以我们要指定一个label assignment的规则。常用的label assignment规则有
1、iou 阈值,max_iou
2. centeredness (anchor free, 也可以认为是point anchor)
3. ATSS(先选中k个最大iou的框,再计算这些框的均值与方差,通过均值与方差计算iou阈值,k个框大于iou为正样本)
4. 匈牙利算法匹配
在目标检测中,大部分模型都使用了FPN,那么又存在一个问题,GT分配在哪层fpn的head里。一般来说,GT的bbox的越大,需要的感受野就也大,则分配到感受野越大的fpn层。通常有四种measure的方法:

  • bbox的长边
  • bbox的短边
  • bbox的面积开方
  • 感受野中心到bbox四边的最大值(FCOS)
    我们再人工定义一个range,将上面的方法计算的数值映射到不同的fpn level上。

问题3:输出的冗余

由于每个quantize box都是独立预测,因此会生成很多冗余的框(匈牙利算法匹配除外)。因此需要对框进行聚合到实例上去,常用的方法有:

  1. nms (对目标密集的情况不好)
  2. softnms(对目标密集的情况不好)
  3. gt分配时使用匈牙利算法(detr-2020,End-to-end people detection in crowded scenes-2016)
  4. 根据loss和IOU来分配(YOLOX-2021)

问题4:前后背景平衡(经典问题)

  • 不进行量化框
    无穷的不平衡
  • 进行量化
    比如RetinaNet,一张图有100K个anchor,但只有0.1%-1%的样本被assign到前景,也极度的不平衡
    不平衡数据是很难学习的,这是机器学习里经典问题。通常有以下一些方法解决:
  1. loss
    focal loss:更加关注难样本(CE容易关注易样本)
  2. 级联
    在这里插入图片描述

如上图所示,将分类问题分解成多个模型进行解决,越早的模型需要的recall越高,也就是说越早的模型的数据比例可以越不平衡,对后面的模型则要求数据越来越均衡,从而一步一步的解决hard example。
这种方法在传统算法比较常见,例如adaboost的检测器,在深度学习里,two or more stage的模型比比皆是,比如RCNN家族:
RCNN:selective search-》convnet
fast RCNN:selective search =》fast RCNN head
faster RCNN:RPN =》fast rcnn head
cascade RCNN:RPN=》fast rcnn head 0=》fast rcnn head 1=》…=>fast rcnn head N
还有MTCNN:
pnet(过滤大部分背景和重复框)=》rnet(继续过滤,保持更高质量的候选框)=》onet(利用高质量的框回归lmk和更精确的框)

  1. 过度的量化框
    我们只需要将先验的框减少,这样正负样本就不会那么不平衡了,典型的做法是YOLO,YOLO只输出98个框。这样可以带来两个作用:
    (1)不平衡问题就没那么大
    (2)quantization error变大。(在实际操作中,回归较为困难?因此AP较低)

以上是经典的分类的范式,DeTR属于也符合以上的范式,并且很大程度的避免了这四个问题。
首先DETR没有产生quantise box,只是用了object qurry去学习一个先验的东西。detr也并没有label assignment的问题,直接把输出和GT做一个匈牙利算法匹配,也正是这个原因,一个GT只会有一个输出去预测,同时解决了输出冗余的问题。对于类别不平衡的问题,由于设置的num_object_qurry为100,问题不平衡的问题相对减轻了很多。在检测方向上,感觉transformer会是一个大趋势。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值