这是继RCNN,fast-RCNN ,faster-RCNN,SSD之后,又一新型方法YOLO
YOLO1的出现解决了基于DL的目标检测中一个大痛点------速度问题。

参数

每个bounding box要预测(x, y, w, h)和confidence共5个值,每个网格还要预测一个类别信息,记为C类。则SxS个网格,每个网格要预测B个bounding box还要预测C个categories。输出就是S x S x (5*B+C)的一个tensor

  • x、y是相对于格子左上角的偏移量

yolo1中坐标的呈现规则:
YOLO的第一步----YOLO1

  • confidence置信度所含信息:bounding box是否含有物体,包含物体情况下位置的准确性,Pr(project)*IOU,Pr(project)不是1就是0

yolo1的问题,每一个grid只能用来预测一种问题,每个grid只选取一个IOU最高的boundingbox来检测,如果想一个grid预测两个问题,就要设定每个格子能返回两个向量,注意一个向量中就包含了B个bounding box。(这里要区分bounding boxgrid的区别)每个grid只预测一组而不管该单元格预测的bboxes的数量B是多少

基础网络

GoogLeNet:24个卷积层,2个全链接层。(用1×1 reduction layers 紧跟 3×3 convolutional layers 取代Goolenet的 inception modules )
最后一层使用线性**函数而所有其他层的**函数使用leaky relu

损失函数

首先根据样本标签找到目标中心点在哪一个gridcell,把这个gridcell对应的tensor拿出来算loss
这个tensor如下:

  • 所有的BBox都要算confidence loss,noobject的那个要带权重
  • 有object的那个BBox(即IOU最大的那个)算location loss
  • 算classification loss

YOLO的第一步----YOLO1

注意看classification loss和location loss的权重,权重来平衡的关系是:提高了边界框坐标预测的损失值,并减少了不包含目标的边界框的置信度预测损失值

损失函数的设计目标就是让坐标(x,y,w,h),confidence,classification 这个三个方面达到很好的平衡

  • 只有当某个网格中有object的时候才对classification error进行惩罚
  • 只有当某个box predictor对某个ground truth box负责的时候,才会对box的coordinate error进行惩罚,而对哪个ground truth box负责就看其预测值和ground truth box的IoU是不是在那个cell的所有box中最大。(例如某个样本只有一辆自行车,那训练时只对该自行车对应的grid的bounding box进行训练、梯度下降)

大致流程

训练流程
  1. 预训练分类网络: 在 ImageNet 1000-class competition dataset上预训练一个分类网络,这个网络是Figure3中的前20个卷机网络+average-pooling layer+ fully connected layer (此时网络输入是224*224)
  2. 训练检测网络:转换模型去执行检测任务,《Object detection networks on convolutional feature maps》提到说在预训练网络中增加卷积和全链接层可以改善性能。在他们例子基础上添加4个卷积层和2个全链接层,随机初始化权重。检测要求细粒度的视觉信息,所以把网络输入也又224224变成448448
预测流程
  1. Resize成448448,图片分割得到77网格(cell)
  2. CNN提取特征和预测:卷积不忿负责提特征。全链接部分负责预测:a) 772=98个bounding box(bbox) 的坐标 和是否有物体的confidence 。 b) 7*7=49个cell所属20个物体的概率(a、b的预测都是由最后两层全连接层来完成的)
  3. 过滤bbox(通过nms)

非极大值抑制(Non-Maximum Suppression,NMS)
NMS顾名思义就是抑制不是极大值的元素,可以理解为局部最大搜索。这个局部代表的是一个邻域,邻域有两个参数可变,一是邻域的维数,二是邻域的大小。例如在行人检测中,滑动窗口经提取特征,经分类器分类识别后,每个窗口都会得到一个分数。但是滑动窗口会导致很多窗口与其他窗口存在包含或者大部分交叉的情况。这时就需要用到NMS来选取那些邻域里分数最高(是行人的概率最大),并且抑制那些分数低的窗口。
YOLO的第一步----YOLO1

每个网格预测的class信息和bounding box预测的confidence信息相乘,就得到每个bounding box的class-specific confidence score
YOLO的第一步----YOLO1
等式左边第一项就是每个网格预测的类别信息,第二三项就是每个bounding box预测的confidence。这个乘积即encode了预测的box属于某一类的概率,也有该box准确度的信息
得到每个box的class-specific confidence score以后,设置阈值,滤掉得分低的boxes,对保留的boxes进行NMS处理,就得到最终的检测结果。

缺点

  • 输入尺寸固定:限制了泛化能力
  • 小目标检测效果差:一个grid只能选一个bounding box来预测

相关文章:

  • 2021-08-05
  • 2021-10-08
  • 2021-09-02
  • 2022-12-23
  • 2021-12-12
  • 2021-06-25
猜你喜欢
  • 2021-06-10
  • 2021-08-20
  • 2021-08-29
  • 2021-05-14
  • 2021-09-29
  • 2021-11-29
  • 2021-06-09
相关资源
相似解决方案