机器学习: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 ...
随机推荐
- "深入理解C语言" 指针
本文对coolshell中的"深入理解C语言"这篇文章中提到的指针问题, 进行简要的分析. #include <stdio.h> int main(void){ ]; ...
- Javascript 广告浮动效果在浏览器中间N秒后移动到右下角
Javascript 广告浮动效果在浏览器中间N秒后移动到右下角 闲着无聊做了一个,本人原创...就是这个页面的广告效果....怎么样???? 刚刚学习的javascript
- 【转】Python爬虫(6)_scrapy框架
官网链接:https://docs.scrapy.org/en/latest/topics/architecture.html 性能相关 在编写爬虫时,性能的消耗主要在IO请求中,当单进程单线程模式下 ...
- Django 补充models操作,中间件, 缓存,信号,分页
1.Model 一对多 补充 models如下: class UserType(models.Model): caption = models.CharField(max_length=16) cla ...
- Loadrunder脚本篇——Run-time Settings之Browser Enmulation
浏览器模拟 所有Internet Vuser Header包含一个标识将被模拟的浏览器类型(或无线工具包)的User Agent header.例如User-Agent: Mozilla/3.01Go ...
- VM上安装苹果虚拟机
用了太久的Windows系统,看着Mac OS X的惊艳,相信很多朋友也和我一样,总想着能把玩一把Mac OS X系统吧?如果只是为了体验一下Mac OS X系统而购买一套Mac电脑,那是土豪做的事. ...
- 如何在IAR中配置CRC参数(转)
源:如何在IAR中配置CRC参数 前言 STM32全系列产品都具有CRC外设,对CRC的计算提供硬件支持,为应用程序节省了代码空间.CRC校验值可以用于数据传输中的数据正确性的验证,也可用于数据存储时 ...
- 利用paramiko获取上传下载远程服务器的资源信息
# -*- coding: utf-8 -*- import paramikohostname='192.168.76.10'username='root'password='123456'param ...
- RabbitMQ解决分布式事务
案例:经典案例,以目前流行点外卖的案例,用户下单后,调用订单服务,让后订单服务调用派单系统通知送外卖人员送单,这时候订单系统与派单系统采用MQ异步通讯. RabbitMQ解决分布式事务原理: 采用最终 ...
- js,java,ajax实现跨域访问及其原理
http://blog.csdn.net/saytime/article/details/51540876 这篇文章对跨域访问做了较为细致得分析,我这里做下简单总结 1.实现跨域访问原理: 浏览器由于 ...