YOLOv3 学习记录

news2024/11/27 6:18:21

文章目录

  • 简介
  • 整体介绍
    • 整体架构图
  • 网络架构的改进
    • Backbone 的改进
    • FPN
    • Anchor 机制
  • 坐标表示与样本匹配
    • 目标边界框的预测
    • 正负样本匹配
  • 损失函数

简介

关注目标在哪里
目标是什么

目标检测的发展路径:
proposal 两阶段 --> anchor-base/ anchor-free --> nms free

小目标、跨域?

整体介绍

在这里插入图片描述
1、YOLOv3在实时性和精确性在当时都是做的比较好的,并在工业界得到了广泛应用。
2、YOLOv3在Backbone网络结构上应用残差连接思想来解决深度网络的梯度消失问题。
yolov2 使用的是 darknet 19, 类似于 vgg。

3、YOLOv3最显著的改进就是在3个尺度上以相同的方式进行目标的检测。这使其可以检测到不同规模的目标。(最涨点)
4、YOLOv3在损失函数是将之前使用的Softmax修改为Logit;
5、最后推理阶段YOLOv3对3个检测层的预测结果进行非最大抑制(NMS)确定最终的检测结果。

整体架构图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

网络架构的改进

Backbone 的改进

YOLOv3是基于DarkNet53进行构建的,对比一下VGG、DarkNet19、ResNet101以及DarkNet53;
首先对比Plain Model,可以看到DarkNet19相对于VGG16有更少的参数量,同时也具有更快的速度和更高的精度(6.2ms vs 9.4ms)
而对于具有残差结构的ResNet101和DarkNet53,在具有类似精度的情况下,DarkNet53具有更高的精度和更快的速度(13.7ms vs 20.0ms)
在这里插入图片描述
为什么DarkNet19能够在较少参数的情况下,保持了精度同时还具有较快的速度?
较少参数量:DarkNet19使用1×1卷积代替了FC,很大程度减少了参数量,同时DarkNet19在连续卷积块中使用了1×1卷积进行通道的缩减,而VGG系列均使用了3×3卷积,同时通道没有变化,这一操作也减少了参数量;
较快的速度:也是因为FC层,1×1卷积的Bottleneck设计也会有速度上的优势(不是主要原因);
精度的保持:DarkNet19在后期通道也是增长了,而VGG系列最后一个Block的通道数是没有变化的,这也只是可能的一个因素,这也说明了另一件事VGG系列可能出现了过拟合的现象(个人见解)
在这里插入图片描述
为什么VGG系列以及DarkNet19当年为什么网络最深只到19层?
VGG论文当年只给出了VGG19作为最深的模型,而DarkNet19也是19层,为什么?
这个疑惑在何恺明大神的ResNet论文中得到了答案,就是对于Plain模型,网络越深,训练误差和测试误差越大,精度可能相较于浅层网络还会有所下降。因为随着网络的加深,会出现梯度的弥散,很多特征会消失在深层网络,导致结果没办法呈现到最佳的效果。
在这里插入图片描述
什么是残差连接?为什么对梯度消失有效?带来了什么效果?
残差结构如下图所示,其原理主要是把卷积层前后的特征进行元素相加求和,如果特征是在这其中的某一个卷积后消失的,那么残差结构便可以找回丢失的特征。在这里插入图片描述

如下图所示,左图为没有使用残差结构的plain模型,右图是使用了残差结构的残差网络ResNet,可以看到使用了残差结构的模型,随着模型深度的增加,误差随着训练的迭代进行也是降低的。
在这里插入图片描述
YOLOv3作者为什么重新设计DarkNet53,而不是直接使用ResNet呢?DarkNet53与ResNet又有什么不同呢?
对于YOLOv3来说,主要是为了在追求精度的同时也要保证一定的实时性,而ResNet在某种程度上还是比较大的,可能会影响速度。
这里按照精度相似的ResNet101与DarkNet53进行对比:
相同点:都用了Stride=2的3×3卷积代替Max-pooling操作,也都用了残差结构的思想来设计主干模型;
不同点:在堆叠的残差块中,DarkNet53仅仅堆叠了2个卷积作为Block,而ResNet101使用了3个卷积层,DarkNet53最后一个Stage的通道数是ResNet101的0.5倍,最后一个便是每个Stage的残差块数量DarkNet53的设计更为均衡合理(1,2,8,8,4 vs 3,4,23,3),这也暗示ResNet101的设计有一定的冗余。

ResNet
ResNet
Darkenet-53
在这里插入图片描述

FPN

之前的一些结构

  • 手工设计的特征:自己手动修改输入图的大小,从而得到不同的特征
  • SSD 虽然设计了金字塔,但是增加了很多卷积层,增大了参数量
  • 高分辨率特征图具有低层次的特征,这也损害了其对目标识别的表征能力

FPN 的设计

  • 重用特征,减少参数量
  • 融合低分辨率语义信息较强的特征图和高分辨率语义信息较弱但空间信息丰富的特征图。
  • 以特征金字塔为基础结构上,对每一层的特征图分别进行预测
    在这里插入图片描述
    YOLOv3的FPN是怎么做的呢?
    为了进一步降低模型的复杂度进而提升速度,YOLOv3选择了重用Backbone所提取的不同Level的特征图,主要是8倍、16倍以及32倍下采样的特征图,同时采用了FPN 的设计思想,分别对16倍、32倍以及各自上采样后的结果进行了融合,但是也对其进行了一定的改进,就是将特征融合的操作由Add改为了Concat。相加可能会掩盖一些特征性,而concat则可以保持梯度的丰富性。后续的yolo也延续了这个改进。
    在这里插入图片描述
    在这里插入图片描述

Anchor 机制

如果输入的是416×416的3通道图像,YOLOv3会产生3个尺度的特征图,分别为:13×13、26×26、52×52,也对应着Grid Cell个数,即总共产生13×13+26×26+52×52个Grid Cell。对于每个Grid Cell,对应3个Anchor Box,于是,最终产生了(13×13+26×26+52×52)×3=10647个预测框。
其中不同尺度特征图对应的预测框相对预测的目标大小规模也不一样,具体如下:

  • 13×13预测大目标
  • 26×26预测中目标
  • 52×52预测小目标

对于每个Grid Cell,其都对应一个85维度的Tensor(80+5=80+4+1,也就是数据集的类别数量+坐标值+目标值)
5=4+1 :中心点坐标、宽、高,置信度
80 :80个类别的类别概率(COCO数据集的类别是80个);

在这里插入图片描述

坐标表示与样本匹配

目标边界框的预测

如何更好地衡量两点之间的相对位置?
YOLOv3采用直接预测相对位置的方法预测出bbox中心点相对于Grid Cell左上角的相对坐标。直接预测出(tx,ty,tw,th,t0),然后通过以下坐标偏移公式计算得到bbox的位置大小和置信度:

tx、ty、tw、th就是模型的预测输出。cx和cy表示Grid Cell的坐标;
比如某层的特征图大小是13×13,那么Grid Cell就有13×13个,第0行第1列的Grid Cell的坐标cx就是0,cy就是1。pw和ph表示预测前bbox的size。bx、by、bw和bh就是预测得到的bbox的中心的坐标和宽高。
在训练这几个坐标值的时候采用了平方和损失,因为这种方式的误差可以很快的计算出来。

正负样本匹配

在YOLOv3论文中提到正负样本的匹配规则是给每一个GT分配一个正样本,这个正样本是所有bbox中找一个与GT的重叠区域最大的一个预测框,也就是和该GT的IOU最大的预测框。
如果一个样本不是正样本,那么它既没有定位损失,也没有类别损失,只有置信度损失,在YOLOv3的论文中作者尝试用Focal Loss来缓解正负样本不均匀的问题,但是并没有取得很好的效果,原因就在于负样本值参与了置信度损失,对Loss的影响占比很小。
但是这么做也有一个缺点,就是用这个匹配规则去寻找正样本,正样本的数量是很少的,这将使得网络难以训练。在这里插入图片描述

损失函数

在YOLOv3中,loss分为3个部分:
1、xywh误差,也就是bbox loss;
2、置信度误差,也就是obj loss;
3、类别误差,也就是class loss;
在代码中分别对应lbox,lobj,lcls,YOLOv3中使用的loss公式如下:
在这里插入图片描述

其中:
在这里插入图片描述

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

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

相关文章

SpringCloud微服务:Nacos的集群、负载均衡、环境隔离

目录 集群 在user-service的yml文件配置集群 启动服务 负载均衡 order-service配置集群 设置负载均衡 当本地集群的服务挂掉时 访问权重 环境隔离 1、Nacos服务分级存储模型 一级是服务,例如userservice 二级是集群,例如杭州或上海 …

计算机网络的发展

目录 一、计算机网络发展的四个阶段 1、第一阶段:面向终端的计算机网络(20世纪50年代) 2、第二阶段:计算机—计算机网络(20世纪60年代) 3、第三阶段:开放式标准化网络(20世纪70年…

【2023最全教程】python+appium自动化测试元素定位(建议收藏)

关于app自动化测试,元素定位工具有三个: appium自带的Appium Inspector工具 Android ADT原生的工具 python版uiautomator2中的weditor 由于我常用的是前两个,所以下面只介绍前面两种元素定位工具(以下内容中均以微博为例子&am…

idea中把spring boot项目打成jar包

打jar包 打开项目,右击项目选中Open Module Settings进入project Structure 选中Artifacts,点击中间的加号(Project Settings->Artifacts->JAR->From modules with dependencies ) 弹出Create JAR from Modules&#…

OpenCV基础应用(4)— 如何改变图像的透明度

前言:Hello大家好,我是小哥谈。本节课就手把手教你如何改变图像的透明度,希望大家学习之后能够有所收获~!🌈 目录 🚀1.技术介绍 🚀2.实现代码 🚀1.技术介绍 改变图像透明度的实…

从内网到公网:使用Axure RP和内网穿透技术发布静态web页面的完整指南

文章目录 前言1.在AxureRP中生成HTML文件2.配置IIS服务3.添加防火墙安全策略4.使用cpolar内网穿透实现公网访问4.1 登录cpolar web ui管理界面4.2 启动website隧道4.3 获取公网URL地址4.4. 公网远程访问内网web站点4.5 配置固定二级子域名公网访问内网web站点4.5.1创建一条固定…

振南技术干货集:比萨斜塔要倒了,倾斜传感器快来!(1)

注解目录 1、倾斜传感器的那些基础干货 1.1 典型应用场景 (危楼、边坡、古建筑都是对倾斜敏感的。) 1.2 倾斜传感器的原理 1.2.1 滚珠式倾斜开关 1.2.2 加速度式倾斜传感器 1)直接输出倾角 2)加速度计算倾角 3)倾角精度的提高 (如果…

JS-项目实战-新增水果库存功能实现

1、fruit.js function $(name) {if (name) {//假设name是 #fruit_tblif (name.startsWith("#")) {name name.substring(1); //fruit_tblreturn document.getElementById(name);} else {return document.getElementsByName(name); //返回的是NodeList类型}} }//当…

一言成文大模型:大模型实践落地之路

百度CEO,李彦宏指出、深度学习技术,大语言模型具备了理解、生成、逻辑、记忆等人工智能的核心基础能力,为通用人工智能带来曙光。 元宇宙_一言成文大模型 一言成文大模型:大模型实践落地之路

光伏含氟废水吸附处理

#光伏含氟废水吸附处理 氟的来源是冰晶石、萤石、氟磷灰等矿物,在钢铁、有色金属冶炼、铝、玻璃、化肥等工业领域得到广泛应用。 目前,在太阳能板生产中,一项关键工艺就是将氟化氢溶液浸泡在硅片上,以除去表面的磷硅玻璃&#xf…

小程序action-sheet结合自定义tabbar显示

要实现此效果,遇到的问题:背景在电脑端调试的情况正常的情况下,手机端点击事件工单,返回回来的时候action-sheet卡住在屏幕上,点击遮罩层都不消失。更奇怪的是 这种情况并不是每次发生,而是有时候发生&…

LeetCode34-34. 在排序数组中查找元素的第一个和最后一个位置

&#x1f517;:代码随想录:二分查找的算法讲解:有关left<right和left<right的区别 class Solution {public int[] searchRange(int[] nums, int target) {int nnums.length;int l0,hn-1;if(numsnull){return null; }if(n0){return new int[]{-1,-1}; }if(target&l…

ROS 学习应用篇(七)ROS中的坐标变换管理之tf初探

坐标变化是机器人中很重要的内容&#xff0c;但是要是概括下来无非就是旋转和平移矩阵。 小海龟跟随实验 做的是两个小海龟之间的跟随&#xff0c;其实就相当于视觉设备和本体设备见有一定的位置差在ros平台下tf坐标变化的实验 首先安装海龟tf变换包 新开终端输入 sudo apt…

杨辉三角00

题目链接 杨辉三角 题目描述 注意点 在「杨辉三角」中&#xff0c;每个数是它左上方和右上方的数的和 解答思路 从第一行开始&#xff0c;根据前一行计算该行的值 代码 class Solution {public List<List<Integer>> generate(int numRows) {List<List<…

Mybatis的Mapper接口传递多个参数的时候必须要加@Param注解吗?

答案是&#xff1a;不一定&#xff0c;取决于mybatis的版本、jdk的版本和javac的编译选项。 测试代码 Maven依赖&#xff1a; <dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId>…

经典/启发式/改进启发式算法应用于机器人路径规划

路径规划是移动机器人导航规划中的一个十分重要且关键的研究课题。 移动的机器人总是在动态、复杂和不可控的环境中工作&#xff0c;比如对核电站的检查和变电站的检查。然而&#xff0c;复杂的动态工作环境要求移动的机器人能够调整其运动路线&#xff0c;以自主完成任务。使…

【AI视野·今日Sound 声学论文速览 第三十四期】Thu, 26 Oct 2023

AI视野今日CS.Sound 声学论文速览 Thu, 26 Oct 2023 Totally 9 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Sound Papers Dynamic Processing Neural Network Architecture For Hearing Loss Compensation Authors Szymon Drgas, Lars Bramsl w, Archontis Poli…

多标签页文件管理器 - Win系统

多标签页文件管理器 - Win系统 前言My Files-X Free360文件夹升级Win11 前言 Win10系统自带的文件管理器不支持多标签页功能&#xff0c;本文推荐几款多标签页文件管理器&#xff0c;可以在一个文件管理器窗口中打开多个标签页。 My Files-X Free 此文件管理器支持多标签页&…

Linux友人帐之网络编程基础邮件服务器与DHCP服务器

一、邮件服务器概述 1.1邮件服务基础 邮件服务器是一种计算机程序&#xff0c;它通过电子邮件协议接收、存储、处理和发送电子邮件。邮件服务器可以与电子邮件客户端程序&#xff08;如Outlook、Thunderbird等&#xff09;或Web邮件界面&#xff08;如Gmail、Outlook.com等&am…

非常经典的一道SQL报错注入题目[极客大挑战 2019]HardSQL 1(两种解法!)

题目环境&#xff1a; 没错&#xff0c;又是我&#xff0c;这群该死的黑客竟然如此厉害&#xff0c;所以我回去爆肝SQL注入&#xff0c;这次&#xff0c;再也没有人能拿到我的flag了 做了好多这个作者出的题了&#xff0c;看来又要上强度了 判断注入类型 username&#xff1a;a…