yolov2算法详解
yolov2原文叫《YOLO9000:Better, Faster, Stronger》
yolov2相对于yolo来说的优势就是文章题目所说的,更好,更快,更强。下面来看看yolov2如何达到这个目的的。
一、如何更快
1. 使用BN
随着BN的提出,且在各种网络大量的引入,yolov2引入了BN(batch normalization)。文章还发现BN不仅改善了网络性能,还有一定的正则化的作用,因此文章移除了yolo中使用的dropout操作。
关于BN具体的计算,可以参考BN及其改进算法
2. 输入分辨率高
在yolov1的时候采用的是224×224224 \times 224224×224大小的图片来进行分类任务,448×448448 \times 448448×448大小的图片来进行检测任务。
文章认为直接切换为高分辨率,可能对网络性能有所伤害。yolov2在使用了224×224224 \times 224224×224大小的图片训练的分类网络中,再用448×448448 \times 448448×448大小的图片来训练10轮分类网络,之后用得到的网络来训练检测网络。
3. 引入anchor
借助fasterrcnn的思想,预测坐标的偏移量比直接预测坐标更容易学习,所以yolov2引入anchor的思想。
fasterrcn预测方式如下:
x=(tx∗wa)+xax = (t_x * w_a) + x_ax=(tx∗wa)+xa
y=(ty∗ha)+yay = (t_y * h_a) + y_ay=(ty∗ha)+ya
上式中,x,y是预测的框中心,xax_axa、yay_aya是anchor框的中心点坐标,waw_awa、hah_aha是anchor框的宽和高,txt_xtx,tyt_yty是网络的输出。
注意:这里与yolo9000原文不同的是,上式中是‘-’号,但是按照fasterrcnn的公式推导其实应该为‘+’,这样更好理解
fasterrcnn这种训练方式对于txt_xtx和tyt_yty没有约束,使得训练早期坐标不容易稳定。
所以yolov2的预测方式如下:
bx=σ(tx)+cxb_x = \sigma(t_x) + c_xbx=σ(tx)+cx
by=σ(ty)+cyb_y = \sigma(t_y) + c_yby=σ(ty)+cy
bw=pwetwb_w = p_w e^{t_w}bw=pwetw
bh=phethb_h = p_h e^{t_h}bh=pheth
Pr(object)∗IOU(b,object)=σ(to)Pr(object) * IOU(b, object) = \sigma(t_o)Pr(object)∗IOU(b,object)=σ(to)
上式中,tx,ty,tw,th,tot_x,t_y,t_w,t_h,t_otx,ty,tw,th,to分别为预测参数,bx,by,bw,bhb_x,b_y,b_w,b_hbx,by,bw,bh为归一化的预测框的中心坐标和长宽,cx,cyc_x,c_ycx,cy是当前网格距离左上角的距离,该距离也为规划化后的距离,pw,php_w, p_hpw,ph表示anchor的长宽,σ\sigmaσ表示sigmoid函数。上述中的归一化指的是每个网格的长宽为1。这里可以看出因为加了sigmoid函数,使得预测出的σ(tx),σ(ty)\sigma(t_x),\sigma(t_y)σ(tx),σ(ty)始终为0-1的,就不容易造成训练早期的坐标不稳定了。
在yolov1中,因为每个网格负责预测两个框,对于大小为7×77\times 77×7大小的featuremap来说,yolov1只能预测出7∗7∗2=987 * 7 * 2 = 987∗7∗2=98个预测框。但是引入anchor后,对于13×1313 \times 1313×13的featuremap来说,可以预测出13∗13∗9=152113 * 13 * 9 = 152113∗13∗9=1521个预测框(这里假定使用更大的分辨率图像作为输入,且anchor类型有9累)。所以引入anchor对于模型性能的提升,增大了优化的空间。(虽然引入anchor,使得文章的map下降了,但是召回升高了很多)
4. anchor的定义
yolov2中anchor定义不同于fasterrcnn是人工预设的比例和大小,文中通过k-means来聚类出k类anchor类,文章最终k=5。这里聚类时距离的度量值如下定义:
d(box,centroid)=1−IOU(box,centroid)d(box, centroid)=1-IOU(box,centroid)d(box,centroid)=1−IOU(box,centroid)
上式中centroid为聚类中心,box为其它待聚类的框,IOU为iou计算公式。可以看出IOU越大,两个框越近。
5. 细粒度的特征(Fine-Grained Features)
为了对小物体有更好的检测效果,文章想直接利用更为精细的特征来检测小物体,所以在进行最终的下采样之前,引入了passthrough的方法,该方法利用了下采样之前的特征是的对小物体的检测更为精确。
关于passthrough方法,网友给出的图非常详细,如下图所示:
6. 多尺度训练
yolov1中对于检测任务采用的是448×488448 \times 488448×488来训练网络。yolov2为了适应多尺度的物体检测,网络的训练时采用多种图片尺寸,这些尺寸为32的倍数,有{320,352,...,608}\{320, 352, ..., 608\}{320,352,...,608}。训练过程中,每10个batches后随机选择这些尺度中的一个输入网络进行训练。
二、如何更快
文中提出了一个新的网络结构叫做Darknet-19,网络结构如下图所示。
表中展示的是分1000类的网络结构。
对于检测任务,网络结构相对上述分类结构有所改动。
- 使用了三个3∗33*33∗3输出通道为1024的卷积替代上表中最后的卷积操作(最后的卷积不是1000那个输出层,而是输出前那个1024层)
- 将最后的3∗3∗5123*3*5123∗3∗512输出的feature接上述的passthrough结构,利用更精细的特征
- 对于输出,因为预测5种anchor的回归结果,且每个框分20类的概率,1类是否为正样本的概率和4个坐标回归参数共25个参数,每个anchor点需要预测125个值。
三、更强
文章的这部分主要是用来证明yolov2有较强的特征提取性能,采用了一些整理标签的方法,融合了COCO和Imagenet来做一些实验。
参考
- https://arxiv.org/abs/1612.08242
- https://zhuanlan.zhihu.com/p/47575929
- https://zhuanlan.zhihu.com/p/35325884
yolov2算法详解相关推荐
- Scale-Transferrable Object Detection算法详解(基于多尺寸目标检测)
Scale-Transferrable Object Detection算法详解 论文背景 算法背景 算法简介 算法对比 算法详解 网络结构 DenseNet STM Object Localizat ...
- Matlab人脸检测算法详解
这是一个Matlab人脸检测算法详解 前言 人脸检测结果 算法详解 源代码解析 所调用函数解析 bwlabel(BW,n) regionprops rectangle 总结 前言 目前主流的人脸检测与 ...
- 图论-最短路Dijkstra算法详解超详 有图解
整体来看dij就是从起点开始扩散致整个图的过程,为什么说他稳定呢,是因为他每次迭代,都能得到至少一个结点的最短路.(不像SPFA,玄学复杂度) 但是他的缺点就是不能处理带负权值的边,和代码量稍稍复杂. ...
- C++中的STL算法详解
1.STL算法详解 STL提供能在各种容器中通用的算法(大约有70种),如插入.删除.查找.排序等.算法就是函数模板,算法通过迭代器来操纵容器中的元素.许多算法操作的是容器上的一个区间(也可以是整个容 ...
- 粒子群(pso)算法详解matlab代码,粒子群(pso)算法详解matlab代码
粒子群(pso)算法详解matlab代码 (1)---- 一.粒子群算法的历史 粒子群算法源于复杂适应系统(Complex Adaptive System,CAS).CAS理论于1994年正式提出,C ...
- 基础排序算法详解与优化
文章图片存储在GitHub,网速不佳的朋友,请看<基础排序算法详解与优化> 或者 来我的技术小站 godbmw.com 1. 谈谈基础排序 常见的基础排序有选择排序.冒泡排序和插入排序.众 ...
- 目标检测 RCNN算法详解
原文:http://blog.csdn.net/shenxiaolu1984/article/details/51066975 [目标检测]RCNN算法详解 Girshick, Ross, et al ...
- Twitter-Snowflake,64位自增ID算法详解
Twitter-Snowflake,64位自增ID算法详解 from: http://www.lanindex.com/twitter-snowflake%EF%BC%8C64%E4%BD%8D%E8 ...
- 数据结构与算法详解目录
数据结构与算法详解是一本以实例和实践为主的图书,主要是经典的数据结构与常见算法案例,来自历年考研.软考等考题,有算法思路和完整的代码,最后提供了C语言调试技术的方法. 后续配套微课视频. 第0章 基 ...
最新文章
- 玩转“网上邻居”之网络配置(二)
- sae mysql django_Python+Django+SAE系列教程12-----配置MySQL数据库
- 想要快速获客?送你 2 个小程序互推方法
- 13.MapReduce第3部分(编程实践WordCount)
- intellij远程调试_IntelliJ中的远程调试Wildfly应用程序
- Django之管理权限
- 作者:海沫,女,博士,中央财经大学信息学院副教授,CCF高级会员。
- ae2021最新遮罩路径图形扭曲插件:BAO Boa for Mac
- 雷军:智能制造将进一步带动中国企业在全球市场的全面崛起
- java中未解决的编译问题_java – 我遇到了这个异常:未解决的编译问题
- Mybatis之插入ListT
- 关于平面设计知识,设计师需要懂得印刷常识——黎乙丙
- Nacos连接不上:Ignore the empty nacos configuration and get it based on dataId
- 苹果系统安全吗?7种方法保护自己的隐私
- 数字电子钟仿真软件中的电路测试,如何利用Multisim仿真软件进行数字电子钟设计...
- 网站镶嵌网站显示代码
- PostgreSQL 源码解读(160)- 查询#80(如何实现表达式解析)
- 安卓 broadcast简介理解
- python的说法中错误的是_【单选题】下列关于python的说法中,错误的是( )。...
- android 辐射动画_Android仿微信雷达辐射搜索好友(逻辑清晰实现简单)
热门文章
- 开源的在线培训/在线考试/在线网校/企业内训系统介绍
- Google Adsense的愚人节整蛊
- 熵相似_高熵合金领域高被引的11篇文章,给过你那些启示?
- 用Html5实现天气预报的原理,HTML5 Canvas和jQuery实时天气预报代码解析「附源码」...
- 基于多源大数据的实时公共交通服务指数研究:以天津市为例
- 2021-11-11阿里巴巴双十一高峰如何逆袭,高并发秘诀
- vue加减计数器小案例
- linux tar.gz zip 解压缩命令
- 两个月备战PMP经验总结(转)
- 能否用双边市场理论研究虚拟化市场