YOLOv2

CVPR2017

YOLOv2又叫YOLO9000能够识别9000种类,ImageNet1000种类+pascal VOC ,更细致的划分为9000类。

1、backbone:darknet19

2、步骤:

3、细节:YOLOv2:更好,更快,更强

  • Batch Normalization(批归一化):mAP提升2.4%。        每个卷积层后增加BN,v1中也大量使用了BN,同时在定位层dropout, v2中去除了Dropout。  

    批归一化有助于解决反向传播过程中的梯度消失和梯度爆炸问题,降低对一些超参数(比如学习率、网络参数的大小范围、激活函数的选择)的敏感性,并且每个batch分别进行归一化的时候,起到了一定的正则化效果(YOLOv2不再使用dropout),从而能够获得更好的收敛速度和收敛效果。

    通常,一次训练会输入一批样本(batch)进入神经网络。批归一化在神经网络的每一层,在网络(线性变换)输出后和激活函数(非线性变换)之前增加一个批归一化层(BN),BN层进行如下变换:①对该批样本的各特征量(对于中间层来说,就是每一个神经元)分别进行归一化处理,分别使每个特征的数据分布变换为均值0,方差1。从而使得每一批训练样本在每一层都有类似的分布。这一变换不需要引入额外的参数。②对上一步的输出再做一次线性变换,假设上一步的输出为Z,则Z1=γZ + β。这里γ、β是可以训练的参数。增加这一变换是因为上一步骤中强制改变了特征数据的分布,可能影响了原有数据的信息表达能力。增加的线性变换使其有机会恢复其原本的信息。

  • High Resolution Classifier(高分辨率图像分类器):mAP提升了3.7%。      使用高分辨率的数据集在预训练的CNN上微调最初的分类网络224*224----->448*448。V1中使用224*224 预训练,448*448用于检测网络。        

    图像分类的训练样本很多,而标注了边框的用于训练对象检测的样本相比而言就比较少了,因为标注边框的人工成本比较高。所以对象检测模型通常都先用图像分类样本训练卷积层,提取图像特征。但这引出的另一个问题是,图像分类样本的分辨率不是很高。所以YOLO v1使用ImageNet的图像分类样本采用 224*224 作为输入,来训练CNN卷积层。然后在训练对象检测时,检测用的图像样本采用更高分辨率的 448*448 的图像作为输入。但这样切换对模型性能有一定影响。

    所以YOLO2在采用 224*224 图像进行分类模型预训练后,再采用 448*448 的高分辨率样本对分类模型进行微调(10个epoch),使网络特征逐渐适应 448*448 的分辨率。然后再使用 448*448 的检测样本进行训练,缓解了分辨率突然切换造成的影响。

  • Convolutional With Anchor Boxes(使用先验框):召回率大幅提升到88%,同时mAP轻微下降了0.2。不对(x,y,w,h)进行预测,而是预测与Anchor框的偏差(offset),每个格点指点n个Anchor框,在训练时,最接近ground truth的框产生loss,其余框不产生loss。      

    YOLOV1包含有全连接层,从而能直接预测Bounding Boxes的坐标值。Faster R-CNN的方法只用卷积层与Region Proposal Network来预测Anchor Box的偏移值与置信度,而不是直接预测坐标值。作者发现通过预测偏移量而不是坐标值能够简化问题,让神经网络学习起来更容易。

    借鉴Faster RCNN的做法,YOLO2也尝试采用先验框(anchor)。在每个grid预先设定一组不同大小和宽高比的边框,来覆盖整个图像的不同位置和多种尺度,这些先验框作为预定义的候选区在神经网络中将检测其中是否存在对象,以及微调边框的位置。

    之前YOLO1并没有采用先验框,并且每个grid只预测两个bounding box,整个图像98个。YOLO2如果每个grid采用9个先验框,总共有13*13*9=1521个先验框。所以最终YOLO去掉了全连接层,使用Anchor Boxes来预测 Bounding Boxes。作者去掉了网络中一个Pooling层,这让卷积层的输出能有更高的分辨率。收缩网络让其运行在416*416而不是448*448。

    由于图片中的物体都倾向于出现在图片的中心位置,特别是那种比较大的物体,所以有一个单独位于物体中心的位置用于预测这些物体。YOLO的卷积层采用32这个值来下采样图片,所以通过选择416*416用作输入尺寸最终能输出一个13*13的Feature Map。使用Anchor Box会让精确度稍微下降,但用了它能让YOLO能预测出大于一千个框,同时recall达到88%,mAP达到69.2%。

    召回率升高,mAP轻微下降的原因是:因为YOLOV2不使用anchor boxes时,每个图像仅预测98个边界框。但是使用anchor boxes,YOLOV2模型预测了一千多个框,由于存在很多无用的框,这就导致了mAP值的下降。但是由于预测的框多了,所以能够预测出来的属于ground truth的框就多了,所以召回率就增加了。目标检测不是只以mAP为指标的,有些应用场景下要求召回率高。

  • Dimension Clusters(聚类提取先验框的尺度信息):区别于Faster RCNN,Anchor Box 的宽高不是人为设定,而是将训练数据集中的矩形框的宽高,用kmeans聚类得到先验框的宽和高。例如使用5个Anchor Box,那么kmeans聚类的类别中心个数设置为5(mAP上升)。             

    之前Anchor Box的尺寸是手动选择的,所以尺寸还有优化的余地。YOLO2尝试统计出更符合样本中对象尺寸的先验框,这样就可以减少网络微调先验框到实际位置的难度。YOLO2的做法是对训练集中标注的边框进行K-mean聚类分析,以寻找尽可能匹配样本的边框尺寸。

    如果我们用标准的欧式距离的k-means,尺寸大的框比小框产生更多的错误。因为我们的目的是提高IOU分数,这依赖于Box的大小,所以距离度量的使用:

    图片

    centroid是聚类时被选作中心的边框,box就是其它边框,d就是两者间的“距离”。IOU越大,“距离”越近。YOLO2给出的聚类分析结果如下图所示:

    通过分析实验结果(Figure 2),左图:在model复杂性与high recall之间权衡之后,选择聚类分类数K=5。右图:是聚类的中心,大多数是高瘦的Box。

    Table1是说明用K-means选择Anchor Boxes时,当Cluster IOU选择值为5时,AVG IOU的值是61,这个值要比不用聚类的方法的60.9要高。选择值为9的时候,AVG IOU更有显著提高。总之就是说明用聚类的方法是有效果的。

  • Direct location prediction(约束预测边框的位置):目标边界框预测,如果直接使用基于anchor 方式预测,训练模型时出现不稳定,预测目标边界框中心错误导致,基于anchor预测的目标出现在任何位置。让每个anchor(prior)去负责预测目标中心落在某个grid cell区域内的目标。     
  • Fine-Grained Features(passthrough层检测细粒度特征):mAP提升1%。           添加pass through layer,在passthrough层将26*26*1的特征图,变成13*13*4的特征图,将浅层特征26*26连接到深层特征,增加细粒度特征。      对象检测面临的一个问题是图像中对象会有大有小,输入图像经过多层网络提取特征,最后输出的特征图中(比如YOLOv2中输入416*416经过卷积网络下采样最后输出是13*13),较小的对象可能特征已经不明显甚至被忽略掉了。为了更好的检测出一些比较小的特征,最后输出的特征图需要保留一些更细节的信息。YOLOv2引入一种称为passthrough层的方法在特征图中保留一些细节信息。具体来说就是在最后一个pooling之前,特征图的大小是26*26*512,将其1拆4,直接传递(passthrough)到pooling后(并且又经过一组卷积)的特征图,直接叠加到一起作为输出特征图。 

      

  • Multi-Scale Training(多尺度图像训练):由于没有FC层,YOLOv2可以接受multi-scale Training(多尺寸训练)。网络在不同的输入尺寸上都能达到一个很好的预测结果,同一网络能在不同分辨率上进行检测。当输入图片尺寸比较小的时候跑的比较快,输入图片尺寸比较大的时候精度高,所以YOLOv2可以在速度和精度上进行权衡。
  1. 每10个batch后,将图片resize成(320,352,...,608)中的一种,实现不同尺度变化的检测。
  2. 为什么都是32的整数倍:32=2^5,YOLOv2前向传播进行5次下采样,每次步长2。
  3. 如果Anchor Box设置为5
  4. 如输入图片时320*320,那么输出格点是10*10,共输出500个预测结果
  5. 如输入图片时608*608,输出格点就是19*19,共1805个预测结果
  6. (当输入设置为544*544甚至更大,YOLOv2的mAP已经超过当时的其他的物体检测算法。)
  7. hi-res detector(高分辨率图像的目标检测):mAP提高了1.8%。因为YOLOv2调整网络结构后能够支持多种尺寸的输入图像。通常是使用416*416的输入图像,如果用较高分辨率的输入图像,比如544*544,则mAP可以达到78.6,有1.8的提升。
  • 其他:
  1. 主要使用3*3
  2. pooling之后channel数增加
  3. 使用global average pooling 全局平均池化
  4. 1*1 卷积压缩特征表示
  5. 每个box包含4个坐标值,一个置信度和classes个条件类别概率。S*S*B*(5+C)
  6. YOLOv2 格子不是7*7 不一定多少。进行多尺寸训练。416*416输出格点是13*13,13*13*5=845,能够预测800多类别,一个boundbox预测一个类别。YOLOv1能够预测7*7=49类别,一个grid cell预测一个类别。
  • Hierarchi classifi(分层分类):通过联合训练策略,YOLO9000可以快速检测出超出9000个类别的物体,总体mAP为19.7%。作者提出了一种在分类数据集合检测数据集上联合训练的机制。使用检测数据集的图片去学习检测相关的信息,例如bounding box 坐标预测,是否包含物体以及属于各个物体的概率。使用仅有类别标签的分类数据集图片去扩展可以检测的种类。作者通过ImageNet训练分类、coco和VOC数据集来训练检测,这是一个很有价值的思路,可以让我们达到比较优的效果。通过将两个数据集混合训练,如果遇到来自分类集的图片则只计算分类的Loss,遇到来自检测集的图片则计算完整的Loss。但是ImageNet对应分类有9000种,而COCO则只提供80种目标检测,作者使用multi-label模型,即假定一张图片可以有多个label,并且不要求label间独立。通过作者论文里的图来说明,由于ImageNet的类别是从WordNet选取的,作者采用以下策略重建了一个树形结构(称为分层树):(1)遍历ImageNet的label,然后在WordNet中寻找该label到根节点(指向一个物理对象)的路径;(2)如果路径只有一条,那么就将该路径直接加入到分层树结构中;(3)否则,从剩余的路径中选择一条最短路径,加入到分层树。这个分层树我们称之为WordTree,作用就在于将两种数据集按照层级进行结合。

4、Loss:

这里的W=13,H=13,A=5。
每个 拉姆达 都是一个权重值。c表示类别,r表示rectangle,即(x,y,w,h)。
第1,4行是confidence_loss,注意这里的真值变成了0和IoU(GT, anchor)的值。
第5行是class_loss。
第2,3行:t是迭代次数,即前12800步我们计算这个损失,后面不计算了。这部分意义何在?
意思是:前12800步我们会优化预测的(x,y,w,h)与anchor的(x,y,w,h)的距离+预测的(x,y,w,h)与GT的(x,y,w,h)的距离,12800步之后就只优化预测的(x,y,w,h)与GT的(x,y,w,h)的距离,为啥?因为这时的预测结果已经较为准确了,anchor已经满足我了我们了,而在一开始预测不准的时候,用上anchor可以加速训练。

I_{K}^{truth}是什么?第k个anchor与所有GT的IoU的maximum,如果大于一个阈值,就 I_{K}^{truth} =1,否则的话: I_{K}^{truth} =0。

参考

坐标损失 这里的匹配原则是指对于某个特定的ground truth,首先要计算其中心点落在哪个cell上,然后计算这个cell的5个先验框和grond truth的IOU值,计算IOU值的时候不考虑坐标只考虑形状,所以先将Anchor boxes和ground truth的中心都偏移到同一位置,然后计算出对应的IOU值,IOU值最大的先验框和ground truth匹配,对应的预测框用来预测这个ground truth。

置信度损失 在计算obj置信度时, 增加了一项拉姆达权重系数,也被称为rescore参数,当其为1时,损失是预测框和ground truth的真实IOU值(darknet中采用了这种实现方式)。而对于没有和ground truth匹配的先验框,除去那些Max_IOU低于阈值的,其它就全部忽略。YOLOv2和SSD与RPN网络的处理方式有很大不同,因为它们可以将一个ground truth分配给多个先验框。

分类损失 这个和YOLOv1一致,没什么好说的了。

5、网络结构:

3、

Faster RCNN使用了FPN

YOLOv2使用darknet-19

6、总结:

YOLOv2提高了精度,在细节上做了改善,但对于小物体检测效果仍然欠佳,

YOLOv3主要解决这个问题。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值