点击上方“小白学视觉”,选择加"星标"或“置顶”
重磅干货,第一时间送达
1 背景介绍
目标检测,object detection,就是在给定的图片中精确找到物体所在位置,并标注出物体的类别。
目标检测要解决的问题有两个:物体在哪里,物体是什么的整个流程问题。
目标检测问题的难点:物体的尺寸变化范围很大;摆放物体的角度,姿态不定;而且可以出现在图片的任何地方;物体还可以是多个类别。
目前主要算法分两类:1) 候选区域/框 + 深度学习分类;2) 基于深度学习的回归方法
目标检测中有很大一部分工作是做图像分类。对于图像分类,不得不提的是2012年ImageNet大规模视觉识别挑战赛(ILSVRC)上,机器学习泰斗 Geoffrey Hinton 教授带领学生Krizhevsky使用卷积神经网络将ILSVRC分类任务的Top-5 error降低到了15.3%,而使用传统方法的第二名 top-5 error高达 26.2%。
此后,卷积神经网络CNN占据了图像分类任务的绝对统治地位。
2 候选区域+深度学习
通过提取候选区域,并对相应区域进行以深度学习方法为主的分类的方案,如:
2.1 R-CNN(Selective Search + CNN + SVM)
先找出图中目标可能出现的位置,即候选区域(Region Proposal)。
利用图像中的纹理、边缘、颜色等信息,可以保证在选取较少窗口(几千甚至几百)的情况下保持较高的召回率(Recall)。
有了候选区域,剩下的工作实际就是对候选区域进行图像分类的工作(特征提取+分类)。
2014年,RBG(Ross B. Girshick)使用 Region Proposal + CNN代替传统目标检测使用的滑动窗口+手工设计特征,设计R-CNN框架
,使得目标检测取得巨大突破,并开启了基于深度学习目标检测的热潮。
![1e111f658b7ceb66997575ae800c745f.png](https://i-blog.csdnimg.cn/blog_migrate/38c681da8aad885e859ee02ac6e3a762.png)
R-CNN的简要步骤如下
输入测试图像
利用选择性搜索Selective Search算法在图像中从下到上提取2000个左右的可能包含物体的候选区域Region Proposal
因为取出的区域大小各自不同,所以需要将每个Region Proposal缩放(warp)成统一的227x227的大小并输入到CNN,将CNN的fc7层的输出作为特征
将每个Region Proposal提取到的CNN特征输入到SVM进行分类
R-CNN 存在一个较大的问题:R-CNN虽然不再像传统方法那样穷举,但R-CNN流程的第一步中对原始图片通过Selective Search提取的候选框region proposal多达2000个左右,而这2000个候选框每个框都需要进行CNN提特征+SVM分类,计算量很大,导致R-CNN检测速度很慢,一张图都需要47s。
2.2 SPP-net(ROI Pooling)
SPP:Spatial Pyramid Pooling(空间金字塔池化)
SPP-Net是出自2015年发表在IEEE上的论文-《Spatial Pyramid Pooling in Deep ConvolutionalNetworks for Visual Recognition》
2.3 Fast R-CNN(Selective Search + CNN + ROI)
Fast R-CNN
就是在R-CNN的基础上采纳了SPP Net方法,对R-CNN作了改进,使得性能进一步提高。
与R-CNN框架图对比,可以发现主要有两处不同:一是最后一个卷积层后加了一个ROI pooling layer,二是损失函数使用了多任务损失函数(multi-task loss),将边框回归
Bounding Box Regression 直接加入到CNN网络中训练。
Fast-RCNN 很重要的一个贡献是成功的让人们看到了 Region Proposal + CNN 这一框架实时检测的希望,原来多类检测真的可以在保证准确率的同时提升处理速度,也为后来的 Faster R-CNN
做下了铺垫。
2.4 Faster R-CNN(RPN + CNN + ROI)
https://arxiv.org/pdf/1506.01497.pdfFast R-CNN存在性能瓶颈:选择性搜索,找出所有的候选框,也非常耗时。能不能找出一个更加高效的方法来求出这些候选框呢?
解决方法:加入一个提取边缘的神经网络,也就说找到候选框的工作也交给神经网络来做。
以上四种算法都基于region proposal
的R-CNN系列,是目标检测技术领域主要的一个分支。
3 基于深度学习的回归方法
3.1 YOLO1
YOLO,全称:You Only Look Once
以上介绍的 R-CNN 系列很难满足实时性的要求。YOLO
一类的方法慢慢显现出其重要性,这类方法使用回归的思想,利用整张图作为网络的输入,直接在图像的多个位置上回归出这个位置的目标边框,以及目标所属的类别。
YOLO将目标检测任务转换成一个回归问题,大大加快了检测的速度,使得 YOLO 可以每秒处理45 张图像。而且由于每个网络预测目标窗口时使用的是全图信息,使得false positive比例大幅降低(充分的上下文信息)。
但是YOLO也存在问题:没有了Region Proposal机制,只使用7*7
的网格回归会使得目标不能非常精准的定位,这也导致了YOLO的检测精度并不是很高。
3.2 YOLO2
https://arxiv.org/pdf/1612.08242.pdfYOLOv2 相对v1版本,在继续保持处理速度的基础上,从预测更准确(Better),速度更快(Faster),识别对象更多(Stronger)这三个方面进行了改进。其中识别更多对象也就是扩展到能够检测9000种不同对象,称之为YOLO9000。
YOLO v2 代表着比较先进的物体检测水平,在多种监测数据集中都要快过其他检测系统,并可以在速度与精确度上进行权衡。
3.3 YOLO3
https://pjreddie.com/media/files/papers/YOLOv3.pdfYOLO v3的模型比之前的模型复杂了不少,可以通过改变模型结构的大小来权衡速度与精度。
速度上,YOLOv3 在实现相同准确度下要显著地比其它检测方法快。
改进之处:
1).多尺度预测 (类FPN)
2).更好的基础分类网络(类ResNet)和分类器 darknet-53,见下图。
3). 分类器-类别预测:
YOLOv3不使用Softmax对每个框进行分类,主要考虑因素有两个:
a. Softmax使得每个框分配一个类别(score最大的一个),而对于Open Images这种数据集,目标可能有重叠的类别标签,因此Softmax不适用于多标签分类。
b. Softmax可被独立的多个logistic分类器替代,且准确率不会下降。
分类损失采用 binary cross-entropy loss
多尺度预测
每种尺度预测3个box, anchor的设计方式仍然使用聚类,得到9个聚类中心,将其按照大小均分给3中尺度.
尺度1: 在基础网络之后添加一些卷积层再输出box信息.
尺度2: 从尺度1中的倒数第二层的卷积层上采样(x2)再与最后一个16x16大小的特征图相加,再次通过多个卷积后输出box信息.相比尺度1变大两倍.
尺度3: 与尺度2类似,使用了32x32大小的特征图.
4 总结
最后总结两类算法的不同:
RCNN, Fast-RCNN,Faster-RCNN是基于深度学习的分类方法。
YOLO系列是基于深度学习的回归方法。
本文是我业余时间学习目标检测的一篇整理文章,希望对目标检测入门者有一定帮助。(来源:程序员郭震zhenguo)
声明:部分内容来源于网络,仅供读者学习、交流之目的。文章版权归原作者所有。如有不妥,请联系删除。
下载1:OpenCV-Contrib扩展模块中文版教程
在「小白学视觉」公众号后台回复:扩展模块中文教程,即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。
下载2:Python视觉实战项目52讲
在「小白学视觉」公众号后台回复:Python视觉实战项目,即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。
下载3:OpenCV实战项目20讲
在「小白学视觉」公众号后台回复:OpenCV实战项目20讲,即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。
交流群
欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~