计算机视觉中的目标检测,因其在真实世界的大量应用需求,比如自动驾驶、视频监控、机器人视觉等,而被研究学者广泛关注。
 
上周四,arXiv新出一篇目标检测文献《Object Detection in 20 Years: A Survey》,其对该领域20年来出现的技术进行了综述,这是一篇投向PAMI的论文,作者们review了400+篇论文,总结了目标检测发展的里程碑算法和state-of-the-art,并且难能可贵的对算法流程各个技术模块的演进也进行了说明,还深入到目标检测的特定领域,如人脸检测、行人检测等进行了总结,最后列举了未来可能的发展方向。温故而知新,该论文极具参考价值!
 
 
作者来自美国密歇根大学、北京航空航天大学、滴滴出行。下图是作者在谷歌学术检索目标检测相关关键字返回的历年文献数量,可见该领域20年来越来越受到学术界的关注。2018年有将近1200篇相关文献发表。

 
  • 目标检测路线图
作者将目标检测近20年来的里程碑算法画在时间轴上,如下:

 
可见作者将算法大致分为2012年之前的传统检测方法与2012年之后出现的基于深度学习的检测方法。传统方法比如我们所熟知的V-J检测、HOG检测、DPM算法。深度学习方法截然不同的分为两条技术路径:单阶段检测算法与两阶段检测算法。同时作者把目标检测的一些精度提高的方法的出现也列在了时间轴上,比如bounding box regression、multi-resolution detection等。
 
在目前最知名的评估数据集VOC 2007 、VOC 2012、 COCO上不同年份出现的算法精度提高,如下图:

可见,深度学习在检测领域的开山之作,RCNN取得了大幅度精度提高,开辟了检测的新时代。而今年新出的TridentNet是目前在COCO数据集上取得较高精度的算法。
 
  • 目标检测数据集
作者总结了通用目标检测及几个特定目标检测的数据集。通用目标检测领域常用数据集:

 
几个常用数据集的示例图片:

 
行人检测常用数据集:

 
人脸检测常用数据集:

 
文本检测常用数据集:

 
交通灯检测与交通标志检测常用数据集:

 
遥感目标检测常用数据集:

 
  • 目标检测技术演进
作者将目标检测中涉及的各种技术的演进铺展开来,让我们能就单一技术看到发展路径。早期目标检测算法代表:

 
多尺度检测技术演进路线:

 
包围框回归技术演进路线:

 
目标上下文建模技术演进路线图:

 
包围框非极大抑制(NMS)技术演进路线图:

 
难检测负样本挖掘技术演进路线图:

 
  • 目标检测计算加速
目标检测天生是计算密集型任务,所以从其在其发展的各个阶段,目标检测算法的加速就是一个重要议题。作者总结的目标检测计算加速方法:

可见主要是在三个层次加速:
  • 数值计算层次(如积分图、矢量量化等)
  • 检测引擎层次(网络剪枝与量化、轻量级网络设计等)
  • 检测流程层次(特征图共享、分类器加速、级连检测等)
 
因为目前CNN检测方法是主流,作者列出的近年出现的卷积计算的一些加速方法及其时间复杂度:

 
  • 目标检测进展
作者在这部分描述了近三年来state-of-the-art目标检测技术的研究进展:
  1. 更好地引擎(engine):作者将深度学习目标检测网络的骨干网称为其引擎。改进目标检测的一个直接思路就是使用更加先进的骨干网。如下图(相同算法用相同颜色的圆点表示,使用相同引擎的算法结果用一个大括号连接,我们可以轻易看出,使用不同的引擎对最终精度的影响更大):
  2. 使用更好的特征:1)特征融合;2)学习大感受野的高分辨率特征
  3. 超越滑动窗口:不再是局限于候选区域再分类的模式。作者提到两种新模式:1)子区域搜索 sub-region search。将目标检测看为从初始网格到最终ground truth box的路径规划过程。2)关键点定位。将目标检测看为特定语义点定位的过程。比如:ECCV18 Oral | CornerNet目标检测开启预测“边界框”到预测“点对”的新思路Grid R-CNN解读:商汤目标检测算法
  4. 目标定位改进:1)包围框提精。2)改进loss函数用于较精确定位。比如:CVPR 2019 | 旷视提出新型目标检测损失函数:定位更精准
  5. 检测与分割一起进行:分割可以帮助目标检测提高类别识别的精度、获得更好地目标定位、潜入更加丰富的上下文。分割的网络可以作为目标检测的提取网络,也可以作为多任务学习的损失函数,用以改进目标检测。52CV曾经报道过一篇文章甚至分割完全可以用来替换检测:目标检测:Segmentation is All You Need ?
  6. 旋转和尺度变化鲁棒的目标检测:针对旋转变化鲁棒改进方向:1)旋转不变损失函数;2)旋转校正;3)Rotation RoI Pooling。针对尺度变化鲁棒的改进:1)尺度自适应训练;2)尺度自适应检测。
  7. Training from Scratch:不使用预训练模型,从头开始训练目标检测网络。比如:CVPR 2019 | 京东AI研究院提出ScratchDet,加强对小目标的检测,代码将开源。
  8. 对抗训练:比如有研究表明,GAN可以用来改进小目标的检测。
  9. 弱监督的目标检测:不使用包围框标注,而仅使用图像级的目标标注的算法。减少标注成本。扩大训练集。
 
  • 目标检测应用
作者列举了目标检测的几个特殊应用,包括行人检测、人脸检测、文本检测、交通灯及标志检测、遥感目标检测。

 

指出每种检测任务面临的困难和挑战,并简述了目前应对这些问题的方法。
 
  • 目标检测的未来方向
作者列举了以下几个未来方向:
  1. 轻量级目标检测算法;
  2. 用AutoML设计目标检测算法,比如:Google CVPR 2019成果!用神经架构搜索实现更好的目标检测
  3. 域适应(domain adaptation)改进目标检测;
  4. 弱监督的目标检测;
  5. 小目标检测;
  6. 视频目标检测
  7. 融合其他传感器信息的目标检测。
 
 
最后附上论文地址:https://arxiv.org/abs/1905.05055v1
 
 

AI佳作解读系列(五) - 目标检测二十年技术综述的更多相关文章

  1. AI佳作解读系列(二)——目标检测AI算法集杂谈:R-CNN,faster R-CNN,yolo,SSD,yoloV2,yoloV3

    1 引言 深度学习目前已经应用到了各个领域,应用场景大体分为三类:物体识别,目标检测,自然语言处理.本文着重与分析目标检测领域的深度学习方法,对其中的经典模型框架进行深入分析. 目标检测可以理解为是物 ...

  2. AI佳作解读系列(六) - 生成对抗网络(GAN)综述精华

    注:本文来自机器之心的PaperWeekly系列:万字综述之生成对抗网络(GAN),如有侵权,请联系删除,谢谢! 前阵子学习 GAN 的过程发现现在的 GAN 综述文章大都是 2016 年 Ian G ...

  3. AI佳作解读系列(一)——深度学习模型训练痛点及解决方法

    1 模型训练基本步骤 进入了AI领域,学习了手写字识别等几个demo后,就会发现深度学习模型训练是十分关键和有挑战性的.选定了网络结构后,深度学习训练过程基本大同小异,一般分为如下几个步骤 定义算法公 ...

  4. AI佳作解读系列(四)——数据增强篇

    前言 在深度学习的应用过程中,数据的重要性不言而喻.继上篇介绍了数据合成(个人认为其在某种程度上可被看成一种数据增强方法)这个主题后,本篇聚焦于数据增强来介绍几篇杰作! (1)NanoNets : H ...

  5. AI佳作解读系列(三)——深度学习中的合成数据研究

    Below are some investigation resources for synthetic datasets: 1. Synthetic datasets vs. real images ...

  6. CVPR2019目标检测方法进展综述

    CVPR2019目标检测方法进展综述 置顶 2019年03月20日 14:14:04 SIGAI_csdn 阅读数 5869更多 分类专栏: 机器学习 人工智能 AI SIGAI   版权声明:本文为 ...

  7. Google AI推出新的大规模目标检测挑战赛

    来源 | Towards Data Science 整理 | 磐石 就在几天前,Google AI在Kaggle上推出了一项名为Open Images Challenge的大规模目标检测竞赛.当今计算 ...

  8. Alamofire源码解读系列(五)之结果封装(Result)

    本篇讲解Result的封装 前言 有时候,我们会根据现实中的事物来对程序中的某个业务关系进行抽象,这句话很难理解.在Alamofire中,使用Response来描述请求后的结果.我们都知道Alamof ...

  9. deeplearning.ai 卷积神经网络 Week 3 目标检测 听课笔记

    本周的主题是对象检测(object detection):不但需要检测出物体(image classification),还要能定位出在图片的具体位置(classification with loca ...

随机推荐

  1. koa2 快速开始

    环境准备 Node.js简介 因为node.js v7.6.0开始完全支持async/await,不需要加flag,所以node.js环境都要7.6.0以上.Node.js 是一个基于 Chrome ...

  2. python递归的最大层数?

    Python的最大递归层数是可以设置的,默认的在window上的最大递归层数是 998. 可以通过sys.setrecursionlimit()进行设置,但是一般默认不会超过3925-3929这个范围 ...

  3. 运算符 & | ^ ~ >> << 讲解

    字节”是byte,“位”是bit :1 byte = 8 bit : char 在java中是2个字节.java采用unicode,2个字节(16位)来表示一个字符. char 16位2个字节 byt ...

  4. 学到了林海峰,武沛齐讲的Day34 完 线程 进程 协程 很重要

    线程 进程 协程 很重要 ...儿子满月回家办酒,学的有点慢,坚持

  5. learning armbian steps(1) ----- armbian 入门知识基础学习

    第一问: armbian是什么? Armbian是轻量级的Debian系统和为ARM开发板专门发行并重新编译的Ubuntu系统. 第二问:  什么场景下会用到armbian系统? 一个带有arm编译器 ...

  6. QMutexLocker基于QMutex的便利类

    首先需要注意的是:QMutexLocker这个类是基于QMutex的便利类,这个类不能够定义   私有成员变量  和  全局变量,只能够定义局部变量来使用. 使用方法:(1)先定义一个QMutex类的 ...

  7. Python中多层List展平为一层

    小书匠python 使用Python脚本的过程中,偶尔需要使用list多层转一层,又总是忘记怎么写搜索关键词,所以总是找了很久,现在把各种方法记录下来,方便自己也方便大家. 方法很多,现在就简单写8种 ...

  8. javascript生成表格增删改查 JavaScript动态改变表格单元格内容 动态生成表格 JS获取表格任意单元格 javascript如何动态删除表格某一行

    jsp页面表格布局Html代码 <body onload="show()"> <center> <input type="text" ...

  9. rocketMq和kafka的架构区别

    概述 其实一直想写一篇rocketMq和kafka在架构设计上的差别,但是一直有个问题没搞明白所以迟迟没动手,今天无意中听人点播了一下似乎明白了这个问题,所以就有了这篇对比. 这篇博文主要讲清楚kaf ...

  10. 在Typora中使用Latex

    https://blog.csdn.net/happyday_d/article/details/83715440 今后可能更多在本地编辑出Markdown之后复制上博客或者上传到GitHub.