原创:悬鱼铭
目标检测(Object Detection)任务是计算机视觉中非常重要且热门的研究方向之一,是计算机视觉算法工程师的必考的知识点。本文通过以下几点阐述:
-
目标检测的简介
-
目标检测的发展
-
YOLO V1 原理详解
全文总共3千字左右,阅读时间12分钟!
目标检测的简介
目标检测是解决图像分割、目标跟踪、图像描述等问题的基础,推动着它们的发展。目标检测到现今已经研究20年有余,04年,Viola 和 Jones学者研究的实时人脸检测的文章,引用量高达2万1千多[2]。
目标检测有非常广泛的应用, 例如在安防监控、手机支付中的人脸检测,在智慧交通,自动驾驶中的车辆检测,在智慧商超,无人结账中的商品检测。在工业领域中有例如钢材、轨道表面缺陷检测。
目标检测关注的是图片中特定目标物体的位置。一个检测任务包含两个子任务,其一是输出这一目标的类别信息,属于分类任务;其二是输出目标的具体位置信息,属于定位任务。类比我们去摘草莓,找到草莓和草莓的位置。
-
物体在图像中的位置信息(用矩形框的坐标值表示, X m i n 、 Y m i n 、 X m a x 、 Y m a x Xmin、Ymin、Xmax、Ymax Xmin、Ymin、Xmax、Ymax), X m i n 、 Y m i n Xmin、Ymin Xmin、Ymin 是矩形框左上角的坐标, X m a x 、 Y m a x Xmax、Ymax Xmax、Ymax 是矩形框右下角的坐标。
-
物体的中心点可以根据坐标值计算得到:
中心点 ( X m i n + ( X m a x − X m i n ) / 2 , Y m i n + ( Y m a x − Y m i n ) / 2 ) ( Xmin + (Xmax - Xmin)/2 , Ymin + (Ymax - Ymin)/2 ) (Xmin+(Xmax−Xmin)/2,Ymin+(Ymax−Ymin)/2)
图1:目标检测的坐标表示
目标检测的发展
早期,传统目标检测算法还没有使用深度学习,一般分为三个阶段:区域选取(找到物体的位置)、特征提取(描述物体的特征,特征类比苹果与西瓜的颜色与形状,苹果:小小的红色椭圆,西瓜:大大的绿色椭圆)、特征分类(看见小小的红色椭圆,知道是苹果;看见大大的绿色椭圆,知道是西瓜)。
- 区域选取:采用滑动窗口(Sliding Windows)算法(可以想象一个窗口在图像从左到右,从上到下,框出图像内容),选取图像中可能出现物体的位置,这种算法会存在大量冗余框,并且计算复杂度高。
- 特征提取:通过手工设计的特征提取器(如SIFT和HOG等)进行特征提取。
- 特征分类:使用分类器(如SVM)对上一步提取的特征进行分类。
2014年的R-CNN(Regions with CNN features)[3]使用深度学习实现目标检测,从此拉开了深度学习做目标检测的序幕。并且随着深度学习的方法快速发展,基于深度学习的目标检测,其检测效果好,逐渐成为主流。
基于深度学习的目标检测大致可以分为一阶段(One Stage)模型和二阶段(Two Stage)模型。目标检测的一阶段模型是指没有独立地提取候选区域(Region Proposal),直接输入图像得到图中存在的物体类别和相应的位置信息。典型的一阶段模型有SSD(Single Shot multibox-Detector)[4]、YOLO(You Only Look Once)[5]系列模型等。二阶段模型是有独立地候选区域选取,要先对输入图像筛选出可能存在物体的候选区域,然后判断候选区域中是否存在目标,如果存在输出目标类别和位置信息。经典的二阶段模型有R-CNN[3]、Fast R-CNN[6]、Faster R-CNN[7]。
两阶段的检测算法精度会比一阶段检测算法高,而检测速度确不如一阶段的检测算法,二阶段检测算法适合对精度要求高的业务,一阶段检测算法适合对实时性要求高的业务。
接下来以一阶段检测算法YOLO V1为例,详细介绍算法思想。学懂YOLO V1, 便懂了YOLO系列的核心思想。以下内容非常适合有深度学习基础的读者,没有此基础,可以收藏回顾哦!
YOLO V1 原理详解
YOLO V1 是深度学习的方法,可以看成黑盒子,输入一张图片,输出图中物体类别信息和物体的位置。
精华一:网络结构的输出
为什么网络能输出物体的类别信息和物体的位置呢?这里需要了解网络的输出是什么样子的!
网络输出的特征图会划分为 S × S S\times S S×S 的网格,每个网格会预测 B B B 个Bounding Boxes(简称bbox),由 x , y , w , h x , y, w, h x,y,w,h表示 ,$x , y $ 是物体中心点坐标, w , h w, h w,h 是 bbox的长宽;以及每个bbox对应一个置信度,置信度反映检测框是否包含物体的概率 c o n f i d e n c e confidence confidence。除了确定是否包含物体,还需进一步确定物体是什么?对于有 C C C个类别的数据集,会对每个类别预测出类别概率。
注意每个网格会包含多个物体,那个物体的中心落在网格里,就负责预测这个物体。
图二:YOLO V1 [5]
图二中展示了把输入图像划分为 S × S S\times S S×S 的网格,本文提到是特征图,我的理解这里都可以,输入图像的网格区域与特征图的网格区域有对应关系。
这个留了一个疑惑:每个bbox包含物体的概率 c o n f i d e n c e confidence confid