很是详细!!!html
http://www.javashuo.com/article/p-qtiocjua-mk.html网络
这篇博客文章讲解特别详细,以前不懂得一些点在这里都找到了答案。ide
https://blog.csdn.net/c20081052/article/details/80236015函数
https://zhuanlan.zhihu.com/p/25045711性能
YOLO的核心思想就是利用整张图做为网络的输入,直接在输出层回归bounding box的位置和bounding box所属的类别。学习
faster RCNN中也直接用整张图做为输入,可是faster-RCNN总体仍是采用了RCNN那种 proposal+classifier的思想,只不过是将提取proposal的步骤放在CNN中实现了。测试
将一幅图像分红SxS个网格(grid cell),若是某个object的中心 落在这个网格中,则这个网格就负责预测这个object。 .net
1. 每一个网格要预测B个bounding box,每一个bounding box除了要回归自身的位置以外,还要附带预测一个confidence值。 设计
2. 这个confidence表明了所预测的box中含有object的置信度和这个box预测的有多准两重信息,其值是这样计算的: code
其中若是有object落在一个grid cell里,第一项取1,不然取0。 第二项是预测的bounding box和实际的groundtruth之间的IoU值。
3. 每一个bounding box要预测(x, y, w, h)和confidence共5个值,每一个网格还要预测一个类别信息,记为C类。则SxS个网格,每一个网格要预测B个bounding box还要预测C个categories。输出就是S x S x (5*B+C)的一个tensor。
注意:class信息是针对每一个网格的,confidence信息是针对每一个bounding box的。
4. 举例说明: 在PASCAL VOC中,图像输入为448x448,取S=7,B=2,一共有20个类别(C=20)。则输出就是7x7x30的一个tensor。
网络结构借鉴了 GoogLeNet 。24个卷积层,2个全连接层。(用1×1 reduction layers 紧跟 3×3 convolutional layers 取代Goolenet的 inception modules )
1. 在test的时候,每一个网格预测的class信息和bounding box预测的confidence信息相乘,就获得每一个bounding box的class-specific confidence score: 等式左边第一项就是每一个网格预测的类别信息,第二三项就是每一个bounding box预测的confidence。这个乘积即encode了预测的box属于某一类的几率,也有该box准确度的信息。
2. 获得每一个box的class-specific confidence score之后,设置阈值,滤掉得分低的boxes,对保留的boxes进行NMS处理,就获得最终的检测结果。
损失函数设计:
损失函数的设计目标就是让坐标(x,y,w,h),confidence,classification 这个三个方面达到很好的平衡。简单的所有采用了sum-squared error loss来作这件事会有如下不足: a) 8维的localization error和20维的classification error同等重要显然是不合理的; b) 若是一个网格中没有object(一幅图中这种网格不少),那么就会将这些网格中的box的confidence push到0,相比于较少的有object的网格,这种作法是overpowering的,这会致使网络不稳定甚至发散。 解决方案以下:
对不一样大小的bbox预测中,相比于大bbox预测偏一点,小box预测偏一点更不能忍受。而sum-square error loss中对一样的偏移loss是同样。 为了缓和这个问题,做者用了一个比较取巧的办法,就是将box的width和height取平方根代替本来的height和width。small bbox的横轴值较小,发生偏移时,反应到y轴上的loss比big box要大。
一个网格预测多个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最大者偏移会更少一些,能够更快速的学习到正确位置)
训练检测网络:转换模型去执行检测任务,《Object detection networks on convolutional feature maps》提到说在预训练网络中增长卷积和全连接层能够改善性能。在他们例子基础上添加4个卷积层和2个全连接层,随机初始化权重。检测要求细粒度的视觉信息,因此把网络输入也又224*224变成448*448。
最后一层输出为 (7*7)*30的维度。每一个 1*1*30的维度对应原图7*7个cell中的一个,1*1*30中含有类别预测和bbox坐标预测。总得来说就是让网格负责类别信息,bounding box主要负责坐标信息(部分负责类别信息:confidence也算类别信息)。具体以下:
YOLO对相互靠的很近的物体,还有很小的群体 检测效果很差,这是由于一个网格中只预测了两个框,而且只属于一类。
对测试图像中,同一类物体出现的新的不常见的长宽比和其余状况是。泛化能力偏弱。
因为损失函数的问题,定位偏差是影响检测效果的主要缘由。尤为是大小物体的处理上,还有待增强。
https://zhuanlan.zhihu.com/p/25053311
http://www.javashuo.com/article/p-fbwammag-cp.html
https://mp.weixin.qq.com/s/SzHhBf9_5lb0bTtY-qAEJQ
划分网格怎么实现呢?
https://mp.weixin.qq.com/s/SzHhBf9_5lb0bTtY-qAEJQ