因为最近在复习yolo系列的算法,就借着这个机会总结一下自己对这个算法的理解,由于是第一次写算法类的博客,文中有什么错误和行文不通的地方还希望大家指正。

yolov2与yolov1有很多改变。

最重要的改动:引入了anchor机制。v1通过最后接一个全连接层直接输出bbox的坐标。在yolov2中参考了fast-rcnn中的先验框机制,通过卷积层来学习anchor的offsets避免了全连接层。为了试应anchor这一操作,作者在网络中移除了一个池化层,来获得更高的网络输出,并且为了得到奇数个grid cell,将网络的的输入分辨率从448转为416.yolo网络降采样32倍,所以最后输出是13x13. 在引入了anchor机制后,每一个anchor都生成类别与空间的预测,而不是yolov1中每一个grid cell生成一个Bx5+C的预测,这一点的引入加强了yolo对密集小目标的检测。在加入anchor后一张图从原来生成98个boxes改为生成上千个anchor boxes。这样做网络的Accuracy有所下降,但是recall召回率得到了显著的提升,因为目前在自动驾驶行业工作,联想到特斯拉之前在高速高速公路上把正样本识别成负样本所以在我看来自动驾驶中的目标检测召回率是要比准确率更重要的一个指标。

使用k-means聚类得出anchor。在距离时如果修正函数选择的还是欧氏距离的话,就会产生那个很经典的问题,大的目标框会比小目标框产生更大的error。所以为了使聚类时的distance不受框的大小影响,作者使用的一种新的距离计算方式:

这一操作有效的提高了最后结果的avg IOU,在自动驾驶的视觉方面,最后检测框的位置精度很大程度上会影响测距的精度。

对于 location predict输出内容的修改:对比RPN结构,RPN输出的是对anchor box的偏移量,这导致在模型训练初期会有很多bbox出现在图像的任意位置,这导致了训练初期模型的不稳定性,就是的训练需要更长的时间达到收敛。yolov2使用了对grid cell的偏移量来作为最后结果的输出,这使得与ground truth的差别落在了0和1直接,并在后面使用了sigmoid作为激活函数来限制输出。

最后网络输出5个值 tx ty tw th 和to,其中tx ty是之前介绍过的对于grid cell的偏移量,tw和th是对预测框的宽高和anchor的修正值。to是和yolov1一样是判定是否在grid cell中有物体并计算iou。最后输出预测框结果如下:

其中Cx和Cy是产生这个bbox的grid cell对于图像左上角的偏移量。pw和ph是anchor的宽和高。

使用了更细颗粒化的特征图:yolov2没有像ssd那样使用多尺度的特征图来产生anchor去使用不同大小的物体。而实使用了passthrough层来结合之前的26x26的特征图来讲最后的head部分特征图更finer-grained。

动态调整输入图片大小:由于yolov2的主干网络只使用了卷积层和池化层,这使得网络可以动态的调整特征图大小。为了使算法在不同分辨率上的图片表现的更好,在训练阶段,作者采用的了每10个batch就改变一下输入图像的尺度,因为网络的降采样是32倍,所以输入也都是32的倍数,从308到608.

backbone方面的改变:

YOLOV2中作者提出了自己的网络Darknet-19,而不是像v1中在googLEnet上做修改。正如绝大多数目标检测算法的backbone一样,darknet是一个分类网络,它把最后的全连接层换成了global average pooling层再接softmax层。整个网络只有卷积层和池化层,所以可以对输入灵活修改。下图为darknet的网络结构:

yolov2在每一个卷积层后都加入了BN层,在加入bn层后移除了训练中dropout的操作

yolov2在分类数据集ImageNet上预训练模型时直接使用了448x448分辨率的网络输入。在yolov1中预训练模型时输入的分辨率是224x224,在检测时才把分辨率转换成448x448

整个网络使用了19个卷积层和5个池化层。目前深度学习的网络设计思路就是加深加多参数,然后再去解决过拟合问题。

yolov2算法浅见的更多相关文章

  1. yolo2详解

    转自:https://blog.csdn.net/u014380165/article/details/77961414 YOLOV2要是YOLO的升级版(Better faster) Better ...

  2. AI佳作解读系列(二)——目标检测AI算法集杂谈:R-CNN,faster R-CNN,yolo,SSD,yoloV2,yoloV3

    1 引言 深度学习目前已经应用到了各个领域,应用场景大体分为三类:物体识别,目标检测,自然语言处理.本文着重与分析目标检测领域的深度学习方法,对其中的经典模型框架进行深入分析. 目标检测可以理解为是物 ...

  3. 检测算法简介及其原理——fast R-CNN,faster R-CNN,YOLO,SSD,YOLOv2,YOLOv3

    1 引言 深度学习目前已经应用到了各个领域,应用场景大体分为三类:物体识别,目标检测,自然语言处理.本文着重与分析目标检测领域的深度学习方法,对其中的经典模型框架进行深入分析. 目标检测可以理解为是物 ...

  4. Adaboost 算法的原理与推导

    0 引言 一直想写Adaboost来着,但迟迟未能动笔.其算法思想虽然简单“听取多人意见,最后综合决策”,但一般书上对其算法的流程描述实在是过于晦涩.昨日11月1日下午,邹博在我组织的机器学习班第8次 ...

  5. 目标检测网络之 YOLOv2

    YOLOv1基本思想 YOLO将输入图像分成SxS个格子,若某个物体 Ground truth 的中心位置的坐标落入到某个格子,那么这个格子就负责检测出这个物体. 每个格子预测B个bounding b ...

  6. 【深度学习】目标检测算法总结(R-CNN、Fast R-CNN、Faster R-CNN、FPN、YOLO、SSD、RetinaNet)

    目标检测是很多计算机视觉任务的基础,不论我们需要实现图像与文字的交互还是需要识别精细类别,它都提供了可靠的信息.本文对目标检测进行了整体回顾,第一部分从RCNN开始介绍基于候选区域的目标检测器,包括F ...

  7. yolo类检测算法解析——yolo v3

    每当听到有人问“如何入门计算机视觉”这个问题时,其实我内心是拒绝的,为什么呢?因为我们说的计算机视觉的发展史可谓很长了,它的分支很多,而且理论那是错综复杂交相辉映,就好像数学一样,如何学习数学?这问题 ...

  8. 目标检测算法之YOLOv1与v2

    YOLO:You Only Look Once(只需看一眼) 基于深度学习方法的一个特点就是实现端到端的检测,相对于其他目标检测与识别方法(如Fast R-CNN)将目标识别任务分成目标区域预测和类别 ...

  9. ubuntu yolov2 训练自己的数据集

    项目需求+锻炼自己,尝试用yolov2跑自己的数据集,中间遇到了很多问题,记下来防止忘记 一.数据集 首先发现由于物体特殊没有合适的现成的数据集使用,所以只好自己标注,为了减少工作量,先用opencv ...

随机推荐

  1. 【Notes_9】现代图形学入门——光线追踪(基本原理)

    跟着闫令琪老师的课程学习,总结自己学习到的知识点 课程网址GAMES101 B站课程地址GAMES101 课程资料百度网盘[提取码:0000] 目录 光线追踪 为什么要光线追踪 soft shadow ...

  2. 后端程序员之路 29、Thrift

    Apache Thrift是Facebook实现的一个高效的.支持多种编程语言的远程服务调用(RPC)框架. Apache Thrift - Homehttp://thrift.apache.org/ ...

  3. powerdesigner 16.6破解版下载,支持hive,数据模型hql导出

    powerdesigner 16是一款业内领先的建模工具,是一款开发人员常用的数据库建模工具. 在大数据数据仓库建设过程中,离线数仓往往以hive为基础,但数仓建模过程中老版本不支持hive,这个模型 ...

  4. 剑指 Offer 48. 最长不含重复字符的子字符串 + 动态规划 + 哈希表 + 双指针 + 滑动窗口

    剑指 Offer 48. 最长不含重复字符的子字符串 Offer_48 题目详情 解法分析 解法一:动态规划+哈希表 package com.walegarrett.offer; /** * @Aut ...

  5. mysql内一些可以布尔盲注的查询语句

              一.left() 首先需要 use security;  这个数据库,然后进入之后再使用查询语句: 此时再使用: select left(database(),1)='s';    ...

  6. SQL注入绕过waf的一万种姿势

      绕过waf分类: 白盒绕过: 针对代码审计,有的waf采用代码的方式,编写过滤函数,如下blacklist()函数所示: 1 ........ 2 3 $id=$_GET['id']; 4 5 $ ...

  7. locust工具使用详解

    今年负责部门的人员培养工作,最近在部门内部分享和讲解了locust这个工具,今天再博客园记录下培训细节 一.简介 1.优势 locust是python语言开发的一款的开源的的性能测试框架,他比jmet ...

  8. vue离开页面销毁滚动事件

    methods:{ handleFun(){    /**销毁处理*/ } }, beforeDestroy(){ window.removeEventListener("scroll&qu ...

  9. 任务4 PHP扩展模块安装

    /usr/local/php/bin/php -m //如何查看PHP加载了哪些模块 #cd  /usr/local/src #wget http://pecl.php.net/get/redis-2 ...

  10. T1215拯救公主

    1 #include <cstdio> 2 #include <queue> 3 #include <set> 4 #include <cstring> ...