因为最近在复习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. docker轻量级监控-sysdig

    sysdig Sysdig = system(系统)+dig(挖掘).Sysdig 是一个开源系统发掘工具,用于系统级别的勘察和排障,可以把它看作一系列Linux系统工具的组合,主要包括: strac ...

  2. Vue框架简介及简单使用

    目录 一.前端框架介绍 二.vue框架简介 三.vue使用初体验 1. vue如何在页面中引入 2. 插值表达式 3. 文本指令 4. 方法指令(事件指令) 5. 属性指令 四.js数据类型补充 1. ...

  3. 第34天学习打卡(GUI编程之组件和容器 frame panel 布局管理 事件监听 多个按钮共享一个事件 )

    GUI编程 组件 窗口 弹窗 面板 文本框 列表框 按钮 图片 监听事件 鼠标 键盘事件 破解工具 1 简介 GUi的核心技术:Swing AWT 1.界面不美观 2.需要jre环境 为什么要学习GU ...

  4. 算法 - 链表操作思想 && case

    算法 - 链表操作题目套路 前面这一篇文章主要讲链表操作时候的实操解决方式,本文从本质讲解链表操作的元信息,学完后,再也不怕链表操作题目了. 1.链表的基本操作 链表的基本操作无外乎插入,删除,遍历 ...

  5. java中ArrayList 和 LinkedList 有什么区别

    转: java中ArrayList 和 LinkedList 有什么区别 ArrayList和LinkedList都实现了List接口,有以下的不同点:1.ArrayList是基于索引的数据接口,它的 ...

  6. PUToast - 使用PopupWindow在Presentation上模拟Toast

    PUToast Android10 (API 29) 之前 Toast 组件默认只能展示在主 Display 上,PUToast 通过构造一个 PopupWindoww 在 Presentation ...

  7. 记一次Drone无法触发构建的问题

    问题 好巧不巧,当你晚上准备上线的时候,在下午临近下班的时候CI&CD工具出问题了,提交代码不能触发构建,不能上线了,Drone平台那边也下班了,正好CICD依赖的公司git仓库也出问题了(就 ...

  8. rest framework Views

    基于类的意见 Django的基于类的意见是从旧式的观点颇受欢迎. - Reinout面包车里斯 REST框架提供了一个APIView类,它的子类Django的View类. APIView类是从正规不同 ...

  9. JS五种绑定彻底弄懂this,默认绑定、隐式绑定、显式绑定、new绑定、箭头函数绑定详解(转载)

    目录 壹 ❀ 引 贰 ❀ this默认绑定 叁 ❀ this隐式绑定 1.隐式绑定 2.隐式丢失 肆 ❀ this显式绑定 伍 ❀ new绑定 陆 ❀ this绑定优先级 柒 ❀ 箭头函数的this ...

  10. 订单退款&重复支付需求疑问点归纳整理

    更新历史记录: 更新内容 更新人 更新时间 新建 Young 2020.12.10  16:45 更新产品疑问解答 Young 2020.12.11  10:14 更新退款权益终止时间 Young 2 ...