目标检测YOLO系列学习记录

目标检测YOLO系列学习记录

  • 前言
  • 一、YOLOv1
  • 二、YOLOv2
    • Better
      • Batch Normalization
      • High Resolution Classifier
      • Convolution With Anchor Boxes
      • Dimension Clusters
      • Direct location prediction
      • Fine-Grained Features
      • Multi-Scale Training
    • Faster
  • 三、YOLOv3


前言

最近要用到目标检测网络,为了更好理解YOLO系列检测算法,跟着bilibili的up主(视频链接)学习一下,同时做一些笔记加深印象。

一、YOLOv1

目标检测YOLO系列学习记录_第1张图片

首先将图片分成S*S个grid cell(S=7),如果目标的中心落在某个cell里,那么这个cell就负责预测这个目标,每个网格预测B个bounding box(B=2)。除了预测位置之外,附带预测一个confidence值和C(VOC数据集的C=20)个类别的分数。SSD和Faster R-CNN都没有预测confidence这个参数。
目标检测YOLO系列学习记录_第2张图片
这个图表示了网络的输出的feature map的形状。 x,y表示中心点相对于每个cell的坐标,范围是0-1,这里是把cell的长宽作为单位1来看的,w,h也是0-1的值,是bounding box与图片长宽的比值。confidence定义为预测框与gt的IoU。最终的置信度是对应的class score与confidence相乘。
目标检测YOLO系列学习记录_第3张图片

网络细节组成,其中1470=7x7x30

目标检测YOLO系列学习记录_第4张图片
w和h取根号的原因是考虑到了目标大小的差异,当一个大目标和一个小目标预测框与gt的偏移量相同时,从下边的图可以看出,小目标的IoU远小于大目标的IoU,因此这个偏移量相对于小目标来说是很大的,所以希望对小目标的惩罚更大。下图中的曲线也可以看出,小目标的根号下w的差值比大目标的更大。
目标检测YOLO系列学习记录_第5张图片
confidence损失的第一行计算的是正样本的损失,第二行是负样本的损失。

YOLOV1的限制: 当一群小目标聚集在一起的时候,效果变差。出现了新的长款比时效果变差。直接预测坐标,定位没那么准确。

二、YOLOv2

主要分两个部分Better和Faster

Better

Batch Normalization

在卷积层后边加了BN层,比不加提升了2%的mAP,而且更容易收敛。加入了BN层之后,去掉dropout也不会过拟合。

High Resolution Classifier

作者在更大输入分辨率的分类网络上进行fine-tune(224->448),接着在这个分类网络上finetune检测网络,提升了4%的mAP。

Convolution With Anchor Boxes

作者尝试了学习Anchor的偏移量,与直接学习坐标相比,mAP有0.3的下降,但是召回率提升了7%。

Dimension Clusters

作者基于训练集中的bounding box进行k-means聚类得到好的priors,更好的Priors能够让网络学习的更容易。

Direct location prediction

基于anchor的学习中,早期的学习过程会不稳定,主要的原因是中心点的坐标有时会偏离grid cell非常大,原来的计算方式:
目标检测YOLO系列学习记录_第6张图片
(up主指出公式中的减号是不正确的,应该是加号)
公式没有限制 t x t_x tx, t y t_y ty的值,这中计算方式会出现下边这个问题,这个例子比较极端,就是在左上的这个grid cell上预测的bounding box经过坐标变换后到了图片的右下角。
目标检测YOLO系列学习记录_第7张图片
改善后的计算方式,σ 指的是Sigmoid函数,将偏移量限制在0-1之内,以上图中左上角的box为例,grid cell的坐上角作为中心点,在Sigmoid函数的限制下,中心点的偏移量不会超过cell的范围,这么做的目的是让每个Anchor(prior)去负责预测目标中心落在grid cell区域内的目标。
目标检测YOLO系列学习记录_第8张图片
t o t_o to就是yolov1的confidence,网络预测的confidence是会超过1的,因此也用Sigmoid函数进行限制,更加合理一些。

Fine-Grained Features

在网络高层的低分辨率(13x13)特征图上进行预测,小目标的检测效果不是很好,因此作者结合了高分辨率的特征图(26x26)来进行预测,提升对小目标的检测能力。
目标检测YOLO系列学习记录_第9张图片
神仙Up主画了个图来解释这个结合过程,关键就是这个PassThrough Layer。
目标检测YOLO系列学习记录_第10张图片
如图,PassThrough Layer的过程就是将特征图分成16块,再将每个相同颜色位置的值拼成一个新的特征图,这样一个1x4x4的特征图就转化成了4x2x2的特征图,分辨率缩小,通道数变成4倍。在PassThrough Layer前先用1x1的卷积进行降维,在经过PassThrough Layer就可以得到上上个图中13x13x256的特征图了。
(这部分代码实现跟论文有一些出入 )

Multi-Scale Training

作者使用了多个尺度的输入进行训练,每10个epoch就随机选择一个尺寸。由于网络的下采样倍数是32,因此选择的输入尺寸都是32的倍数,最小是320,最大608。

Faster

这部分主要介绍的是Backbone:Darknet-19的结构
目标检测YOLO系列学习记录_第11张图片
DarkNet-19只需要55.8亿参数就能在ImageNet上达到72.9%的Top-1 Acc和91.2%的Top-5 Acc。
(实际yolov2网络结构中没有表格中的倒数3行的层,最后是一层1x1,输出通道为(5+20)*5的卷积层)

三、YOLOv3

up主自己的博客已经写得很清晰了(链接)

你可能感兴趣的:(深度学习,神经网络)