YOLOv3 | 核心主干网络,特征图解码,多类损失函数详解

news2025/6/21 3:48:41

https://zhuanlan.zhihu.com/p/76802514)

文章目录

  • 1. 核心改进
    • 1.1主干网络
    • 1.2 特征图解码
      • 1.2.1 检测框(位置,宽高)解码
      • 1.2.2 检测置信度解码
      • 1.2.3 类别解码
    • 1.3 训练损失函数
      • 1.3.1 正负样本定义
      • 1.3.2 损失函数

1. 核心改进

1.1主干网络

更深,更宽

从v2的darknet-19到v3的darknet-53

并且引入了ResNet的网络

在这里插入图片描述

结构解析

​ (1)整个v3结构里面,是没有池化层和全连接层的。前向传播过程中,张量的尺寸变换是通过改变卷积核的步长来实现的

​ (2)yolo v3输出了3个不同尺度的feature map,如上图所示的y1, y2, y3。这也是v3论文中提到的为数不多的改进点:predictions across scales,这个实际借鉴了FPN(feature pyramid networks),采用多尺度来对不同size的目标进行检测,越精细的grid cell就可以检测出越精细的物体,小尺寸特征图用于检测大尺寸物体,大尺寸特征图检测小尺寸物体。

特征图的输出维度为 N × N × 255 = N × N × [ 3 × ( 4 + 1 + 80 ) ] N×N×255= N×N×[3×(4+1+80)] N×N×255=N×N×[3×4+1+80]

N×N 为输出特征图格点数,对应原网络中有三种8×8,16×16,32×32

255则对应等式右边的3×(4+1+80)

3表示一共有3个Anchor框

而对于每个框有4维预测框数值(x, y, w, h) ,1维预测框置信度confidence,80维物体类别数(COCO数据集是80类)

所以

第一层特征图的输出维度为 8×8×255

第二层特征图输出16×16×255

第三层特征图输出32×32×255

​ (3)上采样层(upsample):作用是将小尺寸特征图通过插值等方法,生成大尺寸图像。例如使用最近邻插值算法,将88的图像变换为1616。上采样层不改变特征图的通道数。

举一个例子

这里我们以 256 × 256 256 \times 256 256×256的输入尺度说明,看如下图各个尺寸和通道数的变化

图片出自Algernon

在这里插入图片描述

上面的网络输出的最后一个维度255是怎么用来训练呢?那就是要经过一个解码的步骤,将255按照实际意义**(output_size, output_size, anchor_per_scale, 5 + num_classes)**拆解出来,才能还原出我们预测的坐标。

1.2 特征图解码

解码就是说我们拿到特征图向量,怎么将他与实际的含义匹配呢

1.2.1 检测框(位置,宽高)解码

在Yolov1中,网络直接回归检测框的宽、高,这样效果有限。所以在Yolov2中,改为了回归基于先验框的变化值,这样网络的学习难度降低,整体精度提升不小。Yolov3沿用了Yolov2中关于先验框的技巧,并且使用k-means对数据集中的标签框进行聚类,得到类别中心点的9个框,作为先验框。先验框可以理解为在这个数据集中我的框普遍是接近这9个框的大小的

我们模型预测到相对于这几个框的

在COCO数据集中(原始图片全部resize为416 × 416),九个框分别是 (10×13),(16×30),(33×23),(30×61),(62×45),(59× 119), (116 × 90), (156 × 198),(373 × 326) ,顺序为( p w , p h p_w,p_h pw,ph) 宽,高

实际转换公式如下

其中

b x , b y . b w , b h b_x,b_y.b_w,b_h bx,by.bw,bh是最终解码得到的检测框真实值

​ (b_w,b_h)还不是最终的值,还需要乘特征图下采样率

t x , t y , t w , t h t_x,t_y,t_w,t_h tx,ty,tw,th是模型预测值

c x , c y c_x,c_y cx,cy是中心点左上角点的相对值

σ \sigma σ 是激活函数,论文中作者使用sigmoid

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

1.2.2 检测置信度解码

置信度在输出85维中占固定一位,由sigmoid函数解码即可,解码之后数值区间在[0,1]中

1.2.3 类别解码

COCO数据集有80个类别,所以类别数在85维输出中占了80维,每一维独立代表一个类别的置信度

不过YOLOv3使用sigmoid激活函数替代了Yolov2中的softmax,取消了类别之间的互斥,可以使网络更加灵活。

1.3 训练损失函数

1.3.1 正负样本定义

预测框一共分为三种情况:正例(positive)、负例(negative)、忽略样例(ignore)对于每一种样例的损失计算方式不同

  1. 正例:任取一个ground truth,与4032个框全部计算IOU,IOU最大的预测框,即为正例。并且一个预测框,只能分配给一个ground truth。例如第一个ground truth已经匹配了一个正例检测框,那么下一个ground truth,就在余下的4031个检测框中,寻找IOU最大的检测框作为正例。ground truth的先后顺序可忽略。正例产生置信度loss、检测框loss、类别loss。预测框为对应的ground truth box标签(需要反向编码,使用真实的x、y、w、h计算出 );类别标签对应类别为1,其余为0;置信度标签为1。
  2. 忽略样例:正例除外,与任意一个ground truth的IOU大于阈值(论文中使用0.5),则为忽略样例。忽略样例不产生任何loss。
  3. 负例:正例除外(与ground truth计算后IOU最大的检测框,但是IOU小于阈值,仍为正例),与全部ground truth的IOU都小于阈值(0.5),则为负例。负例只有置信度产生loss,置信度标签为0。

1.3.2 损失函数

最终损失函数为

在这里插入图片描述

Yolov3 Loss为三个特征图Loss之和:

在这里插入图片描述

其中 λ \lambda λ为权重常数,控制检测框Loss、obj置信度Loss、noobj置信度Loss之间的比例,通常负例的个数是正例的几十倍以上,可以通过权重超参控制检测效果。
1 i j o b j \mathbf{1}_{ij}^{obj} 1ijobj 在正样本时正例则输出1,否则为0
1 i j n o o b j \mathbf{1}_{ij}^{noobj} 1ijnoobj 在负样本呢则输出1,否则为0
忽略样例都输出0
x、y、w、h使用MSE作为损失函数,也可以使用smooth L1 loss作为损失函数。smooth L1可以使训练更加平滑。置信度、类别标签由于是0,1二分类,所以使用交叉熵作为损失函数。

Algeronon对YOLOv3的这部分思考我觉得超级赞,引用如下

  1. ground truth为什么不按照中心点分配对应的预测box?

(1)在Yolov3的训练策略中,不再像Yolov1那样,每个cell负责中心落在该cell中的ground truth。原因是Yolov3一共产生3个特征图,3个特征图上的cell,中心是有重合的。训练时,可能最契合的是特征图1的第3个box,但是推理的时候特征图2的第1个box置信度最高。所以Yolov3的训练,不再按照ground truth中心点,严格分配指定cell,而是根据预测值寻找IOU最大的预测框作为正例。

(2)笔者实验结果:第一种,ground truth先从9个先验框中确定最接近的先验框,这样可以确定ground truth所属第几个特征图以及第几个box位置,之后根据中心点进一步分配。第二种,全部4032个输出框直接和ground truth计算IOU,取IOU最高的cell分配ground truth。第二种计算方式的IOU数值,往往都比第一种要高,这样wh与xy的loss较小,网络可以更加关注类别和置信度的学习;其次,在推理时,是按照置信度排序,再进行nms筛选,第二种训练方式,每次给ground truth分配的box都是最契合的box,给这样的box置信度打1的标签,更加合理,最接近的box,在推理时更容易被发现。

  1. Yolov1中的置信度标签,就是预测框与真实框的IOU,Yolov3为什么是1?

(1)置信度意味着该预测框是或者不是一个真实物体,是一个二分类,所以标签是1、0更加合理。

(2)笔者实验结果:第一种:置信度标签取预测框与真实框的IOU;第二种:置信度标签取1。第一种的结果是,在训练时,有些预测框与真实框的IOU极限值就是0.7左右,置信度以0.7作为标签,置信度学习有一些偏差,最后学到的数值是0.5,0.6,那么假设推理时的激活阈值为0.7,这个检测框就被过滤掉了。但是IOU为0.7的预测框,其实已经是比较好的学习样例了。尤其是coco中的小像素物体,几个像素就可能很大程度影响IOU,所以第一种训练方法中,置信度的标签始终很小,无法有效学习,导致检测召回率不高。而检测框趋于收敛,IOU收敛至1,置信度就可以学习到1,这样的设想太过理想化。而使用第二种方法,召回率明显提升了很高。

  1. 为什么有忽略样例?

(1)忽略样例是Yolov3中的点睛之笔。由于Yolov3使用了多尺度特征图,不同尺度的特征图之间会有重合检测部分。比如有一个真实物体,在训练时被分配到的检测框是特征图1的第三个box,IOU达0.98,此时恰好特征图2的第一个box与该ground truth的IOU达0.95,也检测到了该ground truth,如果此时给其置信度强行打0的标签,网络学习效果会不理想。

代码

qqwweee/keras-yolo3: A Keras implementation of YOLOv3 (Tensorflow backend) (github.com)

参考

【论文解读】Yolo三部曲解读——Yolov3 - 知乎 (zhihu.com)

写给小白的YOLO介绍 - 知乎 (zhihu.com)

YOLO系列详解:YOLOv1、YOLOv2、YOLOv3、YOLOv4、YOLOv5、YOLOv6、YOLOv7_AI追随者的博客-CSDN博客

目标检测评价标准mAP - 知乎 (zhihu.com)

个人工作平台 (datafountain.cn)

yolo系列之yolo v3【深度解析】_yolov3-CSDN博客

从零开始PyTorch项目:YOLO v3目标检测实现 | 机器之心 (jiqizhixin.com)

[从零开始 PyTorch 项目:YOLO v3 目标检测实现(下) | 机器之心 (jiqizhixin.com)](https://www.jiqizhixin.com/articles/042602?from=synced&keyword=从零开始PyTorch项目:YOLO v3目标检测实现)

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

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

相关文章

React学习笔记 001

什么是React 1.发送请求获取数据 处理数据(过滤、整理格式等) 3.操作DOM呈现页面 react 主要是负责第三部 操作dom 处理页面 数据渲染为HTML视图的开源js库。 好处 避免dom繁琐 组件化 提升复用率 特点 声明式编程: 简单 组件化编程…

【Java学习之道】常用类库与工具

引言 Java类库是Java编程语言的一个重要组成部分,是Java程序员日常工作的必备工具。类库不仅提供了许多现成的、可直接使用的功能,还帮助我们简化了编程过程。 一、什么是Java类库 Java 类库是指由 Java 开发者社区共同维护和开发的一系列类和接口&am…

【从0开发】百度BML全功能AI开发平台【实操:以部署情感分析模型为例】

目录 一、全功能AI开发平台介绍二、AI项目落地应用流程(以文本分类为例)2-0、项目开始2-1、项目背景2-2、数据准备介绍2-3、项目数据2-4、建模调参介绍2-5、项目的建模调参2-6、开发部署2-7、项目在公有云的部署 附录:调用api代码总结 一、全…

Apache Doris (四十一): RESOTRE数据恢复

🏡 个人主页:IT贫道_大数据OLAP体系技术栈,Apache Doris,Clickhouse 技术-CSDN博客 🚩 私聊博主:加入大数据技术讨论群聊,获取更多大数据资料。 🔔 博主个人B栈地址:豹哥教你大数据的个人空间-豹哥教你大数据个人主页-哔哩哔哩视频 目录 1. RESTORE数据恢复原理

④. GPT错误:导入import pandas as pd库,存储输入路径图片信息存储错误

꧂ 问题最初꧁ 用 import pandas as pd 可是你没有打印各种信息input输入图片路径 print图片尺寸 大小 长宽高 有颜色占比>0.001的按照大小排序将打印信息存储excel表格文件名 表格路径 图片大小 尺寸 颜色类型 占比信息input输入的是文件就处理文件 是文件夹&#x1f4c…

Centos7安装Gitlab--gitlab--ee版

1 安装必要依赖 2 配置GitLab软件源镜像 3 下载安装GitLab 4 查看管理员root用户默认密码 5 登录GitLab 6 修改密码 7 gitlab相关命令 1 安装必要依赖 sudo yum install -y curl policycoreutils-python openssh-server perl sudo systemctl enable sshd sudo systemctl sta…

Macos音乐制作:Ableton Live 11 Suite for Mac中文版

Ableton Live 11是一款数字音频工作站软件,用于音乐制作、录音、混音和现场演出。它由Ableton公司开发,是一款极其流行的音乐制作软件之一。 以下是Ableton Live 11的一些主要特点和功能: Comping功能:Live 11增加了Comping功能…

Delphi 生成包含图片的 HTML 文件并使用 Edge 浏览器打开

在 Delphi 中,可以使用以下代码生成包含图片的 HTML 文件,并使用 Edge 浏览器打开该文件。 procedure GenerateHTMLWithImageAndOpenWithEdge; varOpenDialog: TOpenDialog;HTMLFileName: string;HTMLContent: TStringList; beginOpenDialog : TOpenDi…

万字长文带你了解 CloudOps 自动化运维的奥秘,助力云上业务高效稳定运行

云布道师 为了更好地帮助用户提升云上 DevOps 实践效率,缩短开发周期提升业务效率的同时,也能让业务保持稳定、安全、可靠,且低成本地持续运营,阿里云弹性计算团队独家出品的【弹性计算技术公开课_CloudOps 云上运维季】正式启动。…

【C++初阶】前言——C++的发展简述及学习方法分享

主页点击直达:个人主页 我的小仓库:代码仓库 C语言偷着笑:C语言专栏 数据结构挨打小记:初阶数据结构专栏 Linux被操作记:Linux专栏 LeetCode刷题掉发记:LeetCode刷题 算法:算法专栏 C头…

基于轩禹秒杀ctfshow-RSA

目录 babyrsa easyrsa1 easyrsa2 easyrsa3 easyrsa4 easyrsa5 easyrsa6 RSA算法是一种非对称加密算法,与对称加密算法不同的是,RSA算法有两个不同的密钥,一个是公钥,一个是私钥。 CTF中常见的有:广播攻击、共…

理解线程池源码 【C++】面试高频考点

理解线程池 C 文章目录 理解线程池 C程序源码知识点emplace_back 和 push_back有什么区别?互斥锁 mutexcondition_variablestd::move()函数bind()函数join 函数 线程池的原理就是管理一个任务队列和一个工作线程队列。 工作线程不断的从任务队列取任务,然…

JDBC加载.properties文件的两种方式

maven项目 读resources下文件 也可以 也可以用ResouseBundle 对于ClassLoader这种方式,测试ok,但是打成war包部署到服务器,可能出现问题,什么原因不知道,以后来写

第十三更---程序员常用网站一览

今天聊点题外话。大家都在那里查找资料呢,如今的资源网站太多了,眼花缭乱。今天我把一些常见的平台罗列一下 大家还有什么宝藏网站的话多多评论区分享吧 目录 一.CSDN 二.掘金 三.菜鸟教程 四.MDN 五.牛客 六.博客园 七.b站 八.微信读书 一.CSD…

SNAP处理数据C盘越用越小,Datatype out of range报错

SNAP处理数据C盘越用越小,Datatype out of range报错 问题描述 SNAP处理的影像比较多了之后,占用C盘临时存储空间,在做处理时,一直报错Datatype out of range 原因 临时存储不够了,需要释放一下之前的空间。 解决…

网络-navigator.sendBeacon

文章目录 前言一、navigator.sendBeacon是什么?优点缺点 二、navigator.sendBeacon应用场景三、navigator.sendBeacon的使用四、用户停留时间埋点总结 前言 本文主要记录navigator.sendBeacon异步请求的使用,以及应用场景和埋点小demo。 一、navigator.…

Xray联动burp进行渗透测试

与 Burp 联动 - xray 安全评估工具文档 这是Xray的官方文档 Xray的被动扫描发送的流量比较小,Xray可以联动burp suite 使用,将burp抓到的包发给Xray,我们只需要配置好代理一直点就行,然后查看渗透测试报告 xray_windows_amd64.e…

YOLOv5算法改进(3)— 注意力机制介绍(ECA、SOCA和SimAM)

前言:Hello大家好,我是小哥谈。注意力机制是近年来深度学习领域内的研究热点,可以帮助模型更好地关注重要的特征,从而提高模型的性能。注意力机制可被应用于模型的不同层级,以便更好地捕捉图像中的细节和特征,这种模型在计算资源有限的情况下,可以实现更好的性能和效率。…

vulnhub_Fowsniff靶机渗透测试

Fowsniff靶机 靶机地址:https://www.vulnhub.com/entry/fowsniff-1,262/ 文章目录 Fowsniff靶机信息收集web渗透密码碰撞POP3邮件服务器渗透获取权限权限提升靶机总结 信息收集 通过nmap扫描,靶机开放22 80 110 143端口,110是pop3邮件服务…

京东运营数据分析:2023年8月京东宠物主粮行业品牌销售排行榜

鲸参谋监测的京东平台8月份宠物主粮市场销售数据已出炉! 随着养宠人群的逐渐增多,宠物经济规模也进一步庞大。宠物生活市场中,宠物主粮作为养宠人群的刚需品,其市场规模也在进一步扩大。鲸参谋数据显示,今年8月份&…