转载自:http://blog.csdn.net/tangwei2014/article/details/50915317

这是继RCNN,fast-RCNN 和 faster-RCNN之后,rbg(Ross Girshick)大神挂名的又一大作,起了一个很娱乐化的名字:YOLO
虽然目前版本还有一些硬伤,但是解决了目前基于DL检测中一个大痛点,就是速度问题。
其增强版本GPU中能跑45fps,简化版本155fps。

论文下载:http://arxiv.org/abs/1506.02640
代码下载:https://github.com/pjreddie/darknet

本篇博文focus到方法上。实验结果等整理全了再奉上。
1. YOLO的核心思想

  • YOLO的核心思想就是利用整张图作为网络的输入,直接在输出层回归bounding box的位置和bounding box所属的类别。

  • 没记错的话faster RCNN中也直接用整张图作为输入,但是faster-RCNN整体还是采用了RCNN那种 proposal+classifier的思想,只不过是将提取proposal的步骤放在CNN中实现了。

2.YOLO的实现方法

  • 将一幅图像分成SxS个网格(grid cell),如果某个object的中心 落在这个网格中,则这个网格就负责预测这个object。
  • 每个网格要预测B个bounding box,每个bounding box除了要回归自身的位置之外,还要附带预测一个confidence值。
    这个confidence代表了所预测的box中含有object的置信度和这个box预测的有多准两重信息,其值是这样计算的:

    其中如果有object落在一个grid cell里,第一项取1,否则取0。 第二项是预测的bounding box和实际的groundtruth之间的IoU值。

  • 每个bounding box要预测(x, y, w, h)和confidence共5个值,每个网格还要预测一个类别信息,记为C类。则SxS个网格,每个网格要预测B个bounding box还要预测C个categories。输出就是S x S x (5*B+C)的一个tensor。
    注意:class信息是针对每个网格的,confidence信息是针对每个bounding box的。

  • 举例说明: 在PASCAL VOC中,图像输入为448x448,取S=7,B=2,一共有20个类别(C=20)。则输出就是7x7x30的一个tensor。
    整个网络结构如下图所示:

  • 在test的时候,每个网格预测的class信息和bounding box预测的confidence信息相乘,就得到每个bounding box的class-specific confidence score:

    等式左边第一项就是每个网格预测的类别信息,第二三项就是每个bounding box预测的confidence。这个乘积即encode了预测的box属于某一类的概率,也有该box准确度的信息。

  • 得到每个box的class-specific confidence score以后,设置阈值,滤掉得分低的boxes,对保留的boxes进行NMS处理,就得到最终的检测结果。

3.YOLO的实现细节

  • 每个grid有30维,这30维中,8维是回归box的坐标,2维是box的confidence,还有20维是类别。
    其中坐标的x,y用对应网格的offset归一化到0-1之间,w,h用图像的width和height归一化到0-1之间。

  • 在实现中,最主要的就是怎么设计损失函数,让这个三个方面得到很好的平衡。作者简单粗暴的全部采用了sum-squared error loss来做这件事。
    这种做法存在以下几个问题:
    第一,8维的localization error和20维的classification error同等重要显然是不合理的;
    第二,如果一个网格中没有object(一幅图中这种网格很多),那么就会将这些网格中的box的confidence push到0,相比于较少的有object的网格,这种做法是overpowering的,这会导致网络不稳定甚至发散。
    解决办法:

    • 更重视8维的坐标预测,给这些损失前面赋予更大的loss weight, 记为在pascal VOC训练中取5。
    • 对没有object的box的confidence loss,赋予小的loss weight,记为在pascal VOC训练中取0.5。
    • 有object的box的confidence loss和类别的loss的loss weight正常取1。
  • 对不同大小的box预测中,相比于大box预测偏一点,小box预测偏一点肯定更不能被忍受的。而sum-square error loss中对同样的偏移loss是一样。
    为了缓和这个问题,作者用了一个比较取巧的办法,就是将box的width和height取平方根代替原本的height和width。这个参考下面的图很容易理解,小box的横轴值较小,发生偏移时,反应到y轴上相比大box要大。

  • 一个网格预测多个box,希望的是每个box predictor专门负责预测某个object。具体做法就是看当前预测的box与ground truth box中哪个IoU大,就负责哪个。这种做法称作box predictor的specialization。

  • 最后整个的损失函数如下所示:

    这个损失函数中:

    • 只有当某个网格中有object的时候才对classification error进行惩罚。
    • 只有当某个box predictor对某个ground truth box负责的时候,才会对box的coordinate error进行惩罚,而对哪个ground truth box负责就看其预测值和ground truth box的IoU是不是在那个cell的所有box中最大。
  • 其他细节,例如使用激活函数使用leak RELU,模型用ImageNet预训练等等,在这里就不一一赘述了。

4.YOLO的缺点

  • YOLO对相互靠的很近的物体,还有很小的群体 检测效果不好,这是因为一个网格中只预测了两个框,并且只属于一类。

  • 对测试图像中,同一类物体出现的新的不常见的长宽比和其他情况是。泛化能力偏弱。

  • 由于损失函数的问题,定位误差是影响检测效果的主要原因。尤其是大小物体的处理上,还有待加强。

论文阅读笔记:You Only Look Once: Unified, Real-Time Object Detection相关推荐

  1. 论文阅读笔记三十三:Feature Pyramid Networks for Object Detection(FPN CVPR 2017)

    论文源址:https://arxiv.org/abs/1612.03144 代码:https://github.com/jwyang/fpn.pytorch 摘要 特征金字塔是用于不同尺寸目标检测中的 ...

  2. 论文阅读:Saliency-Guided Region Proposal Network for CNN Based Object Detection

    论文阅读:Saliency-Guided Region Proposal Network for CNN Based Object Detection (1)Author (2)Abstract (3 ...

  3. 【论文阅读】【3d目标检测】Group-Free 3D Object Detection via Transformers

    论文标题:Group-Free 3D Object Detection via Transformers iccv2021 本文主要是针对votenet等网络中采用手工group的问题提出的改进 我们 ...

  4. 论文阅读--PVANET: Deep but Lightweight Neural Networks for Real-time Object Detection

    为什么80%的码农都做不了架构师?>>>    论文地址:https://arxiv.org/abs/1608.08021 算法实现:https://github.com/Charl ...

  5. [论文阅读] Cascaded Partial Decoder for Fast and Accurate Salient Object Detection

    论文地址:https://arxiv.org/abs/1904.08739 代码:https://github.com/wuzhe71/CPD 发表于:CVPR'19 Abstract 现有的最先进的 ...

  6. 论文阅读:Softer-NMS: Rethinking Bounding Box Regression for Accurate Object Detection

    Softer-NMS 文章   和之前同样出自Megvii的一篇论文IoU-Net一样,这篇论文的出发点也是,two-stage detector进行NMS时用到的score仅仅是classifica ...

  7. 论文阅读:DEFORMABLE DETR:DEFORMABLE DETR: DEFORMABLE TRANSFORMERSFOR END-TO-END OBJECT DETECTION

    题目:DEFORMABLE DETR:DEFORMABLE DETR: DEFORMABLE TRANSFORMERSFOR END-TO-END OBJECT DETECTION 来源:ICLA 是 ...

  8. 论文阅读-ViTDet:Exploring Plain Vision Transformer Backbones for Object Detection

    目录 A.写在前面 B.有个工作我得说说 C.摘要拆分 D.先看看结果 E.代码细节 1.MaskRCNN部分的修改 2.数据增强部分 3.SFP的实现 F.参考文献 A.写在前面 ViTDet[1] ...

  9. 论文阅读 (88):Adversarial Examples for Semantic Segmentation and Object Detection

    文章目录 1. 概述 2 算法 2.1 稠密对抗生成 2.2 选择用于检测的输入提案 1. 概述 题目:用于语义分割和目标检测的对抗样本 核心点:将对抗性样本的概念扩展到语义分割和对象检测,并提出稠密 ...

  10. 论文阅读笔记(9):加权稀疏子空间表示——子空间聚类、约束聚类和主动学习的统一框架

    论文阅读笔记(9):WEIGHTED SPARSE SUBSPACE REPRESENTATION--A UNIFIED FRAMEWORK FOR SUBSPACE CLUSTERING, CONS ...

最新文章

  1. etcd 笔记(08)— 基于 etcd 实现分布式锁
  2. 自学python需要下载什么软件-一篇告诉你为什么人人都应该学点Python?
  3. intellij idea 15,webstorm 最新注册破解
  4. Android程序设计基础
  5. lnmp1.4上thinkphp5.0出现404的解决办法
  6. oracle日期数据格式,oracle日期数据格式
  7. ai人工智能_人工智能能力问答中的人工智能不确定性
  8. 英语c开头语言,字母c开头的英语短语
  9. Linux disk 100% busy,谁造成的?
  10. 超级搜索术5-商业变现/生活便捷
  11. C语言面试常见问题总结
  12. 虚拟机客户端访问不了服务器域名,虚拟机ESXI 篇四:让你电脑打开网页不用等待---SmartDns...
  13. wordpress插件_5个最佳WordPress企业目录插件
  14. GPS经纬度 转化为 M
  15. 「3D建模」建模中什么是重新拓补?为什么要拓补,有何作用?
  16. Redis实现消息队列(订阅/发布模式 、LPUSH+BRPOP)
  17. html td里面元素的获取
  18. 【Markdown语法】5分钟快速入门保姆级教程(建议收藏...)
  19. 科技云报道:云密码,开辟网络安全的新“蓝海”
  20. Nautre综述:鸟枪法宏基因组-从取样到数据分析(2)2万字带你系统入门宏基因组实验和分析...

热门文章

  1. 认清楚服务器的真正身份--深入ARP工作原理
  2. Redis 如何分布式,来看京东金融的设计与实践
  3. Spring @Resource、@Autowired、@Qualifier区别
  4. 突破NP屏蔽,实现按键模拟!
  5. CSRF 攻击的应对之道--转
  6. hibernate 三种查询方式源码跟踪及总结
  7. python连接数据库示例(东西写得很详细,剽过来了)
  8. Newton-Raphson method
  9. 海外投行抢滩大数据 人工智能等领域趋热
  10. linux添加硬盘分区设置柱面,linux 下添加新硬盘设备和硬盘分区格式化挂载使用磁盘配额限制...