yolo系列阅读笔记(yolov1-yolov2)

(本质上是个攻略讲解汇总贴)用于记录框架理解,遇到的问题与解答

  • 论文
    v1:https://www.cvfoundation.org/openaccess/content_cvpr_2016/papers/Redmon_You_Only_Look_CVPR_2016_paper.pdf
    v2:https://arxiv.org/abs/1612.08242
    v3:https://arxiv.org/pdf/1804.02767.pdf
    v4:https://arxiv.org/pdf/2004.10934.pdf

yolov1【1】

  • yolo的基本思想
    \quad yolov1中讲解的最清楚直观,在之后的系列中也一脉相承。具体参考资料【1】,核心思想为分块和端到端,输出的维度公式为:
    S × S × ( 5 × B + C ) S \times S \times (5\times B+C) S×S×(5×B+C)其中 S × S S\times S S×S是分块的数量,B是框的数量,C是类别数。5维特征分别是框的位置x,y,大小w,h,和置信度。也就是说,每个小网格只能检测一类物品,因而对比较密集和小型的目标来讲颇为不友好。

  • 置信度与损失函数
    \quad 置信度的定义如下:
    在这里插入图片描述
    前一项代表小网格中是否有物品,有为1,无为0[该判断由物体中心是否在网格中决定];后一项代表预测框与真实框之间的IOU。这是一个之前没太见过的设置。一般而言在计算损失函数时,标签啊groundtruth啊之类的数据都是固定的值,这一项的标签则是根据网络当前的结果计算出来的,与前四项输出直接相关,十分之妙。
    \quad 损失函数的定义如下:
    yolo系列阅读笔记(yolov1-yolov2)_第1张图片
    在本文中, λ c o o r d = 5 , λ n o o b j = 0.50 \lambda _{coord} =5,\lambda_{noobj}=0.50 λcoord=5,λnoobj=0.50,以平衡定位误差与分类误差。置信度的计算按照该框是否负责有抑制和不抑制两种算法,类别的损失只在网格负责预测时进行计算。

  • 标签数据的处理【4】
    文章对标签数据进行了预先的处理,先分网格,假设某样物品在格子i 中,则标签记为1,对其余四项进行归一化如下:
    yolo系列阅读笔记(yolov1-yolov2)_第2张图片
    yolo系列阅读笔记(yolov1-yolov2)_第3张图片

  • 网络结构上的特殊之处
    \quad 24卷积+1全连接

  • 衡量指标mAP【2】【3】
    \quad IOU是常见的指标,定义为区域交集/区域并集。在目标探测中,mAP指的是PR曲线下面积的平均值,具体计算步骤如下(参考3讲得超详细,强推):
    1.计算TP,FP,FN.TP指IOU大于置信域,FP指IOU<=置信域或多余框,FN指漏检的。置信域通常取0.5
    2.计算P,R。P=TP / (TP + FP);R=TP / (TP + FN)
    3.由于(TP+FN)是正样本的真实数目,为定值,因此随着框数目的增多,R的值只增不减,P的值变化多端。按照VOC2010后的版本,

  • 为何要预训练
    \quad 推测是大数据集到小数据集的迁移;利用ImageNet提取特征的能力。

yolov2【5】

yolov2文章的名称其实是yolo9000,也就是一个9000类的分类网络,因为目前没有这个需求,主要关注的还是yolov2的结构部分。文章在yolo的基础上进行了“搭积木”式的尝试,其结果如下。因为最近也想搭积木,在这里把每个积木块将简单的介绍一下:
yolo系列阅读笔记(yolov1-yolov2)_第4张图片

  • batch norm
    来自论文【https://arxiv.org/abs/1502.03167】。顾名思义,一种归一化方法。加在每层卷积之后,同时去掉了dropout和其它正则化方法。其思想在于神经网络训练中权重总是在变化,每层特征的分布可能会有所偏移,因而在非线性层前强行把激活输入值的分布规范化,拉到均值为0,方差为1的正态分布。同时,为了非线性层的非线性能起到作用。具体计算如下:
    yolo系列阅读笔记(yolov1-yolov2)_第5张图片
    每次计算都只算当前batch数据,前三步用于规范化,第四步用于保证非线性计算的有效性。两个参数均由训练获得。另,整个数据集总体进行过白化(规范化)。batchnorm具体推导见【7】。想了解其它归一化方法见【8】
  • hi-res classifier【9】
    在预训练中加入高分辨率的图像训练,先再IMageNet上训练224224的图像160epoches,再使用448448图像训练10epoch,再转到检测模型上训练448*448。加了中间的一步,能够更好的过渡。
  • convolutionalanchor boxes
    在yolov1中,框的参数是由最后的全连接层输出的。yolov2中换为了先验框,参考自网络RPN,具体原理见【6】,讲得超级清楚。应用在yolo中后,一个非常显著的改进就是一个网格终于不只是两个框预测一个类别了。框的数目直线增长,同时类别也只与框有关不再共享。
  • dimension priors
    RPN的锚盒样式是事先设定的,所以一个恰当的初始化非常重要。yolov2通过对标签数据进行k-means聚类获得样式,最后选择了k=5。这图画的有点迷惑性,个人理解聚类聚的是框的长宽,和位置无关,应当是假装框的中心在一个点上进行的IOU计算。
    yolo系列阅读笔记(yolov1-yolov2)_第6张图片
  • location prediction
    在RPN中由于锚框的比例是设定好的,因此网络其实在预测偏移量,具体的框中心计算方法如下:
    yolo系列阅读笔记(yolov1-yolov2)_第7张图片
    w a , h a , x a , y a w_a,h_a,x_a,y_a wa,ha,xa,ya代表锚框的参数, t x , t y , t w , t h t_x,t_y,t_w,t_h tx,ty,tw,th代表预测的偏移量,在没有约束的时候,偏移量非常的放飞,会导致网络先期不稳定。因此沿用yolov1约束,不预测偏移量,预测相对坐标。具体公式如下:
    yolo系列阅读笔记(yolov1-yolov2)_第8张图片
    c x , c w c_x,c_w cx,cw指当前网格左上角坐标, p w , p h p_w,p_h pw,ph指锚框长宽,示意图如下:
    yolo系列阅读笔记(yolov1-yolov2)_第9张图片
  • new networks
    选用Darknet-19网络,具有19个卷积层和5个MaxPooling。计算复杂度低于VGG。
  • passthrough
    采用一种类似卷积的方法将高分辨率特征与低分辨率特征结合起来。具体参考【10】,较为清楚
  • muti-scale
    yolov2可以输入任何尺寸的数据,因而预设了10种尺寸,在训练中每隔10batch随机变换尺寸。
  • hi-res detector
    使用更高分辨率的输入图像来提升性能。

资料

【1】https://blog.csdn.net/litt1e/article/details/88814417
【2】https://blog.csdn.net/hsqyc/article/details/81702437
【3】https://www.zhihu.com/question/53405779
【4】https://blog.csdn.net/u011808673/article/details/78702396
【5】https://blog.csdn.net/shanlepu6038/article/details/84778770
【6】https://blog.csdn.net/lanran2/article/details/54376126
【7】https://www.cnblogs.com/tangweijqxx/p/10678935.html
【8】https://blog.csdn.net/u013289254/article/details/99690730
【9】https://blog.csdn.net/u014380165/article/details/77961414
【10】https://zhuanlan.zhihu.com/p/47575929

你可能感兴趣的:(笔记,计算机视觉,机器学习,深度学习)