机器学习: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 ...
随机推荐
- 通过js代码来制作数据库增删改查插件
代码流程 1.订制表头:table_config 2.订制显示内容: table_config,data_list 3.加载框: 图片,position:fixed 4.-字符串格式化 ...
- 剑指offer 面试12题
面试12题: 题目:矩阵中的路径 题:请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径.路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格 ...
- notepad++运行python代码
notepad++运行代码 在菜单栏中点击运行或按F5,在弹出的对话框中输入下面命令 cmd /k E:\py3.6\python.exe "$(FULL_CURRENT_PATH)&quo ...
- docker学习笔记1-- 用Toolbox安装Docker--介绍Docker Machine
使用的是Docker Toolbox,非Docker for Windows 一.docker的认识与安装(windows安装) http://blog.csdn.net/tina_ttl/artic ...
- window + document + height
jQuery(window).height()代表了当前可见区域的大小,而jQuery(document).height()则代表了整个文档的高度,可视具体情况使用. 注意当浏览器窗口大小改变 ...
- UVA11383 Golden Tiger Claw
题目 UVA11383 Golden Tiger Claw 做法 \(KM\)好题啊,满足所有边\(l(x)+l(y)≥w(x,y)\)(个人理解,如不对请及时留言),这样能满足\(\sum\limi ...
- ACM训练小结-2018年6月16日
今天题目情况如下:A题:线段树+XOR性质.情况:由于写法问题,调试困难,浪费大量时间.B题:(对所有满足i mod p==q,求a[i]之和),无修改,直接上n*sqrt(n)的分块写法.情况:由于 ...
- memcached 高级机制(一)
memcached的高级机制 memcached内存机制 (1)我们知道操作系统对进程的处理方法,在多进程并发的操作系统中,程序的执行不可避免的会产生碎片.同样对于memcached,在存储value ...
- [RK3288][Android6.0] 调试笔记 --- user版本默认显示开发者选项【转】
本文转载自:https://blog.csdn.net/kris_fei/article/details/70157137 Platform: ROCKCHIPOS: Android 6.0Kerne ...
- mysql慢查询设置
不同版本的mysql命令和配置不一样,以下是2个版本 修改配置文件 log-slow-queries=/alidata/mysql-log/mysql-slow.log long_query_time ...