YOLO论文总结
(1)整个图片进行训练,检测的时候也是整个图片进行检测直接获得bounding boxes和class probabilities。
(2)损失函数的设计。
(3)针对lager object和small object对h和w的偏差带来误差的敏感度不一样,对损失函数进行修改。
(4)网络结构参考Googlenet,没有引用Googlenet的inception机制。
1、论文摘要
(1)基础YOLO模型以45帧/秒的速度实时处理图像,与最先进的检测系统相比,YOLO产生了更多的定位误差,但不太可能在背景上的预测假阳性。
(2)YOLO系统将输入图像分成S×S的网格。如果一个目标的中心落入一个网格单元中,该网格单元负责检测该目标,每个网格单元预测这些盒子的B 个边界框和置信度分数。
2、YOLO网络结构
在PASCALVOC中,图像输入为448x448,取S=7,B=2,一共有20个类别(C=20)。则输出就是7x7x30的一个tensor。
起初的卷积层用来从图像中提取特征。
全连接层用来预测输出的概率和坐标。
24个卷积层,之后跟着2个全连接层
最终输出是7 x 7 x 30的张量。
Fast YOLO和YOLO之间所有的训练和测试参数一样(Fast YOLO是9层卷积层)。
在ImageNet上进行卷积层的预训练。
3、YOLO的实现方法
将一幅图像分成SxS个网格(grid cell),如果某个object的中心落在这个网格中,则这个网格就负责预测这个object。
YOLO直接从一张图片中提取特征,来预测每一个Bounding box,最小化和ground turth的误差。由于YOLO是一个端到端的训练,并且中间没有region proposal生成,所以在速度上有了很大的提升。
(1)每个网格要预测B个boundingbox,每个boundingbox除了要回归自身的位置之外,还要附带预测一个confidence值。
这个confidence代表了所预测的box中含有object的置信度和这个box预测的有多准两重信息,其值是这样计算的:
其中如果有object落在一个gridcell里,第一项取1,否则取0。第二项是预测的boundingbox和实际的groundtruth之间的IoU值。
(2)每个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、yolo过程说明
5、损失函数
在实现中,最主要的就是怎么设计损失函数,让这个三个方面得到很好的平衡。作者简单粗暴的全部采用了sum-squared error loss来做这件事。
YOLO一张图片只会预测98个BoundingBox和所述类的可能性。所以YOLO在计算过程中,速度很快。但是YOLO的局限性也相当明显,首先一个cell只能预测两个Bounding Box,预测一类物体,所以当有一群小物体密集的时候很难得到正确的Bounding Box,例如广场有一群小麻雀,河里有一群小鱼。小物体在卷积和pooling的过程中,损失的信息越来越多,得到的有用信息已经很少,所以YOLO在检测小目标效果不尽人意。
7、新方法
作者提出了将YOLO与fast RCNN结合的想法,在实验中检测精度明显提高,但是速度方面还是没有变化,达不到实时检测效果