当前位置: 首页 > news >正文

YOLOv2

YOLOv2

  • 论文介绍
  • 论文改进
    • 1. Batch Normalization
    • 2. High Resolution Classifier
    • 3. Convolutional With Anchor Boxes
    • 4. vgg16换成darknet-19
    • 5. Dimension Clusters(w h的聚类)
    • 6 预测坐标
    • 7. passthrough
    • 8. 多尺度输入训练
  • 损失函数

论文介绍

论文名字:《YOLO9000:Better, Faster, Stronger》
论文下载地址:https://arxiv.org/abs/1612.08242(右边Access Paper: View PDF)
论文作者:Joseph Redmon, Ali Farhadi
YOLO9000的意思就是除了对v1改进外,还提出一种新的算法可以在9000中类别上进行检测。
通常改进通过堆积更深的层数或者堆积更大的网络,但是作者为了让这个模型有精度以及速度,设计了下边这些技巧,同时设计一个新的darknet19

论文改进

下边这个表就概述了从YOLOv1到YOLOv2的变化。
在这里插入图片描述

1. Batch Normalization

第一个是把YOLOv1骨架网络的层换成BN层,在所有的卷积层后边
v1最后几层是全连接-dropout-全连接-sigmoid归一化-reshape7x7x30
v2最后几层是把darknet的输出和第43层输出做一个合并,在直接做一个卷积,直接预测输出的大小。到v5也是这样的。
去掉全连接和dropout是因为全连接参数量太多了,卷积是一个不错的代替方案,去掉dropout是因为dropout和bn通常是二选一,因为全有的话,会有方差偏移, dropout一般用的话就是用在全连接的旁边,现在一般都不用了

2. High Resolution Classifier

第二是提高输入数据的分辨率
预训练分类阶段输入数据从224改为448,10个epoch作为预训练
检测阶段输入数据从448改为416
为了保证最后输出是奇数,所以是416(作者解释)
最终输出阶段从7x7x30改为13x13x25
(30=10+分类种类数,25=5+分类种类数。在voc数据集里,分类种类数是20类。5代表的是xywhc,10就是两倍的xywhc)(这也是引入anchor的效果)

3. Convolutional With Anchor Boxes

第三是引入anchor机制,v1是没有的,v2v3都加入了,能提高模型的召回率以及预测的边框值
anchor的介绍:
在模型计算前有一个预生成的阶段,通过其他程序生成anchor,到了YOLOv5就把这个生成anchor的阶段放到模型训练代码里,自适应根据数据大小调整anchor大小
这些anchor就是目标检测宽跟高

4. vgg16换成darknet-19

第四是修改了骨架网络 从vgg16换成darknet-19
在这里插入图片描述
前边的横杠之前的都是普通的卷积加池化,在训练分类和训练检测阶段都是一样的
横杠下边的卷积加平均池化是做预训练分类的,检测训练采用passthrough结构

5. Dimension Clusters(w h的聚类)

第五是采用kmeans聚类得到先验框,在基于这几个先验框在用的时候用起来
YOLOv2的anchor对应边框的wh,其xy是最后预测的13x13上边每个grid cell坐标,所以YOLOv2的anchor实际不多
faster r-cnn的anchor是根据骨干网络输出的特征MxM大小在每个点上生成N个边框,总共生成MxMxN个边框,每个边框坐标是x1,y1,x2,y2
YOLOv2的anchor大小是通过聚类生成的,faster r-cnn是硬编码固定大小生成的
v2-v5都涉及聚类算法。
采用k-means聚类得到先验框,就是在所有val数据集上计算所有边框的wh,聚成几类之后就能得到不同的先验框。

6 预测坐标

第六是预测方式改为基于anchor的偏移缩放(改进关键)
在这里插入图片描述
这种改进方式把wh的大小放大,在预测的时候能减小误差。预测出的tx ty归一化后加上左上角的坐标,得到蓝色框的中心点,pw ph就是anchor的宽和高

7. passthrough

第七是高低维度特征融合(passthrough),类似残差结构

拿到darknet-body输出的最后一层,与 中间的43层合并
conv20:[batch, 13, 13, 1024] conv 13: [batch, 26, 26, 512]
这两层先reshape成一样的,在concat合并(space_to_depth)
output:[batch, 13, 13, 1280]
再就用卷积预测最终的结果

8. 多尺度输入训练

第八是多尺度输入训练策略,这个是为了改进v1大小目标小目标检测较差的情况,加入一个多尺度训练,每迭代几个epoch,就修改输入的一个大小,让模型能够适应不同尺度的输入,以提高对小目标大目标的检测效果。
在这里插入图片描述
保持主干网络不变,调整输入图片的大小为[320, 352, 384, 416, 448, 480, 512, 544, 576, 608],每十个epoch改变一次大小

损失函数

在这里插入图片描述
第一行是 没有包含目标情况下的损失,兰姆达=1是平衡正负样本不平衡的问题,只计算背景概率损失
第二行是计算包含目标情况下的损失
第三行是类别损失,是差平方和
第四行使边框损失,主要差别是,wh不再需要开方操作

相关文章:

  • C++核心高级编程 --- 3、函数提高
  • 2024年阿里云服务器2核8G、4核16G、8核32G配置收费标准
  • Spring使用(一)注解
  • 梨花带雨网页音乐播放器二开优化修复美化版全开源版本源码
  • qT 地图显示飞机轨迹
  • C语言_第一轮笔记_指针
  • 数据仓库——事实表
  • 03-MySQl数据库的-用户管理
  • Stable Diffusion扩散模型推导公式的基础知识
  • R语言颜色细分
  • Leaflet使用多面(MultiPolygon)进行遥感影像掩膜报错解决之道
  • 【讲解下go和java的区别】
  • 【Java 多线程】从源码出发,剖析Threadlocal的数据结构
  • 总结UDP协议各类知识点
  • 代码块的总结
  • [译]前端离线指南(上)
  • 【刷算法】求1+2+3+...+n
  • 0x05 Python数据分析,Anaconda八斩刀
  • 2017年终总结、随想
  • Apache Pulsar 2.1 重磅发布
  • DOM的那些事
  • IDEA 插件开发入门教程
  • JavaScript服务器推送技术之 WebSocket
  • Python3爬取英雄联盟英雄皮肤大图
  • vue 配置sass、scss全局变量
  • 从零开始学习部署
  • 浮现式设计
  • 前端面试之闭包
  • 使用 Xcode 的 Target 区分开发和生产环境
  • 使用SAX解析XML
  • 400多位云计算专家和开发者,加入了同一个组织 ...
  • ​Z时代时尚SUV新宠:起亚赛图斯值不值得年轻人买?
  • #laravel 通过手动安装依赖PHPExcel#
  • #我与Java虚拟机的故事#连载14:挑战高薪面试必看
  • (AtCoder Beginner Contest 340) -- F - S = 1 -- 题解
  • (HAL)STM32F103C6T8——软件模拟I2C驱动0.96寸OLED屏幕
  • (Java)【深基9.例1】选举学生会
  • (附源码)spring boot公选课在线选课系统 毕业设计 142011
  • (附源码)springboot 智能停车场系统 毕业设计065415
  • (附源码)springboot车辆管理系统 毕业设计 031034
  • (九)c52学习之旅-定时器
  • (删)Java线程同步实现一:synchronzied和wait()/notify()
  • (转)AS3正则:元子符,元序列,标志,数量表达符
  • ./include/caffe/util/cudnn.hpp: In function ‘const char* cudnnGetErrorString(cudnnStatus_t)’: ./incl
  • .360、.halo勒索病毒的最新威胁:如何恢复您的数据?
  • .htaccess 强制https 单独排除某个目录
  • .Net Remoting(分离服务程序实现) - Part.3
  • .net 怎么循环得到数组里的值_关于js数组
  • .net安装_还在用第三方安装.NET?Win10自带.NET3.5安装
  • .net和php怎么连接,php和apache之间如何连接
  • .NET面试题(二)
  • @javax.ws.rs Webservice注解
  • @SuppressLint(NewApi)和@TargetApi()的区别
  • [2017][note]基于空间交叉相位调制的两个连续波在few layer铋Bi中的全光switch——
  • [2023-年度总结]凡是过往,皆为序章