yolov2学习笔记
Yolov2学习笔记
yolov2在yolov1的基础上进行一系列改进:
1.比如Batch Normalization,High Resolution Classifier,使用Anchor Boxes,使用聚类生成anchor,使用passthrough layer进行特征融合等
2.改进yolov1中的Darknet-19
3.使用词树,使他能够训练更多类别物体
总览


- Yolov2与其检测方法的对比
- 最靠近虚线的蓝点为下图中544×544尺度的
Better
Batch Normalization

- 在Yolov2作者在每个卷积层加上了BN层
- 使用BN层好处:1.map提高2%,2.不用使用dropout
- 可以单独对每个特征进行normalizaiton,每个特征都有均值为0,方差为1
- BN使得网络中每层输入数据的分布相对稳定,加速模型学习速度
- BN使得模型对网络中的参数不那么敏感,简化调参过程,使得网络学习更加稳定
总的来说,BN通过将每一层网络的输入进行normalization,保证输入分
布的均值与方差固定在一定范围内,减少了网络中的Internal
Covariate Shift问题,并在一定程度上缓解了梯度消失,加速了模型收
敛;并且BN使得网络对参数、激活函数更加具有鲁棒性,降低了神经网络
模型训练和调参的复杂度;最后BN训练过程中由于使用mini-batch的
mean/variance作为总体样本统计量估计,引入了随机噪声,在一定程度
上对模型起到了正则化的效果。
High Resolution Classifier

- 采用更高的分辨率能够提升4%的map
- 同时每10个epochs调整一下分辨率,能够使网络有时间来调整filiters来适应高的resolution输入
Convolutional with anchor boxes

- 使用anchor,虽然map降低0.3但是他的recall提升7%,使得模型有较大的提升空间
Dimension Clusters

- 不同于faster-rcnn使用直接定义出anchor的大小和宽高比,这里使用k-means聚类生成anchor
- 基于训练集中的所有边界框 YOLO2尝试统计出更符合样本中对象尺寸的先验框
- yolov2不是使用传统k-means聚类的欧几里得距离,而是使用下图的方式,因为欧几里得对于小的boxe产生更大的误差,而下面的方式对于box的尺寸使独立的

- 这里的聚类k=5,是在模型复杂性和高的recall的一个平衡

- 后面作者也和传统的hand-picked进行对比说明这种方式更好
Direct location prediction

- 这里作者使用函数对tx,ty进行限制是想要对应的点落入对应的cell中
Fine-Grained Features

- 这里作者将高层信息和底层信息进行了一个融合(通过passthrough layer进行实现),这样操作一下map提高1%

右边经过convolution 64 1×1【这里的实现细节与原论文有些差异】的降维处理(将深度从512压缩到64),
经过右边的PassThrough后宽高变为一半chanel变成4倍
最后将其与13×13×1024的进行深度上的拼接(将底层特征与高层特征进行融合)
- 实现细节

这里是一个4×4的特征矩阵。这里有4个小方格,
对于每一个小方格,在相同的位置用相同的颜色进行标注,然后再将每一个小方格
的数字进行分离,得到右边4个特征图。
经过passThrough layer后width,height变为1半,chanel变成4倍
Multi-Scale Training

- 为了提高yolov2的鲁棒性,作者将图片缩放到不同尺度来训练模型
- 每迭代10个batch将网络的输入尺寸进行随机的选择
疑问??输入不同的尺寸后如何改变主干网络的step,padding等
答:we change the network every few iterations
由于缩放因子是32
(如上图的网络架构最开始的416除以最后的13等于32)
所以我们输入的尺度全部是32的整数倍。
所以最小是320,最大是608
Faster部分
- 网络详细结构图

- Darknet-19

- 更改后的

移除Darknet-19最后一层卷积层,用3个3×3的卷积层(1024个filters)替代
每个后面接一个1×1的卷积层(为了将通道数改成我们需要的)
- 这里size只标了大小默认步距等于1,padding等于1
注意:这里右边的Convolutional不包含偏振项(bias),因为加入BN层后bias不起任何作用,最后的一个卷积没有BN也没有LeakyRelu
上图左边125个卷积核的由来:5(anchor的个数)×(5[4个坐标+1个confidence]+20个类别的概率分数)
Stronger部分


- 使用检测图片做检测部分事情(坐标和类别),使用分类图片做分类部分事情(类别)
- 混合检测和分类的图片,当看到检测的图片方向传播整个loss(分类和检测),当看到分类图片仅仅传播分类部分的loss
- 检测部分有通用标签(dog/boat),分类部分有更大更详细标签(类如dog有norfolk terrier,Yorkshire terrier),Figure6展示了将这些融合起来
- 同时树从顶部到底部可以计算可能性,Figure5的每个颜色的softmax可以对应到树上。
训练过程中ground truth标签要顺着向根节点的路径传播
例如:如果一张图片被标记为“Norfolk terrier”它也被标记为“dog”和“mammal”等。为了计算条件概率,模型预测了一个包含1369个元素的向量,并基于所有“同义词集”计算softmax,其中
“同义词集”是同一概念的下位词
对于检测损失,我们会正常地反向传播loss。
对于分类损失,我们只在标签对应级别或以上反向传播损失。
yolov2学习笔记的更多相关文章
- yolov1学习笔记
yolov1学习笔记 yolov1将目标检测归为一个回归问题,具有real-time的特点.局限性是:对于群体性的小目标检测效果很差. 论文概括 本文重新构造目标检测作为一个回归问题. 直接输入图像到 ...
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
- PHP-自定义模板-学习笔记
1. 开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2. 整体架构图 ...
- PHP-会员登录与注册例子解析-学习笔记
1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...
- 2014年暑假c#学习笔记目录
2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...
- JAVA GUI编程学习笔记目录
2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...
- seaJs学习笔记2 – seaJs组建库的使用
原文地址:seaJs学习笔记2 – seaJs组建库的使用 我觉得学习新东西并不是会使用它就够了的,会使用仅仅代表你看懂了,理解了,二不代表你深入了,彻悟了它的精髓. 所以不断的学习将是源源不断. 最 ...
- CSS学习笔记
CSS学习笔记 2016年12月15日整理 CSS基础 Chapter1 在console输入escape("宋体") ENTER 就会出现unicode编码 显示"%u ...
- HTML学习笔记
HTML学习笔记 2016年12月15日整理 Chapter1 URL(scheme://host.domain:port/path/filename) scheme: 定义因特网服务的类型,常见的为 ...
随机推荐
- 为什么局部内部类访问外边的局部变量必须为final
6.局部内部类访问外边的局部变量时,此变量必须为final类型 马克-to-win:由于技术方面的限制,java的设计者们做出如下语法规定:局部内部类访问外边的局部变量时,此变量必须为final类型, ...
- Android Studio登陆界面+Button不变色问题
今日所学内容: 1.初始相对布局 2.AS登录界面 3.一个可以下载小图标的阿里的网站iconfont-阿里巴巴矢量图标库 用GitHub账号绑定就可以免费下载 4.取颜色工具ColorCop 遇到的 ...
- DWRUtil.addOptions
DWRUtil.addOptions有5种模式 数组: DWRUtil.addOptions(selectid, array) 会创建一堆option,每个option的文字和值都是数组元素中的值. ...
- 实现一个promise.all方法
思路: 1:首先明白all的用法 2:promise.all可以接受一个由promise数组作为参数,并且返回一个promise实例, 3:promise.all([a,b,c...]).then方法 ...
- 日志、第三方模块(openpyxl模块)
目录 1.日志模块 2.第三方模块 内容 日志模块 1.日志模块的主要组成部分 1.logger对象:产生日志 无包装的产品 import logging logger = logging.getLo ...
- os、sys、json、subprocess模块
今日内容概要 1.os模块 2.sys模块 3.json模块 4.subprocess模块 今日内容详细 os模块 """该模块主要是跟操作系统打交道"&quo ...
- Java学习day23
今天学习了下拉框实现与简单游戏的实现 package com.Cra2iTeT.snake; import javax.swing.*; import java.awt.*; import java. ...
- 安装支付宝小程序的 mini-ali-ui
1.打开文件的根目录 2.使用npm init -y初始化 3. npm install mini-ali-ui --save 安装 4.在json文件里面定义 例如使用loading加载中的组件 完 ...
- 快速排序算法 - go实现
在分析redis集群中大Key的时候,通常都采用分析rdb文件的方式:但是这种方式需要在每一台redis服务器上部署分析程序及分析脚本,而像salt之类的工具运维没有开放给我们使用,一台一台部署不好管 ...
- Typora+PicGO+Gitee实现图床功能
Typora+PicGO+Gitee实现图床功能 版本 typora(0.9.86) PicGo(2.3.0) 主要参考链接 出现问题就先看看这个 问题一 打开PicGo后安装github插件会一直安 ...