截止日期:2019.6.26
当前的检测算法可谓是人才辈出,我菜只能仰望。
当前主流的模式主要分为三大类
- 单阶段:代表有SSD、YOLO,retinanet。
- 多阶段的:代表有Faster-Rcnn,Cascade RCNN。
- 基于点的:代表有FCOS,FSAF
一、单阶段
单阶段的始于YOLO,其主要思想是通过在最后的feature上取anchor来获取最终的检测结果。
ssd对其进行改进,采取层次多尺度来做。
单阶段检测算法有个缺点,那就是样本不均衡,对于样本不均衡的问题,retinanet做出了改进,提出了Focal loss
二、多阶段
最经典的当属Faster-RCNN
后面对其改进主要集中在rpn和head上,当然roi pooling也是其中一块
对于多阶段的FPN,不再阐述
对roi pooling做改进的是R-FCN,k表示roi pooling大小,
对于rpn的改进有几种情况
比如自动生成anchor
Region Proposal by Guided Anchoring
Libra R-CNN balance 的选择样本
对head 的改进如
CascadeRCNN,多阶段的rpn
自动选择层次的FSAF
三、基于点的检测
CornerNet基于边界点的检测。
基于中心点的FCOS
四、 Tricks
样本均衡问题:
解决困难样本的OHEM
From: https://blog.csdn.net/u012426298/article/details/81773319
将Fast RCNN分成两个components:ConvNet和RoINet. ConvNet为共享的底层卷积层,RoINet为RoI Pooling后的层,包括全连接层;
2 对于每张输入图像,经前向传播,用ConvNet获得feature maps(这里为RoI Pooling层的输入);
3 将事先计算好的proposals,经RoI Pooling层投影到feature maps上,获取固定的特征输出作为全连接层的输入;
需要注意的是,论文说,为了减少显存以及后向传播的时间,这里的RoINet是有两个的,它们共享权重,
RoINet1是只读(只进行forward),RoINet2进行forward和backward:
a 将原图的所有props扔到RoINet1,计算它们的loss(这里有两个loss:cls和det);
b 根据loss从高到低排序,以及利用NMS,来选出前K个props(K由论文里的N和B参数决定)
为什么要用NMS? 显然对于那些高度overlap的props经RoI的投影后,
其在feature maps上的位置和大小是差不多一样的,容易导致loss double counting问题
c 将选出的K个props(可以理解成hard examples)扔到RoINet2,
这时的RoINet2和Fast RCNN的RoINet一样,计算K个props的loss,并回传梯度/残差给ConvNet,来更新整个网络
以及之前提过的Focal loss
以及 Gradient Harmonized Single-stage Detector
每个区间求梯度平均,着重处理中间低密度样本。
注意力机制
DCN系列,修改conv操作
non-local,计算两个点的关联关系
GCNet,赋予不同通道的权重。
LOSS
用低分代替NMS的去除操作。
修改IOU 的GIOU
假如现在有两个任意性质 A,B,我们找到一个最小的封闭形状C,让C可以把A,B包含在内,然后我们计算C中没有覆盖A和B的面积占C总面积的比值,然后用A与B的IoU减去这个比值:
五、 轻量化
SkyNet: A Champion Model for DAC-SDC on Low Power Object Detection