前言

首先,yolov2比yolov1改进的地方有许多,使得yolov2在性能指标上有很大的改进。

  1. 速度方面更快
  2. 召回率更高

下图是yolov2采用各种改进方法的mAP指标。

相比于yolov1的改进

yolov1

1. Better

1. Batch Normalization

Batch Normalization可以使模型在收敛方面速度更快,因为Batch Normalization有利于正则化的作用,所以可以不需要再添加任何正则化的操作。在yolov2中Batch Normalization在所有卷积层所添加,同时在mAP指标上提升了2%。

2. High Resolution Classifier

yolov1使用的分辨器是224 x 244的,这对于之后检测448 x 488图片的效果并不是很好,所以yolov2使用了更高的分辨率的预训练模型,在mAp上提升了4%。

3. Convolutional With Anchor Boxes

yolov1是在特征层中直接使用全连接层来预测边界框的位置。在RPN中,由于预测层是卷积的,RPN预测特征图中每个位置的这些偏移量,并使网络更容易学习。yolov2就借鉴了这一点。

在yolov2中,我们把全连接移除了,并使用了anchor box来预测边界框。首先yolov2移除了一个池化层,使得网络的输出有更高的分辨率,同时将448 x 488 的输入图片变成了 416 x 416的输入图片,因为这样做网络的输出是由14 x 14 变成了 13 x 13,在预测大物体时,大物体中心更容易落在中心的网络,而不是中心四个网络的附近。

在使用了anchor boxes后虽然mAp由69.5下降到了69.2,但是Recall由81%到88%。

4. Dimension Clusters

使用更好的anchor boxes可以使网络更加容易学习,但是现在的anchor boxes一般都是手工给出的。于是,yolov2使用k-means算法将训练集中的真实框进行聚类,最后选择了5种anchor box。yolov2使用的k-means算法不是使用传统的欧式距离,是因为欧式距离对于大的框来说误差更大,于是利用IOU作为指标进行聚类,公式如下:
d(box,centroid)=1−IOU(box,centroid)d(box, centroid) = 1 − IOU(box, centroid)d(box,centroid)=1−IOU(box,centroid)

同时yolov2沿用了yolov1的做法,每个网格负责预测物体的中心,而且每个网络用了5种通过聚类得到的anchor box,训练阶段时yolov2就会使用与anchor box与真实框IOU最大的框来进行调整。

下图左边是k-means中平均IOU随K的值变化,右图是k-means算法在COCO数据集和VOC2007数据集得到的五个anchor boxes。

5. Direct location prediction

yolov2预测坐标时,使用如下公式:
bx=σ(tx)+cxb_x = σ(t_x) + c_xbx​=σ(tx​)+cx​ …(1)
by=σ(ty)+cyb_y = σ(t_y) + c_yby​=σ(ty​)+cy​ …(2)
bw=pwetwb_w = p_we^{t_w}bw​=pw​etw​ …(3)
bh=phethb_h = p_he^{t_h}bh​=ph​eth​ …(4)

其中:
tx,ty,tw,tyt_x, t_y, t_w, t_ytx​,ty​,tw​,ty​ 为预测的中心点和宽高。
cx,cyc_x, c_ycx​,cy​ 为网格的左上角坐标。
pw,php_w, p_hpw​,ph​ 为其中一个anchor box的宽高。
σ()σ()σ()代表经过sigmoid函数变换

第一、第二个公式经过sigmoid函数变换,将预测值缩放到[0, 1],将偏移量相对于网格,使得网络只能在网格内学习,就不用再网络外学习,使得yolov2对于yolov1学习更快。而加上 cx,cyc_x, c_ycx​,cy​ 就可以得到真正的边界框的坐标。

第三、第四个公式,anchor box经过指数变换的微调就可以得到边界框的宽高。

经过anchor boxes的kmeans算法后,yolov2的Recall提升了5%。

6. Fine-Grained Features

yolov2是在13 x 13 的特征图上进行检测,这对于大物体是足够的,但是对于小物体可能还需要更细小的划分,所以yolov2提出了一种passthrough层来利用更精细的特征图,yolov2会在26 x 26的特征图上来对之后的特征层进行融合。passthrough层与ResNet网络的shortcut类似,以前面更高分辨率的特征图为输入,然后将其连接到后面的低分辨率特征图上。对于26 × 26 × 512 的特征图,经passthrough层处理之后就变成了13 × 13 × 2048的新特征图。对于26 × 26 × 512的特征图,经passthrough层处理之后就变成了13 × 13 × 2048。这样做之后yolov2的性能有了2%的提升。

7. Multi-Scale Training

yolov2采用了多尺度训练以适应不同尺度大小的图片。过程就是每隔一定的轮次将图片大小改变,因为yolov2的下采样因子是32,所以需要32倍数大小的图片来进行训练。各个尺度大小模型的性能如下:

2. Faster

1. Darknet-19

Darknet-19的网络结构如下:

画红色框的部分是在目标检测中使用网络结构。

代码演示

来自下面这位大神
网址:https://www.maskaravivek.com/post/yolov2/

VOC2007数据集

链接:https://pan.baidu.com/s/1mhk3OItyGt5CuRcX8Nj3cw
提取码:a697

YoloV2学习小总结相关推荐

  1. June:Datawhale开源学习小程序升级啦!

    1. 开源学习小程序的使用 我们通过七个视频来介绍如何使用Datawhale开源学习小程序. 第一个视频:完善个人信息+报名 组队学习报名前,请大家完善个人信息的填写,便于结课后证书发放. 切换到组队 ...

  2. 六一:如何在Datawhale开源学习小程序中管

    我们的组队学习马上就要开营了,本次组队学习与以往不同的是小程序中增加了队伍管理的功能. 为了方便大家组队,Datawhale的 六一同学 为大家准备了在Datawhale开源学习小程序中队伍管理的教程 ...

  3. 如何在Datawhale开源学习小程序中创建队伍?

    我们的组队学习马上就要开营了,本次组队学习与以往不同的是小程序中增加了组队的功能.为了方便大家组队,Datawhale的 六一同学 为大家准备了在Datawhale开源学习小程序中创建队伍的教程. S ...

  4. 深度学习小技巧(二):如何保存和恢复scikit-learn训练的模型

    深度学习小技巧(一):如何保存和恢复TensorFlow训练的模型 在许多情况下,在使用scikit学习库的同时,你需要将预测模型保存到文件中,然后在使用它们的时候还原它们,以便重复使用以前的工作.比 ...

  5. 【计算机本科补全计划】Mysql 学习小计(2)

    正文之前 昨天下午写了篇 Mysql学习小计,结果出乎意料的受欢迎?变相刺激了我多写点 Mysql?好吧,如尔所愿.我晚上反正还不知道学点啥,就把今天看的那个菜鸟教程学完吧,到时候估计一点了,就可以睡 ...

  6. Vue学习小案例--分页组件封装

    文章目录 Vue学习小案例--分页组件封装 修改成Vue(使用组件) Vue学习小案例–分页组件封装 index.html <!DOCTYPE html> <html lang=&q ...

  7. 小甲鱼c语言课后作业_知识,就是力量——山财“学习小课堂”助你蓄力

    编者按 少年,你渴望 知识的力量 吗? 我们有山财最全的学习秘籍, 只待你的耐心翻阅与潜心修炼! 接下来,就让我们一起查收学习干货~ 内容摘要 本系列推送分为 [悦览篇][干货篇][招募篇] 三大模块 ...

  8. c语言设计底层,【学习小总结】C语言的底层开发

    [学习小总结]C语言的底层开发 (2011-05-04 20:46:15) 标签: 底层开发 杂谈 程序设计可以根据开发的对象的不同,可以分低级程序设计和高级程序设计.既然,有人把高级程序设计概括成& ...

  9. Android学习小Demo(10)ToDoList的改进版之ViewPager显示多个图片

    在TodoList增强版的增加界面上,为了显示图片,我是挖了两块地方,放了两个ImageButton,来显示图片,而且限制了最多只能放两张图片.当两个View都放置图片之后,我就会把"Gal ...

最新文章

  1. springboot map数据类型注入_SpringBoot结合策略模式实战套路
  2. python爬虫之路自学教程_python 爬虫学习之路
  3. 《深入理解LINUX网络技术内幕》小记1
  4. python版本切换_Ubuntu18.04下python版本完美切换的解决方法
  5. JAVA月数输入24回车后变成12_Java语言程序设计(一)自考2012年10月真题
  6. 用 vue-route 的 beforeEach 实现导航守卫(路由跳转前验证登录)
  7. java中函数_java中的函数
  8. Xshell中文乱码问题
  9. 【语音信号处理四】DTW算法
  10. UCGUI的消息处理
  11. 【图像处理】换脸技术哪家强?Python来挑战,一键换脸,毫无破绽~
  12. 树莓派4B安装中文输入法(Googlepinyin)
  13. java 获取今天是星期几
  14. windows2016服务器优化,Windows server 2016性能调优问题
  15. C# 电子印章制作管理系统
  16. 旧金山启用安保机器人巡逻街道引发争议
  17. 怎么和你的老板谈工资
  18. mysql 单表最多能存多少数据?
  19. 产品设计思维导图模板
  20. GOF——建造者模式

热门文章

  1. Linux的qt安装包下载
  2. Android 安卓人脸识别(百度人脸识别)快速集成采坑
  3. 评价方法-熵权法确定指标权重
  4. jQuery on()
  5. 视频教程-ArcGIS for JavaScript-JavaScript
  6. nginx学习笔记1(小d课堂)
  7. Android如何获取第三方app的控件id
  8. cpth计算机组成原理实验,计算机组成原理实验指导书-CPTH
  9. 2.4gwifi能跑满100m宽带吗_我的宽带是100兆,2.4g的路由器可以完全发挥出来吗,要用5g的吗?...
  10. 移动软交换技术在3G核心网中的实现