☞
当一切看起来无可挽回之时,我跑去看石匠重复捶击他面前的岩石一百次,而那块石头连一个裂缝都没有露出来。接下来的第一百零一次捶击之时,此石一分为二。不是因为这一次捶击,而是因为你的始终如一。
☜
毋庸置疑~
目标检测火了,一塌糊涂~
当前计算机视觉和机器学习领域的香饽饽~
从传统的DPM等检测方法到当今的RCNN、YOLO等深度学习的智能检测~
一切都来的快,去的也快~
本文带你进入目标检测的世界,领略它的过去和现在,感受属于它的威力和魅力~
It's time to begin!
那到底什么是目标检测?它跟目标分类与目标分割有什么区别?都有什么用?
接下来一一解释,理解图像处理的三个层次
一是分类(Classification),即是将图像结构化为某一类别的信息,用事先确定好的类别(string)或实例ID来描述图片。这一任务是最简单、最基础的图像理解任务,也是深度学习模型最先取得突破和实现大规模应用的任务。其中,ImageNet是最权威的评测集,每年的ILSVRC催生了大量的优秀深度网络结构,为其他任务提供了基础。在应用领域,人脸、场景的识别等都可以归为分类任务。
二是检测(Detection)。分类任务关心整体,给出的是整张图片的内容描述,而检测则关注特定的物体目标,要求同时获得这一目标的类别信息和位置信息。相比分类,检测给出的是对图片前景和背景的理解,我们需要从背景中分离出感兴趣的目标,并确定这一目标的描述(类别和位置),因而,检测模型的输出是一个列表,列表的每一项使用一个数据组给出检出目标的类别和位置(常用矩形检测框的坐标表示)。
三是分割(Segmentation)。分割包括语义分割(semantic segmentation)和实例分割(instance segmentation),前者是对前背景分离的拓展,要求分离开具有不同语义的图像部分,而后者是检测任务的拓展,要求描述出目标的轮廓(相比检测框更为精细)。分割是对图像的像素级描述,它赋予每个像素类别(实例)意义,适用于理解要求较高的场景,如无人驾驶中对道路和非道路的分割。
回到最后一个问题,都有什么用?目标分类、检测、识别、定位、分割在环境感知领域尤为重要,比如说近两年大火的智能驾驶、自动驾驶,都离不开这些算法,而且需要很高的准确率和效率。
本文重点叙述目标检测的方方面面,先来了解一下都有哪些算法~
传统算法的主要有:
Haar特征+Adaboost算法
Hog特征+Svm算法
DPM算法
深度学习的目标检测典型代表有:
RCNN系列,RCNN,spp-net,fast-rcnn,faster-rcnn
YOLO系列,YOLOv1/v2/YOLO9000/v3
SSD系列
针对传统算法,基本上都是基于手工特征所构建的:(1).创建滑动窗口 (2).提取特征(SIFT,HOG,LBP) (3).训练分类器(SVM),另外,可变形部件模型(Deformable Part based Model,DPM)算是基于经典手工特征的检测算法发展的顶峰,连续获得VOC07、08、09三年的检测冠军。其主要思想可理解为将传统目标检测算法中对目标整体的检测问题拆分并转化为对模型各个部件的检测问题,然后将各个部件的检测结果进行聚合得到最终的检测结果,即“从整体到部分,再从部分到整体”的一个过程。例如,对汽车目标的检测问题可以在DPM的思想下分解为分别对车窗、车轮、车身等部件的检测问题,对行人的检测问题也可以类似地被分解为对人头、四肢、躯干等部件的检测问题。虽然近几年基于深度学习的检测模型从精度上已远远超越了DPM,但DPM中的很多思想直到今天依然重要,例如混合模型、难样本挖掘、包围框回归、上下文信息的利用等。时至今日,这些方法还都深深影响着目标检测领域的发展。
无奈但又幸运~
深度学习的发展加速了目标检测的进程,给目标检测带来了新的生机~
接下来感受下深度学习加速下的几种方法——
1、Selective search
如何寻找有效的候选框,最开始的就是这个方法。
寻找方法就是一开始把一幅图像,分割成无数个候选框构造而成的(convert regions to boxes)
然后根据一些色彩特征、把候选框进行融合,框数量变小了,框变大;效果就是逐渐、慢慢找到最好的框 ,显然,这种方法效果不是很理想。
.
2、R-CNN(CVPR 2014)
R-CNN使用了一种非常简单的检测策略,首先在图像中提取Object Proposals,接下来把每个Proposal缩放到相同的大小后使用在ImageNet上训练好的Alexnet网络提取特征,最后再使用SVM分类器进行虚警排除和类别判断。R-CNN在PASCAL-VOC07数据集上取得了惊艳的效果,mAP由33.7%(DPM-v5)提升至58.5%。
但是,每个都要计算太浪费时间了,最开始,需要把数据固化到硬盘很占容量,同时分类用SVM也非常耗时,效率不高。
在RCNN中CNN阶段的流程大致如下: