如何用深度学习做物体检测
目录
本文主要分两部分 1. 介绍几种深度学习领域的物体检测方法 2. 介绍Faster RCNN的实现过程
1. 深度学习领域物体检测的方法
物体检测相对于物体分类,除了要预测物体类别,还需要预测对应物体的位置,例如类别标签为(p1,p2,...,pn)
,每个类别的位置标签为:(x,y,w,h)
。
当前的物体检测方法,可以分为两类: 1. One stage方法(一步搞定) 包括YOLO、SSD等 2. Two stage方法(两步搞定) 包括RCNN,Fast RCNN,Faster RCNN等
下面先介绍One stage方法
One Stage方法
物体检测的经典做法,是通过人工提取各种特征,常见的特征有:Haar、SIFT(Scale Invariant Feature Transform)、HOG等。然后用提取出来的特征,做分类和回归。
2013年,Girshick等人,尝试使用深度学习做物体检测,并提出了RCNN方法,在当年的物体检测比赛中,获得冠军。随后基于深度学习的物体检测框架,层出不穷,包括本文要介绍的YOLO、SSD、RCNN系列等。下面先介绍YOLO。
1.1. YOLO(You Only Look Once) 2015
第一次接触YOLO,是Redmom在TED的演讲。当时Redmom用手机演示实时检测出会场中的人、杯子、笔记本,甚至领带时,惊艳全场。视频链接如下,感兴趣的读者可以看一下:
YOLO的预测可以分为三步 1. 修改输入图片大小到448x448 2. 计算一次卷积 3. 对预测结果做过滤
YOLO会把输入图片,先分成S x S个小方格,然后把检测问题,抽象为回归问题,这里的标签设计有一个技巧,就是把类别和位置,融合到一起,例如下面这种形式:
[pc, px, py, ph, pw, c1, c2, c3]
其中pc
表示是否有物体,bx,by,bh,bw
是框的参数,c1,c2,c3
表示具体为哪个物体。
上图可以看出,一张输入图片,被划分为S x S个小块,每个小块预测B个边框和C个类别,预测结果就是为S x S x (B x 5+C)
维张量。
YOLO的网络架构
这里网络架构的技巧是使用1x1卷积核,降低特征的维度。
1.2. SSD(Single Shot MultiBox Detector) 2016
SSD相对于YOLO,改进是使用了不同比例的box,并且网络结构上采用了金字塔结构。这样的好处是,可以提升准确率,因为实际中的物体,大小总是不同的。
SSD可以在保证准确率的前提下,达到很高的fps(59fps),相对于Faster RCNN实现的7fps有很大的提高
和YOLO网络架构的对比
上图可以看出&#x