本文对CV中目标检测子方向的研究,整理了如下的相关笔记(持续更新中):

1. Cascade R-CNN: Delving into High Quality Object Detection

年份:2018;关键词:Cascade RCNN;引用量:749;推荐指数(1-5):5

描述:一般正常的检测器是用0.5的IOU阈值(用于提出正负样本)训练,但如果提高IOU阈值会降低检测器的表现。这有两个原因:

  1. 当训练时,高IOU阈值会减少提出的正样本,引发exponentially vanishing positive samples问题,使得模型过拟合。
  2. 在inference阶段,输入的IOU与输出的IOU不匹配也会导致精度的下降。注:其中的输入IOU是RPN输出proposal的IOU(控制正负样本),输出IOU是proposal经过bbox classification时的IOU(判断是否为正例)。

为了解决上述瓶颈:作者使用cascade的网络结构在bbox head上面,如论文中的图3,先用iou=0.5训练RPN,然后再级联不同的检测器(IOU=0.5,0,6,0.7),H1预测结果框将被输入给下一个H2进行训练,依次后推此过程。再输入给下一个检测器前,输出结果会被normalization(即减去平均值再除方差),这样就能保证不同阶段下的目标框分布能保持稳定的一致性。从小IOU到大IOU避免了过拟合,而且normalization使得输入IOU与输出IOU有个较好的匹配。此外,创新点处是在在bbox head上引入级联结构且加入了normalization。
心得:当评估标准所用IOU较高时,可以考虑先提高不同检测器的IOU(例如都加0.1),看看模型表现,如果有提升,可以再试着调整RPN里的IOU(例如提高提出pos的IOU)。因为严格的评估意味着要求模型检测质量要高,而IOU的提高对于获取高质量的结果有帮助。


 2. YOLO9000: Better, Faster, Stronger

年份:2016;关键词:YOLOv2;引用量:5934;推荐指数(1-5):5

描述:YOLOv2解决YOLO第一版本的性能问题(localization error和low recall )。YOLOv2使用了Dimension Cluster用以K-means聚类得到候选框,然后再根据聚类候选框改进bbox定位方法。同时还使用了Fine-Grained Features,该方法是将passthrough层放在抽取特征图后,检测器前。passthrough层是抽取前面层的局部区域2*2的局部区域,然后将其转化为channel维度,从而得到更精的特征图,有利于帮助预测小物体,有1%的提升点。另外还有其他手段,例如训练high resolution classifier,有4%的提升点。YOLOv2的创新点:用聚类的思想生成合适的候选框,以及使用了多种tricks。

心得

  1. 可以根据原论文图2的形式,选择合适数量的聚类数,再使用Cluster IOU的候选框去代替人工定义的候选框。
  2. passthrough的思想(即将大特征图划分后叠加在channel上,以利用low-level特征进行预测)和
  3. high resolution classifier的思想(即若预训练模型的预训练数据输入尺寸比实际训练图像尺寸小,可以试着先用大尺寸的预训练数据在fine-tuning训练下预训练模型,让其熟悉大尺寸输入,训练好后,再用实际大尺寸图像进行训练,类似SNIP的预训练方法)。

3.  Libra R-CNN: Towards Balanced Learning for Object Detection

年份:2019;关键词:Libra R-CNN;引用量:149;推荐指数(1-5):5

描述:解决瓶颈:训练中不平衡问题。在样本层的不平衡问题上,OHEM对noise labels敏感且计算昂贵。Focal loss对单阶段模型有利,而双阶段模型由于常提出easy negatives,而使Focal loss在此没有提升。在特征层上的不平衡问题上,高层特征富含语义(semantic meaning),而底层特征有更多的内容描述(content descriptive)。在目标层上有类别(classification)和定位(localization)的不平衡问题。

解决方法:针对三个层次 - 样本层,特征层和目标层,作者提出了Lirbra RCNN框架,它集成了3个部分:IOU-balanced sampling,Balanced feature pyramid和Balanced L1 loss。

  1. IOU-balanced sampling:提前设置好K个IOU bins,然后根据论文公式(2)的选择概率为每个bins选择相同数量的hard negative samples。默认K=3。
  2. Balanced feature pyramid:它的pipeline主要依次分为rescaling, integrating, refining和strengthening。最后得到的不同feature pyramid可以继续接着FPN使用。
  3. Balanced L1 loss:在检测器部分,hard samples往往被认为是outliers,它会引起过大额梯度从而不利于训练。而inliers(即easy samples)相比于outliers,对于总体梯度贡献的梯度较少。具体来说,对于outliers,inliers平均每个样本只贡献30%的梯度。在 Balanced L1 loss中,alpha控制inliers的梯度变化,alpha越大,梯度变化越大,但alpha无法控制outliers。gamma调节regression error的上限。默认alpha=0.5,gamma=1.5。

创新点:使用了三种分别应对样本层,特征层和目标层上不平衡问题的方法。

心得:

  1. 根据IOU-balanced sampling 实验来看,当K=3是,总AP最好,但是K>0会使得AP50有所下降,大于0.3左右,而AP75会增加1.5左右。
  2. 根据 Balanced L1 loss实验来看,alpha 和gamma的调整都是有提升的。
  3. Libra R-CNN的三种平衡方法都可以独立使用,并没有说三个方法的各自性能存在相互依赖关系。

 4. Deformable Convolutional Networks

年份:2017;关键词:DCN;引用量:1295;推荐指数(1-5):5

描述:解决瓶颈:针对如何适应数据集上的空间变换,传统思路有两种:一是增强训练集的变化,二是用变换不变性特征(transformation-invariant features)和算法(例如SIFT,scale invariant feature transform)。而前者的先验设计缺乏通用性,后者难以应对复杂的空间变换。

解决方法:作者认为高层CNN上,关于特征的采样应基于object,而不是简单的grid。DCN提出了关于卷积层和ROI pooling的deformable形式。

  1. Deformable Convolution:先通过conv正常进行特征映射,然后将其通过由输入的特征映射学习到的偏移offset,最后偏移输出结果。
  2. Deformable ROI Pooling: 先由传统ROI pooling得到ROI特征映射,然后通过fc归一化,再偏移且双线性插值输出结果。
  3. Position-Sensitive (PS) ROI Pooling:与 Deformable ROI Pooling主要区别在于PS ROI Pooling使用了conv。

创新点:提出了deformable ConvNets对特征进行non-grid的映射抽取。
心得:效果不错,默认deformable convolution是放在最后3个卷积层的位置上。


5.  Making Convolutional Networks Shift-Invariant Again

年份:2019;关键词:BlurPool;引用量:110;推荐指数(1-5):3

描述:解决瓶颈:许多CNN不具有平移不变性(shift-invariant),输入上小的移动或平移就会导致输出的严重改变。
解决方法:为了使模型训练过程中的特征具有移动不变性Shift-equivariance。作者提出了BlurPool,它就是使用了一个Blur kernel,例如最大池化第一步是先计算区域的最大值,然后进行采样,而BlurPool则将低通滤波(low-pass filter)的操作嵌入到中间,在采样前先经过一个模糊低通滤波的作用,然后采样。将模糊下采样和最大池化相结合起来,减小了混叠效应,提升了网络的平移不变性能力。Blur kernel/filter有三种形态:Rect-2,Tri-3,Bin-5。
创新点:提出了BlurPool,帮助模型模糊输入的平移。
心得:BlurPool能增强模型对不同平移输入的鲁棒性。其中Bin-5是Blur kernel 效果最好。


 6. MMDetection: Open MMLab Detection Toolbox and Benchmark

年份:2019;关键词:MMDetection;引用量:229;推荐指数(1-5):5

描述:解决瓶颈:现有集成的代码库不够丰富。
解决方法:将目标检测多种SOTA模型和优化手段集成到mmdetection代码库中,灵活且高效。
创新点:将不同SOTA目标检测模块集成代码库。
心得:
(1)2018 COCO冠军所用的代码库。
(2)Balanced L1 loss在IOU-balanced sampling或者balanced FPN上表现更好。
(3)IoU-based losses比L1-based losss表现的更好些,除了Bounded IoU Loss。GIoU loss比IoU loss高0.1%,Bounded IoU Loss和Smooth L1 Loss相似,但前者需要更大的loss weight。
(4)因为bachsize很小,所以冻结batch normalzation。而且不同normalization的效果都差不多。
(5)关于多尺度学习,range模式上比value好。range下,长边 × [短边下限,短边上限],短边下限变大并不能提升准度,而 短边上限可以。


 7. Bag of Freebies for Training Object Detection Neural Networks

年份:2019;关键词:Mixup;引用量:38;推荐指数(1-5):5

描述:解决瓶颈:研究不同小技巧对一阶和二阶模型的提升。
解决方法:作者们研究的小技巧为:Mixup, label smoothing, Random geomertry transformation和Random color jittering, cosine lr schedule, synchronized batch normalization, random shapes training。

创新点:在mixup上,作者使用了geometry preserved alignment的方式去避免就扭曲图像.
心得:
(1)在使用mixup时,作者提议使用beta分布,其中alpha和beta都为1.5可以保证图像视觉上更自然些。
在预训练阶段和实际训练阶段都用mixup在coco上可以获得最大的提升1.2%,而但用mixup在其中一个阶段会有0.2%mAP左右的绝对提升。
(2)虽然cosine lr schedule在结果表现上有提升,但是比赛时有选手反映其不能带来明显提升,其实如果step lr schedule在第二步衰减后晚点取最终的epoch结点模型,个人觉得可以忽略掉cosine lr schedule和step lr schedule之间的不同。
(3)传统的一阶模型十分依赖输入图像上的空间信息,而二阶模型是通过ROI采样方式进行特征提取,因此不太需要很多geometric augmentations操作,例如random cropping。
(4)Label smoothing本质上是对交叉熵cross entropy中的q做文章,原本q是服从独热分布的,但这样可能会导致模型在预测中过于自信而过拟合,label smoothing就是调整了q的上下限,使模型对于预测不要那么自信。
(5)从结果看cosine lr schedule, class label smoothing, mixup对二阶段模型帮助挺大的,这同样适用于一阶段模型,但数据增强对于二阶段模型不是那么的必要,反而对一阶模型有很大的帮助。


@page { margin-top: 2cm margin-right: 2cm margin-bottom: 2cm margin-left: 2cm }
p { margin-bottom: 0.25cm; direction: ltr; color: rgba(0, 0, 10, 1); line-height: 120%; text-align: left; orphans: 2; widows: 2 }
p.western { font-family: "Calibri", serif; font-size: 11pt; so-language: en-GB }
p.cjk { font-size: 11pt; so-language: zh-CN }
p.ctl { font-family: "宋体"; font-size: 11pt; so-language: ar-SA }
a:link { so-language: zxx }

关于目标检测(Object Detection)的文献整理的更多相关文章

  1. 关于目标检测 Object detection

    NO1.目标检测 (分类+定位) 目标检测(Object Detection)是图像分类的延伸,除了分类任务,还要给定多个检测目标的坐标位置.      NO2.目标检测的发展 R-CNN是最早基于C ...

  2. 深度学习中目标检测Object Detection的基础概念及常用方法

    目录 关键术语 方法 two stage one stage 共同存在问题 多尺度 平移不变性 样本不均衡 各个步骤可能出现的问题 输入: 网络: 输出: 参考资料 What is detection ...

  3. 目标检测Object Detection概述(Tensorflow&Pytorch实现)

    1999:SIFT 2001:Cascades 2003:Bag of Words 2005:HOG 2006:SPM/SURF/Region Covariance 2007:PASCAL VOC 2 ...

  4. 评价目标检测(object detection)模型的参数:IOU,AP,mAP

    首先我们为什么要使用这些呢? 举个简单的例子,假设我们图像里面只有1个目标,但是定位出来10个框,1个正确的,9个错误的,那么你要按(识别出来的正确的目标/总的正确目标)来算,正确率100%,但是其实 ...

  5. 目标检测算法(1)目标检测中的问题描述和R-CNN算法

    目标检测(object detection)是计算机视觉中非常具有挑战性的一项工作,一方面它是其他很多后续视觉任务的基础,另一方面目标检测不仅需要预测区域,还要进行分类,因此问题更加复杂.最近的5年使 ...

  6. ng-深度学习-课程笔记-13: 目标检测(Week3)

    1 目标定位( object localization ) 目标定位既要识别,又要定位,它要做的事就是用一个框框把物体目标的位置标出来. 怎么做这个问题呢,我们考虑三目标的定位问题,假定图中最多只出现 ...

  7. [DeeplearningAI笔记]卷积神经网络3.1-3.5目标定位/特征点检测/目标检测/滑动窗口的卷积神经网络实现/YOLO算法

    4.3目标检测 觉得有用的话,欢迎一起讨论相互学习~Follow Me 3.1目标定位 对象定位localization和目标检测detection 判断图像中的对象是不是汽车--Image clas ...

  8. 语义分割(semantic segmentation) 常用神经网络介绍对比-FCN SegNet U-net DeconvNet,语义分割,简单来说就是给定一张图片,对图片中的每一个像素点进行分类;目标检测只有两类,目标和非目标,就是在一张图片中找到并用box标注出所有的目标.

    from:https://blog.csdn.net/u012931582/article/details/70314859 2017年04月21日 14:54:10 阅读数:4369 前言 在这里, ...

  9. Python实现YOLO目标检测

    作者:R语言和Python学堂 链接:https://www.jianshu.com/p/35cfc959b37c 1. 什么是目标检测? YOLO目标检测的一个示例 啥是目标检测? 拿上图 (用YO ...

随机推荐

  1. swoole父进程和子进程之间通信的例子

    <?php /** 这是一个swoole父进程和子进程之间通信的例子 */ //进程创建成功后回调处理 function handle(swoole_process $worker){ //从进 ...

  2. 在Linux命令行内的大小写转换

    在编辑文本时大小写常常是需要注意的地方,大小写的转换是很枯燥而繁琐的工作,所幸,Linux 提供了很多能让这份工作变得容易的命令.接下来让我们看看都有哪些完成大小写转换的命令. tr 命令 tr (t ...

  3. 多测师讲解selenium _a标签定位()_高级讲师肖sir

    shift+ctrl+c 快捷键  调出元素

  4. C++11随机数库

    random随机数库 C++11引入了新的随机数生成机制,那就是<random>随机数库,支持多种伪随机数生成算法,多种连续和离散随机数分布算法,以及封装了真正的随机数生成引擎random ...

  5. selenium环境配置学习笔记

    一 为什么进行自动化测试 缩短测试周期 避免人为出错 测试信息存储 轻易获取覆盖率 二 web/ui自动化条件和适用范围 手工测试已经完成,后期在不影响进度的前提下逐渐实现自动化 项目周期长,重复性工 ...

  6. xuexi0.1

    1.C语言通过编译器对内存进行了一定的封装.a +=4等效于a=a+4.C语言中数据类型的本质含义:表示一个内存格子的长度和解析方法.(int *)0:表示0是一个指针,这个指针指向一个int类型的数 ...

  7. HTML轮播(1)

    前言 要想实现轮播,我们就得先把最基础的功能实现,那就是滚动,实现了滚动后就可以继续扩展,完成更多想要的效果 CSS <style> #LB { width: 100%; height: ...

  8. Windows下显示已经连过的Wifi密码

    Windows下显示已经连过的Wifi密码   1. 打开cmd   2. netsh   3. wlan show profile 可以得到所有已经连过的wifi   4. wlan show pr ...

  9. service下载任务

    在service开启线程,利用接口更新进度 public class MainActivity extends AppCompatActivity { MyBindService msgService ...

  10. 简单记录几个wpf学习上的问题[ObservableQueue]

    我想给我的程序加一个下载队列,当我点击一个下载按钮的时候,他应该把这个插件信息(对象)加到一个队列中,然后队列里去实现下载和删除任务,下载完成则删除对象 首先我想到了Queue类型,然后我在我的vie ...