文章《You Only Look Once: Unified, Real-Time Object Detection》提出方法下面简称YOLO。

目前,基于深度学习算法的一系列目标检测算法大致可以分为两大流派:
1.两步走(two-stage)算法:先产生候选区域然后再进行CNN分类(RCNN系列),
2.一步走(one-stage)算法:直接对输入图像应用算法并输出类别和相应的定位(YOLO系列)

之前的R-CNN系列虽然准确率比较高,但是即使是发展到Faster R-CNN,检测一张图片如下图所示也要7fps(原文为5fps),为了使得检测的工作能够用到实时的场景中,提出了YOLO。

YOLO的检测思想不同于R-CNN系列的思想,它将目标检测作为回归任务来解决。
下面来看看YOLO的整体结构:

由上两图所示,网络是根据GoogLeNet改进的,输入图片为448*448大小,输出为7×7×(2×5+20)7\times7\times(2\times5+20)7×7×(2×5+20),现在看来这样写输出维度很奇怪,下面来看一下输出是怎么定义的。

将图片分为S×SS\times SS×S个单元格(原文中S=7),之后的输出是以单元格为单位进行的:
1.如果一个object的中心落在某个单元格上,那么这个单元格负责预测这个物体。
2.每个单元格需要预测B个bbox值(bbox值包括坐标和宽高,原文中B=2),同时为每个bbox值预测一个置信度(confidence scores)。也就是每个单元格需要预测B×(4+1)个值。
3.每个单元格需要预测C(物体种类个数,原文C=20,这个与使用的数据库有关)个条件概率值.
所以,最后网络的输出维度为S×S×(B×5+C)S \times S \times (B\times 5 + C)S×S×(B×5+C),这里虽然每个单元格负责预测一种物体(这也是这篇文章的问题,当有小物体时可能会有问题),但是每个单元格可以预测多个bbox值(这里可以认为有多个不同形状的bbox,为了更准确的定位出物体,如下图所示)。

因为这里是当作回归问题来解决的,所以所有的输出包括坐标和宽高最好都定义在0到1之间。网上看见一张比较详细的图如下。

来看一下每个单元格预测的B个(x,y,w,h,confidence)的向量和C的条件概率中,每个参数的含义(假设图片宽为{w_i}高为{hi},将图片分为S×SS\times SS×S):
1.(x,y)是bbox的中心相对于单元格的offset
对于下图中蓝色框的那个单元格(坐标为(xcol=1,yrow=4)(x_{col}=1,y_{row}=4)(xcol​=1,yrow​=4)),假设它预测的输出是红色框的bbox,设bbox的中心坐标为(xc,yc)(x_c,y_c)(xc​,yc​),那么最终预测出来的(x,y)是经过归一化处理的,表示的是中心相对于单元格的offset,计算公式如下:
x=xcwiS−xcol,y=ychiS−yrowx=\frac{x_c}{w_i}{S}−x_{col} , y=\frac{y_c}{h_i}{S}−y_{row}x=wi​xc​​S−xcol​,y=hi​yc​​S−yrow​

2.(w,h)是bbox相对于整个图片的比例
预测的bbox的宽高为wb,hbw_b,h_bwb​,hb​,(w,h)表示的是bbox的是相对于整张图片的占比,计算公式如下:
w=wbwi,h=hbhiw=\frac{w_b}{w_i} , h=\frac{h_b}{h_i}w=wi​wb​​,h=hi​hb​​

3.confidence
这个置信度是由两部分组成,一是格子内是否有目标,二是bbox的准确度。定义置信度为Pr(Object)∗IOUpredtruthP_r(Object)∗IOU^{truth}_{pred}Pr​(Object)∗IOUpredtruth​。
这里,如果格子内有物体,则Pr(Object)=1P_r(Object)=1Pr​(Object)=1,此时置信度等于IoU。如果格子内没有物体,则Pr(Object)=0P_r(Object)=0Pr​(Object)=0,此时置信度为0

4.C类的条件概率
条件概率定义为Pr(Classi∣Object)P_r(Class_i |Object)Pr​(Classi​∣Object),表示该单元格存在物体且属于第i类的概率。

在测试的时候每个单元格预测最终输出的概率定义为,如下两图所示(两幅图不一样,代表一个框会输出B列概率值)
Pr(Classi∣Object)∗Pr(Object)∗IOUpredtruth=Pr(Classi)∗IOUpredtruthP_r(Class_i|Object) ∗ P_r(Object) ∗ IOU^{truth}_{pred} = P_r(Class_i) ∗ IOU^{truth}_{pred}Pr​(Classi​∣Object)∗Pr​(Object)∗IOUpredtruth​=Pr​(Classi​)∗IOUpredtruth​


最后将(S×S)×B×20(S\times S)\times B\times20(S×S)×B×20 列的结果送入NMS,最后即可得到最终的输出框结果

最后来看一下训练YOLO使用的损失函数定义(本想自己用latex打的,后来有个符号一直打不出来,使用网友的图如下)

这里强调两点:
1.每个图片的每个单元格不一定都包含object,如果没有object,那么confidence就会变成0,这样在优化模型的时候可能会让梯度跨越太大,模型不稳定跑飞了。为了平衡这一点,在损失函数中,设置两个参数λcorrdλ_{corrd}λcorrd​和λnoobjλ_{noobj}λnoobj​,其中λcorrdλ_{corrd}λcorrd​控制bbox预测位置的损失,λnoobjλ_{noobj}λnoobj​控制单个格内没有目标的损失。
2.对于大的物体,小的偏差对于小的物体影响较大,为了减少这个影响,所以对bbox的宽高都开根号。

参考
1.https://docs.google.com/presentation/d/1aeRvtKG21KHdD5lg6Hgyhx5rPq_ZOsGjG5rJ1HP7BbA/pub?start=false&loop=false&delayms=3000&slide=id.g137784ab86_4_1822
2.https://blog.csdn.net/u011974639/article/details/78208773

YOLO文章详细解读相关推荐

  1. Faster R-CNN文章详细解读

    文章<Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks>是为了改进Fast R- ...

  2. YOLO v3详细解读

    <YOLOv3: An Incremental Improvement> Joseph Redmon Ali Farhadi University of Washington 发表时间:2 ...

  3. YOLO v1详细解读

    <You Only Look Once: Unifified, Real-Time Object Detection> Joseph Redmon∗* , Santosh Divvala∗ ...

  4. 结绳法:文章详细解读(异步时钟设计的同步策略)(五)

    一.典型方法(双锁存器法)

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

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

  6. 【YOLO系列】--YOLOv1超详细解读/总结

    文章目录 前言 摘要 一.Introduction-介绍 二. Unified Detection-统一检测 三.Comparison to Other Detection Systems-与其他目标 ...

  7. 【YOLO系列】YOLOv5超详细解读(网络详解)

    前言 吼吼!终于来到了YOLOv5啦! 首先,一个热知识:YOLOv5没有发表正式论文哦~ 为什么呢?可能YOLOv5项目的作者Glenn Jocher还在吃帽子吧,hh 目录 前言 一.YOLOv5 ...

  8. NLP突破性成果 BERT 模型详细解读 bert参数微调

    https://zhuanlan.zhihu.com/p/46997268 NLP突破性成果 BERT 模型详细解读 章鱼小丸子 不懂算法的产品经理不是好的程序员 ​关注她 82 人赞了该文章 Goo ...

  9. MemCache超详细解读

    MemCache是什么 MemCache是一个自由.源码开放.高性能.分布式的分布式内存对象缓存系统,用于动态Web应用以减轻数据库的负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高 ...

  10. MemCache详细解读

    MemCache是什么 MemCache是一个自由.源码开放.高性能.分布式的分布式内存对象缓存系统,用于动态Web应用以减轻数据库的负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高 ...

最新文章

  1. Annotation
  2. 软件中常用的“发送邮件”、“打印文档”,其本质是“队列”!
  3. Java 8 CompletableFuture 浅入
  4. 系统垃圾清理.cmd
  5. mysql5.6 memcached_MySQL 5.6 安装配置InnoDB memcached Plugin
  6. Awesome Mac:收集的非常全面好用的Mac应用程序、软件以及工具
  7. 改变定时器获取传感器频度_称重传感器在高速定量分装系统的应用
  8. 从零开始实现数据结构(二) 有序数组
  9. Mysql学习总结(70)——MySQL 优化实施方案
  10. Java Servlet web xml 配置详解
  11. [Java] 蓝桥杯ALGO-150 算法训练 6-1 递归求二项式系数值
  12. 华为总是在用自己独特的方式诠释成功
  13. c语言程序设计徐立辉答案,C语言习题
  14. 第38届ACM中国区通化邀请赛-中文排名表
  15. msconfig蓝屏_电脑msconfig改动后蓝屏怎么修复
  16. 数字翻译成英语JavaScript
  17. 仿邓杰作品(艺家网站)总结
  18. Excel表格如何设置下拉选项并应用到整列
  19. LINUX系统管理-PCS配置手册
  20. 面试题汇总(基础部分)

热门文章

  1. 电脑自动关机后又自动开机怎么办
  2. edge播放视频HTML5黑屏,edge不能播放网页视频怎么办-修复edge浏览器播放视频黑屏的方法 - 河东软件园...
  3. 《股票大作手操盘术--杰西.利弗莫尔》
  4. 微商新传奇奢瑞小黑裙、两家小程序内测成员都来这了,SDCC2016微信开发专题议题揭晓...
  5. Scanport(转来备用,在那小子以后攻击我的时候用)
  6. php error unexpected,PHP 错误 Parse error: syntax error, unexpected ‘[‘ in 解决办法
  7. 电商(一) 创建订单业务流程
  8. 人间繁华江上明月,乃浮生一梦,惟真情长在——读沈君山《浮生再记》(并转书评)
  9. EXCEL的去重去除某个字段后全部操作
  10. linux重装系统驱动,linux系统下安装驱动方法