yolov1总结

91 篇文章 1 订阅
7 篇文章 0 订阅

在这里插入图片描述

Yolov1 流程图

假设输入图像 [1,3,448,448]–>backbone Net–>[1,2048,7,7]–>[1,B(1+4)+C,7,7]
则有 S=7, 取B=2,以PASCAL VOC数据为例有20个类别,则C=20

[[1,B(1+4)+C,7,7]]=[1,30,7,7]

这30列的具体意义,如下图所示
在这里插入图片描述

方式一

也可以按这种方式解析,只需保证训练与推理时使用同一种解析方式
在这里插入图片描述

方式二

算法首先把输入图像划分成S*S的格子,然后对每个格子都预测B个bounding boxes,每个bounding box都包含5个预测值:x,y,w,h和confidence。x,y就是ground truth的中心坐标,与grid cell左上角的偏差/格网大小使得范围变成0到1;w和h进行归一化(分别除以图像的w和h,这样最后的w和h就在0到1范围)。

输入图像大小 h=448,w=448
每个grid cell大小为 h_gc=w_gc=448//S=448//7=64
假设ground truth 的boxes为 [100,200,300,400] x1,y1,x2,y2的格式,

  • 1.转成x0,y0,w,h格式为[(x1+x2)/2,(y1+y2)/2,(x2-x1),(y2-y1)]=[200.,300.,200,200],

  • 2.计算其中心点落在哪个grid cell里 200 / 64 ≈ 3.125 200/64 \approx 3.125 200/643.125 , 300 / 64 ≈ 4.6875 300/64\approx 4.6875 300/644.6875,则对应的grid cell 为(3,4)-(4,5),也就是由该grid cell负责预测该ground truth

  • 3.将x0,y0,w_gt,h_gt 归一化到0~1范围,(x0-3*64)/w_gc,(y0-4*64)/h_gc,w_gt/w,h_gt/h 得到为0.125,0.6875,0.4464,0.4464

  • 4.如何得到对应的预测box

    • 先解析 feature:[1,30,7,7]这些列的含义,按方式一来解析
    • pred_box1=feature[1,0:5,:,:]=[5,7,7]=reshape [7,7,5],
    • pred_box2=feature[1,5:10,:,:]=[5,7,7]=reshape [7,7,5],
    • pred_cls=feature[1,10:,:,:]=[20,7,7]=reshape [7,7,20]
  • 5.该ground truth对应的预测2个框为

    • pred_box1=pred_box1[3:4,4:5,5]
    • pred_box2=pred_box2[3:4,4:5,5]
    • 按3说的重新反转成x1,y1,x2,y2的格式在与ground truth计算IOU值分别为IOU_1,IOU_2
    • 如果IOU_1>IOU_2,则取pred_box1为预测的box(其置信度为其与对应的gt_box的IOU值),pred_box2也当做没目标处理(其置信度为0)
    • 推理时做:每个bounding box的confidence和每个类别的score相乘,得到每个bounding box属于哪一类的confidence score ; pred_cls=pred_cls*pred_box1[:,:,-1](最后一个为 box的confidence)

来看看 S×S×30 的数据块的具体含义。

  • S×S是图像位置,比如第一行第二列的网格,回到原图的位置也是如此。(有全连接层的时候,其实随意,只要你预测时每个位置的网格对应你编码时的网格就可以。全卷积层由于每个点的感受野的问题,最好是一一对应,否则原理上说不通,效果应该会差很多)

  • 30的通道上分别是两个box的cx,cy,w,h,confidence,这就占了10个,再加上20个类别正好是30

  • cxcy表示物体的中心点坐标与对应网格左上角的偏差,注意归一化到0-1,需要除以网格大小;wh是物体相对于图片的大小,也在0-1之间;confidence是 P(object)×IOUpredtruth,其中IOU在训练过程中是在线计算的

  • 首先要明确两个概念,一是网格中有无目标,二是网格中的一个目标只有一个box负责(responsible)另一个box也算没有目标,根据在线计算IOU的大小确定哪一个负责。

  • 含有目标的confidence先设置为 1 ∗ I O U t a r g e t 1*IOU^{target} 1IOUtarget,用于区别不含目标的(没有目标和iou阈值小的都是0),IOU target在线计算)。

loss 计算

在这里插入图片描述
第三、四行表示bounding box的confidence损失,就像前面所说的,分成grid cell包含与不包含object两种情况。这里注意下因为每个grid cell包含两个bounding box,所以只有当ground truth 和该网格中的某个bounding box的IOU值最大的时候,才计算这项。

因为很多grid cell是不包含物体的,这样的话很多grid cell的confidence score为0。所以采用设置不同权重方式来解决,一方面提高localization error的权重,另一方面降低没有object的box的confidence loss权值,loss权重分别是5和0.5。而对于包含object的box的confidence loss权值还是原来的1。

需要注意的

  • 1.yolo不需要像fasterrcnn那样事先生成anchor,而是自己生成

  • 2.推理时做:每个bounding box的confidence和每个类别的score相乘,得到每个bounding box属于哪一类的confidence score。

  • 3.一个grid cell中是否有object怎么界定?
    首先要明白grid cell的含义,以文中77为例,这个size其实就是对输入图像(假设是224224)不断提取特征然后sample得到的(缩小了32倍),然后就是把输入图像划分成7*7个grid cell,这样输入图像中的32个像素点就对应一个grid cell。回归正题,那么我们有每个object的标注信息,也就是知道每个object的中心点坐标在输入图像的哪个位置,那么不就相当于知道了每个object的中心点坐标属于哪个grid cell了吗,而只要object的中心点坐标落在哪个grid cell中,这个object就由哪个grid cell负责预测,也就是该grid cell包含这个object。另外由于一个grid cell会预测两个bounding box,实际上只有一个bounding box是用来预测属于该grid cell的object的,因为这两个bounding box到底哪个来预测呢?答案是:和该object的ground truth的IOU值最大的bounding box。

  • 4.假设预测的值为pred[m,30], target为boxes[n,4],labels[n,20] 不包括背景(转成one-hot)

    • 反算出boxes中心点落在grid ceil的网格,有目标的mask[n,] 没有目标no_mask[m-n,]
    • loss_conf: mse(pred[n,4],1)+mse(pred[m-n,4],0)*0.5
    • loss_boxes: loss_boxes=mes(pred[n,0],boxes[n,0)+mes(pred[n,1],boxes[n,1])+mse(sqrt(pred[n,2]),sqrt(boxes[n,2]))+mse(sqrt(pred[n,3]),sqrt(boxes[n,3]))
      loss_boxes=loss_boxes*5
    • loss_cls:mse(pred[n,-20:],labels[n,20])
    • loss=loss_conf+loss_boxes+loss_cls
  • 5.推理时score=pred[:,4]*pred[:,-20:]

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
yolov1-yolov5是一系列基于深度学习的目标检测算法,以下是它们的主要特点和改进之处: - yolov1是yolo系列的第一个版本,它采用了单个卷积神经网络来进行目标检测。整体思想是将输入图像分成网格,并在每个网格中预测边界框和类别。然后使用非极大值抑制来排除重叠的边界框,最终得到检测结果。 - yolov2是yolo系列的第二个版本,相比yolov1做了许多改进。其中包括使用批量归一化(batch normalization)来加速训练过程,引入更高分辨率的分类器(hi-res classifier)来提高检测精度,引入先验框(anchor boxes)和维度聚类(dimension priors)来更好地预测边界框的位置和尺寸。 - yolov3是yolo系列的第三个版本,它在yolov2的基础上进行了进一步的改进。主要的改动包括引入了残差网络(resnet)来提高特征提取的效果,使用多尺度预测来提高对不同大小目标的检测能力,并采用多标签分类网络来增加模型的表达能力。 - yolov4是yolo系列的第四个版本,它在yolov3的基础上进行了一系列优化和改进。其中包括使用更深的网络结构、引入更多的技巧来提高训练和推理速度,使用焦点损失函数(focal loss)来解决类别不平衡问题,引入自适应形态匹配(Adaptive Spatial Matching)等技术来提高检测的精度和稳定性。 - yolov5是yolo系列的最新版本,它在yolov4的基础上进行了一些改进。主要包括使用更轻量级的网络结构,引入新的数据增强方法和训练策略,以及改进的损失函数等。yolov5在保持检测精度的同时,显著提升了推理速度和模型大小。 总结来说,yolov1-yolov5是一系列不断改进的目标检测算法,它们在网络结构、特征提取、损失函数等方面进行了不同的改进和优化,从而不断提高了检测精度和速度。每个版本都有自己的特点和改进之处,选择适合的版本取决于具体的应用场景和需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值