前言
现今,深度学习发展如此迅猛,在计算机视觉、自然语言处理、广告推荐及广告点击率预估等领域都取得巨大的突破。在计算机视觉领域中的目标检测被广泛的应用到实际生产生活中。例如:人脸检测、行人车辆检测、通用物体检测、文本检测等。以及在专属领域内的检测还有:瑕丝检测、违禁物品检测等。而目标检测也为后续的图像分类、图像分割、目标追踪提供了基础。
1目标检测算法
1.1目标检测的定义
目标检测的定义:目标检测在图片数据中对可变数量的目标进行查找和分类。
1.2目标检测存在的问题
目标检测存在的问题:通过目标检测来找到图像中需要查找的目标对象,就会存在的问题如下:
- 目标种类与数量的问题。指在进行目标检测的时候,对于一幅图像,我们可能需要检测不同种类的物体:比如在ADAS场景下的行人检测中,可能需要对一幅马路上的图片检测行人,车辆,包括机动车非机动车,路标,红绿灯各种各样不同种类的物体。如果检测种类越多,涉及到稠密或者稀疏两种不同的场景,也会给实际上开发出来的模型增加复杂度难度。
- 目标尺度的问题。在采集到的同一张图像,目标有非常大或者非常小的现象,对于这样尺度带来的变化非常多,这样会对目标检测任务带来不同程度的影响。比如在人脸检测下:密集的极小人脸场景下,往往会存在着漏检或者误检现象,大大影响了检测的准确度。
- 外在环境的影响。如光照变化、遮挡、图像的质量,还有动态物体:例如行人的形态变化以及视角的变化等等这些因素的影响也会使目标检测的难度变得非常大。
1.3目标检测的方法
现今,目标检测的方法主要是分为:
- 基于传统的目标检测方法:
a) Viola-Jones
b) HOG+SVM
c) DPM
d) NMS
e) soft-NMS
- 基于深度学习的目标检测方法:
a) Two-stage:RCNN到faster-RCNN系列算法
b) One-stage:SSD、YOLO到YPLOv3系列算法
2传统目标检测算法
2.1传统目标检测的方法
2.1.1 Viola-Jones算法:
主要用于人脸检测,其步骤为:
- 采用Hear作为抽取特征的算子。这也属于纹理特征的一种。主要是以黑白作为2个像素点,再次进行差值的运算求解,同时还考虑到了特征图的长宽、倾斜、中心等多个像素的因素。
- 训练的分类器采用Adaboost分类器。采用Adaboost表示集成学习的算法,采用的样本来训练多个弱分类器然后对这些弱分类器进行分类结果的集成。其步骤为:
a) 初始化样本的权重W,样本权重之和为j
b) 训练弱分类器
c) 更新样本权重
d) 循环第2步
e) 结合多个分类器结果,进行投票
- 搜索框采用滑动窗口的策略来进行候选框的提取。滑动窗口的大小以及滑动窗口的步长会导致本身算法会出现大量的冗余候选框。造成性能的下降。
2.1.2 HOG-SVM算法:
主要是用于行人检测。其步骤为:
- 提取HOG特征。而HOG特征也属于纹理特征的一种,其基本流程为:
a) 对特征进行灰度变化,而HOG也主要用在灰度图上,对于彩色图先要转化成灰度图,再进行gamma变换,也就是对值进行根号求解。从而使像素值变小,也意味着对数据进行平滑处理。
b) 计算梯度map,计算每个点在x和y方向上的梯度值,并利用这样的梯度值来进行计算梯度夹角。
c) 图像划分为小的cell,统计每个cell的梯度直方图。
d) 将多个cell组成一个black进行拼接,通过拼接之后将特征进行归一化处理,能够使一些特征,一些峰值变化变得更加的鲁棒
e) 再将多个block进行串联最终取得的一个HOG特征,在此过程也是进行归一化的处理过程
- 训练SVM模型:采用对目标和背景进行二分类的建模,也就是SVM通过去寻找两种样本,在这两种样本空间上的最大的分类间隔来进行建模。
- 利用滑动窗口提取目标区域,进行分类判断
- 候选框的过滤采用NMS算法进行过滤
- 最终得到检测结果
总结HOG+SVM算法:主要采用到的HOG进行特征维度的提取,这会和我们量化的程度,量化的角度有关系。另外跟cell的大小也有关系。如果每个cell越小,每个feature map所得cell的数量就越多,所得到的梯度直方图向量的维度也会越大。而采用HOG特征的时候也可也采用PCA进行降维。
2.1.3 DPM方法:
主要是用在物体检测上,其步骤为:
- 计算DPM特征图。表示了当前区域可能为目标的值,也可以理解为能量的分布,能量越高,检测目标可能性越大。
- 计算响应图。针对响应图就SVM分类进行响应识别。结合NMS算法来进行分类框的合并。
- Latent SVM分类器训练。
- 检测识别。针对root filter 和part filter,也可以称为零部件检测或者是局部检测。例如判断是否是行人?通过局部区域如头、手臂、腿、躯干等因素的进行判断,再判断目标是否是行人。
总结DPM算法:DPM采用HOG扩展。利用了 SVM训练得到物体的梯度。对特征的提取采用有符号梯度方向和无符号梯度方向进行的。DPM算法针对HOF+SVM算法的弊端,通常会采用PCA降维的手段。但是,在DPM算法中采用的是一种逼近PCA算法进行近似的处理。也就是对每个cell提取出的27维的直方图在水平和垂直的方向进行求和处理。最后将求和的值进行拼接得到31维的向量。这样就避免了PCA在降维过程中所用到极值分解的方法,因为这个方法会带来性能上的损耗。而采用累加的方式在速度和性能上有非常大的提升和更好的降维效果。在DPM中会加入额外的策略开提升检测的精度,这是深度学习目标检测之前的传统目标检测的巅峰之作。
2.1.4 NMS和soft-NMS算法:
NMS(非极大值抑制算法):
目的:为了消除多余的候选框,找到最佳的物体位置
设计思想:选取哪些邻域里分数最高的窗口,同时抑制分数低的窗口。
流程:
- 对所有检测到的检测框进行依照分类器得到的概率得分进行排序
- 将IOU大于某些阈值的候选框删除
- 不断迭代这个过程
- Soft-NMS算法:
相邻区域内的检测框的分类进行调整,而非彻底抑制,从而提高检索率的情况。并在准确率低的情况下检索仍能对物体检测能有明显提升。
2.2传统目标检测的方法存在的问题与总结
传统的目标检测方法,虽然能完成检测任务但是,通过传统的目标检测设计的特征,会存在很难设计,设计出来的特征往往存在着许多问题,也可能存在对于某些特征不适应、不鲁棒的现象。效率上,与深度学习的目标检测还存在着非常大的差距。另外,通过滑动窗口的方式,提取出目标候选框,对目标候选框镜像分类判定这样一种策略,在提取候选框这个步骤的时候就非常的繁琐,也是非常耗时非常慢的。
3 深度学习目标检测算法
3.1 深度学习的目标检测算法
深度学习的目标检测算法区别于传统的的目标检测算法,采用了卷积神经网络来图像进行图像的特征提取。而深度学习的目标检测算法主要分为One-stage算法和Two-stage算法两大类别。也是当今目标检测任务的两大主流方法。
3.2 Two-stage
Two-stage是基于深度学习的一种,主要是通过一个完整的卷积神经网络来完成目标检测的过程。典型的代表就有2014年提出的RCNN算法以及Faster-RCNN系列算法。对于传统的目标检测算法。Two-stage算法不需要去训练分类器作为特征表示的这样一个过程。整个过程只需要通过一个A到B的卷积神经网络来完成,相对于传统的目标检测算法的精度和速度得到了非常大的提升。
3.2.1 Two-stage算法的流程
- 输入图片,对图片进行深度特征的提取。
- 通过RPN网络来完成传统目标检测滑动窗口的任务产生候选区域。
- 经过ROI-pooling对图像进行处理,也就是对图片进行抠图
- 通过全连接层进一步对候选区域进行表示
- 通过分类和回归对目标两个分支来分别完成候选类别的判以及候选目标位置的精修
3.2.2 Two-stage的核心组件
- CNN网络,其设计原则:
a) 从简到繁再到简的卷积神经网络
b) 多尺度特征融合的网络
c) 更轻量级的CNN网络
- RPN网络
a) 采用区域推荐,采用anchor机制
b) 采用ROI-pooling
c) 采用分类和回归
3.2.3 Two-stage总结
相对于传统的目标检测而言,采用了更好的网络特征来挖掘一些更有代表性、更加鲁棒深度学习的策略来完成特征的提取。采用更加精准的RPN网络来完成区域的筛选和推荐。采用更加完善的ROI-pooling。样本处理的方法采用NMS非极大抑制的算法来对候选框进行筛选合并。同时也采用了更大的mini-batch策略来改进我们的目标检测网络。但是采用ROI-pooling可能存在一些问题,如果按照pooling层进行下采样的话,图片尺寸会按照整数倍进行下采样,使用卷积操作可能也会对图片产生一些损失。也就是如果使用卷积而不使用padding,这样会使我们的原始特征图像减小几个像素点,导致ROI-pooling进行抠图的时候会产生一点的偏差。
3.3 One-stage
相对于Two-stage目标检测算法,One-stage目标检测算法使用CNN进行特征提取后,采用直接回归物体类别的概率和位置坐信息。相比于Two-stage目标检测算法,它的准确度要比较低,但是,训练模型的速度是非常快的。其主流的算法有:YOLOv1/v2/v3、SSD/DSSD、Ratina-Net。
3.3.1 One-stage算法的流程
- 在给定图片后,会通过一个卷积主干网络进行特征提取
- 然后直接进行区域的回归以及目标的分类和位置的精修
相对于Two-stage来说,One-stage少了RPN网络推荐区域这一个过程,从流程上看One-stage的流程也更加简单,速度也更加的快,适合在运用到嵌入式的产品中。
3.3.2 核心组件
- CNN网络,其设计原则:
a) 从简到繁再到简的卷积神经网络
b) 多尺度特征的融合网络,来提高模型的表达能力
c) 更轻量级的CNN网络,更能降低模型的功耗和减少模型的推理时间,确保网络深度的同时,减少参数量,防止过拟合。
- 回归网络
a) 直接输出最终目标BBOX的坐标位置信息,
b) 采用anchor机制,去找到不同的推荐区域
3.3.3 One-stage总结
在One-stage中,去掉了RPN网络,直接回归,通过S*S区域的网格,针对没个网络来划分预测当前这个网络为中心的目标区域的位置信息,给当前的网格设置置信度,判断是否存在目标的概率值,如果概率值接近为1,那么待检测目标的可能性就越高。另外,直接归回的方法还会检测出当前格子所属的目标类别的概率值。
3.4总结
从2012年卷积神经网络来代替传统手工这一特征的方式来完成目标检测任务,这是基于深度学习目标检测的一个标志性历程碑。以RPN网络代替原始的滑动窗口策略,标志着深度学习的目标检测方法彻底完成了端到端的过程。而整个过程也只需要一个网络就能完成目标的检测。这一一个结果就使得深度学习目标检测不仅在速度上取得了非常大的提升,而且在性能上也远超传统的目标检测算法。而且在后来的设计中,不采用提取候选框的策略,而是采用直接回归目标位置的策略,如SSD,YOLO算法来完成目标检测的定位,这意味着能够再一次提升检测算法的速度进行进一步的提升。而且还能保证proposal策略的检测精度。
4 目标检测算法对比
4.1传统目标检测算法和深度学习目标检测算法对比
基于深度学习的目标检测算法和传统的目标检测算法来说,不仅存在着精度上的优势,而且在算法的实现、算法的训练、算法的设计以及整个算法模型的落地,都是存在非常多的优势的。
4.2深度学习目标检测算法之间的对比
深度学习的目标检测算法中以两种不同维度的算法为主,一种是One-stage,另一种是Two-stage,还有就是单任务和多任务作为区分。
4.2.1 One-stage优点:
强调去掉RPN网络,采用直接回归的策略来得到候选区域的位置坐标和类别。因此相对于Two-stage算法来说,One-stage算法它具有更快的速度,这是一个非常重要的优势,因为速度快是考量一个算法落地的重要因素,也意味着模型的大小、参数量、计算的复杂等等各方面因素都存在一定的优势。相对来说,速度快往往模型比较小,更加适合落地。比如说在一些嵌入式的设备中,计算的性能,内容的大小等等都是和服务端有关的。
4.2.2 Two-stage优点:
Two-stage精度更高,它的检出率,也就是获取到的坐标的准确率更加接近我们实际要检测的坐标值。主要是因为Two-stage算法采用了RPN网络,去对候选区域做了推荐。而RPN网络的使用就能带来定位精度的提升。同样在检测目标的时候IOU的区域会更大,定位的精度会更高,能检测出更多的目标。此外,Two-stage算法还采用了anchor机制,anchor能够带来性能上的提升,在随后的One-stage算法中SSD、YOLO算法中也在此有所借鉴使用到。最后是共享计算量,设计网络的时候采用了参数共享的策略,意味着降低了参数的规模,变相的对模型进行了正则化,提高了模型的性能和泛化能力。
4.2.3 One-stage的缺点
- 精度低,虽然能检测出物体,但是它的IOU值可能偏低
- 对小物体检测效果不好,特别是YOLO算法在小物体检测上就存在较大的劣势
4.2.4 Two-stage的缺点
- 速度慢,主要是在RPN网络中存在一个目标候选区域推荐的一个过程中,所以速度相对会慢一些
- 模型相对复杂
- 误报率高,会把背景检测成为目标
4.3具体算法的优缺点:
4.3.1 RCNN
优点:最早使用CNN特征的深度学习目标检测模型
缺点:依旧沿用了传统的候选框区域推荐以及目标检测定位,耗时高、精度低
4.3.2 SPP-Net
优点:考虑了任意尺度的输入图片,以及共享特征
缺点:依旧沿用了传统算法的框架,只不过对图像输入做了新的变化,耗时高、精度低
4.3.2 Fast-RCNN
优点:引入了ROI-pooling完成对特征图的提取,并采用BBOX回归来完成候选框的定位和分类
缺点:采用selective search产生 region proposal
4.3.3 Faster-RCNN
优点:RPN网络,将proposal提取的过程也通过一个网络来完成,这意味着Two-stage模型框架出来了,而且检测的精度相对较高
缺点:速度慢、训练时间长
4.3.4 YOLOv1/v2/v3
优点:直接回归的方式来进行目标的定位,模型训练的速度快
缺点:边框定位不够精准,检出率低,小目标检测性能差
4.3.5 SSD
优点:anchor机制加上回归机制,将faster-RCNN和YOLO的优点都结合起来了,anchor机制带来速度上的提升,回归机制带来了速度上的提升,边框定位更加准确,检出率高,误报率比较少
缺点:训练时间相对比YOLO长,准确度比Faster-RCNN低
5 深度学习目标检测行业现状
5.1应用现状
现在深度学习的目标检测主要是分为通用物体的目标检测和特定场景的目标检测。
5.1.1 通用目标检测
- 针对图像中多个类别的目标来进行检测,比如ImageNet挑战赛上需要200个类别,在VOC数据集上需要检测20个类别
- 在通用物体的检测上,需要完成的任务就是:n(目标)=n+1(分类问题)
- 对于通用物体检测而言,因为检测物体类别是十分丰富的,这就需要大的模型,计算复杂度相对大一些,检测速度较慢,很难做到实时检测。
5.1.2特定类别目标检测
- 仅检测图像中某一特定目标,如人脸检测、行人检测、车辆检测,文本检测等。
- 在特定物体的检测上,需要完成的任务就是:1(目标)+1(背景)=2分类的问题
- 在构造模型的时候,模型比较小,速度要求非常高,对于特定类别能够完成一个CPU的实时性。
5.2人脸检测行业应用现状
人脸相关的生态环境下,有非常多的人脸衍生出来的产品,而人脸检测技术是所有人脸影像分析衍生应用的基础。在实际人脸识别行业市场规模是不断提升的,这也意味着舒服落地所带来的产出也越来也越大。
而且人脸识别领域中存在着便利性、准确性、安全级别、长期稳定性,识别设备成本较高的特点,相对于其他生物信息识别是非常高的。但是,人脸识别由于光照,遮挡等因素影响,人脸识别技术也有一定的技术瓶颈。
5.2.1人脸检测在实际中的业务
人脸检测、人脸验证、人脸跟踪、人脸属性识别、人脸行为分析、个人相册管理、机器人人机交互、社交平台等应用。
5.2.2人脸检测行业应用场景
在人脸检测中,包含看约束环境和非约束环境,例如:
- 企业单位管理及商业保密为主的商用人脸检测
- 大规模网布监控的多角度多背景的安防人脸检测
- 反恐安全,调查取证,刑事侦查为主的低分辨率,尺度多样的军用/警用人脸检测
- 基于互联网社交娱乐应用等一般人脸检测
5.2.3人脸检测行业应用难点与挑战
- 复杂场景情况下:室内、室外、光照、遮挡等的场景分析
- 复杂路况情况下:广场、车站、地铁等这样复杂的场景,精确度很难到80%以上的准确度
- 人为因素情况下:是否佩戴口罩,帽子等
5.2.4人脸检测行业应用的企业
- 腾讯的腾讯优图
- 旷视科技的face++
- 百度IDL
5.3 ADAS行人车辆检测行业应用现状
ADAS场景下的检测,主要划分的级别是L0到L4这5个级别:
- L0:不具备自动驾驶的阶段,目前的车辆普遍都处于这个阶段。
- L1:能完成简单辅助的功能,如车道线检测、偏离检测、前车碰撞预警这样一些辅助驾驶的功能
- L2:能够完成自动泊车
- L3:在园区,高速这样干净的场景下使车辆具有高度自动驾驶的能力
- L4:车辆能够完全的进行自动驾驶
5.3.1 ADAS实际中的业务
导航、实时交通系统、电子警察、车联网、自适应巡航、车道偏移报警系统、车道保持系统、碰撞避免预警系统、夜视系统、自动泊车、交通标志识别、盲点检测、驾驶员疲劳探测、下坡控制系统
根据毛利分析,可以得出ADAS具有非常大的商业价值和研究价值。
5.3.2 ADAS通常研究的问题
- 车型识车标识别、车牌识别、车辆特征基础识别
- 也为行人跟踪、行为分析等提供了重要的基础
5.3.3 机动车、非机动车、行人检测的难点
- 阴天、雨天、夜间目标检测问题
- 拥挤场景下的目标检测的问题
- 行人刚性运动带来的检测难题
- 小目标检测
- 遮挡问题
5.3.4 国内ADAS无人驾驶企业
百度、腾讯、华为、景池、滴滴、京东等都在针对无人驾驶相关领域的研究。
5.4文本检测行业应用现状
文本检测能够帮助完成自动化的任务,提高劳动和生产的效率,因此文本检测在行业中有着非常大的研究前景。
5.4.1文本检测实际中的业务
身份证识别、车牌识别、印刷文字识别、文档识别、自然语言场景下的文本识别,对图片信息进行理解标准。
5.4.2文本检测的难点
- 文本的长度是不一样的,需要多方向的进行文本的识别
- 文本的形状,文本的字体存在着各种各样的不同,比如:艺术字。而这些畸变影响着文本检测的准确度
- 各种背景干扰下的文本识别,比如文本在广告牌、海报等多种条件下的检测
- 存在多语种的文本检测
5.4.3国内文本检测的企业
腾讯、face++、网易、图谱科技、汉王科技、笔身智能等企业在文本检测领域都处于一个领先的地位。
总结
- 虽然目标检测只是计算机视觉领域中的一部分,但是目标检测从传统目标检测到深度学习目标检测的演进来看,检测的手段始终朝着着低消耗、速度快、性能高的目标进发。检测目标的准确度也越来越高,训练出来的模型无论在服务端、移动端还是嵌入式设备都能更好的适应且运行。
- 我国在人工智能领域起步比较晚,但是国内的企业对发展计算机视觉研究缺丝毫没有落后的迹象,甚至在不少的领域中都名列世界,其中就有目标检测。而且除了国家的政治扶持外,许多大企业,如百度的百度飞浆,腾讯,商汤科技,旷世科技、face++、科大讯飞等从事AI研究的大企业中所开发的AI产品受到大众的推崇,民众本身对AI产品的肯定和应用也极大的促进了该领域的发展。
- 虽然,现在的人工智能发展还处于一个弱人工智能的阶段,但是,学从术上,关于AI论文的发表的数据,更优的算法被提出,学习人人数的激增,工业上,不断优质的产品涌入出来,而且在大数据时代下,软硬件能够并驾齐驱的发展。这都预示着无论是整个人工智能领域还是计算机视觉等其他子领域,都在朝着强人工智能的方向发展。在未来十年内,或许人民的生活因为AI而会再次发生翻天覆地的变化。