热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

目标检测:YOLO理论部分

目标检测流程生成boundingbox(边界框)对物体进行分类YOLO(youonlylookonce)就是one-st

目标检测流程 


  1. 生成bounding box(边界框)
  2. 对物体进行分类

YOLO(you only look once)就是one-stage算法系列的代表。它将目标检测任务当做回归问题(regression problem)来处理,直接通过整张图片的所有像素得到bounding box的坐标、box中包含物体的置信度和class probabilities。顾名思义,通过YOLO,每张图像只需要看一眼就能得出图像中都有哪些物体和这些物体的位置。


YOLOv1网络结构:24个卷积层和2个全连接层

算法流程


  1. YOLO将图片分为S×S个网格,这里规定了物体的中心落在哪个格子,就由哪个格子负责预测这个物体,YOLO取S=7。比如上图中,假定左下角坐标为(0,0),狗的中心落在了(1,2)这个格子,那么(1,2)这个格子就负责预测这只狗。
  2. 其次,每个网格预测B个bounding boxes以及对应的confidence scores(置信度分数)。B=2。
  3. 每个预测出的bounding box有5个预测值(x,y,w,h,confidence)。x和y是bounding box的中心坐标。w和h则是物体长宽相对于整幅图像的比例confidence就是预测的bounding box和ground truth box的IOU值。
  4. 每个网格还预测C个类别物体的条件概率。注意这里是每个网格,而不是每个bounding box

也就是说最后会得到C×(S×S×B)的score矩阵。接下来的操作都是C个类别轮流进行:在某个类别中(即矩阵的某一行),将得分少于阈值(0.2)的设置为0,然后再按得分从高到低排序。最后再用NMS算法去掉重复率较大的bounding box。最后每个bounding box的C个score取最大的score,如果这个score大于0,那么这个bounding box就是这个socre对应的类别(矩阵的行),如果小于0,说明这个bounding box里面没有物体,跳过即可。


NMS:针对某一类别,选择得分最大的bounding box,然后计算它和其它bounding box的IOU值,如果IOU大于0.5,说明重复率较大,该得分设为0,如果不大于0.5,则不改;这样一轮后,再选择剩下的score里面最大的那个bounding box,然后计算该bounding box和其它bounding box的IOU,重复以上过程直到最后。


因此,网络最后全连接的输出层是(S×S×(B×5+C))。每个网格最后只会预测出一个物体,预测的bounding box的数量只能提高预测的精度,但最终也只能预测出一个物体,这也就可以理解前面说的YOLO的缺点之一——对小物体的检测效果不好,因为一个图片S*S个网格只能预测出S*S个物体。


​YOLOv2网络结构改进:

1.Batch Normalization(批度归一化)


  • 批度归一化有助于解决反向传播过程中出现的梯度消失梯度爆炸问题,降低对一些超参数的敏感性,并且起到一定的正则化效果(YOLO2不再使用dropout),从而能够获得更好的收敛速度和收敛效果,加了BN层后mAP提高了2%

2.High Resolution Classifier(使用高分辨率图像微调分类模型)


  • 目前先进的目标检测方法中,基本上都会先在ImageNet上进行预训练,而ImageNet的输入采用的是224×224,导致分辨率不够高,给检测带来困难。YOLO v1网络把分辨率直接提升到了448×448 ,但是直接切换分辨率,检测模型可能难以快速适应高分辨率,这也意味之原有的网络模型必须进行某种调整以适应新的分辨率输入。
  • 所以YOLO v2增加了在ImageNet数据集上使用448×448输入来finetune分类网络这一中间过程(10 epochs),这可以使得模型在检测数据集(eg:COCO)上finetune之前已经适应高分辨率输入。使用高分辨率分类器后,YOLOv2的mAP提升了约4%

3.Convolutional With Anchor Boxes(使用先验框Anchor Box替换全连接层)


  • 在之前的YOLO v1中,直接采用全连接层来预测边界框,效果不好。作者借鉴了Faster R-CNN中使用RPN预测偏移量offsets置信度confidences的思想,预测bounding boxAnchor框的偏移(offset)而不是直接预测bounding box的坐标。

  1. 首先作者去除了一个池化层,来使得输出的卷积特征图有更高的分辨率
  2. 其次作者缩减了网络,把原本网络的输入  缩减成  。因为YOLO v2模型下采样的总步长为32,对于  大小的图片,最终得到的特征图大小为  ,维度是数,这样特征图恰好只有一个中心位置。作者发现对于一些大物体,它们中心点往往落入图片中心位置,此时使用特征图的一个中心点而不是四个中心点去预测这些物体的边界框相对容易些。所以在YOLOv2设计中要保证输入对应的最终的特征图有奇数个位置(Multi-Scale Training部分有点打脸==)

  • 使用anchor boxes之后,mAP下降了0.3,但召回率提高了7%。这是因为YOLOv1只能预测98个边界框(  ),而YOLO v2使用anchor boxes之后可以预测上千个边界框(×num_anchor),这使得模型拥有进一步的改进空间。

4.Dimension Clusters(使用聚类算法提取anchor boxes的宽高)


  • 之前anchor boxes都是手工设定的,网络微调anchor boxes到实际位置的难度不小。而YOLO v2的做法是对训练集中标注的边框进行聚类分析,以自动找到更好的尺寸。
  • 聚类算法最重要的是选择如何计算两个边框之间的“距离”,对于常用的欧式距离,大边框会产生更大的误差,但我们关心的是anchor boxesground truthIOU。所以,YOLO2在聚类时巧妙地采用以下公式来计算两个边框之间的距离:
  • centroid是聚类时被选作中心的边框,box就是其它anchor boxes。IOU越大,距离越近。YOLO2给出的聚类分析结果如下图所示:


  • 随着聚类中心数目的增加,我们可以看到平均IOU值是增加的,但是综合考虑模型复杂度和召回率,作者最终选取5个聚类中心作为先验框,其相对于图片的大小如右边图所示。

5.Direct location prediction(直接位置预测)


  • 作者发现使用anchor boxes的时候模型不稳定,尤其是在早期迭代的时候。而大部分的不稳定现象出现在预测box的  坐标上了,而以往计算的公式如下(图中的两个减号应是加号,作者写错):


  • 这个公式没有任何限制,使得无论在什么位置进行预测,任何anchor boxes可以在图像中任意一点结束(这是因为偏移量  没有大小限制,可能会导致出现anchor偏离ground truth很远的情况。正确做法应该是每一个anchor只负责检测周围正负一个单位以内的目标box)。YOLO v2调整了预测公式,将预测边框的中心约束在网格内:


  • 其中,  是预测边框的中心和宽高。  是预测边框的置信度,YOLO v1是直接预测置信度的值,这里对预测参数  进行σ变换后作为置信度的值。  是当前网格左上角到图像左上角的距离,要先将网格大小归一化,即令一个网格的宽=1,高=1。  是先验框的宽和高。 σ是sigmoid函数。  是要学习的参数,分别用于预测边框的中心和宽高,以及置信度
  • 这里具体的原理包括  为什么要乘上一个指数,下面的这篇文章:

逍遥王可爱:史上最详细的Yolov3边框预测分析509 赞同 · 76 评论文章正在上传…重新上传取消


  • 作者使用Dimension Clusters和Direct location prediction这两项anchor boxes改进方法,mAP获得了5%的提升。

6.Fine-Grained Features(细粒度特征)


  • 作者发现YOLO使用  的特征图进行预测大物体拥有很好的效果,而相对比较小的物体则效果一般。YOLO v2引入一种称为passthrough层的方法在特征图中保留一些细节信息。
  • YOLO v2所利用的Fine-Grained Features是  大小的特征图(最后一个maxpooling层的输入)。passthrough层与ResNet网络的identity mappings类似,以前面更高分辨率的特征图为输入,然后将其连接到后面的低分辨率特征图上。前面的特征图维度是后面的特征图的2倍,passthrough层抽取前面层的每个  ,然后将其转化为channel的维度,对于  的特征图,经passthrough层处理之后就变成了  的新特征图(特征图大小降低4倍,而channles增加4倍),这样就可以与后面的  特征图连接在一起形成  大小的特征图。


7.Multi-Scale Training(多尺寸训练)


  • 因为Yolo v2去掉了全连接层,只有卷积层与池化层,所以对于网络的输入大小,并没有限制,整个网络的降采样倍数为32,只要输入的特征图尺寸为32的倍数即可。所以Yolo v2可以使用不同尺寸的输入图片训练,来使模型适应不同分辨率的图片,让模型更鲁棒
  • 具体来说就是在训练过程中每间隔一定的iterations(论文中是10)之后改变模型的输入图片大小。由于YOLOv2的下采样总步长为32,输入图片大小选择一系列为32倍数的值:{},输入图片最小为  ,此时对应的特征图大小为  (和Convolutional With Anchor Boxes中提到要是奇数相悖,但是问题也不是很大),而输入图片最大为  ,对应的特征图大小为  。在训练过程,每隔10个iterations随机选择一种输入图片大小,然后只需要修改对最后检测层的处理就可以重新训练。
  • 小尺寸图片检测中,YOLO v2效果很好,输入为  的时候,帧率达到91FPS,mAP几乎和Faster R-CNN的水准相同。在大尺寸图片检测中,YOLO v2也达到了先进水平,在VOC2007数据集上mAP为78.6%,仍然高于平均水准,下图是YOLO v2和其他网络的效果对比:

8.Darknet-19


  • YOLOv2采用了一个新的网络,称为Darknet-19,包括19个卷积层和5个maxpooling层,在ImageNet数据集上,Darknet-19的top-1准确度为72.9%,top-5准确度为91.2%,但是模型参数相对小一些。使用Darknet-19之后,YOLOv2的mAP值没有显著提升,但是计算量却可以减少约33%

tips:YOLO v2具体的训练方式这里不多赘述,在YOLO v3的介绍中会重点侧重实现。


YOLO9000:Stronger


  • 众所周知,检测数据集的标注要比分类数据集打标签繁琐的多,所以ImageNet分类数据集比VOC等检测数据集高出几个数量级。在YOLO中,边界框的预测其实并不依赖于物体的种类标签,所以YOLO可以实现在分类数据集和检测数据集上的联合训练。对于检测数据集,可以用来学习预测物体的边界框、置信度以及为物体分类,而对于分类数据集可以仅用来学习分类,但是其可以大大扩充模型所能检测的物体种类。那具体是怎么做的呢?
  • 联合训练方法思路简单清晰,Yolo v2中物体矩形框生成,不依赖于物理类别预测,两个预测互相独立。当输入是检测的数据集时,标注信息既有位置信息也有类别信息,那么对整个loss函数计算loss;当输入是分类数据集时,标注信息只有类别信息,那么整个loss函数只计算分类loss,其余部分loss为零。
  • 作者先在检测数据集上训练一定的epoch,待预测框的loss基本稳定后,再联合分类数据集、检测数据集进行交替训练,同时由于ImageNet样本比COCO多得多,所以对COCO样本会多做一些采样,适当平衡一下样本数量。
  • 但是这个方法会遇到一个问题,传统的最后一层分类的各个种类之间都是互斥的,但是这里ImageNet和COCO数据集的类别之间并不一定是互斥关系,可能是包含(人与男人)、相交(运动员与男人)等的关系,作者这里提出了一种层级分类方法(Hierarchical classification),主要思路是根据各个类别之间的从属关系(根据WordNet)建立一种树结构WordTree,结合COCO和ImageNet建立的WordTree如下图所示:


  • WordTree中的根节点为"physical object",每个节点的子节点都属于同一子类,可以对它们进行softmax处理(而不是对所有的种类进行softmax)。在给出某个类别的预测概率时,需要找到其所在的位置,遍历这个path,然后计算path上各个节点的概率之积。


  • 如图中所示,同一颜色的种类之间进行softmax操作,使得同一颜色中只有一个类别预测分值最大。在预测时,从树的根节点开始向下检索,每次选取预测分值最高的子节点,直到所有选择的节点预测概率连乘后小于某一阈值(论文中取0.6)时停止。eg: 

-通过联合训练策略,YOLO9000可以快速检测出超过9000个类别的物体,总体mAP值为19.7


推荐阅读
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 阿里Treebased Deep Match(TDM) 学习笔记及技术发展回顾
    本文介绍了阿里Treebased Deep Match(TDM)的学习笔记,同时回顾了工业界技术发展的几代演进。从基于统计的启发式规则方法到基于内积模型的向量检索方法,再到引入复杂深度学习模型的下一代匹配技术。文章详细解释了基于统计的启发式规则方法和基于内积模型的向量检索方法的原理和应用,并介绍了TDM的背景和优势。最后,文章提到了向量距离和基于向量聚类的索引结构对于加速匹配效率的作用。本文对于理解TDM的学习过程和了解匹配技术的发展具有重要意义。 ... [详细]
  • 本文介绍了闭包的定义和运转机制,重点解释了闭包如何能够接触外部函数的作用域中的变量。通过词法作用域的查找规则,闭包可以访问外部函数的作用域。同时还提到了闭包的作用和影响。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • Html5-Canvas实现简易的抽奖转盘效果
    本文介绍了如何使用Html5和Canvas标签来实现简易的抽奖转盘效果,同时使用了jQueryRotate.js旋转插件。文章中给出了主要的html和css代码,并展示了实现的基本效果。 ... [详细]
  • Oracle seg,V$TEMPSEG_USAGE与Oracle排序的关系及使用方法
    本文介绍了Oracle seg,V$TEMPSEG_USAGE与Oracle排序之间的关系,V$TEMPSEG_USAGE是V_$SORT_USAGE的同义词,通过查询dba_objects和dba_synonyms视图可以了解到它们的详细信息。同时,还探讨了V$TEMPSEG_USAGE的使用方法。 ... [详细]
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
  • 欢乐的票圈重构之旅——RecyclerView的头尾布局增加
    项目重构的Git地址:https:github.comrazerdpFriendCircletreemain-dev项目同步更新的文集:http:www.jianshu.comno ... [详细]
  • 集成电路企业在进行跨隔离网数据交换时面临着安全性问题,传统的数据交换方式存在安全性堪忧、效率低下等问题。本文以《Ftrans跨网文件安全交换系统》为例,介绍了如何通过丰富的审批流程来满足企业的合规要求,保障数据交换的安全性。 ... [详细]
author-avatar
n_light征蓝妙
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有