YOLO v1学习笔记

  • 一、 概述
    • 1、优点:
    • 2、 缺点:
  • 二、模型详细介绍
    • 1、设计思路
    • 2、网络结构
    • 3、网络输出详细介绍
  • 三、损失函数
    • 1、位置误差
    • 2、置信度误差
    • 3、分类误差
  • 四、模型预测
    • 1、NMS算法

本文主要参考了一些博主的博客,并将自己的学习结果记录在此。欢迎大家学习交流!("_")原论文地址以及参考的大佬博客如下:

论文地址:

  • yolo v1论文

参考博客:

  • 【目标检测论文阅读】YOLOv1
  • YOLOv1深入理解
  • 目标检测模型YOLO-V1损失函数详解

一、 概述

YOLO——You Only Look Once 是2016年RGB大神的又一大作。Yolo直接将目标检测问题看作为一个回归问题,利用单一的网络,从图像像素信息直接预测出class和predict box。Yolo目前发布了四个版本,其中Yolo v1是Yolo系列模型的开山之作,有助于我们更好的理解Yolo系列模型。

1、优点:

  1. one stage的网络结构,将目标检测视为一种回归问题使得Yolo可以实时的对视频进行目标检测处理。
  2. 采用整幅图像进行检测,可以联系全局的图像信息特征,减少背景检测为物体的错误。
  3. 学习物体更泛化的特征表示,在新的领域上具有更好的适应性。

2、 缺点:

  1. 每个网格只对应两个bounding box,当物体的长宽比不常见(也就是训练数据集覆盖 不到时),效果较差。
  2. 原始图片只划分为7x7的网格,当两个物体靠的很近时,效果比较差。
  3. 最终每个网格只对应一个类别,容易出现漏检(物体没有被识别到)。
  4. 原始图片只划分为7x7的网格,当两个物体靠的很近时,效果比较差。

二、模型详细介绍

1、设计思路

  1. 将输入图片resize到 448 ∗ 448 448*448 448∗448大小
  2. 使用CNN进行特征提取,全连接层输出物体分类和predict box回归结果
  3. 非极大值抑制NMS筛选出最终的结果

Yolo是一个端到端的网络,图片输入后统一resize到 448 ∗ 448 448*448 448∗448大小,yolo将输入的图像分成 S ∗ S S*S S∗S ( S = 7 S=7 S=7)个gride cell,每个gride cell都有B( B = 2 B=2 B=2)个bounding box,最终通过NMS选择IOU最高的bounding box作为物体检测的输出,即每个格子只预测出一个物体。例如下图中的狗中心落在(1,4)这个gride cell中,则这个单元格只负责检测狗。

2、网络结构


输入:resize到448 x 448 x 3大小的图片,由于网络最后接入两层全连接层,全连接层需要固定输入的尺寸。

特征提取:使用1x1卷积层进行跨通道信息整合加3×3的卷积层取代googlenet的inception modules。

输出:后一个FC层得到一个1470 x 1的输出,将这个输出reshap一下,得到 7 x 7 x 30 的一个tensor,即最终每个单元格都有一个30维的输出,代表预测结果。具体如下

3、网络输出详细介绍

  • 7 x 7为网络划分后得到gride cell,每个单元格都是原始的448 x 448 x 3经过特征提取后得到输出,包含图像大部分区域的特征,每个gride cell都有两个bounding box和20个类别预测值(PASCAL VOC数据集),每个bounding box包含着4个坐标值和一个confidence值,即每个网格总共对应着30维的向量。

  • 30维向量中2个bounding box位置信息,每个bounding box都包含着4个坐标值(x, y, w, h),其中(x, y)为bounding box的中心点坐标,他是相对于所属gride cell左上角的位置进行了归一化结果(或者说是相对于所属gride cell的偏移值),如下图所示,bounding box的中心点所属gride cell坐标为(3,3),x,y现在分别代表着bounding box的实际中心坐标,计算其归一化值为x/(width/S)-3,y/(height/S)-3。(w,h)为bounding box的宽和高,是相对于整张图片的归一化值,w,h现在分别代表着bounding box的实际的宽和高,计算其归一化值为w/img_width,h/img_height。归一化的作用不会导致太难的收敛。

  • 30维向量中2个bounding box的confidence信息,每个bounding box都包含着一个confidence,confidence的计算如下,其中Pr(Object)为bounding box是否包含目标,当不包含目标时该值为0,包含目标时该值为1(体现的是是否包含对象,并不在乎是哪一个对象)。IOU为bounding box与ground truth的交并比,由于在预测阶段无法知道真实的对象所在的位置,因此IOU的值仅在训练阶段计算。Confidence的值用以表示当前bounding box是否包含物体以及包含物体的准确性。

    P r ( O b j e c t ) ∗ I O U t r u t h p r e d Pr(Object)*IOU\frac{truth}{pred} Pr(Object)∗IOUpredtruth​

  • 30维向量中20类物体分类的概率,对于PASCAL VOC数据集中的20个物体类别进行预测,其表征的是由该单元格负责预测的两个边界框中的目标属于各个类别的概率。注意这些概率值其实是在各个边界框置信度下的条件概率,之所以写成条件概率,意思是如果该网格存在一个对象Object,那么它是 P r ( c l a s s i ∣ O b j e c t ) Pr(class_i|Object) Pr(classi​∣Object)(体现的是已经有一个对象在网格中,具体是哪一个对象)。也就是说不管一个单元格预测多少个边界框,该单元格只预测一组类别概率值(YOLO1的一大缺点)。

三、损失函数

Yolo的损失函数的计算如下图所示。通过ground truth和输出之间的sum-squared error进行计算的,包含着位置误差、置信度误差和分类误差,所以相当于把分类问题也当成回归问题来计算loss。

公式参数解释:

  • 1 i j o b j \Bbb1_{ij}^{obj} 1ijobj​表示gride cell i中存在对象object,并且gride cell的第j个bounding box与
  • 1 i j n o o b j \Bbb1_{ij}^{noobj} 1ijnoobj​表示第i个gride cell 的第j个bounding box中不存在对象

1、位置误差

主要是计算bbox的(x,y,w,h)和对应的ground truth box的 (x,y,w,h)之间的sum-squared error,其中只有负责(IOU比较大)的bounding box的数据才会进行误差计算,其他不满足条件的bounding box不参与。在对宽度和高度进行误差计算时,进行了开方运算,由宽度和高度决定的bounding box对IOU计算的影响所决定的,如下图所示,具有相同偏移量F的小目标和大目标的检测,宽度和高度值较大的具有较好的IOU,据此,采用开方运算,其函数图像如图所示。

2、置信度误差

置信度的预测分为了有object的gride cell置信度计算和没有object的gride cell置信度计算。单元格中所有的bounding box都要参与计算,即第三行公式计算第i个gride cell中第j个bounding box包含object时置信度损失,第四行计算第i个gride cell中第j个bounding bo不x包含object时置信度损失。
从损失函数上看,当网格i中的第j个预测框包含物体的时候,用上面的置信度损失,而不包含物体的时候,用下面的损失函数。对没有object的box的confidence loss,赋予小的loss weight, 记为在pascal VOC训练中取0.5。有object的box的confidence loss和类别的loss的loss weight正常取1。

3、分类误差

类别损失这里也用了均方误差,实际上,感觉这里用交叉熵更好一些。其中 表示有无object的中心点落到网格i中,如果网格中包含有物体object的中心的话,那么就负责预测该object的概率。

四、模型预测

训练好的YOLO网络,输入一张图片,将输出一个 7730 的张量(tensor)来表示图片中所有网格包含的对象(概率)以及该对象可能的2个bounding box和confidence。为了从中提取出最有可能的那些对象和位置,YOLO采用NMS(Non-maximal suppression,非极大值抑制)算法。

1、NMS算法

————————华丽的分割线…未完待续!撒花!!!————————

YOLO v1学习笔记相关推荐

  1. yolo v3学习笔记

    证明relu6能比leaky relu有更好的效果,收敛也更快. pelee mouse 测试集 map 94.57 训练集 ? yolov3 测试集map 95 训练集99% 卷积层得来的特征: 输 ...

  2. DeepLab V1学习笔记

    DeepLab V1 摘要 相关的工作 遇到的问题和解决的方法 信号下采样 空间不变性(spatial insensitivity/invariance) 论文的优点(贡献) 网络的模型 空洞卷积 C ...

  3. 【目标检测】yolo系列yolo x学习笔记(2021年旷视)

    目录 一.速度和检测效果 二.yoloX的改进点 2.1 Decoupled Head(解耦头) 2.2数据增强:Mosaic + MixUp 2.3 Anchor Free 2.4 Label As ...

  4. 深度学习笔记(44) Triplet 损失

    深度学习笔记(44) Triplet 损失 1. 三元组损失函数 2. 损失函数公式 3. 训练集 1. 三元组损失函数 已经了解了Siamese网络架构,并且知道想要网络输出什么,即什么是好的编码 ...

  5. 深度学习笔记(43) Siamese网络

    深度学习笔记(43) Siamese网络 1. Siamese网络 2. 建立人脸识别系统 3. 训练网络 1. Siamese网络 深度学习笔记(42) 人脸识别 提到的函数ddd的作用: 输入两张 ...

  6. 深度学习笔记(42) 人脸识别

    深度学习笔记(42) 人脸识别 1. 人脸识别 2. One-Shot学习 3. Similarity函数 1. 人脸识别 现在可以看到很多产品在运用人脸识别,如手机解锁.车站身份识别认证.刷脸支付等 ...

  7. 深度学习笔记(41) 候选区域

    深度学习笔记(41) 候选区域 1. 无对象区域 2. 候选区域 3. Faster R-CNN 1. 无对象区域 记得滑动窗法吧,使用训练过的分类器 在这些窗口中全部运行一遍,然后运行一个检测器,看 ...

  8. 【YOLO系列】YOLOv1论文超详细解读(翻译 +学习笔记)

    前言 从这篇开始,我们将进入YOLO的学习.YOLO是目前比较流行的目标检测算法,速度快且结构简单,其他的目标检测算法如RCNN系列,以后有时间的话再介绍. 本文主要介绍的是YOLOV1,这是由以Jo ...

  9. pyecharts查看版本_pyecharts v1 版本 学习笔记 折线图,面积图

    折线图 折线图 基本demo import pyecharts.options as opts from pyecharts.charts import Line c = ( Line() .add_ ...

最新文章

  1. Android Service 服务(二)—— BroadcastReceiver
  2. 《重新认识你自己》八:与真实的自我相处
  3. Head First JSP---随笔二
  4. VMVMware-workstation以及CentOS-7安装
  5. Asp.Net 设计模式 之 “简单工厂”模式
  6. LintCode: 3 Sum
  7. php石头剪刀布五局三胜,求程序,下面是剪刀石头布的程序,谁能帮忙改成能选择三局两胜,五局三胜……的?能成功运行的加分...
  8. python marshal loads failed_在Python中marshal对象序列化的相关知识
  9. 新机发布会用鸿蒙吗,鸿蒙操作系统及华为全场景新品发布会即将到来,硬件生态发展有望迎来加速度...
  10. 鸿蒙什么时候出来,鸿蒙系统什么时候发布
  11. 深度学习 + OpenCV,Python实现实时视频目标检测
  12. antd table表格删除末页数据,跳回上一页
  13. 十二款常用摄影软件,大部分人只用过十种!
  14. Mysql开发实践:error while loading shared libraries: libaio解决方案
  15. IDEA统计自己写了多少行Java代码,看看自己的辛劳成果吧
  16. 【雪碧图】url放置图片路径
  17. HBASE学习使用经验
  18. 统计素数并求和(20分)
  19. 欧几里得定理(nyoj775)
  20. 一篇文章,带你走进Java

热门文章

  1. linux命令行如何使用浏览器,linux终端命令行浏览器,w3m文字浏览器使用
  2. java编写三角形问题_软件测试实验1:为三角形问题编写一个Java程序,并用Junit测试程序...
  3. 手把手教你在VMware16.0上安装ubuntu20.04(虚拟机安装Ubuntu系统))
  4. excel java api_Java Excel API 使用方法
  5. linux命令赋子包777权限,linux对文件赋权限的命令chmod的详细说明
  6. 八年老Android开发谈:垃圾中的战斗机,offer都发了,最后把我拒了
  7. 品读 werkzeug reloader 实现机制
  8. 前端--工具--火狐代码美化
  9. 一文读懂CTR预估模型的发展历程
  10. Ptrace调试ARM架构多线程