写在前面的话:文章内容来源于但不限于网络、书籍、个人心得体会等,意在总结和方便各位同行快速参考,共同学习进步,记录自己的问题。错误在所难免,有请各位批评斧正。如有侵权,烦请第一时间通知,我会立即删除相关内容,万分感谢!
YOLO的核心思想: 利用整张图作为网络的输入,直接在输出层回归bounding box的位置和bounding box所属的类别。
每个bounding box要预测(x, y, w, h)和confidence共5个值
每个网格还要预测一个类别信息,记为C类
(1) 给个一个输入图像,首先将图像划分成SxS的网格
(2) 对于每个网格,我们都预测B个边框(包括每个边框是目标的置信度以及每个边框区域在多个类别上的概率)
(3) 根据上一步可以预测出SxSxB个目标窗口,然后根据阈值去除可能性比较低的目标窗口,最后NMS去除冗余窗口即可。
输出就是S x S x (5*B+C)的一个tensor
在PASCAL VOC中,图像输入为448x448,取S=7,B=2,一共有20个类别(C=20)。则输出就是7x7x(5*2+20)=7x7x30的一个tensor
每个grid有30维,这30维中,8维是回归box的坐标,2维是box的confidence,还有20维是类别,其中坐标的x,y用对应网格的offset归一化到0-1之间,w,h用图像的width和height归一化到0-1之间。
增强版本GPU中能跑45fps,简化版本155fps
YOLO可以每秒处理45张图像
每个网络预测目标窗口时使用的是全图信息
只使用7*7的网格回归会使得目标不能非常精准的定位,检测精度并不是很高
只有当某个网格中有object的时候才对classification error进行惩罚。
只有当某个box predictor对某个ground truth box负责的时候,才会对box的coordinate error进行惩罚,而对哪个ground truth box负责就看其预测值和ground truth box的IoU是不是在那个cell的所有box中最大。
YOLO评价:
1.YOLO对相互靠的很近的物体,还有很小的群体 检测效果不好,这是因为一个网格中只预测了两个框,并且只属于一类。
2.对测试图像中,同一类物体出现的新的不常见的长宽比和其他情况是。泛化能力偏弱。
3.由于损失函数的问题,定位误差是影响检测效果的主要原因。尤其是大小物体的处理上,还有待加强。