机器学习: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 ...
随机推荐
- Python操作——Redi
redis是一个key-value存储系统. 和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(列表).hash(哈希).set(集合).zset(有 ...
- Web Deploy 安装及问题解决
注意: 站点名称: 服务器上IIS的站点名称. . 我之前这里随便写一直不成功. 返回500..... 用户名, 密码: 这里最好用windows帐号. 问题比较少. 目标URL: 可不写. 可 ...
- Loadrunder脚本篇——关联数组(参数数组)
导言 前面说过可以用关联取出服务器相关的一些动态变化的信息,前面也提过web_reg_save_param中可以设置ord=all,代表从服务器中取出的是一个数组,它试用的场景是当我访问一个发帖网站, ...
- Swift进阶 - 12个技巧
听说你已经学习Swift几个月了,有没有想更进一步成为Swift高手的想法?我这里有11招秘技,各位施主且听我慢慢道来,结个善缘. 1. 扩展(Extension) 任务: 求数字的平方. // 菜鸟 ...
- windows下查看静态库和动态库的导出函数
在window下查看动态库的导出函数可以用vs自带的Depends工具: 查看静态库的信息要用命令行来实现: dumpbin /LINKERMEMBER Test.lib > 1 ...
- P3825 [NOI2017]游戏
题目 P3825 [NOI2017]游戏 做法 \(x\)地图外的地图好做,模型:\((x,y)\)必须同时选\(x \rightarrow y,y^\prime \rightarrow x^\pri ...
- 20165101刘天野 2017-2018-2 《Java程序设计》第6周学习总结
#20165101刘天野 2017-2018-2 <Java程序设计>第6周学习总结 教材学习内容总结 第八章:常用实用类 String类:不可变类,一些看起来能够改变String的方法其 ...
- Centos 一次卸载多个RPM包
rpm 不支持通配符,可以使用 xargs来接收多个变量 示例,一次性卸载所有 erlang先关的rpm包: rpm -qa | grep erlang | xargs rpm -e --nodeps
- 新建maven web后controller不能被扫描到
1.新建maven web 子工程 2.修改web.xml. 3.resources下建立spring.xml与springmvc.xml. 4.spring.xml删除对controller的扫描. ...
- Elasticsearch6.0简介入门介绍
Elasticsearch简单介绍 Elasticsearch (ES)是一个基于Lucene构建的开源.分布式.RESTful 接口全文搜索引擎.Elasticsearch 还是一个分布式文档数据库 ...