阿里、蚂蚁、晟腾、中科加禾精彩分享 AI 基础设施洞见,现购票可享受 9 折优惠 |AICon 了解详情
写点什么

基于深度学习的目标检测简史

  • 2019-10-08
  • 本文字数:4845 字

    阅读完需:约 16 分钟

基于深度学习的目标检测简史

7 月 28 日,NIUDAY 厦门站——七牛 &美图 AI 共享日中,厦门大学智能科学与技术系副教授苏松志为大家带来了关于「基于深度学习的目标检测算法实践」的分享,苏教授的主要研究方向是计算机视觉、机器学习和机器人应用,以及人脸识别和检测,还有无人驾驶中的识别技术、航拍图片的分析等。本文是对分享内容的实录整理。



内容目录


第一部分:


目标检测的概念、特点及历史。


第二部分:


基于深度学习的方法,对目标检测带来的新成果。


第三部分:


计算机视觉算法在实际场景中的应用。

01 目标检测的概念、特点及历史

目标检测的概念及特点

目标检测就是给你一张图把里面的目标找出来,比如我要找人,这就是目标检测。而人下一刻到了什么地方,这就是跟踪问题。这个图里有没有这个人,这也是一个检索问题,比如刷身份证验证你是不是这个人是验证问题;要把轮廓画出来,这个是分割问题。这对人来说非常简单,但是对计算机来说非常的困难。


大家都知道整个人工智能最核心的东西就是机器学习。它有三个要素,其中一个是有数据,数据是一个非常重要的事情。首先要把大量的数据放在这个机器里,最后生产出一个模型。对人脸来说,我们的数据是什么?假设我要检测这个图像里有没有人脸,首先我要找一大堆的人脸,之前因为要通过人工是比较麻烦的,而现在有很多开放的工具就变得非常好用,可以让他帮你做一堆的数据,你再做训练。有了模型之后,我在这里面找是不是有人脸。当然你可以会说脸就在这里,对机器来说应该怎么做,看起来就是一个数据,可以搜索。


你的模型很大,但是人脸很小,这个时候怎么办?可以把你的图像变小或者变大,我们把这个方法叫「以不变应万变」,你的模型是不变的,在每一个缩小的图象里做一个滑动窗口。还有一种是图片不大,把模型变大变小,就需要很多模型。这个思路很简单,学术界为了想这个方法花了很多年的时间。另外一个方法是下面图像变大变小,模型也变大变小,大家一起变,所以整个目标检测直观上来讲就是滑动窗口的方法。

目标检测的历史

计算机识别,目标检测的历史可以追溯到 1966 年。



1989 年出现了神经网络,1989 年之后学术界就设计了非常多特征。上图 2001 年的工作,第一天训练了七天,得到了一个模型,这个模型可以在 320 左右的图象上达到实时检测的效果。



接下来整个计算机视觉的发展历史就是一个数据库不断变大的历史。2004 到 2006 年的时候, 101 到 256 这个是表示物体的 2008 年 DPM。



到了 2012 年,整个计算机视觉都发展到不动了。性能的提升是非常有限的,现在反思回来,那时候并不是我们愚蠢,而是因为特征的判别能力太差。到了 2014 年,整个目标检测就进入深入学习的时代。我们会把深入学习的模型跟大家讲一下,一出来的时候跑得很慢,现在可以加速,不断加速之后,所以性能在不断的提高。



首先,来看一下计算机视觉,它的产生是一个非常有意思的事情。Marvin Minsky 是人工智能的创始人,他跟他的一个本科生做了一个项目。实际上早期的就干了这个事情,把几个砖块放在下面让计算机识别,这个事情是非常简单的,但你要是跟你妈说你要做这个,她肯定不会让你做。



到了 1973 年,大家可以想象一下那时的电脑是什么样的,用的是什么编程语言,这个时候方法是比较有限的,要做人脸识别,你的小孩会告诉你眼睛鼻子在哪里,我们研究者也是一样,把五官找出来,你的眼睛跟眼睛之间有一定的距离,不能离得很远也不能离得很近,通过这个就构建出一个新的模型,发表了一大堆的论文出来。


整个计算机视觉在七十年代开始建立,沿着两个学派发展,现在更关注霍恩学派。实际上在不同的场景下关注摄像头,可以给你带来算法上的提高。还有一个学派是表示算法实现的计算机视觉理论,很可惜的是计算机视觉的鼻祖在 1982 年的时候就去世了。



到了八十年代,大家都知道人工智能的冬天来了。计算机视觉刚开始,冬天就来了,所以大家都在玩边边,找边边,多无聊的事情,跟上一次基本没有关系了。到了 1989 年为什么会出现这个事情?从整个深入学习的发展就可以知道,八十年代做深度学习肯定拿不到钱,没有人资助你。有一个人就做了很多的工作,所以这个事情自动化是很重要的,他们就设计了很多的滤波器。



1989 年的话可以看到整个神经网络的模型网络,这个神经模型的网络是比较多层的,现在来看就是浅层网络。


为什么我们说它是一个浅层模型?



上图是在深度学习里面非常有影响里的一位专家,他认为模板匹配的方法是非常低级的模型匹配方法,只不过是两层的模型,他们一直坚持神经网络。深度学习发展得这么好,就是因为有这样一帮人在坚持不懈的努力。



到了 1998 年的时候用神经网络做人脸识别的事情,到 2001 年的时候微软提出了一个人脸检测的框架,这个框架直接影响了后来十年的目标检测,后来几千篇文章都是在这个框架下面修修补补。



在 2001 年的时候,这个模型训练要训练一个星期,那时候训练一个星期如果断电了可能就要重新来过,所以做这些东西非常的辛苦。



在九十年代的时候,来自另外一个方向,机器学习的研究成果已经提出了一个 AdaBoost。



整个机器学习的发展脉络,如果感兴趣的话可以根据这个图了解集成学习的方法,做任何事情,如果不用集成学习的话,不会有什么结果。



到了 1999 年有一个工作叫 SIFT,做目标检测找这样一个在各个时间点都不会变的点,这个点找出来对做目标检测是非常有帮助的,我们就要找某一个事例。两者结合的话产生非常多的基数出来,可以对整个目标检测的性能大大的提高。这个最大的应用在图像拼接,两个不一样的图像拼接起来,如果要找他们共同的点在什么地方,一比对就起来了。在图像拼接这一块我们也有相关工作,也可以看到这个空间的效果还是相当的好。


用 SIFT 做目标检测效果不会好,同一个物体也会存在很多的变化,所以效果不好。不像人脸,人脸只有那几个关键点,比如像车和船目标点太多,会使得它的模型非常的困难。



所以,大家看这个图。这个图看起来是个中医,表示了在整个大概是 2001 到 2010 年这一段时间,我们做的事情。有一个问题,我有一大堆的特征描述和检测,就像各种中药一样,接下来碰到一个问题,我就做一个特征检查,什么特征和什么特征进行组合,找一个分类器,最后熬出一个模型来。以前都是这样干的,熬半天也做不好的东西,所以我们也没有做出好的监测器。



到了 2005 年有人提出 HOG 特征,在行人目标检测中的效果非常好,只能用小量的样本。突然有人说行人可以检测,那什么是行人?是直立行走。碰到这个情况怎么办,这个时候提出一个行辩模型。想要提出聪明的方法,可以读老的文章,因为那个时候机器比较傻,人比较聪明;现在机器聪明,所以人可以变傻。


到了 2009 年,这个是一个 ACF 的模型,在行人监测包括很多视频监测里包括计算机视觉的模型都做了不少的事情,加了一些颜色的信息等。

02 基于深度学习的方法 对目标检测带来的新成果


目标分类和检测是两个问题,分类就只要分类,检测是更难的一件事情。DPM 这一项技术出来的时候,获得了终身成就奖,这个方法在整个计算机视觉的地位是非常高的。但是此后好几年,性能一直无法提高,直到深入学习的出现。


深度学习出现后是怎么做的?


给你一张图片找出 2000 个窗口,再进行分类,做分类的事情,这个是很自然的事情。2014 年看到这篇文章的时候,我在飞机上想说,这个估计没有什么用,结果判断失误,很多计算机视觉都是沿着这个思路在变。它有一个缺点,每一个窗口都要丢到深度学习的模型去提取特征出来,最终回归出一个窗口出来。这样速度就会非常慢,深度学习的特征在计算过程中会存在大量的重复,所以一个直接的感应能不能只做深度学习的特征,这样就可以提速。提速完之后是不是可以更快,之前从一张图像里找窗口是借鉴其他的技术,那我们可以借助深度学习的技术找出一些窗口,从这个窗口做目标分类。


还有一个工作是挺好的,就是做人脸检测。我要做人脸检测,把它设计三个网络,第一个网络是哪些是脸,先找出来。找出来之后再做细化,细化完之后再做细化,所以由粗到细,把你碰到的问题按照这个思路去不断的解决,最后能想出一个方法出来。MT—CNN 就是不同任务在一起。


还有是 YOLO。这一项技术给大家看一下。首先这个实际上是把图像划成一个网格,在网格里面做回归。一开始做人体检测的时候我们很傻,把这个窗口从左到右,从上到下去看做,现在深度学习技术出来以后,可以实现跳几个窗口,这个窗口的特征会告诉你正确的窗口在什么方向上,这样就可以减少。在 YOLO 上干的就是这个事情。


接下来是 SSD,一大堆图片,在不同的神经网络可以把检测结果输出来,不同尺度最后再把它集成起来做一个综合决策,这个技术是非常好的技术,包括视频监控下面的应用都拿它来做改进,这里面的技术细节就不细说了。

03 计算机视觉算法在实际场景中的应用

接下来我们来谈一下结合实际场景的实践。整个发展历程非常不容易,目前有不错的结果出来。在读博期间我的梦想是总有一天制造出一个行为检测器,不管你穿什么衣服,在什么条件下,不管摄像头安装在什么高度下我都能准确地检测出来,这个是多么的理想。但这个事情是不存在的,相当于造一个万能的东西出来。其实我们发现计算机的识别是按照具体问题具体分析、具体场景具体分析。

视频监控

视频监控,这个工作是比较早期的。在行人检测方面我们做了相当久,在 2006 年的时候有一本专著就是行人检测,也建立了自己的数据池。针对简单的场景,并不是行人检测仪设计出来在各个场景都可以用。在目标检测中有一个非常重要的步骤就是在人的周围有一大堆窗口,我们做了一个很重要的事情,就是层次化的 MMS,这个效果还挺好的。在视频场景下是固定不动的,有一些东西是本来就不动的,但是我们检测的东西都是动的,如果有一个人不动,这样就没有意思。在不动的情况下,我们把图像模糊掉,模糊完之后我们在上面找一些目标检测的算法,结果一看这个效果就变得非常好,所以这是一个很好的插件。


深度学习出来之后,深度图像就比较简单,但是下面的问题这种设备是比较少的。我们之前有一大堆的描述都是针对彩色图像,怎么设计描述者,用深度学习就不用管。还有一个是人体会变形,会凹各种的造型,人在哪里,我们在 2013 年的时候就设计了人体检测。


图像检索技术引进来,提升了行人识别的结果。在 2018 年的时候就思考这里面最大的问题是摄像头里面的图片特征是不是一样,怎么利用先进的技术生成一些样本,结果非常好,所以就发表了一篇相关的论文。

航拍影像

接下来我给大家讲一下在航拍影像的应用。飞机飞过去一些航拍的图像,最核心的事情就是要拼接,拼接要找到图像上不同的点,这个是跟另外一个博士合作做的,我们发表了一个工作 P—SIFT,在变化过程中只要把这些点精确地找出来,在 2016 年的时候我们就思考,2013、2014 年的时候航拍图像下怎么构建更好的描述。这个图像里面会有各种不同的结构,图片之间有不同的物体,有不同的结构,你只要把这个估算出来。


有很多深度学习的模型,有不同的应用场景,有一些在大模型上,有的在小物体上检测所以我们做了一个集成的工作,这个是最近的一个结果,我们在参加一个航拍下的比赛,从这个结果来看,效果还是相当不错的,尤其是像这样的场景。

车载视觉

在车载上我们也有一些工作,前期我们会装两个摄像头,检测的话就更简单。我们看一下这个工作,这个工作是把一些深度的特征通过神经网络,通过 CRF。


这个是我们提出来的 Feature++。



这个是利用神经网络做一些物体匹配的事情。还有一个工作是给你一个图片,把这个物体分割出来,这个工作非常难做。我们设计了一个神经网络的模型,把这个事情做得很好,所以这个就发表了。


交通场景首先是聚类的,我把一个目标检测的问题看成是一个检索的问题。这个工作是跟一家公司合作,我们在短期里面提交了这个论文。



大家可以看到,这个检测结果还不错。


讲了这么多,目标检测真的很不容易,几十年的发展历史,你要把这个问题做好,要扩大自己 CV 的工具箱,要针对具体问题具体分析。


以上就是今天演讲的内容,感谢。


本文转载自公众号七牛云(ID:qiniutek)。


原文链接:


https://mp.weixin.qq.com/s/yEk3b_t6rJKo97P2op2dQw


公众号推荐:

2024 年 1 月,InfoQ 研究中心重磅发布《大语言模型综合能力测评报告 2024》,揭示了 10 个大模型在语义理解、文学创作、知识问答等领域的卓越表现。ChatGPT-4、文心一言等领先模型在编程、逻辑推理等方面展现出惊人的进步,预示着大模型将在 2024 年迎来更广泛的应用和创新。关注公众号「AI 前线」,回复「大模型报告」免费获取电子版研究报告。

AI 前线公众号
2019-10-08 14:281119

评论

发布
暂无评论
发现更多内容

Linux IO模式及 select、poll、epoll详解(含部分实例源码)

linux大本营

c++ Linux 后台开发 异步IO epoll

一张图彻底理解Spring如何解决循环依赖!!

冰河

spring aop ioc 源码解析 循环依赖

深入浅出Spark

大数志

大数据 spark 数据科学

架构师训练营第 1 期 - 第十周总结

Todd-Lee

极客大学架构师训练营

如何应对Spark-Redis行海量数据插入、查询作业时碰到的问题

华为云开发者联盟

数据库 redis spark 开源 数据

白皮书丨关于工业互联网,你想知道的都在这儿

华为云开发者联盟

工业互联网 华为云 白皮书 ICT 智能

五周 - 总结

水浴清风

食堂就餐卡系统UML设计

简简单单

美团Java面试一轮游,太激烈了,问啥啥不会,我该怎么办?

比伯

Java 编程 架构 面试 计算机

C语言常用错误代码释义大全,让你编译运行报错不是烦恼

ShenDu_Linux

编译原理 常见错误

年轻人,学好Nginx,走遍天下都不怕

程序员小灰

c++ nginx Linux 服务器 架构师

WSL2:我在原生的Win10玩转Linux系统

梁桂钊

讲真,你知道Python咋来的吗?

华为云开发者联盟

Java Python 编程语言 C语言 代码

阿里要求其内部程序员必须精通的并发编程笔记:原理+模式+应用

Java架构追梦

阿里巴巴 编程 面试 并发 java架构

架构师训练营第 10 周作业

netspecial

极客大学架构师训练营

Python进阶——什么是上下文管理器?

Kaito

Python

Week 10 作业

黄立

数仓搬迁:从方法到实践,带你解决数据一致性对比

华为云开发者联盟

数据仓库 数据 存储 数据校验 搬迁

架构师训练营第十周课后作业

Gosling

极客大学架构师训练营

区块链技术赋能信息通信行业信用监管

CECBC

区块链 信用

tcp/ip协议栈——epoll的内部实现原理

Linux服务器开发

后端 TCP/IP epoll 网络协议栈 服务器开发

go-zero 如何扛住流量冲击(二)

万俊峰Kevin

microservice Go 语言

Redis面试受阻?阿里P8架构师整理出的核心笔记+实战+面试题+脑图送你

比伯

Java 编程 程序员 面试 计算机

架构师训练营第 1 期 - 第十周作业

Todd-Lee

极客大学架构师训练营

多线程源码明白了吗?不明白的话来看腾讯大牛给你画的面试重点

小Q

Java 学习 架构 面试 线程

和同事交流不会kafka怎么行,API奉上,不是大神也能编

小Q

Java 学习 架构 面试

让“数字鸿沟”变为“数字通途”

CECBC

数字化时代 支付产品

《具有算法和程序的离散数学基础》PDF免费下载

计算机与AI

算法 离散数学

iOS 项目避坑:多个分类中方法重复实现检测

iOSer

ios 项目管理 编程语言 iOS Document

区块链创新中国价值链

CECBC

区块链

架构师训练营3期第一周学习总结

简简单单

基于深度学习的目标检测简史_文化 & 方法_苏松志_InfoQ精选文章