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不再需要开方操作

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/589903.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SSM项目转Springboot项目

SSM项目转Springboot项目 由于几年前写的一个ssm项目想转成springboot项目,所以今天倒腾了一下。 最近有人需要毕业设计转换一下,所以我有时间的话可以有偿帮忙转换,需要的私信我或+v:Arousala_ 首先创建一个新的spr…

波士顿房价预测案例(python scikit-learn)---多元线性回归(多角度实验分析)

波士顿房价预测案例(python scikit-learn)—多元线性回归(多角度实验分析) 这次实验,我们主要从以下几个方面介绍: 一、相关框架介绍 二、数据集介绍 三、实验结果-优化算法对比实验,数据标准化对比实验&#xff0…

标题:巨控GRM560:医药行业设备管理的预警的革新者

描述:在快速发展的医药行业中,设备的稳定性和安全性至关重要。巨控GRM560模块作为一种前沿的数据采集和故障提醒系统,已经成为该行业内不可或缺的一部分。本文将深入探讨GRM560模块的功能及其在医药行业中的应用。 正文: 在当今…

29.使线程以固定顺序输出结果

借助wait和notify方法控制线程以固定的顺序执行: /*** 控制输出字符的顺序,必须是固定顺序2,1* 采用wait-notify实现* param args*/public static void main(String[] args) {new Thread(() -> {synchronized (lock) {while (!isPrint2) {try {lock.…

【漏洞复现】科立讯指挥调度管理平台存在命令注入漏洞

0x01 产品简介 科立讯指挥调度管理平台是一个专业针对通信行业的管理平台。该产品旨在提供高效的指挥调度喝管理解决方案,以帮助通信运营商或相关机构实现更好的运营效率和服务质量。该平台提供强大的指挥调度功能,可以实时监控和管理通信网络设备、维护人员和工作任务等。用…

C语言:文件操作(一)

目录 前言 1、为什么使用文件 2、什么是文件 2.1 程序文件 2.2 数据文件 2.3 文件名 3、文件的打开和关闭 3.1 文件指针 3.2 文件的打开和关闭 结(一) 前言 本篇文章将介绍C语言的文件操作,在后面的内容讲到:为什么使用文…

C++的并发世界(五)——线程状态切换

0.线程状态 初始化:该线程正在被创建; 就绪:该线程在列表中就绪,等待CPU调度; 运行:该线程正在运行; 阻塞:该线程被阻塞挂机,Blocked状态包括:pend&#xff…

Apache DolphinScheduler 【安装部署】

前言 今天来学习一下 DolphinScheduler ,这是一个任务调度工具,现在用的比较火爆。 1、安装部署 1.0、准备工作 1.0.1、集群规划 dolphinscheduler 比较吃内存,所以尽量给 master 节点多分配一点内存,桌面和虚拟机里能关的应用…

Golang 开发实战day07 - Functions

Golang 教程07 - Functions 1. Functions 1.1 什么是函数? 在 Golang 中,函数就像是代码的超级组合体,可以将一段代码封装成一个独立的单元,以便重复使用。 1.2 函数声明 func funcName(parameter1 type1, parameter2 type2)…

Leetcode刷题-数组(二分法、双指针法、窗口滑动)

数组 1、二分法 704. 二分查找 - 力扣&#xff08;LeetCode&#xff09; 需要注意区间的问题。首先在最外面的循环判断条件是left<right。那就说明我们区间规定的范围就是【left,right】 属于是左闭右闭&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&…

一文让你彻底理解 AdaBoost 自适应提升算法 | AdaBoost 的关键要点、基本原理、优缺点和实际应用

&#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 一、关键要点 AdaBoost&#xff0c;即自适应提升&#xff08;Adaptive Boosting&#xff09;算法的缩写&#xff0c;是一种基于 Boosting 策略的集成学习方法&#xff0c;旨在降低偏差。AdaBoost 的 “…

【面试HOT200】链表篇

系列综述&#xff1a; &#x1f49e;目的&#xff1a;本系列是个人整理为了秋招面试coding部分的&#xff0c;整理期间苛求每个算法题目&#xff0c;平衡可读性与代码性能&#xff08;leetcode运行复杂度均打败80%以上&#xff09;。 &#x1f970;来源&#xff1a;材料主要源于…