YOLOv3 学习记录

文章目录

  • 简介
  • 整体介绍
    • 整体架构图
  • 网络架构的改进
    • 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公式如下:
在这里插入图片描述

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

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

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

相关文章

深度学习之基于YoloV5安检仪危险品识别系统

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 深度学习之基于 YOLOv5 安检仪危险品识别系统介绍YOLOv5 简介安检仪危险品识别系统系统架构应用场景 二、功能三、系统四. 总结 一项目简介 深度学习之基于…

自动化网络图软件

由于 IT 系统的发展、最近向混合劳动力的转变、不断变化的客户需求以及其他原因,网络监控变得更加复杂。IT 管理员需要毫不费力地可视化整个网络基础设施,通过获得对网络的可见性,可以轻松发现模式、主动排除故障、确保关键设备可用性等。 为…

计算机视觉的应用17-利用CrowdCountNet模型解决人群数量计算问题(pytorch搭建模型)

大家好,我是微学AI,今天给大家介绍一下计算机视觉的应用17-利用CrowdCountNet模型解决人群数量计算问题(pytorch搭建模型)。本篇文章,我将向大家展示如何使用CrowdCountNet这个神奇的工具,以及它是如何利用深度学习技术来解决复杂…

《增长黑客》思维导图

增长黑客这个词源于硅谷,简单说,这是一群以数据驱动营销、以迭代验证策略,通过技术手段实现爆发式增长的新型人才。 近年来,互联网公司意识到这一角色可以发挥四两拨千斤的作用,因此对该职位的需求也如井喷式增长。本…

营业执照识别

目录 1、制作文本检测数据集 2、导出文本检测推理模型 3、制作语义实体识别数据集 4、训练模型 5、模型预测 6、模型导出 7、模型推理 1、制作文本检测数据集 文本检测数据集格式如下: dataset_dir # 数据集根目录,目录名称可以改变 ├── im…

【广州华锐互动】VR模拟真实火灾场景,教你如何正确逃生和自救

随着科技的不断发展,人们对于安全教育的需求也在不断提高。在消防安全领域,传统的培训方式已经无法满足现代社会的需求。为了提高人们的消防安全意识,提升应急处理能力,VR火灾自救逃生体验系统应运而生。 VR火灾自救逃生体验系统是…

金蝶云星空其他出库单保存提示序列号不一致

文章目录 金蝶云星空其他出库单保存提示序列号不一致保存报错初步分析总结 金蝶云星空其他出库单保存提示序列号不一致 保存报错 显示单据数量0.序列号数量3 初步分析 输入实发数量没有触发序列号数量的计算 检查实发数量的值更新事件 实发数量和序列号数量的转换&#xff…

我把MySQL运行在Docker上,差点完了……

容器的定义:容器是为了解决“在切换运行环境时,如何保证软件能够正常运行”这一问题。 目前,容器和 Docker 依旧是技术领域最热门的词语,无状态的服务容器化已经是大势所趋,同时也带来了一个热点问题被大家所争论不以&…

LeetCode【41】缺失的第一个正数

题目: 分析: 第i个位置的数,如果再数组 0到length-1范围内,则将其放到对应的位置; 再遍历一遍数组,找到第一个不在位置i的正数数字,即为所求 思路:https://blog.csdn.net/weixin_45…

【docker启动的Jenkins时,遇到时区问题处理】

1、查看容器中的时区 [rootlocalhost jenkins]# docker exec -it jenkins cat /etc/timezone Etc/UTC而本地使用的是Asia/shanghai [rootlocalhost jenkins]# timedatectl | grep Time zoneTime zone: n/a (CST, 0800)###查看 [rootlocalhost jenkins]# cd /usr/share/zoneinf…

代码随想录算法训练营|五十五天

两个字符串的删除操作 583. 两个字符串的删除操作 - 力扣(LeetCode) 因为两个字符串都能删除,所以字符不匹配的话就有三个方向取最小值赋值给dp[i,j],不过这里dp[i-1,j-1]2dp[i,j-1]1,从字面上理解 就是 当 同时删wo…

软件外包开发文档工具

有许多工具可用于生成和管理软件开发文档。这些工具可以帮助团队更有效地协作、记录和维护文档。以下是一些常用的软件开发文档生成工具,希望对大家有所帮助。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作。 Javadoc&#…

软件测试面试-如何定位线上出现bug

其实无论是线上还是在测试出现bug,我们核心的还是要定位出bug出现的原因。 定位出bug的步骤: 1,如果是必现的bug,尽可能的复现出问题,找出引发问题的操作步骤。很多时候,一个bug的产生,很多时…

GBase8a-GDCA-第二次阶段测试

文章目录 主要内容在这里插入图片描述 ![在这里插入图片描述](https://img-blog.csdnimg.cn/1d552b9d6d204f4fb4280ccc52807ed5.png)在这里插入图片描述 总结 主要内容 GBase8a-GDCA-第二次阶段测试及答案 总结 以上是今天要讲的内容,GBase8a-GDCA-第二次阶段测试…

字母不重复的子串-第15届蓝桥第二次STEMA测评Scratch真题精选

[导读]:超平老师的《Scratch蓝桥杯真题解析100讲》已经全部完成,后续会不定期解读蓝桥杯真题,这是Scratch蓝桥杯真题解析第158讲。 第15届蓝桥第2次STEMA测评已于2023年10月29日落下帷幕,编程题一共有6题,分别如下&am…

矩阵起源到此一游:千岛湖(内含海量招聘岗位)

秋意渐浓,正值金秋时节,MO 也出去玩啦! 海量招聘岗位,点击链接一键查看,就等您来: 「矩阵起源招聘」2023年矩阵起源招聘信息-BOSS直聘​www.zhipin.com/gongsi/job/59a68fecfe392c0d1nd93N-4EVU~.html​编…

放松鸭-技术支持

“放松鸭”利用苹果手表的HRV心率变异性和静息心率等数据进行分析,帮助您了解当前身体疲劳和心理压力程度,并及时提醒您的压力状态。我们的目标是让您更好地感知、管理和应对压力,让您的身心得到平静和放松。通过读取您的心脏数据&#xff0c…

MySQL数据库入门到大牛_基础_08__聚合函数(常用的5种聚合函数;GROUP BY分组;HAVING使用及与WHERE的对比;SELECT的执行过程)

我们上一章讲到了 SQL 单行函数。实际上 SQL 函数还有一类内置函数,叫做聚合(或聚集、分组)函数,它是对一组数据进行汇总的函数,输入的是一组数据的集合,输出的是单个值。即使输出多个值,也得作…

嵌套的iframe页面中rem字号变小问题处理

问题原因 如果 html 的 font-size: 100px,那字号为0.16rem的字实际为100px * 0.16 16px 故最外层的html的字号 与iframe下的html字号 不相同时,则会导致iframe页面内的字体字号存在问题 解决办法 先获取外层html的font-size const fontSize par…

订水商城实战教程10-宫格导航

上一篇我们介绍了跑马灯的功能,这一篇就进入到我们的主体部分开发。在订水商城业务中可以按照分类查询商品信息,这就涉及到数据源的拆分。 我们在数据源的设计中区分为主子表,主表呢存储唯一的记录,子表的记录可以重复&#xff0…