YOLO系列笔记

YOLO 系列论文笔记

YOLOV1

1. 整体框架

1.1 思想

在这里插入图片描述

 可以从上图看出来思想就是切分为S*S个cell,最后是化为一个 ( S , S , N ) (S,S,N) (S,S,N)的一个特征图来进行类别和边框的预测。

 每一个边界框应该包含 x , y , w , h , c o n f i d e n c e x,y,w,h,confidence x,y,w,h,confidence五个变量,每一个cell包含 B B Bbbox,同时一共有C类,所以上段话中的N= B ∗ 5 + C B*5+C B5+C

1.2 模型

模型的图片可以见下图
在这里插入图片描述

通过Maxpool进行特征图(H,W)的缩小,期间不断通过卷积提取特征,知道特征图变为(7,7,1024),接着对最后一个特征维度进行两次全连接层的连接矩阵分别别是(1024,4096)->Drop(0.5)->(4096,30),最后得到了4096*30得到了所有的预测框和类别信息。

2. 一些公式

  • 置信度

    置信度表示这个区域中含有物体(非背景)的一个score,按照如下的公式进行定义:
    C o n f i d e n c e = P r ( O b j e c t ) ∗ I O U p r e d t r u t h Confidence = Pr(Object)*IOU_{pred}^{truth} Confidence=Pr(Object)IOUpredtruth

  • 边界框预测的 x , y , w , h , c o n f i d e n c e x,y,w,h,confidence x,y,w,h,confidence:
    ( x , y ) 强 制 让 b b o x 的 中 心 在 c e l l 内 , 所 以 ( x , y ) 代 表 中 心 在 这 个 c e l l 中 的 相 对 位 置 取 值 在 ( 0 , 1 ) 中 变 化 ( w , h ) 有 了 b b o x 的 中 心 位 置 , 宽 高 应 该 是 相 对 于 整 个 图 像 来 说 的 \begin{aligned} &(x,y)强制让bbox的中心在cell内,所以(x,y)代表中心在这个cell中的相对位置取值在(0,1)中变化\\ &(w,h)有了bbox的中心位置,宽高应该是相对于整个图像来说的\\ \end{aligned} (x,y)bboxcell(x,y)cell(0,1)(w,h)bbox

  • 对于类别预测的条件概率 P r ( C l a s s i ∣ O b j e c t ) Pr(Class_i|Object) Pr(ClassiObject),这里需要注意,对于每一个cell只能有一个类别预测,一般用 ( c 1 , . . . c n ) ( 如 果 有 n 类 ) (c1,...cn)(如果有n类) (c1,...cn)(n)来表示。

    测试的时候使用如下的式样,能够反应对这个预测框对这个目标的适应性有多好。因为既能反映照了框的拟合程度(IOU),也反映了类别的拟合程度 P r ( C l a s s i ) Pr(Class_i) Pr(Classi)
    P r ( C l a s s i ∣ O b j e c t ) ∗ P r ( O b j e c t ) ∗ I O U p r e d t r u t h = P r ( C l a s s i ) ∗ I O U p r e d t r u t h Pr(Class_i|Object)*Pr(Object)*IOU_{pred}^{truth}=Pr(Class_i)*IOU_{pred}^{truth} Pr(ClassiObject)Pr(Object)IOUpredtruth=Pr(Classi)IOUpredtruth

  • 损失函数的公式

    损失函数主要包括边界框损失,有无目标的置信度损失和类别预测损失三个部分组成,下面将一一分析。

    • confidence损失:用来判断这个cell是否有object存在的置信度损失,confidence>阈值,就把这个地方判断为有目标存在,即 I o b j = T r u e \Iota^{obj}=True Iobj=True,这个公式会在下面用到。

      损失函数携程下面的形式:其中 λ n o o b j \lambda_{noobj} λnoobj为负样本损失权重,因为图中一般负样本较多所以需要让它很小。

      在这里插入图片描述

    • 边界框损失:YOLO中边界框损失主要包括中心点的准确度和长宽的损失度。

      如以下的公式所描述的,只有在有目标存在的前提下才计算边界框损失函数,其中中心点坐标采用均方差损失,长宽采样开放后的均方差损失。

在这里插入图片描述

  • 分类损失依然是采用了均方差损失(在有目标的情况下才会计算),一般标签是一个one-hot向量,然后分别对每一类做均方差得到这个误差。

    在这里插入图片描述

3. 训练细节

 在训练集和验证集上训练了大约135个epoch,2012仍然包括了2007的数据集,训练中batch是64,动量0.9,decay 0.0005。

第一个全连接层加入了Drop(0.5)

引入了random scaling ,translations,还在hsv空间随机调整了曝光度和饱和度,在hsv空间中增加了1.5倍。

  • 第一个epoch慢慢预热,lr从10-3到10-2.
  • 然后10-2持续75个epoch
  • 10-3持续30个epoch
  • 10-4持续30个epoch

4. 不足和一些其他的比较

 不足如下:

  • 加入了强烈的空间限制,因为每一个cell只能预测两个框。这种约束限制了附近物体的数量,同时小物体效果不是很好。

  • 基于数据学习,往有不同长宽比和配置的新数据中泛化能力不好,因为加入了很多下采样层,使用的特征也不够精细。

  • loss func对待小目标和大目标都是按照坐标来计算损失,大目标常常能够忍受一些误差而小目标不行。

 比较如下:

  • 和Fast R-NN的判断出错的原因相比,在背景的判断出错率上,YOLO犯错的可能性更低,但是在定位上的准确率,Fast RCNN更低

  • YOLO的泛化性更好一点

Linux创始人LinusTorvalds有一句名言:Talk is cheap, Show me the code.(冗谈不够,放码过来!)。 代码阅读是从入门到提高的必由之路。尤其对深度学习,许多框架隐藏了神经网络底层的实现,只能在上层调包使用,对其内部原理很难认识清晰,不利于进一步优化和创新。  YOLOv3是一种基于深度学习的端到端实时目标检测方法,以速度快见长。YOLOv3的实现Darknet是使用C语言开发的轻型开源深度学习框架,依赖少,可移植性好,可以作为很好的代码阅读案例,让我们深入探究其实现原理。  本课程将解析YOLOv3的实现原理和源码,具体内容包括: YOLO目标检测原理  神经网络及Darknet的C语言实现,尤其是反向传播的梯度求解和误差计算 代码阅读工具及方法 深度学习计算的利器:BLAS和GEMM GPU的CUDA编程方法及在Darknet的应用 YOLOv3的程序流程及各层的源码解析本课程将提供注释后的Darknet的源码程序文件。  除本课程《YOLOv3目标检测:原理与源码解析》外,本人推出了有关YOLOv3目标检测的系列课程,包括:   《YOLOv3目标检测实战:训练自己的数据集》  《YOLOv3目标检测实战:交通标志识别》  《YOLOv3目标检测:原理与源码解析》  《YOLOv3目标检测:网络模型改进方法》 建议先学习课程《YOLOv3目标检测实战:训练自己的数据集》或课程《YOLOv3目标检测实战:交通标志识别》,对YOLOv3的使用方法了解以后再学习本课程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值