第09章课时32YOLOv3代码
好的我来结合YOLOv3的知识通过联想和上下文理解把这段口语化、有错别字的讲解内容梳理清楚。YOLOv3 训练与测试代码讲解要点梳理一、损失函数部分三种损失1. 三种损失类型损失对应代码位置说明置信度损失第0个值判断网格是否有目标坐标偏移量损失第1-4个值 (tx, ty, tw, th)边界框位置回归类别损失第5-14个值共10类多分类用BCE而非Softmax2. 关键代码理解核心就是把c类别放在最后并且reshape向量但是其他nhw顺序没有变把45分成3和15 → 输出维度 [B, H, W, 3, 15] - 3每个网格3个锚框anchor - 155xywhconf 10类别3. Alpha参数的作用正负样本平衡阿尔法值就是用来平衡正样本跟负样本的问题图像中背景负样本远多于目标正样本解决alpha给正样本损失加权小目标/稀疏场景alpha ≈ 0.9加大正样本权重正负均衡场景alpha ≈ 0.5-0.6二、数据格式转换NCHW ↔ NHWC1. 转换原因把那个NCHW转成NHWC → PyTorch默认NCHW处理时转NHWC更方便索引2. 具体转换# 输入: [N, C, H, W] [N, 45, 13, 13]以13×13特征图为例outputoutput.permute(0,2,3,1)# [N, 13, 13, 45]outputoutput.view(N,H,W,3,15)# [N, 13, 13, 3, 15]# 现在可以方便地取: output[..., 0]是conf, output[..., 1:5]是坐标三、正负样本判定关键逻辑1. 判定依据标签里面的第0个值大于0...说明它是有目标的# target[..., 0] 存储的是IoU值或是否匹配的标记pos_masktarget[...,0]0# 正样本掩码布尔值neg_masktarget[...,0]0# 负样本掩码2. 损失计算策略样本类型计算哪些损失原因正样本置信度 坐标 类别完整学习检测负样本仅置信度只学习这是背景负样本的话呢只需要让他学习一下他是负样本的这个置信度就可以了一张图里面背景就是负样本目标物体就是正样本往往遇到负样本偏多但是负样本不需要反算原图坐标不需要学习类别。四、类别损失的两种实现BCE vs Softmax1. Softmax CrossEntropyCE使用这个Softmax去做...多分类的交叉熵损失函数特点自动将标签转one-hot有排他性各类别概率和为1问题标签里面有包含关系的就不能用Softmax例“人包含男人”、“女人”Softmax会强制互斥2. BCEBinary Cross Entropy⭐ YOLOv3采用用BCE损失函数去做多分类...各是各的他们之间没有关系特点每个类别独立做二分类0-1之间无排他性优势允许标签有包含关系人女人可同时为高概率输出直接是置信度无需额外转换3. 标签处理差异方法标签格式代码处理Softmax普通索引[batch,]需argmax从one-hot转回BCEone-hot[batch, num_classes]直接用无需转换因为我们这个标签我们是做了one hot的...你要用这个Softmax的话呢你就得又得把它要转回去五、测试/推理代码Detection1. 整体流程图像输入 → 网络前向 → 三尺度输出 → 滤波阈值→ 反算坐标 → NMS → 画框2. 滤波操作Filter# 传进去一个阈值...得到index和偏移量conftorch.sigmoid(output[...,0])# 加sigmoid归一化到0-1maskconfthreshold# 阈值过滤如0.5indextorch.nonzero(mask,as_tupleFalse)# nonzero...拿非零索引offsetsoutput[mask]# 拿到对应偏移量3. 坐标反算Decode通过index和偏移量...反算出来13×13的特征图上的所有box公式对应代码# index: [N, 4] → [batch, y, x, anchor_id]# stride: 13×13特征图对应3226×26对应1652×52对应8Cxindex[:,2]*stride# 网格左上角xW维度Cyindex[:,1]*stride# 网格左上角yH维度# offsets: [tx, ty, tw, th, conf, ...]bx(torch.sigmoid(offsets[:,1])index[:,2])*stride# x中心by(torch.sigmoid(offsets[:,2])index[:,1])*stride# y中心bwanchors[:,0]*torch.exp(offsets[:,3])# 宽bhanchors[:,1]*torch.exp(offsets[:,4])# 高4. 类别和置信度提取conftorch.sigmoid(offsets[:,0])# 目标置信度cls_scoresoffsets[:,5:]# 10个类别分数cls_idtorch.argmax(cls_scores,dim1)# 取最大值的索引六、NMS优化类别感知NMS1. 传统NMS的问题普通的NMS...只要两个目标接的很接近他就把它给丢掉了狗和猫靠在一起 → 只保留一个框 →漏检2. YOLOv3的改进同类别才去做NMS...不同类别的话呢哪怕重合都非常的高也不会把你给丢掉逻辑forclsinunique_classes:# 只对该类别的框做NMSsame_cls_boxesboxes[classescls]keepnms(same_cls_boxes,iou_threshold)狗class0和猫class1互不干扰两只狗同为class0仍会抑制七、多尺度损失相加13×13的特征图上的损失还有26×26还有52×52...三种损失都要加起来# YOLOv3三个检测头loss_13compute_loss(output_13,target_13,anchors[6:9])# 大目标loss_26compute_loss(output_26,target_26,anchors[3:6])# 中目标loss_52compute_loss(output_52,target_52,anchors[0:3])# 小目标total_lossloss_13loss_26loss_52八、下节课预告讲师原话整理内容说明图像缩放对图像进行缩放标签...比较好的一个方法→ LetterBox保持长宽比填充K-meansK-means是怎么样子的→ 锚框聚类算法九、关键术语对照表口语→标准术语口语/错别字标准术语上下文“猫框”锚框(Anchor)anchor box“猫跨”锚框同上口音问题“执行度”置信度(Confidence)目标存在概率“镇压本”正样本Positive sample“负压本/负样本”负样本Negative sample“便宜量”偏移量(Offset)tx, ty, tw, th“反算”解码(Decode)偏移量→真实坐标“滤波”过滤(Filter)阈值筛选“trade的”TensorPyTorch张量“must”mask掩码“low zero”nonzero非零索引“脑子”nonzero口音“MS/NMS”NMS(Non-Maximum Suppression)非极大值抑制“Kimi死”K-meansK均值聚类“阿达姆”Adam优化器“sgd”SGD随机梯度下降“揣个蹬侧”Detector检测器

相关新闻

一文掌握高分文章思路!非靶标代谢组学发文秘籍:构建表型–代谢–机制完整研究链条

一文掌握高分文章思路!非靶标代谢组学发文秘籍:构建表型–代谢–机制完整研究链条

非靶标代谢组学是生命活动的“最终输出端”和“动态快照”,它最接近表型。然而,代谢物水平变化本质是生物学过程的“结果”,其上游驱动力来自基因组、转录组与蛋白质组的协同调控。因此,将非靶标代谢组学与基因组/转录组/蛋白组数…

2026/7/14 23:54:45 阅读更多 →
Ansys Dyna模拟:混凝土与金属材料SPH粒子流切割及刀片攻进过程热力耦合与温度场模拟分析

Ansys Dyna模拟:混凝土与金属材料SPH粒子流切割及刀片攻进过程热力耦合与温度场模拟分析

Ansys/dyna|混凝土、金属类材料SPH粒子流切割、刀片攻进模拟,热力耦合,温度场模拟。在工业仿真领域,材料切割过程的动态模拟堪称"硬骨头"。当传统有限元方法遇上金属切削产生的网格畸变,或是混凝土破碎时飞溅…

2026/7/14 20:02:00 阅读更多 →
博客:Netty 高性能网络编程核心(Reactor / Pipeline / 粘拆包 / ByteBuf / 背压)

博客:Netty 高性能网络编程核心(Reactor / Pipeline / 粘拆包 / ByteBuf / 背压)

当你开始做长连接(TCP/WebSocket)或高并发网关时,Java 原生 NIO 很快会让你陷入“Selector、ByteBuffer、状态机、粘拆包、异常处理”这些细节里。 Netty 的价值是:把这些复杂度抽象成可组合的组件,让你专注业务协议和…

2026/7/14 12:33:33 阅读更多 →

最新新闻

深入解析Agents-A1-8bit架构:MoE专家混合模型的技术奥秘

深入解析Agents-A1-8bit架构:MoE专家混合模型的技术奥秘

深入解析Agents-A1-8bit架构:MoE专家混合模型的技术奥秘 【免费下载链接】Agents-A1-8bit 项目地址: https://ai.gitcode.com/hf_mirrors/mlx-community/Agents-A1-8bit Agents-A1-8bit是基于MLX框架的8位量化视觉语言模型,采用创新的MoE&#x…

2026/7/15 14:11:23 阅读更多 →
PHP Period完全教程:从基础到高级的时间间隔管理

PHP Period完全教程:从基础到高级的时间间隔管理

PHP Period完全教程:从基础到高级的时间间隔管理 【免费下载链接】period PHPs time range API 项目地址: https://gitcode.com/gh_mirrors/per/period PHP Period 是 PHP 开发者的终极时间范围管理解决方案,这个强大的库提供了完整的时间间隔 AP…

2026/7/15 14:11:23 阅读更多 →
NomNom存档编辑器:5步快速掌握《无人深空》终极修改工具完全指南

NomNom存档编辑器:5步快速掌握《无人深空》终极修改工具完全指南

NomNom存档编辑器:5步快速掌握《无人深空》终极修改工具完全指南 【免费下载链接】NomNom NomNom is the most complete savegame editor for NMS but also shows additional information around the data youre about to change. You can also easily look up each…

2026/7/15 14:09:21 阅读更多 →
C++20中的协程(Coroutine)功能解析:co_await

C++20中的协程(Coroutine)功能解析:co_await

协程的概念 C++20引入了协程(coroutine)的概念,首先介绍下什么是协程: 协程是一个可以暂停执行以便稍后恢复的函数。但与函数不同的是协程是无堆栈的:它们通过返回调用者(caller)来暂停执行,恢复执行所需的数据与堆栈分开存储。这允许异步执行顺序代码(例如,在没有显式…

2026/7/15 14:02:55 阅读更多 →
Alipay Ruby Gem客户端配置详解:如何安全设置RSA密钥和API凭证

Alipay Ruby Gem客户端配置详解:如何安全设置RSA密钥和API凭证

Alipay Ruby Gem客户端配置详解:如何安全设置RSA密钥和API凭证 【免费下载链接】alipay Unofficial alipay ruby gem 项目地址: https://gitcode.com/gh_mirrors/alipa/alipay 支付宝Ruby客户端配置是集成支付宝支付功能的关键步骤!🚀…

2026/7/15 14:02:55 阅读更多 →
戴森球计划工厂模块化设计终极指南:从基础架构到高级优化的完整技术方案

戴森球计划工厂模块化设计终极指南:从基础架构到高级优化的完整技术方案

戴森球计划工厂模块化设计终极指南:从基础架构到高级优化的完整技术方案 【免费下载链接】FactoryBluePrints 游戏戴森球计划的**工厂**蓝图仓库 项目地址: https://gitcode.com/GitHub_Trending/fa/FactoryBluePrints 还在为戴森球计划中复杂的工厂架构设计…

2026/7/15 14:00:54 阅读更多 →

日新闻

YOLO11 改进 - 特征融合 | STFFM空间时间特征融合模块,强化时空互补、抑制噪声,助力小目标检测高效涨点

YOLO11 改进 - 特征融合 | STFFM空间时间特征融合模块,强化时空互补、抑制噪声,助力小目标检测高效涨点

前言 本文介绍了面向红外小目标检测的时空特征融合模块——STFFM,用于增强复杂背景下目标与噪声、杂波的区分能力。该方法通过拼接空间特征与时间/运动特征,并结合通道注意力、空间注意力和残差增强机制,实现对关键语义通道与疑似目标区域的…

2026/7/15 0:01:00 阅读更多 →
YOLO26 改进 - 特征融合 | STFFM空间时间特征融合模块,强化时空互补、抑制噪声,助力小目标检测高效涨点

YOLO26 改进 - 特征融合 | STFFM空间时间特征融合模块,强化时空互补、抑制噪声,助力小目标检测高效涨点

前言 本文介绍了面向复杂背景小目标检测的时空特征融合模块——STFFM。该模块通过空间分支与时间/运动分支的特征拼接,引入通道注意力和空间注意力对融合特征进行自适应筛选,并结合残差增强与通道压缩,突出目标区域、抑制背景噪声。我们将 S…

2026/7/15 0:01:00 阅读更多 →
行星减速机为什么能提高扭矩?从功率守恒到输出扭矩校核

行星减速机为什么能提高扭矩?从功率守恒到输出扭矩校核

一、为什么减速以后扭矩会增大 旋转机械的功率、转速和扭矩之间存在以下关系: T 9550 P n 其中: T为扭矩,单位Nm; P为功率,单位kW; n为转速,单位r/min。 在功率基本不变的情况下:…

2026/7/15 0:03:00 阅读更多 →

周新闻

互联网大厂 Java 求职面试:燕双非的搞笑回答与技术探讨

互联网大厂 Java 求职面试:燕双非的搞笑回答与技术探讨

互联网大厂 Java 求职面试:燕双非的搞笑回答与技术探讨 在一个阳光明媚的上午,互联网大厂的面试官坐在桌前,准备迎接他的面试候选人——燕双非,一个以搞笑和幽默著称的程序员。第一轮提问 面试官:燕双非,作…

2026/7/14 16:53:23 阅读更多 →
车载以太网PMA测试设备选型:示波器、VNA、信号源3类仪器关键参数与预算评估

车载以太网PMA测试设备选型:示波器、VNA、信号源3类仪器关键参数与预算评估

车载以太网PMA测试设备选型:示波器、VNA、信号源3类仪器关键参数与预算评估在智能驾驶和车联网技术快速发展的今天,车载以太网作为新一代车载网络的核心传输技术,其物理层性能直接决定了数据传输的可靠性和稳定性。1000BASE-T1作为当前主流的…

2026/7/14 14:00:13 阅读更多 →
VSCode EIDE 插件 2.0:APM32/STM32 项目迁移实战,5步完成Keil工程转换

VSCode EIDE 插件 2.0:APM32/STM32 项目迁移实战,5步完成Keil工程转换

VSCode EIDE 插件 2.0:APM32/STM32 项目迁移实战指南嵌入式开发领域正经历一场工具链的静默革命。当传统Keil用户首次打开VSCode的扩展市场搜索EIDE时,往往会惊讶于这个看似简单的插件竟能重构十余年的开发习惯。本文将揭示如何用五个精准步骤&#xff0…

2026/7/14 7:15:24 阅读更多 →

月新闻