论文题目:《You Only Look Once:Unified, Real-Time Object Detection》
论文地址:https://arxiv.org/pdf/1506.02640.pdf

一文读懂YOLOv2:YOLOv2
一文读懂YOLOv3:YOLOv3
一文读懂YOLOv4:YOLOv4

1. 概述

相比起Faster R-CNN的两阶段算法,2015年诞生的YOLOv1创造性地使用一阶段结构完成了物体检测任务。直接预测物体的类别和位置,没有RPN网络,也没有Anchor的预选框,因此速度很快。
       YOLOv1是YOLO系列的基准,后续的YOLOv1、YOLOv2都是在原来的基础上做的改进,因此完全掌握和理解YOLOv1是学好YOLO系列的关键。

2. 核心思想

将输入图像分成SxS个网格(gird cell),如果某个物体的中心落在这个网格中,那么就由这个网格负责预测这个物体。


       如上图所示,自行车中心点是黄色格子,小汽车中心点是红色格子。中心点是根据Groud True的标注信息算出来的(标注的中心点坐标除以将采样率)。

3. 基本步骤和实现方法

3.1. 基本步骤

  1. 将图像resize到448*448大小作为网络的输入。
  2. 运行神经网络,得到一些bounding box坐标、bounding box中包含物体的置信度(confidence)以及类别概率(class probabilites)。
  3. 使用非极大值抑制(NMS)筛选bounding box。

3.2. 实现方式

每一个grid cell预测B个bounding boxes,以及这些bounding boxes的得分:confidence score。confidence score反映了模型对于grid cell中预测是否含有物体,以及是这个物体的可能性是多少。confidence定义为:
(如果这个cell中不存在object,则confidence score为0;否则的话,confidence score则为predicted box与ground truth之间的IOU。)
       每一个bounding box由5个预测值组成:x,y,w,h,confidence。坐标(x,y)代表了bounding box的中心与grid cell边界的相对值。width,height则是相对于整幅图像的预测值(边框的宽和高),confidence就是预测框和真实框的IOU。每一个grid cell还要预测C个conditional class probability(条件类别概率):Pr(Class|Object),即在一个cell包含Object的前提下,它属于某个类的概率,只为每个cell预测一组(C个)类概率,而不考虑框B的数量。

注意:class信息是针对每个网格的,confidence信息是针对每个bbox,即每个网格最多只能预测一个物体。如果一个物体的中心点落在了某个区域内,具体是该区域的两个bounding box与真实物体框进行匹配,IoU更大的bounding box负责回归该真实物体。

在测试阶段,每个网格预测的class信息和bounding box预测的confidence信息相乘,就得到每个bounding box的class-specific confidence score:
(等式左边第一项就是每个网格预测的类别信息,第二三项就是每个bbox预测的confidence,这个乘积即encode了预测的bbox属于某一类的概率,也有该bbox准确度的信息)。
       得到每个bbox的class-special confidence score以后,设置阈值,滤掉的得分低的bboxes,对保留的bboxes进行NMS处理,就得到最终的检测结果。

示例:
       对于PASCAL VOC数据集,图像输入为448×448,取S=7(即在经过神经网络之后的最终输出特征图大小为7*7),B=2(即每个grid cell中有两个bounding box负责预测落在这个gird cell中的物体),C=20(即一共有20个类别)。则输入图片经过网络的最终输出为一个7×7x30的tensor,如下图所示。且一张图片最多可以检测出49个对象,一共生成7×7×2=98个bounding box。

4. 网络结构


       YOLO的网络结构由24个卷积层和2个全连接层组成,网络结构借鉴了GoogLeNet分类网络结构,但是没有使用Inception module,使用的1×1卷积(交替的1×1卷积用来减少前几层的特征空间)和3×3卷积简单替代。网络输入的图片大小为448×448,最终输出为7×7×30的张量(在PASCAL VOC数据集上)。

5. 训练

5.1. 训练细节

1)预训练分类网络:在ImageNet 1000-class competition dataset上预训练一个分类网络,预训练的网络即为整个网络结构的前20个卷积层+池化层+全连接层。(此时的网络输入是224*224,因为ImageNet数据集图像大小是224×224)
2)训练检测网络:转换模型去执行检测任务。(在预训练网络中增加卷积和全连接层可以改善性能)。在预训练网络的基础上添加4个卷积层和2个全连接层,随机初始化权重。(输入从224×224 变为448×448)。
       最后一层预测类概率和bounding box坐标。通过图像宽度和高度对bounding box的宽度和高度进行归一化,使它们下降到[0,1]之间,同时将(x,y)坐标参数化为特定网格单元位置的偏移,因此它们也在[0,1]之间。

5.2. 正负样本划分

通过卷积网络得到每个边框的预测值后,为了进一步计算网络训练的损失,还需要确定每一个边框是对应着真实物体还是背景框,即区分开正、负样本。YOLOv1在确定正负样本时,有以下两个原则:
● 当一个真实物体的中心点落在了某个区域内时,该区域就负责检测该物体。具体做法是将与该真实物体有最大IoU的边框设为正样本,这个区域的类别标签为该真实物体的类别,该边框的置信度标签为1。
● 除了上述被赋予正样本的边框,其余边框都为负样本。负样本没有类别损失与边框位置损失,只有置信度损失,其置信度真值为0。

5.3. 损失计算

YOLOv1的Loss一共由5个部分组成,均使用均方误差(sum-square error,MSE)损失,如下图所示:




       如上图所示,1obj其实是Mask,用来筛选哪一个对应的是正样本,用来指明哪一个cell是用来预测物体的。

6. 总结

总体上,YOLOv1利用了回归的思想,使用轻量化的一阶网络同时完成了物体的定位与分类,处理速度极快,可以达到45FPS,当使用更轻量的网络时,甚至可以达到155FPS。得益于其出色的处理速度,YOLOv1被广泛应用在实际的工业场景中,尤其是追求实时处理的场景。当然,YOLOv1也有一些不足之处,如下:
● 由于每一个区域默认只有两个bounding box做预测,并且只有一个类别,因此YOLOv1有这天然的检测限制。这种限制会导致模型对于小物体,以及靠得特别近的物体检测效果不好(一个cell只能预测一个物体)。
● 由于没有类似于Anchor的先验框,模型对于新的或者不常见宽高比例的物体检测效果不好。另外,由于下采样率较大,边框的检测精度不高。
● 在损失函数中,大物体的位置损失权重与小物体的位置损失权重是一样的,这会导致同等比例的位置误差,大物体的损失会比小物体大,小物体的损失在总损失中占比比较小,会带来物体定位的不准确(虽然加了平方根,还是差点事)。

【目标检测】单阶段算法--YOLOv1详解相关推荐

  1. 【目标检测】单阶段算法--YOLOv4详解

    论文题目 :<YOLOv4: Optimal Speed and Accuracy of Object Detection> 论文地址:https://arxiv.org/pdf/2004 ...

  2. 【目标检测】YOLO系列——YOLOv1详解

    本篇是关于目标检测算法YOLOv1的学习笔记.网上的博客大多是摘抄翻译论文中的重点内容加上自己的理解,或者是梳理论文的大致思路,在没看过原文的情况下可能总会有些看不懂的地方.所以强烈建议博客搭配原文食 ...

  3. 【目标检测】单阶段算法--YOLOv2详解

    论文题目:<YOLO9000: Better, Faster, Stronger> 论文地址:https://arxiv.org/pdf/1612.08242.pdf 一文读懂YOLOv1 ...

  4. 【目标检测】单阶段算法--YOLOv3详解

    论文题目:<YOLOv3: An Incremental Improvement > 论文地址:https://pjreddie.com/media/files/papers/YOLOv3 ...

  5. 【目标检测】Anchor-Free算法--CenterNet详解

    论文题目:<Objects as Points> 论文地址:https://arxiv.org/pdf/1904.07850.pdf

  6. 目标检测Tensorflow:Yolo v3代码详解 (2)

    目标检测Tensorflow:Yolo v3代码详解 (2) 三.解析Dataset()数据预处理部分 四. 模型训练 yolo_train.py 五. 模型冻结 model_freeze.py 六. ...

  7. 深度学习之目标检测(十一)--DETR详解

    深度学习之目标检测(十一)-- DETR详解 目录 深度学习之目标检测(十一)-- DETR详解 1. 前言 2. DETR 框架 2.1 CNN Backbone 2.2 Transformer E ...

  8. 目标检测特殊层:PSROIPooling详解

    1. Position Sensitive ROI-Pooling 简介 Position Sensitive ROI Pooling(位置敏感的候选区域池化)是检测框架R-FCN的主要创新点.一般来 ...

  9. onestage方法_目标检测——One-stage和Two-stage的详解

    目标检测--One-stage和Two-stage的详解 发布时间:2019-01-15 14:16, 浏览次数:2784 , 标签: One stage Two 二.Two-stage类别的目标检测 ...

最新文章

  1. HAProxy+Keepalived高可用负载均衡配置
  2. springboot 启动类注解 @SpringBootApplication 和 @ComponentScan 的问题
  3. ajax spring mvc 接收json数据,easyui ajax请求获取SpringMVC @ResponseBody返回的Json数据为什么非得eval才能通过对象获取值?...
  4. android读取本地yaml文件_python笔记11-读取yaml配置文件(pyyaml)
  5. Golang的匿名函数和闭包
  6. Python中的__new__(new函数)
  7. OpenGL:纹理Textures
  8. 利用Oracle内置分析函数进行高效统计汇总
  9. Kinect 开发 —— 近距离探测
  10. atitit 文件搜索 映象文件夹结构模式.docxAtitit 百度网盘 文件 与跨机器 文件 搜索 查询 检索 解决方案 最小化索引法 映象文件夹结构模式. 1. 生成文件夹 结构信息 1
  11. 加载Selenium2Library却显示红色
  12. linux系统下网络吞吐量/CPU占用率/流量控制的测试
  13. JS if语句,switch语句——经典例子(水仙花数、瑞年)
  14. 如何快速判断一个文件是否为病毒
  15. JNOJ 江南在线评测系统 搭建
  16. 狂神学习系列11:SpringBoot
  17. 董明珠的权力危机:半年两位元老出局,格力进入动荡时刻
  18. redis防火墙设置
  19. 获取微信用户信息方案(测试)
  20. markdown导出以及合并pdf

热门文章

  1. 高中计算机课程打字网址,信息课
  2. 一定质量的封闭气体被压缩后_单螺杆压缩机
  3. php ip获取邮政编码,php获取指定(访客)IP所有信息(地址、邮政编码、国家、经纬度等)的方法...
  4. Linux内核分析 - 网络[一]:收发数据包的调用
  5. input子系统分析一
  6. ARM汇编指令(ARM工作模式、寄存器)
  7. c语言利用线程交替打印奇偶数,两个线程交替打印奇偶数
  8. mysql如何给数据增加tab_怎么往mysql表里添加数据
  9. 【设计模式】第六章 观察者模式
  10. Redis模式对比:主从模式 VS 哨兵sentinel模式 VS Redis cluster模式