摘要:YOLO系列的指标检测算法能够说是指标检测史上的宏篇巨作,接下来咱们来具体介绍一下YOLO v3算法内容。
算法根本思维
首先通过特征提取网络对输出特征提取特色,失去特定大小的特色图输入。输出图像分成13×13的grid cell,接着如果实在框中某个object的核心坐标落在某个grid cell中,那么就由该grid cell来预测该object。每个object有固定数量的bounding box,YOLO v3中有三个bounding box,应用逻辑回归确定用来预测的回归框。
网络结构
上图DBL是Yolo v3的根本组件。Darknet的卷积层后接BatchNormalization(BN)和LeakyReLU。除最初一层卷积层外,在yolo v3中BN和LeakyReLU曾经是卷积层不可拆散的局部了,独特形成了最小组件。
骨干网络中应用了5个resn构造。n代表数字,有res1,res2, … ,res8等等,示意这个res_block里含有n个res_unit,这是Yolo v3的大组件。从Yolo v3开始借鉴了ResNet的残差构造,应用这种构造能够让网络结构更深。对于res_block的解释,能够在上图网络后果的右下角直观看到,其根本组件也是DBL。
在预测支路上有张量拼接(concat)操作。其实现办法是将darknet中间层和中间层后某一层的上采样进行拼接。值得注意的是,张量拼接和Res_unit构造的add的操作是不一样的,张量拼接会裁减张量的维度,而add只是间接相加不会导致张量维度的扭转。
Yolo_body一共有252层。23个Res_unit对应23个add层。BN层和LeakyReLU层数量都是72层,在网络结构中的体现为:每一层BN前面都会接一层LeakyReLU。上采样和张量拼接操作各2个,5个零填充对应5个res_block。卷积层一共有75层,其中有72层前面都会接BatchNormalization和LeakyReLU形成的DBL。三个不同尺度的输入对应三个卷积层,最初的卷积层的卷积核个数是255,针对COCO数据集的80类:3×(80+4+1)=255,3示意一个grid cell蕴含3个bounding box,4示意框的4个坐标信息,1示意置信度。
下图为具体网络后果图。
输出映射到输入
不思考神经网络构造细节的话,总的来说,对于一个输出图像,YOLO3将其映射到3个尺度的输入张量,代表图像各个地位存在各种对象的概率。
咱们看一下YOLO3共进行了多少个预测。对于一个416416的输出图像,在每个尺度的特色图的每个网格设置3个先验框,总共有 13133 + 26263 + 5252*3 = 10647 个预测。每一个预测是一个(4+1+80)=85维向量,这个85维向量蕴含边框坐标(4个数值),边框置信度(1个数值),对象类别的概率(对于COCO数据集,有80种对象)。
边界框预测(Bounding Box Prediction)
Yolo v3对于bounding box的初始尺寸还是采纳Yolo v2中的k-means聚类的形式来做,这种先验常识对于bounding box的初始化帮忙还是很大的,毕竟过多的bounding box尽管对于成果来说有保障,然而对于算法速度影响还是比拟大的。
在COCO数据集上,9个聚类如下表所示,注这里须要阐明:特色图越大,感触野越小。对小指标越敏感,所以选用小的anchor box。特色图越小,感触野越大。对大指标越敏感,所以选用大的anchor box。
Yolo v3采纳间接预测绝对地位的办法。预测出b-box中心点绝对于网格单元左上角的绝对坐标。间接预测出(tx,ty,tw,th,t0),而后通过以下坐标偏移公式计算失去b-box的地位大小和confidence。
tx、ty、tw、th就是模型的预测输入。cx和cy示意grid cell的坐标,比方某层的feature map大小是13×13,那么grid cell就有13×13个,第0行第1列的grid cell的坐标cx就是0,cy就是1。pw和ph示意预测前bounding box的size。bx、by、bw和bh就是预测失去的bounding box的核心的坐标和size。在训练这几个坐标值的时候采纳了sum of squared error loss(平方和间隔误差损失),因为这种形式的误差能够很快的计算出来。
注:这里confidence = Pr(Object)*IoU 示意框中含有object的置信度和这个box预测的有多准。也就是说,如果这个框对应的是背景,那么这个值应该是 0,如果这个框对应的是前景,那么这个值应该是与对应前景 GT的IoU。
Yolo v3应用逻辑回归预测每个边界框的分数。如果边界框与实在框的重叠度比之前的任何其余边界框都要好,则该值应该为1。如果边界框不是最好的,但的确与实在对象的重叠超过某个阈值(Yolo v3中这里设定的阈值是0.5),那么就疏忽这次预测。Yolo v3只为每个实在对象调配一个边界框,如果边界框与实在对象不吻合,则不会产生坐标或类别预测损失,只会产生物体预测损失。
多尺度预测
在下面网络结构图中能够看出,Yolo v3设定的是每个网格单元预测3个box,所以每个box须要有(x, y, w, h, confidence)五个基本参数。Yolo v3输入了3个不同尺度的feature map,如上图所示的y1, y2, y3。y1,y2和y3的深度都是255,边长的法则是13:26:52。
每个预测工作失去的特色大小都为N ×N ×[3∗(4+1+80)] ,N为格子大小,3为每个格子失去的边界框数量, 4是边界框坐标数量,1是指标预测值,80是类别数量。对于COCO类别而言,有80个类别的概率,所以每个box应该对每个品种都输入一个概率。所以3×(5 + 80) = 255。这个255就是这么来的。
Yolo v3用上采样的办法来实现这种多尺度的feature map。在Darknet-53失去的特色图的根底上,通过六个DBL构造和最初一层卷积层失去第一个特色图谱,在这个特色图谱上做第一次预测。Y1支路上,从后向前的倒数第3个卷积层的输入,通过一个DBL构造和一次(2,2)上采样,将上采样特色与第2个Res8构造输入的卷积特色张量连贯,通过六个DBL构造和最初一层卷积层失去第二个特色图谱,在这个特色图谱上做第二次预测。Y2支路上,从后向前倒数第3个卷积层的输入,通过一个DBL构造和一次(2,2)上采样,将上采样特色与第1个Res8构造输入的卷积特色张量连贯,通过六个DBL构造和最初一层卷积层失去第三个特色图谱,在这个特色图谱上做第三次预测。
就整个网络而言,Yolo v3多尺度预测输入的feature map尺寸为y1:(13×13),y2:(26×26),y3:(52×52)。网络接管一张(416×416)的图,通过5个步长为2的卷积来进行降采样(416 / 25 = 13,y1输入(13×13)。从y1的倒数第二层的卷积层上采样(x2,up sampling)再与最初一个26×26大小的特色图张量连贯,y2输入(26×26)。从y2的倒数第二层的卷积层上采样(x2,up sampling)再与最初一个52×52大小的特色图张量连贯,y3输入(52×52)感受一下9种先验框的尺寸,下图中蓝色框为聚类失去的先验框。黄色框式ground truth,红框是对象中心点所在的网格。
预测框的3种状况
预测框一共分为三种状况:正例(positive)、负例(negative)、疏忽样例(ignore)。
- 正例:任取一个ground truth, 与下面计算的10647个框全副计算IOU, IOU最大的预测框, 即为正例。并且一个预测框, 只能调配给一个ground truth。 例如第一个ground truth曾经匹配了一个正例检测框, 那么下一个ground truth, 就在余下的10646个检测框中, 寻找IOU最大的检测框作为正例。ground truth的先后顺序可疏忽。正例产生置信度loss、检测框loss、类别loss。预测框为对应的ground truth box标签(应用实在的x、y、w、h计算出); 类别标签对应类别为1, 其余为0; 置信度标签为1。
- 疏忽样例:正例除外, 与任意一个ground truth的IOU大于阈值(论文中应用5), 则为疏忽样例。疏忽样例不产生任何loss。
o 为什么会有疏忽样例?
因为Yolov3采纳了多尺度检测, 那么再检测时会有反复检测景象. 比方有一个实在物体,在训练时被调配到的检测框是特色图1的第三个box,IOU达0.98,此时恰好特色图2的第一个box与该ground truth的IOU达0.95,也检测到了该ground truth,如果此时给其置信度强行打0的标签,网络学习效果会不现实。
- 负例:正例除外(与ground truth计算后IOU最大的检测框,然而IOU小于阈值,仍为正例), 与全副ground truth的IOU都小于阈值(0.5), 则为负例。负例只有置信度产生loss, 置信度标签为0。
如下图所示:
- 为权重参数, 用于管制检测框loss, obj与noobj的置信度loss, 以及类别
- 对于正类而言, 1ijobj输入为1; 对于负例而言, 1ijnoobj输入为1; 对于疏忽样例而言, 全副为0;
- 类别采纳穿插熵作为损失函数。
类别预测
类别预测方面Yolo v2网络中的Softmax分类器,认为一个指标只属于一个类别,通过输入Score大小,使得每个框调配到Score最大的一个类别。但在一些简单场景下,一个指标可能属于多个类(有重叠的类别标签),因而Yolo v3用多个独立的Logistic分类器代替Softmax层解决多标签分类问题,且准确率不会降落。
举例说明,原来分类网络中的softmax层都是假如一张图像或一个object只属于一个类别,然而在一些简单场景下,一个object可能属于多个类,比方你的类别中有woman和person这两个类,那么如果一张图像中有一个woman,那么你检测的后果中类别标签就要同时有woman和person两个类,这就是多标签分类,须要用Logistic分类器来对每个类别做二分类。Logistic分类器次要用到sigmoid函数,该函数能够将输出束缚在0到1的范畴内,因而当一张图像通过特征提取后的某一类输入通过sigmoid函数束缚后如果大于0.5,就示意该边界框负责的指标属于该类。
物体分数和类置信度
物体分数:示意一个边界框蕴含一个物体的概率,对于红色框和其四周的框简直都为1,但边角的框可能简直都为0。物体分数也通过一个sigmoid函数,示意概率值。
类置信度:示意检测到的物体属于一个具体类的概率值,以前的YOLO版本应用softmax将类分数转化为类概率。在YOLOv3中作者决定应用sigmoid函数取代,起因是softmax假如类之间都是互斥的,例如属于“Person”就不能示意属于“Woman”,然而很多状况是这个物体既是“Person”也是“Woman”。
输入解决
咱们的网络生成10647个锚框,而图像中只有一个狗,怎么将10647个框缩小为1个呢?首先,咱们通过物体分数过滤一些锚框,例如低于阈值(假如0.5)的锚框间接舍去;而后,应用NMS(非极大值克制)解决多个锚框检测一个物体的问题(例如红色框的3个锚框检测一个框或者间断的cell检测雷同的物体,产生冗余),NMS用于去除多个检测框。
具体应用以下步骤:摈弃分数低的框(意味着框对于检测一个类信念不大);当多个框重合度高且都检测同一个物体时只抉择一个框(NMS)。
为了更不便了解,咱们选用下面的汽车图像。首先,咱们应用阈值进行过滤一部分锚框。模型有19193*85个数,每个盒子由85个数字形容。将(19,19,3,85)宰割为上面的形态:
box_confidence:(19,19,3,1)示意19*19个cell,每个cell的 3个框,每个框有物体的置信度概率;
boxes:(19,19,3,4)示意每个cell 的3个框,每个框的示意;
box_class_probs:(19,19,3,80)示意每个cell的3个框,每个框80个类检测概率。
每个锚框咱们计算上面的元素级乘法并且失去锚框蕴含一个物体类的概率,如下图:
即便通过类分数阈值过滤一部分锚框,还剩下很多重合的框。第二个过程叫NMS,外面有个IoU,如下图所示。
实现非极大值克制,关键在于:抉择一个最高分数的框;计算它和其余框的重合度,去除重合度超过IoU阈值的框;回到步骤1迭代直到没有比以后所选框低的框。
Loss Function
在Yolo v3的论文里没有明确提出所用的损失函数,确切地说,Yolo系列论文外面只有Yolo v1明确提了损失函数的公式。在Yolo v1中应用了一种叫sum-square error的损失计算方法,只是简略的差方相加。咱们晓得,在指标检测工作里,有几个要害信息是须要确定的:(x,y),(w,h),class,confidence 。依据要害信息的特点能够分为上述四类,损失函数应该由各自特点确定。最初加到一起就能够组成最终的loss function了,也就是一个loss function搞定端到端的训练。
yolov3网络硬核解说(视频)
视频地址:
https://www.bilibili.com/vide...
实在值是如何编码
预测锚框的设计
锚框与指标框做iou
本文分享自华为云社区《YOLOV3 原理剖析(全网材料整顿)》,原文作者:lutianfei 。
点击关注,第一工夫理解华为云陈腐技术~