机器学习:YOLO for Object Detection (二)
之前介绍了 YOLO-v1 单纯的利用一个卷积网络完成了目标检测,不过 YOLO-v1 虽然速度很快,但是比起其他的网络比如 Fast R-CNN 检测的准确率还是差不少,所以作者又提出了改良版的 YOLO-v2, 作者也明确说了,YOLO-v2 也是借鉴了其他网络的一些经验,针对 YOLO-v1 进行了改良。从论文来看,作者都没有给出新的网络结构图,大概网络的基本结构还是没有太多的变化,不过就是对网络以及图像的处理变得更加复杂了吧。
下面,我们来逐个介绍 YOLO-v2 到底做了哪些变化:
Batch Normalization: 这是一个比较常用的抑制 over fitting 的方法,作者在论文中介绍说对每个卷积层的输出加入 Batch Normalization 可以提升 2% 的准确率。
High Resolution Classifier: 作者也提到说,如果输入图的尺寸增大,读网络的性能也有好处。YOLO-v1 在训练 ImageNet 的时候是在小尺寸 224×224 的图像上做的,只是在后面训练检测的时候才变成了大尺寸的图,YOLO-v2 的时候,作者在训练 ImageNet 的时候,也用大尺寸的图像训练了 10 个周期,让网络再过渡到检测之前,就已经具备一定的适应大尺寸图像的能力,通过这个改变,可以提升网络 4% 的 mpA。
Convolutional With Anchor Boxes:这里作者借用了 Faster R-CNN
的方法,利用 Anchor Boxes 去预测 bounding boxes,作者把网络的输入从 448×448 变成了 416×416, 这里利用了一个先验知识,物体一般会占据图像中央位置,所以作者为 feature map 的 location 设置了一个奇数,以确保中间位置会有一个 location,我觉得这里和 YOLO-v1 的一个区别就是 YOLO-v1 之前的 grid cell 是固定尺寸的,一旦输入确定,grid cell 的个数确定了,grid cell 的大小和形状也就确定了,之前在 YOLO-v1 的时候,作者也提到了这点,grid cell 的形状和大小固定,其实不够灵活,所以为了解决这个问题,YOLO-v2 这里引入了 Anchor Boxes,Anchor Boxes 的一个好处就是可以有不同的形状,不同的尺寸,不过带来的问题就是要处理的 bounding boxes 的个数也就随之增加了。所以论文中也提到这点,bounding boxes 从 98 个增加到将近 1000 个,这个策略让网络的 mpA 稍微有点下降,不过 recall 却有大幅提升。说明网络的 TP 还是很高的,能把大部分该检测的目标都检测到。Dimension Clusters: 论文中提到了,为了决定 Anchor Boxes 的个数,作者用 k-means 的方法做了一些比较,最后决定采用 5 个。
Direct location prediction: 对检测位置的预测,作者又用回了原来 YOLO-v1 的方案,不是预测偏移量,而是直接预测检测框与grid cell 的相对位置,这样可以保证预测值是在 0-1之间的一个数,作者提到每个 grid cell 是预测 5 个 bounding boxes,每个 bounding box 输出 5 个预测值:(tx,ty,tw,th,to) 根据每个 cell 相对于图像左上角的顶点的偏移,可以计算出每个 box 在图像的位置,宽高,以及预测的类别:
利用这个策略,YOLO-v2 的 mpA 提升了 5% 左右。
Fine-Grained Features, 作者也提到,YOLO-v1 最后一层的 feature map 的 size 是 13×13 , 对于大的目标物来说,这个 size 可能是合适的,但是对于太小的目标物,可能就遗漏了,所以为了弥补这个问题,YOLO-v2 把前一层的 feature map 也提取出来,用来一起做检测,前一层的 feature map size 是 26×26,为了把这两层的 feature map 叠在一起,作者对前一层的feature map做了一下变形。
Multi-Scale Training, 最后一个就是多尺度训练的问题了,YOLO-v2 在训练的过程中,每隔一定的训练周期,就随机切换一个不太的输入尺寸进行训练,论文中也提到,每换一次输入尺寸,都需要调整网络的结构,虽然参数可以继续用,不过网络的结构可能会有些变化,所以还是不太灵活。不过这样的好处就是让 YOLO-v2 对不同尺寸的图像有更好的检测能力。
Darknet-19: 为了让网络的运行速度更快,YOLO-v2 用了另外一种网络结构,而不是常用的 VGG 网络。这个称为 Darknet-19 的网络有 19 个卷积层,5 个 pooling 层。
最后就是训练和检测了,训练还是先在 ImageNet 上做,相当于让网络先预热一下,让网络具有一定的学习能力,然后再用特定的数据库训练网络的检测能力。
Word Tree : 最后要特别介绍一下 YOLO-v2 在训练时候的一个不同之处,就是把用来做分类的数据和用来做检测的数据混合起来训练,作者也提到,当训练数据是检测样本的时候,输出的是整个预测值的集合,包括检测以及分类的结果,如果数据是分类样本的时候,意味着输出只要是目标分类的概率即可。这个方案有个问题就是用来做分类的数据集 ImageNet 和用来做检测的数据集 COCO 的类别属性不同,COCO 基本只有恨模糊的大类,但是 ImageNet 含有很多细分的小类,一个典型的例子就是狗,COCO 所有的狗都是属于狗这个标签,而ImageNet 里面会把狗分成不同的品种,还有汽车也是。为了解决这个问题,论文里面设计了一种层级的分类,所以作者设计了一个 WordTree, 将 ImageNet 里的标签不再是平级的了,而是有层次的了,所以分类的时候,从树的根部开始,搜寻最短路径
参考文献:
Joseph Redmon, Ali Farhadi,“YOLO9000: Better, Faster, Stronger”, CVPR 2016
机器学习:YOLO for Object Detection (二)的更多相关文章
- 机器学习:YOLO for Object Detection (一)
最近看了基于CNN的目标检测另外两篇文章,YOLO v1 和 YOLO v2,与之前的 R-CNN, Fast R-CNN 和 Faster R-CNN 不同,YOLO 将目标检测这个问题重新回到了基 ...
- [Localization] YOLO: Real-Time Object Detection
Ref: https://pjreddie.com/darknet/yolo/ 关注点在于,为何变得更快? 论文笔记:You Only Look Once: Unified, Real-Time Ob ...
- YOLO: Real-Time Object Detection
YOLO detection darknet框架使用 YOLO 训练自己的数据步骤,宁广涵详细步骤说明
- YOLO: Real-Time Object Detection 安装和测试
1.下载darknet git clone https://github.com/pjreddie/darknet.git 2.修改make GPU= CUDNN= OPENCV= DEBUG= 3. ...
- YOLO object detection with OpenCV
Click here to download the source code to this post. In this tutorial, you’ll learn how to use the Y ...
- [YOLO]《You Only Look Once: Unified, Real-Time Object Detection》笔记
一.简单介绍 目标检测(Objection Detection)算是计算机视觉任务中比较常见的一个任务,该任务主要是对图像中特定的目标进行定位,通常是由一个矩形框来框出目标. 在深度学习CNN之前,传 ...
- 读论文系列:Object Detection CVPR2016 YOLO
CVPR2016: You Only Look Once:Unified, Real-Time Object Detection 转载请注明作者:梦里茶 YOLO,You Only Look Once ...
- Tensorflow object detection API 搭建物体识别模型(二)
二.数据准备 1)下载图片 图片来源于ImageNet中的鲤鱼分类,下载地址:https://pan.baidu.com/s/1Ry0ywIXVInGxeHi3uu608g 提取码: wib3 在桌面 ...
- Object Detection(RCNN, SPPNet, Fast RCNN, Faster RCNN, YOLO v1)
RCNN -> SPPNet -> Fast-RCNN -> Faster-RCNN -> FPN YOLO v1-v3 Reference RCNN: Rich featur ...
随机推荐
- 爬虫五 Beautifulsoup模块
一 介绍 Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.Beautiful Soup会帮你 ...
- C#基础之匿名方法实例教程
本文以实例形式讲解了C#的匿名方法的用法,分享给大家供大家参考之用.具体如下: 匿名方法是C# 2.0的语言新特性.首先看个最简单的例子: class Program { static void Ma ...
- 基于 普通及Lambda方式实现策略模式
什么是策略模式 策略模式代表了解决一类算法的通用解决方案,你可以在运行时选择使用哪种方案.比如如何使用不同的条件(比如苹果的重量,或者颜色 )来筛选库存中的苹果.你可以将这一模式应用到更广泛的领域 , ...
- Eclipse部署项目的时候抛异常【Multiple Contexts have a path of "/cdcpm".】
Eclipse部署项目的时候抛异常[Multiple Contexts have a path of "/cdcpm".]重新clean .删除server都不好使.查看一下tom ...
- win10 chrome 调试
下载NPAPI版本的flash player: http://www.adobe.com/support/flashplayer/debug_downloads.html#fp13 禁 ...
- php5.6 连接SQL SERVER
PHP Fatal error: Call to undefined function sqlsrv_connect() in php链接sqlserver出现该错误: 原因是:php5.3 及以上版 ...
- Android系统开发--灯光系统之电池灯的流程分析
Android系统开发--Android灯光系统之电池灯的流程分析 前期系统准备 运行初始化,创建系统服务 创建电池服务,获得电池灯;创建监听者监听上报电池事件: mSystemServiceMana ...
- 斯坦福机器学习视频笔记 Week8 无监督学习:聚类与数据降维 Clusting & Dimensionality Reduction
监督学习算法需要标记的样本(x,y),但是无监督学习算法只需要input(x). 您将了解聚类 - 用于市场分割,文本摘要,以及许多其他应用程序. Principal Components Analy ...
- Kubernetes List-Watch
list-watch,作为k8s系统中统一的异步消息传递方式,对系统的性能.数据一致性起到关键性的作用. list-watch操作需要做这么几件事: 由组件向apiserver而不是etcd发起wat ...
- Go 语言defer用法
defer延迟调用: 1.确保调用在函数结束时发生: 2.defer列表为先进后出: 3.通常在Open/Close Lock/Unlock中使用. defer调用顺序示例: package mai ...