CV计算机视觉(8)——目标检测one stage detection:yolov1、v2、v3

前言

前面基于Faster-RCNN系列讲了two stage的检测算法,核心思想是先把检测物体框出来,对这个物体进行粗定位和分类,然后再精细定位。而onw stage可以理解为省去粗定位这一步,直接精细定位。用faster-RCNN举例,他有一步RPN,是为了生成候选框的,这是一个粗定位的步骤,有这个步骤就是two stage,没有RPN功能的步骤,直接一步到位就是one stage。

一、YOLOV1

相比Faster-RCNN速度快,精度低,但是如果换backbone也会比Faster快。

1.分割 :grid an image into s×s cells

怎么分割?其实就是用一个backbone生成s×s的尺寸的特征图,这样特征图上的每一个像素点对应到原图上就是一块s×s的区域。每一个小格子叫一个cell(图中涂红的一格)
在这里插入图片描述

在这里插入图片描述
2.检测Each cell predicts B bounding box with a confidence

分割出的cell用来干嘛呢?每个cell负责检测一个物体,而且当这个cell中有一个物体的中心落在里面时才参与检测,没有物体中心的cell不参与检测。

怎么知道物体的中心有没有呢?根据GT。

而且规定,每个负责检测的cell要生成B个Bbox,每个Bbox的要有[x,y,w,h,c]的信息,也就是每个cell生成5B个值,x,y,w,h,不用解释了,就是回归信息,C是置信度。

除了回归的信息,每个cell还要生成类别信息,也就是一个cell最后输出5B+num_clas数量级的值。假如是20个类别,YOLOv1中设计B=2,S=7。——>output_cell=(5×B+num_clas)×s×s =30×7×7
在这里插入图片描述
每个像素点的维度为30:20维度是类别概率,1维度是Bbox1的置信度,1维度是Bbox2的置信度,4维度是Bbox1的回归,4维度是Bbox2的回归。
在V1中每个发生检测的cell输出两个Bbox,取得分最高的那个参与loss计算。

3.loss function

在这里插入图片描述
3.1回归损失
在这里插入图片描述

𝑥, 𝑦: predicated bbox center
𝑤, ℎ: predicated bbox width & height
𝑥~,𝑦~: labeled bbox center
𝑤~,ℎ~: labeled bbox width & height

其实就是求MSE,考虑到长宽W,H和左边X,Y的尺度问题,对长宽用求根号的形式避免尺度过大。进行尺度归一化。

3.2置信度损失

在这里插入图片描述

𝜆𝑛𝑜𝑜𝑏𝑗=0.5,是一个极小的系数,因为有太多的没有物体的Bbox ,c=0的情况很多,所以取一个小的系数(because there’s so many non-object bboxes )

此外,由于训练过程中有GT,所以又一个置信度参考,但是测试过程中是没有置信度参考的,所以训练阶段和测试计算的置信度计算公式稍有不同:
在这里插入图片描述
训练阶段Pr要么是1,要么是0

在这里插入图片描述
测试阶段Pr是模型预测的一个值,通常是小数级别。

由于Bbox有两个,计算过程中选IOU大的那个Bbox的IOU。

3.3 分类损失
在这里插入图片描述
每个cell只输出iou值最大的那个目标,也就是只输出一个目标。(Each sell will only predict 1 object, which is decided by the bbox with largest IoU)

到这里有没有发现什么问题?每个cell只输出一个得分最高的目标,那如果一个cell有两个物体的中心呢,势必会把得分低的那个物体删掉,只输出一个物体。也就是YOLOv1有明显的漏检情况。
(Bad for crowed objects [1 cell 1 obj])

二、YOLOV2

1.相较于V1,增加了BN层;

2.v1是用的ImageNet上预训练的模型,数据集的尺寸是224×224偏小,v2用resize成448×448尺寸的迁移模型

3.增加了anchor机制,参照Faster-RCNN,Faster-RCNN一个特征图上的像素点固定生成9种尺寸大小的anchor,YOLO不固定尺寸,用Kmeans聚类,把这9种anchor再聚成5种大小的anchor尺寸。具体是怎么选的这五个尺寸呢?
首先根据公式:
在这里插入图片描述
对不同的anchor聚类,分成5堆。
然后用每一堆的尺度的平均,作为5种anchor的大小。(为什么选5,跟数据集有关,不同的数据集你也可以指定不同的K)
在这里插入图片描述

4.增加了细粒度的特征融合机制;(reorg层将低级特征和高级特征在通道上concat)

在这里插入图片描述

经过这种操作,一个4×4的FM可以得到4个2×2的特征图,由于高级特征富含语义信息缺少像素信息,把低级的特征经过上述步骤变成高级特征的尺寸后,跟高层特征直接在通道上拼接,这样高级特征就也有了低级的特征。
在这里插入图片描述

5.用多尺寸进行训练,每10个epoch变化一次输入图片的尺寸(从320调整到608),并随之增加cell的尺寸S(从10到19)。

三、YOLOV3

1.使用残差模块,但不全使用只选取一部分
在这里插入图片描述

2.多尺度网络模型,v2的多尺度是手动改变输入尺寸,每10个epoch就改变尺寸实现的,V3的多尺度基于特征金字塔FPN实现。(分成3种尺度缩放32、16、8倍,就会有9种anchor)
在这里插入图片描述
3.基于CoCo数据集,实现80类别的分类,不沿用softmax而是logistics
在这里插入图片描述
4.输出形式
在这里插入图片描述

四、 FPN

传送门

克服RPN小目标检测不佳的问题,由于高层特征更聚焦于语义信息,底层特征更聚焦于像素级信息,RPN利用的高层特征容易忽视底层信息,导致小目标检测效果不佳。所以提出FPN,利用多尺度融合的特征图。
在这里插入图片描述
上图是上采样的过程
在这里插入图片描述
上图红框左边是上采样,红框右边是下采样,通过一个横向连接实现多层特征的信息融合。具体来说就是上层的特征经过相邻位置像素的扩充,变成下层特征的尺寸,然后两者相加得到一个新的特征图,以此类推。可以一定程度保留底层信息。

五、retina-net

主要分析了一阶段检测为什么不如二阶段检测,因为二阶段检测多了一步粗定位,然后针对这个问题提出了retina-net 传送门

六、SSD

传送门

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值