目标检测分为二阶段和一阶段的方法,二阶段方法主要有Fast R-CNN系列,Mask R-CNN等,主要方法是用算法生成一些列做为样本的候选框,而后再使用卷积神经网络进行样本的分类;网络
一阶段方法(End to End方法)主要有SSD系列,YOLO系列,这种方法是将目标边框的定位问题转化为回归问题处理。ide
因为思想的不一样,二阶段检测方法在检测准确率和定位精度有优点,一阶段检测方法在速度上占有优点。函数
因此YOLO的核心思想是,直接在输出层回归bounding box的位置和bounding box所属的类别(整张图做为网络的输入,把 Object Detection 的问题转化成一个 Regression 问题)。oop
YOLO的物体检测精度低于其余state-of-the-art的物体检测系统。性能
YOLO对小物体的检测效果很差(尤为是密集的小物体,由于一个栅格只能预测2个物体)。学习
Resize成448 \(\times\) 448,图片分割获得7 \(\times\) 7 网格(cell)测试
过滤获得的bbox, 使用nms算法google
网络示意图:es5
最后reshape层的计算:(5 = x,y,w,h,confidence)
\[ filter = (BboxNum\times5+Class) \]
这里BboxNum = 2, Class = 20,因此filter是30。
网络结构借鉴了 GoogLeNet 。24个卷积层,2个全连接层。(用1×1 reduction layers 紧跟 3×3 convolutional layers 取代Goolenet的 inception modules )
每一个1 \(\times\) 1 \(\times\) 30 对应其中一个cell, 每一个cell须要预测两个bounding box的中心坐标(\(x_c\),\(y_c\),\(w\),\(h\)),其中\(x_c,y_c\)被归一化到0~1之间,w,h经过图像的width和height归一化到0~1之间。 每一个bounding box除了要回归自身的位置以外,还要附带预测一个confidence值。 这个confidence表明了所预测的box中含有object的置信度和这个box预测的有多准两重信息:
\[ confidence=Pr(Object)\times IOU^{truth}_{pred} \]
第一项:\[Pr(Object)\]: 表明的是若是人工标注的框(ground truth box)落在一个gird cell中,则取1,不然取0。
第二项: \[IOU^{truth}_{pred}\]: 预测的bounding box和实际的ground truth box之间的IOU值。
这样前10个框来源就清楚了,即:\(BboxNum \times 5\).
剩余的20维度是用来对20个类进行预测,因此总共须要输出是 \[7 \times 7 \times (5 \times 2 + 20)\]。
关键内容:损失函数的设计
说明:每行是一个cell对应的两个bounding Box的相关信息,一共有\(7\times7\)这么多的行
对应类别计算方法,须要与confidence相乘,获得如下矩阵:
按照下图所示步骤进行操做,这只是示意其中一个类,每一行都要进行以下操做:
在全部作完nms以后选择对应的框画出来
获得如下效果:
总图:
损失函数由三个方面组成,一个是定位损失(localization error),一个是置信度损失,一个是分类损失(classification error)。简单的所有采用了sum-squared error loss来作这件事会有如下不足:
如何解决,从新设计新的loss计算方案:
一个网格预测多个bounding box,在训练时咱们但愿每一个object(ground true box)只有一个bounding box专门负责(一个object 一个bbox)。具体作法是与ground true box(object)的IOU最大的bounding box 负责该ground true box(object)的预测。这种作法称做bounding box predictor的specialization(专职化)。每一个预测器会对特定(sizes,aspect ratio or classed of object)的ground true box预测的愈来愈好。(我的理解:IOU最大者偏移会更少一些,能够更快速的学习到正确位置)
测试阶段,使用nms的时候,按照如下方式进行衡量是否保留改框:
\[ Pr(Class_i|Object)\times Pr(Object)\times IOU^{truth}_{pred}=Pr(Class_i)\times IOU^{truth}_{pred} \]