12_YouOnlyLookOnce(YOLOv3)新一代实时目标检测技术

1.1 回顾V1和V2

V1:05_YouOnlyLookOnce(YOLOV1)目标检测领域的革命性突破-CSDN博客

V2:07_YouOnlyLookOnce(YOLOv2)Better,Faster,Stronger-CSDN博客

1.2 简介

YOLOv3(You Only Look Once version 3)是YOLO系列目标检测算法的第三代版本,由Joseph Redmon等人在2018年推出。YOLO系列因其快速且准确的目标检测能力而广受欢迎,尤其适合需要实时处理的应用场景。YOLOv3在继承前代优势的基础上,通过一系列关键改进,进一步提升了检测精度和运行速度,实现了对各类尺度目标的有效检测。

  1. Darknet-53作为骨干网络:YOLOv3采用了一个新的特征提取网络——Darknet-53,这个网络包含53个卷积层,每个卷积层后通常跟随批量归一化层(Batch Normalization)和Leaky ReLU激活函数,以加速训练并提高模型的非线性表达能力。Darknet-53没有池化层,而是利用步长为2的卷积层来下采样特征图,这有助于保持更多的空间信息。

  2. 特征金字塔网络(Feature Pyramid Networks, FPN):YOLOv3引入了FPN机制,能够在不同尺度上进行特征检测。它在Darknet-53的输出上添加了几个额外的卷积层,形成了三个不同尺度的特征图(13x13, 26x26, 52x52),每个尺度对应不同的对象尺寸,从而提高了对小目标的检测能力。这种设计允许模型在不同层级捕获多种尺度的信息,增强了模型的泛化能力和准确性。

  3. 多尺度预测:与YOLOv2相比,YOLOv3在每个特征图的每个网格上预测3个边界框,每个边界框包含位置信息、对象类别概率以及一个置信度分数,表明该框内存在对象的概率。这种多尺度和多框的策略有助于模型更灵活地适应不同大小和形状的对象。

  4. 优化的损失函数:YOLOv3采用了更加精细化的损失函数,既考虑了分类损失,也考虑了定位损失,同时对小对象的检测给予了更高的权重,以解决小对象检测难题。

  5. 实时性:尽管YOLOv3在精度上有了显著提升,但它仍然保持了较快的推理速度,使得它在诸如自动驾驶、视频监控和无人机导航等需要即时响应的场景中非常实用。

1.3 V3的性能

  1. 高精度与实时性平衡:YOLOv3在精确度和速度之间实现了良好的平衡。它在保持快速检测速度的同时,显著提高了检测精度。例如,在Titan X GPU上,YOLOv3能在大约51毫秒(ms)内完成一张图像的检测,达到57.9%的平均精度均值(AP50),这意味着它的检测速度非常快,同时具有较高的检测准确性。

  2. 多尺度检测能力:通过在不同尺度的特征图上进行预测,YOLOv3能有效检测从小到大的各种尺寸的目标。它的设计使得模型能够在多个分辨率级别上捕捉对象特征,这对于检测复杂场景中的多样化目标尤为重要。

  3. 改进的损失函数与正负样本匹配:YOLOv3采用了优化的损失函数,能够更好地处理分类和定位任务,同时,它采用基于聚类的方法来生成先验框,这有助于模型更好地适应不同目标的尺度和宽高比,提高了模型的稳定性和精度。

  4. 增强的特征提取网络:Darknet-53作为YOLOv3的骨干网络,提供了强大的特征提取能力。该网络结构的高效性使得模型可以在保持较高检测速度的同时,提升对目标特征的学习能力。

  5. 计算效率:相比其他先进的目标检测模型如SSD和RetinaNet,YOLOv3在某些配置下能够提供更快的检测速度。例如,它被报道在某些基准测试中,其运行速度可以达到SSD和RetinaNet的大约3.8倍,这对于资源受限或对延迟有严格要求的应用场景尤为重要。

  6. 适应多标签任务:YOLOv3通过改进的Softmax层设计,能够更好地处理一个网格内存在多个对象的情况,提高了模型在复杂场景下的表现。

1.4 DarkNet53

Darknet53特性概览

  1. 残差结构:Darknet53的一个关键特点是大量采用了残差学习(Residual Learning)的思想,即残差块(Residual Block)。每个残差块通常包含两个卷积层:一个3x3卷积层紧跟着一个1x1卷积层,中间穿插Batch Normalization(BN)和激活函数(通常是Leaky ReLU)。这些残差块通过快捷连接(skip connection)将输入直接加到经过若干卷积操作后的特征上,帮助解决深度网络中的梯度消失问题,使得模型能够更轻松地训练更深的网络。

  2. 下采样策略:与传统的池化层用于下采样不同,Darknet53主要使用步长为2的3x3卷积来进行特征图的下采样,这有助于减少信息损失,同时增加网络的深度。

  3. 网络深度:Darknet53相较于其前身Darknet19,深度大大增加至53层,这样的设计旨在进一步提升模型的特征表达能力。

  4. 卷积模块:网络中广泛使用了一种称为DarknetConv2D的定制化卷积模块,该模块在每次卷积操作后都会进行L2正则化、批量归一化(BatchNorm)以及Leaky ReLU激活,这样的设计有利于训练稳定性和加速收敛。

网络结构

  • 基础块:网络由一系列的卷积层堆叠而成,其中包含多个残差块。每个残差块通常由两组卷积层组成,先是一个较小的3x3卷积层(步长可能为2以进行下采样),接着是一个1x1卷积层用于调整通道数,所有这些之后都伴随有BN和激活函数。
  • 层级特征:随着网络的深入,特征图的尺寸减小,但通道数增加,这种设计允许模型在不同尺度上捕获特征,这对于检测不同大小的目标至关重要。
  • 输出层:最终,Darknet53产生多个不同尺度的特征图,这些特征图随后被用于构建特征金字塔,并在此基础上进行分类和边界框回归。

性能影响

Darknet53的设计使得YOLOv3不仅能够快速提取图像特征,还显著提高了检测精度,尤其是在处理小目标和多尺度目标时。它的深度和残差结构有助于学习更复杂的特征表示,而不会遭受严重的梯度消失或爆炸问题,从而提升了整个YOLOv3系统的性能。

1.5 V3的网络架构

YOLOv3(You Only Look Once version 3)的网络架构设计精巧,旨在实现高速与高精度目标检测的平衡。以下是YOLOv3网络架构的关键组成部分和工作流程:

1. 输入层

  • 输入图像:YOLOv3通常接受固定尺寸的输入图像,如416x416像素,这是为了方便网络结构中的下采样操作。

2. Darknet-53作为骨干网络

  • 基础特征提取:首先,图像通过Darknet-53网络进行处理。Darknet-53包含53层,主要由卷积层构成,使用大量的残差块(Residual Blocks)来加深网络,每个残差块包括两个3x3卷积层(其中一个可进行下采样),并使用批量归一化(Batch Normalization)和Leaky ReLU激活函数。

3. 特征金字塔网络(Feature Pyramid Network, FPN)

  • 多层次特征提取:Darknet-53的输出通过一系列上采样和特征融合操作形成特征金字塔。具体来说,网络在最后几个卷积层后,通过上采样操作(如最近邻插值或双线性插值)将低分辨率特征图与之前较高分辨率的特征图融合,形成了三个不同尺度的特征图(一般为52x52、26x26、13x13),分别对应于检测不同大小的目标。

4. 检测层(YOLO Layers)

  • 多尺度预测:在每个尺度的特征图上,YOLOv3应用一个卷积层来预测该尺度上的目标信息。每个网格预测3个边界框(anchor boxes),每个边界框含有5个坐标参数(x, y, w, h, confidence score)以及C个条件类别概率(每个类别一个概率)。其中,(x, y)是边界框中心相对于网格单元的偏移,(w, h)是边界框的宽度和高度的预归一化值,confidence score表示边界框内存在物体的概率,以及框的精确度。

5. 输出层

  • 输出格式:最终,YOLOv3输出是三个尺度的特征图,每个特征图上的每个网格预测出B个边界框,每个边界框关联C个类别概率,因此输出维度为(S1S1B*(5+C), S2S2B*(5+C), S3S3B*(5+C)),其中Si是每个特征图的大小。

6. 损失函数

  • 优化目标:YOLOv3使用多部分损失函数,包括边界框的位置误差、对象存在的置信度误差、以及分类误差,通过优化这个复合损失来同时训练位置、置信度和类别预测。

255是怎么来的?85x3,就是每个grid cell生成3个anchor box,每一个anchor对应一个预测框,每一个预测框有5+80,5是XYWHC(中心点坐标,预测框长宽,置信度),80是coco数据集80个类别的条件类别概率。

13x13(416下采样32倍,每个 gridcell对应原图的感受野是32x32,负责预测大物体),26x26(下采样16倍,负责预测中等大小物体),52x52(下采样8倍,预测小物体)都是gridcell个数,每个girdcell对应3个anchor。


1.6 损失函数

2.pytorch复现

待更新

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【odoo】odoo中对子数据的独有操作[(0, 0, {‘name‘: ‘demo‘})]

概要 在Odoo中,有种写法用于操作 one2many 或 many2many 字段时,描述如何在数据库中创建、更新或删除相关记录。具体而言,这是一种命令格式,被称为 "commands" 或 "special command tuples",用于 …

[大模型]Qwen2-7B-Instruct vLLM 部署调用

vLLM 简介 vLLM 框架是一个高效的大语言模型推理和部署服务系统,具备以下特性: 高效的内存管理:通过 PagedAttention 算法,vLLM 实现了对 KV 缓存的高效管理,减少了内存浪费,优化了模型的运行效率。高吞吐…

Nginx负载均衡之长连接负载均衡

当客户端通过浏览器访问 HTTP 服务器时,HTTP 请求会通过 TCP 协议与 HTTP 服务器建立一条访问通道,当本次访问数据传输完毕后,该 TCP 连接会立即被断开,由于这个连接存在的时间很短,所以 HTTP 连接也被称为短连接。 …

五、特征缩放和多项式回归

目录 一、为什么要使用特征缩放(Feature Scaling) 1.首先来看预测房价的例子 2.特征缩放前后效果对比 二、特征缩放方法 1.统一除以范围最大值 2.均值归一化(Mean Normalization) 3.Z-score标准化(Z-score Normalization) 4.一些可以接受/不接受的缩放范围 三、如何识别…

使用docker构建自己的镜像并推送到远程镜像仓库

这里镜像仓库使用阿里云仓库,其他仓库可能类似,可以参考,个人实例可以免费使用。 背景 遇到的问题:需要定制一个自己的镜像,在上面安装一些环境,然后将镜像托管到公共镜像仓库,在其他地方使用…

14.基于人类反馈的强化学习(RLHF)技术详解

基于人类反馈的强化学习(RLHF)技术详解 RLHF 技术拆解 RLHF 是一项涉及多个模型和不同训练阶段的复杂概念,我们按三个步骤分解: 预训练一个语言模型 (LM) ;训练一个奖励模型 (Reward Model,RM) &#xf…

理解Es的DSL语法(一):查询

目录 DSL相关联的基本概念 ElasticSearch的字段类型 ElasticSearch的查询类型 DSL语法 query 普通查询 布尔查询 字符串构建查询 _source from和size sort 关于sort和查询的相关性评分 关于sort的性能 DSL相关联的基本概念 Es的DSL并不是独立的知识点&#xff…

Postman接口测试/接口自动化实战教程

一、API 自动化测试 Postman 最基本的功能用来重放请求,并且配合良好的 response 格式化工具。 高级点的用法可以使用 Postman 生成各个语言的脚本,还可以抓包,认证,传输文件。 仅仅做到这些还不能够满足一个系统的开发&#x…

【SQLAlChemy】表之间的关系,外键如何使用?

表之间的关系 数据库表之间的关系分为三种: 一对一关系(One-to-One):在这种关系中,表A的每一行都与表B的一行关联,反之亦然。例如,每个人都有一个唯一的社保号,每个社保号也只属于…

基于MCU平台的HMI开发的性能优化与实战(上)

随着汽车座舱智能化的不断演进,车内显示设备的数量显著增加,从传统的仪表盘和中控屏扩展至空调控制、扶手、副驾驶区域以及抬头显示(HUD)等多样化的显示单元。为了有效支持这些功能单元,同时控制整车成本,越…

59.指向指针的指针(二级指针)

目录 一.什么是指向指针的指针 二.扩展 三.视频教程 一.什么是指向指针的指针 我们先看回顾一下指针&#xff1a; #include <stdio.h>int main(void) {int a 100;int *p &a;printf("*p is %d\n",*p);return 0;} 解析&#xff1a; 所以printf输出的结…

最长连续序列

题目&#xff1a;最长连续序列 给定一个未排序的整数数组 nums &#xff0c;找出数字连续的最长序列&#xff08;不要求序列元素在原数组中连续&#xff09;的长度。 请你设计并实现时间复杂度为 O(n) 的算法解决此问题。 解题思路&#xff1a; 思路一:先排序&#xff0c;然…

49.Chome浏览器有三种清缓存方式

49.Chome浏览器有三种清缓存方式&#xff1a;正常重新加载、硬件重新加载、清空缓存并硬性重新加载 1、【正常重新加载】 触发方式&#xff1a;①F5  ②CtrlR  ③在地址栏上回车  ④点击链接 如果缓存不过期会使用缓存。这样浏览器可以避免重新下载JavaScript文件、图像、…

如何应对生活中的不确定性:仁者安仁,知者利仁。

有较高自尊水平的人&#xff0c;接近于孔子说的&#xff1a;仁者。 ——— 有着稳定的高自尊&#xff0c;无论外在环境如何变化&#xff0c;对其影响都不大&#xff0c;他能够愉快地生活。 相反&#xff1a;一个人处于低自尊状态&#xff0c;就会活得很痛苦&#xff0c;对自己…

Visual Studio Code连接VMware虚拟机

1.安装VS Code插件 在拓展中安装插件 Remote-SSH 2.在虚拟机中安装OpenSSH服务器 使用超级用权限(root)更新软件包列表&#xff0c;Debian系统和Ubuntu系统使用apt包管理工具&#xff1a; sudo apt update CentOS系统使用yum或dnf包管理工具&#xff1a; sudo yum update …

LeetCode | 434.字符串中的单词数

这道题直接使用语言内置的 split 函数可直接分离出字符串中的每个单词&#xff0c;但是要注意区分两种情况&#xff1a;1、空串&#xff1b;2、多个空格连续&#xff0c;分割后会出现空字符的情况&#xff0c;应该舍弃 class Solution(object):def countSegments(self, s):&qu…

C++青少年简明教程:C++的指针入门

C青少年简明教程&#xff1a;C的指针入门 说到指针&#xff0c;就不可能脱离开内存。了解C的指针对于初学者来说可能有些复杂&#xff0c;我们可以试着以一种简单、形象且易于理解的方式来解释&#xff1a; 首先&#xff0c;我们可以将计算机内存想象成一个巨大的有许多格子的…

论文阅读:H-ViT,一种用于医学图像配准的层级化ViT

来自CVPR的一篇文章&#xff0c;https://openaccess.thecvf.com/content/CVPR2024/papers/Ghahremani_H-ViT_A_Hierarchical_Vision_Transformer_for_Deformable_Image_Registration_CVPR_2024_paper.pdf 用CNNTransformer混合模型做图像配准。可变形图像配准是一种在相同视场…

windows上安装redis,并且用pycharm联通调用测试

在 Windows 上启动 Redis&#xff0c;官网版本不支持windows直接安装&#xff0c;你可以按照以下步骤进行操作&#xff1a; 使用Github Redis 版本启动 Redis 如果你想使用 Redis 在 Windows 上启动 Redis&#xff0c;以下是基本的步骤&#xff1a; 下载 Redis&#xff1a; 访…

Commons-Collections篇-CC4链分析

前言 因为 CommonsCollections4 除 4.0 的其他版本去掉了 InvokerTransformer 继承 Serializable&#xff0c;导致该方法无法序列化。 同时 CommonsCollections 4的版本 TransformingComparator 继承了 Serializable接口&#xff0c;而CommonsCollections 3里是没有的&#xf…