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;材料主要源于…

softmax函数的功能及用法

Softmax函数是一种常用的激活函数&#xff0c;通常用于多分类问题的输出层。其功能是将一个具有任意实数值的向量&#xff08;通常称为“logits”&#xff09;转换为一个概率分布&#xff0c;其中每个元素的值表示对应类别的概率。 Softmax函数的公式如下&#xff1a; 给定一…

选择最适合的JavaScript混淆工具:详解JScrambler、JShaman、IpaGuard等五款在线服务

摘要 本篇技术博客将介绍五款常用且好用的在线JavaScript加密混淆工具&#xff0c;包括 jscrambler、JShaman、jsfack、freejsobfuscator 和 jjencode。通过对这些工具的功能及使用方法进行详细解析&#xff0c;帮助开发人员更好地保护和加密其 JavaScript 代码&#xff0c;提…

如何优化嵌入式系统的实时性能

大家好&#xff0c;今天给大家介绍如何优化嵌入式系统的实时性能&#xff0c;文章末尾附有分享大家一个资料包&#xff0c;差不多150多G。里面学习内容、面经、项目都比较新也比较全&#xff01;可进群免费领取。 优化嵌入式系统的实时性能是一个综合性的任务&#xff0c;涉及到…

C++的并发世界(六)——互斥解决数据共享冲突

0.数据共享的问题 在多个线程中共享数据时。需要注意线程安全问题。如果多个线程同时访问同一个变量。并且其中至少有一个线程对该变量进行了写操作。那么就会出现数据竞争问题。数据竞争可能会导致程序崩溃,产生来定义的结果,或者得到错误的热果。为了避免数据竞争问题。需要…

真·面试题总结——JVM虚拟机

JVM虚拟机 JVM虚拟机规范与实现 JVM虚拟机规范 JVM虚拟机实现 JVM的常见实现 JVM虚拟机物理架构 JVM虚拟机的运转流程 JVM类加载过程 JVM类加载器及类加载器类型 JVM类加载器双亲委派机制 JVM运行时数据区的内存模型 JVM运行时数据区的内存模型&#xff1a;程序计数器…

Transformer - Outputs(Shifted Right)

Transformer - Outputs(Shifted Right) flyfish 输入: “je suis etudiant” 预期输出 : “i am a student” 除了普通词汇之外&#xff0c;模型还引入了一些特殊token&#xff0c;常有的&#xff08;start of sequence&#xff09;、&#xff08;end of sequence&#xff09;…

【linux】lsof命令使用

1. 功能 lsof list open files, 列出被进程所使用的文件名称。 2. 基础语法 3. 参数含义 参数含义-a过滤出多个选项要同时满足的文件-U仅列出UNIX-like系统的socket文件类型。-u指定用户&#xff0c;比如-u atiaisi&#xff0c;会把用户atiaisi相关的进程使用的文件列出来。…

线程池小项目【Linux C/C++】(踩坑分享)

目录 前提知识&#xff1a; 一&#xff0c;线程池意义 二&#xff0c;实现流程 阶段一&#xff0c;搭建基本框架 1. 利用linux第三方库&#xff0c;将pthread_creat线程接口封装 2. 实现基本主类ThreadPool基本结构 阶段二&#xff0c;完善多线程安全 1. 日志信息打印…