【目标检测】【深度学习】【Pytorch版本】YOLOV3模型算法详解

news2025/4/8 11:20:55

【目标检测】【深度学习】【Pytorch版本】YOLOV3模型算法详解

文章目录

  • 【目标检测】【深度学习】【Pytorch版本】YOLOV3模型算法详解
  • 前言
  • YOLOV3的模型结构
    • YOLOV3模型的基本执行流程
    • YOLOV3模型的网络参数
  • YOLOV3的核心思想
    • 前向传播阶段
    • 反向传播阶段
  • 总结


前言

YOLOV3是由华盛顿大学的Joseph Redmon等人在《YOLOv3: An Incremental Improvement》【论文地址】中提出的YOLO系列单阶段目标检测模型的升级改进版,核心思想是在YOLOV2基础上,通过引入多项关键技术和模块提升检测性能,即特征金字塔网络(FPN)结构的多尺度特征融合、更深的Darknet-53网络、借鉴了ResNet的残差连接设计、改进的损失函数等使得YOLOV3在保持高速的同时,大幅提升了检测精度。

Joseph Redmon在提出了YOLO三部曲之后,宣布退出计算机视觉研究,后续的YOLO系列是其他人在其基础上的创新改进。


YOLOV3的模型结构

YOLOV3模型的基本执行流程

下图是博主根据原论文绘制了YOLOV3模型流程示意图:

基本流程: 将输入图像调整为固定大小(416x416),使用Darknet-53作为骨干网络来提取图像的特征(包含了检测框位置、大小、置信度以及分类概率),在三个不同尺度特征图划分网格,每个单元网格负责预测一定数量的边界框及其对应的类别概率,分别对应于小、中、大尺寸目标的检测。

YOLOV3模型的网络参数

YOLOV3网络参数: YOLOV3采用的Darknet-53结构,由于没有全连接层,模型的输入可以是任意图片大小,不管是416×416还是320×320,因此可以进行多尺度训练。

53是指有53个Convolutional层。


YOLOV3的核心思想

前向传播阶段

特征金字塔(FPN): 包含了从底层到顶层的多个尺度的特征图,每个特征图都融合了不同层次的特征信息,每一层都对应一个特定的尺度范围,利用不同尺度的特征图进行检测,使得模型能够同时处理不同大小的目标【参考】 。

通过以下步骤实现多尺度特征的提取和融合:

  • step1(自底向上): 使用基础网络(ResNet等)作为骨干网络(backbone),对输入图像中逐层提取特征,特征图的分辨率逐渐降低,按照输出特征图分辨率大小划分为不同的阶段(stage),相邻俩个阶段的特征图,后一个阶段相对于前一个阶段特征图尺度缩小一半,通道数则增加一倍;
  • step2(自顶向下): 后一阶段的高层特征图上采样(up-sampling,通常采用2倍邻近插值算法),使其分辨率尺寸与前一阶段的低层特征图相匹配,;
  • step3(横向连接): 将俩个特征图进行通道拼接,完成低层特征图的高分辨率信息与高层特征图的丰富语义信息的融合。

检测头: 基于多尺度特征图来预测目标的位置和类别,作用如下:

  • 多尺度预测: 在三个不同尺度的特征图上分别应用检测头,使得模型可以同时处理小、中、大型目标的检测问题,有效地提高模型对不同尺寸目标的检测能力;
  • 边界框预测: 每个检测头基于一组(3个)预选框(anchor boxes)负责预测边界框,预测预选框相对于真实框(ground truth)的偏移和缩放来确定边界框位置,预测框中目标存在的概率以及目标类别的概率来确定边界框的类别。

位置预测: YOLOV3延续了YOLOV2的设计,利用预选框来预测边界框相对预选框之间的误差补偿(offsets),预测边界框位置(中心点)在所属网格单元左上角位置进行相对偏移值,预测边界框尺寸基于所对应的预选框宽高进行相对缩放:
b x = σ ( t x ) + c x b y = σ ( t y ) + c y b w = p w e t w b h = p h e t h \begin{array}{l} {b_x} = \sigma ({t_x}) + {c_x}\\ {b_y} = \sigma ({t_y}) + {c_y}\\ {b_w} = {p_w}{e^{{t_w}}}\\ {b_h} = {p_h}{e^{{t_h}}} \end{array} bx=σ(tx)+cxby=σ(ty)+cybw=pwetwbh=pheth

使用sigmoid函数处理偏移值,将边界框中心点约束在所属网格单元中,网格单元的尺度为1,而偏移值在(0,1)范围内,防止过度偏移。

( c x , c y ) ({c_x},{c_y}) (cx,cy)是网格单元的左上角坐标, p w p_w pw p h p_h ph是预选框的宽度与高度, e t w e^{{t_w}} etw e t h e^{{t_h}} eth则没有过多约束是因为物体的大小是不受限制的。

多尺度训练: 采用不同分辨率的多尺度图像训练(输入图像尺寸动态变化),让模型能够鲁棒地运行在不同尺寸的图像上,提高了模型对不同尺寸目标的泛化能力 。

数据正负样本: 、 预测框分为三 种情况::正样本(positive)、负样本(negative)和忽略样本(ignore)。

  • 正样本: 任取一个真实框,计算与其类别相同的全部预测框IOU,IOU最大的预测框作为正样本,正样本IOU可能小于阈值。一个预测框只分配给一个真实框。正样本产生置信度loss、检测框loss以及类别loss,真实框的类别标签是onehot编码,置信度标签为1。

    当前真实框已经匹配了一个预测框,那么下一个真实框就在余下的预测框中匹配IOU最大的作为其正样本。

  • 忽略样本: 与任意一个真实框IOU大于阈值但没成为正样本的预测框,就是忽略样本。忽略样样本不产生任何loss。

  • 负样本: 任取一个真实框,计算与其类别相同的全部预测框IOU,IOU小于阈值的预测框作为负样本。负样本只产生置信度loss、真实框的置信度标签为0。

根据上述标准,下图中以检测狗为例,浅绿色是真实框,绿色是正样本预测框,橙色是忽略样本预测框,红色则是负样本预测框。

在之前的YOLO版本中,正样本使用真实框与预测框的IOU作为置信度,置信度始终比较小,检测的召回率不高(过滤太多找不全),特别是在学习小物体时,IOU可能更小,导致无法有效学习。YOLOV3将正样本置信度设置为1,因为置信度本身就是二分类问题,即预测框中是不是一个真实物体,标签是1或0更加合理。

反向传播阶段

损失函数: YOLOV3的损失函数公式为:
L o s s = − λ c o o r d ∑ i = 0 S 2 ∑ j = 0 B 1 i j o b j [ x ∧ i j log ⁡ ( x i j ) + ( 1 − x ∧ i j ) log ⁡ ( 1 − x i j ) + y ∧ i j log ⁡ ( y i j ) + ( 1 − y ∧ i j ) log ⁡ ( 1 − y i j ) ] + 1 2 λ c o o r d ∑ i = 0 S 2 ∑ j = 0 B 1 i j o b j [ ( w i j − w ∧ i j ) 2 + ( h i j − h ∧ i j ) 2 ] − ∑ i = 0 S 2 ∑ j = 0 B 1 i j o b j [ C ∧ i j log ⁡ ( C i j ) + ( 1 − C ∧ i j ) log ⁡ ( 1 − C i j ) ] − λ n o o b j ∑ i = 0 S 2 ∑ j = 0 B 1 i j n o o b j [ C ∧ i j log ⁡ ( C i j ) + ( 1 − C ∧ i j ) log ⁡ ( 1 − C i j ) ] − ∑ i = 0 S 2 ∑ j = 0 B 1 i j o b j ∑ c ∈ c l a s s e s [ P ∧ i j c log ⁡ ( P i j c ) + ( 1 − P ∧ i j c ) log ⁡ ( 1 − P i j c ) ] L{\rm{oss}} = - {\lambda _{coord}}\sum\limits_{i = 0}^{{S^2}} {\sum\limits_{j = 0}^B {1_{ij}^{obj}\left[ {{{\mathop x\limits^ \wedge }_{ij}}\log ({x_{ij}}) + (1 - {{\mathop x\limits^ \wedge }_{ij}})\log (1 - {x_{ij}}) + {{\mathop y\limits^ \wedge }_{ij}}\log ({y_{ij}}) + (1 - {{\mathop y\limits^ \wedge }_{ij}})\log (1 - {y_{ij}})} \right]} } + \frac{1}{2}{\lambda _{coord}}\sum\limits_{i = 0}^{{S^2}} {\sum\limits_{j = 0}^B {1_{ij}^{obj}\left[ {{{({w_{ij}} - {{\mathop w\limits^ \wedge }_{ij}})}^2} + {{({h_{ij}} - {{\mathop h\limits^ \wedge }_{ij}})}^2}} \right]} } - \sum\limits_{i = 0}^{{S^2}} {\sum\limits_{j = 0}^B {1_{ij}^{obj}\left[ {{{\mathop C\limits^ \wedge }_{ij}}\log ({C_{ij}}) + (1 - {{\mathop C\limits^ \wedge }_{ij}})\log (1 - {C_{ij}})} \right]} } - {\lambda _{noobj}}\sum\limits_{i = 0}^{{S^2}} {\sum\limits_{j = 0}^B {1_{ij}^{noobj}\left[ {{{\mathop C\limits^ \wedge }_{ij}}\log ({C_{ij}}) + (1 - {{\mathop C\limits^ \wedge }_{ij}})\log (1 - {C_{ij}})} \right]} - \sum\limits_{i = 0}^{{S^2}} {\sum\limits_{j = 0}^B {1_{ij}^{obj}\sum\limits_{c \in classes} {\left[ {{{\mathop P\limits^ \wedge }_{ijc}}\log ({P_{ijc}}) + (1 - {{\mathop P\limits^ \wedge }_{ijc}})\log (1 - {P_{ijc}})} \right]} } } } Loss=λcoordi=0S2j=0B1ijobj[xijlog(xij)+(1xij)log(1xij)+yijlog(yij)+(1yij)log(1yij)]+21λcoordi=0S2j=0B1ijobj[(wijwij)2+(hijhij)2]i=0S2j=0B1ijobj[Cijlog(Cij)+(1Cij)log(1Cij)]λnoobji=0S2j=0B1ijnoobj[Cijlog(Cij)+(1Cij)log(1Cij)]i=0S2j=0B1ijobjcclasses[Pijclog(Pijc)+(1Pijc)log(1Pijc)]

  • ∑ i = 0 S 2 \sum\limits_{{\rm{i}} = 0}^{{S^2}} {} i=0S2表示遍历所有网格单元并进行累加;
  • ∑ j = 0 B \sum\limits_{{\rm{j}} = 0}^B {} j=0B表示遍历所有预测边界框并进行累加。

预测框位置损失: 计算了所有预测框的位置(中心坐标)与真实框的位置的交叉熵误差损失和。
− λ c o o r d ∑ i = 0 S 2 ∑ j = 0 B 1 i j o b j [ x ∧ i j log ⁡ ( x i j ) + ( 1 − x ∧ i j ) log ⁡ ( 1 − x i j ) + y ∧ i j log ⁡ ( y i j ) + ( 1 − y ∧ i j ) log ⁡ ( 1 − y i j ) ] - {\lambda _{coord}}\sum\limits_{i = 0}^{{S^2}} {\sum\limits_{j = 0}^B {1_{ij}^{obj}\left[ {{{\mathop x\limits^ \wedge }_{ij}}\log ({x_{ij}}) + (1 - {{\mathop x\limits^ \wedge }_{ij}})\log (1 - {x_{ij}}) + {{\mathop y\limits^ \wedge }_{ij}}\log ({y_{ij}}) + (1 - {{\mathop y\limits^ \wedge }_{ij}})\log (1 - {y_{ij}})} \right]} } λcoordi=0S2j=0B1ijobj[xijlog(xij)+(1xij)log(1xij)+yijlog(yij)+(1yij)log(1yij)]

  • ( x ∧ i j , y ∧ i j ) {({{\mathop {{\rm{ }}x}\limits^ \wedge }_{ij}},{{\mathop {{\rm{ y}}}\limits^ \wedge }_{ij}})} (xij,yij)表示真实框的中心点坐标;
  • ( x i j , y i j ) {({x_{ij}},{y_{ij}})} (xij,yij)表示预测框的中心点坐标;
  • λ c o o r d {\lambda _{coord}} λcoord表示协调系数, λ c o o r d = ( 2 − w i j ∧ h i j ∧ ) {\lambda _{coord}} = (2 - {\mathop w\limits^ \wedge _{ij}}{\mathop h\limits^ \wedge _{ij}}) λcoord=(2ijwijh)协调检测目标不同大小对误差函数的影响:检测目标比较小时增大其对损失函数的影响,相反检测目标比较大时消减其对损失函数的影响;
  • 1 i j o b j {1_{ij}^{obj}} 1ijobj表示当前预测框是否预测一个目标物体,如果预测一个目标则为1,否则等于0。

预测框尺度损失: 计算了所有预测框的宽高与真实框的宽高求和平方误差损失和。
1 2 λ c o o r d ∑ i = 0 S 2 ∑ j = 0 B 1 i j o b j [ ( w i j − w ∧ i j ) 2 + ( h i j − h ∧ i j ) 2 ] \frac{1}{2}{\lambda _{coord}}\sum\limits_{i = 0}^{{S^2}} {\sum\limits_{j = 0}^B {1_{ij}^{obj}\left[ {{{({w_{ij}} - {{\mathop w\limits^ \wedge }_{ij}})}^2} + {{({h_{ij}} - {{\mathop h\limits^ \wedge }_{ij}})}^2}} \right]} } 21λcoordi=0S2j=0B1ijobj[(wijwij)2+(hijhij)2]

  • ( w ∧ i j , h ∧ i j ) {({{\mathop {{\rm{ }}w}\limits^ \wedge }_{ij}},{{\mathop {{\rm{ h}}}\limits^ \wedge }_{ij}})} (wij,hij)表示真实框的中心点坐标;
  • ( w i j , h i j ) {({w_{ij}},{h_{ij}})} (wij,hij)表示预测框的中心点坐标。

预测框置信度损失: 计算了所有预测框的置信度与真实框的置信度的交叉熵误差损失和。
− ∑ i = 0 S 2 ∑ j = 0 B 1 i j o b j [ C ∧ i j log ⁡ ( C i j ) + ( 1 − C ∧ i j ) log ⁡ ( 1 − C i j ) ] − λ n o o b j ∑ i = 0 S 2 ∑ j = 0 B 1 i j n o o b j [ C ∧ i j log ⁡ ( C i j ) + ( 1 − C ∧ i j ) log ⁡ ( 1 − C i j ) ] - \sum\limits_{i = 0}^{{S^2}} {\sum\limits_{j = 0}^B {1_{ij}^{obj}\left[ {{{\mathop C\limits^ \wedge }_{ij}}\log ({C_{ij}}) + (1 - {{\mathop C\limits^ \wedge }_{ij}})\log (1 - {C_{ij}})} \right]} } - {\lambda _{noobj}}\sum\limits_{i = 0}^{{S^2}} {\sum\limits_{j = 0}^B {1_{ij}^{noobj}\left[ {{{\mathop C\limits^ \wedge }_{ij}}\log ({C_{ij}}) + (1 - {{\mathop C\limits^ \wedge }_{ij}})\log (1 - {C_{ij}})} \right]} } i=0S2j=0B1ijobj[Cijlog(Cij)+(1Cij)log(1Cij)]λnoobji=0S2j=0B1ijnoobj[Cijlog(Cij)+(1Cij)log(1Cij)]

  • C ∧ i j {{{\mathop C\limits^ \wedge }_{ij}}} Cij表示真实框的置信度,包含检测目标取值为1,否则还是0;
  • C i j {{C_{ij}}} Cij表示预测框的置信度;
  • λ n o o b j {\lambda _{noobj}} λnoobj表示预测框没有目标的权重系数,通常大部分预测框都不包含检测目标物体,导致模型预测倾向于预测框中没有目标物体,因此必须减少没有目标物体的预测框的损失权重。

预测框类别损失: 计算了所有预测框的类别概率与真实框的类别概率的交叉熵误差损失和。
− ∑ i = 0 S 2 ∑ j = 0 B 1 i j o b j ∑ c ∈ c l a s s e s [ P ∧ i j c log ⁡ ( P i j c ) + ( 1 − P ∧ i j c ) log ⁡ ( 1 − P i j c ) ] - \sum\limits_{i = 0}^{{S^2}} {\sum\limits_{j = 0}^B {1_{ij}^{obj}\sum\limits_{c \in classes} {\left[ {{{\mathop P\limits^ \wedge }_{ijc}}\log ({P_{ijc}}) + (1 - {{\mathop P\limits^ \wedge }_{ijc}})\log (1 - {P_{ijc}})} \right]} } } i=0S2j=0B1ijobjcclasses[Pijclog(Pijc)+(1Pijc)log(1Pijc)]

  • P ∧ i j c {{{\mathop P\limits^ \wedge }_{ijc}}} Pijc表示真实框的类别概率,onehot编码,所属的类别概率为1,其他类概率为0;
  • P i j c {{P_{ijc}}} Pijc表示预测框的类别概率。

在YOLOV1和YOLOV2利用softmax来进行概率预测,这种激活函数让所有类别的概率相加等于1,因此只能进行单一分类预测,而在YOLOV3中将softmax修改成sigmoid函数,对不同类别单独进行二分类概率预测,因此进行多标签类别的分类预测。

YOLOV3可以同时是动物和猪俩类(sigmoid函数),而不是动物和猪中选择概括最大的一类(softmax函数)。


总结

尽可能简单、详细的介绍了YOLOV3模型的结构,深入讲解了YOLOV3核心思想。

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

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

相关文章

IdeaVim-AceJump

‌AceJump 是一款专为IntelliJ IDEA平台打造的开源插件,旨在通过简单的快捷键操作帮助用户快速跳转到编辑器中的任何符号位置,如变量名、方法调用或特定的字符串‌。无论是大型项目还是日常编程,AceJump 都能显著提升你的代码导航速度和效率。…

DayDreamer: World Models forPhysical Robot Learning

DayDreamer:用于物理机器人学习的世界模型 Philipp Wu* Alejandro Escontrela* Danijar Hafner* Ken Goldberg Pieter Abbeel 加州大学伯克利分校 *贡献相同 摘要:为了在复杂环境中完成任务,机器人需要从经验中学习。深度强化学习是机器人学…

Flutter vs React Native:跨平台移动开发框架对比

文章目录 前言1. 框架概述什么是 Flutter?什么是 React Native? 2. 性能对比Flutter 的性能表现React Native 的性能表现总结: 3. 开发体验对比3.1 开发效率3.2 UI 组件库 4. 生态系统对比5. 适用场景分析6. 结论:如何选择&#x…

用matlab搭建一个简单的图像分类网络

文章目录 1、数据集准备2、网络搭建3、训练网络4、测试神经网络5、进行预测6、完整代码 1、数据集准备 首先准备一个包含十个数字文件夹的DigitsData,每个数字文件夹里包含1000张对应这个数字的图片,图片的尺寸都是 28281 像素的,如下图所示…

【AI4CODE】5 Trae 锤一个基于百度Amis的Crud应用

【AI4CODE】目录 【AI4CODE】1 Trae CN 锥安装配置与迁移 【AI4CODE】2 Trae 锤一个 To-Do-List 【AI4CODE】3 Trae 锤一个贪吃蛇的小游戏 【AI4CODE】4 Trae 锤一个数据搬运工的小应用 1 百度 Amis 简介 百度 Amis 是一个低代码前端框架,由百度开源。它通过 J…

npm webpack打包缓存 导致css引用地址未更新

问题如下: 测试环境配置: publicPath: /chat/,生产环境配置: publicPath: /,css中引用背景图片 background-image: url(/assets/images/calendar/arrow-left.png);先打包测试环境,观察打包后的css文件引用的背景图片地址 可以全…

ollama导入huggingface下载的大模型并量化

1. 导入GGUF 类型的模型 1.1 先在huggingface 下载需要ollama部署的大模型 1.2 编写modelfile 在ollama 里面输入 ollama show --modelfile <你有的模型名称> eg: ollama show --modelfile qwen2.5:latest修改其中的from 路径为自己的模型下载路径 FROM /Users/lzx/A…

Java 集合 Map Stream流

目录 集合遍历for each map案例 ​编辑 这种数组的遍历是【index】​编辑map排序【对象里重写compareTo​编辑map排序【匿名内部类lambda​编辑 stream流​编辑 ​编辑获取&#xff1a; map的键是set集合&#xff0c;获取方法map.keySet() map的值是collection 集合&…

【网络安全实验】PKI(证书服务)配置实验

目录 一、PKI相关概念 1.1 定义与核心功能 1.2 PKI 系统的组成 1.证书颁发机构&#xff08;CA, Certificate Authority&#xff09; 2.注册机构&#xff08;RA, Registration Authority&#xff09; 3.数字证书 1.3 PKI 的功能 1.4 PKI认证体系&#xff1a; 工作流程 …

【数据集】多视图文本数据集

多视图文本数据集指的是包含多个不同类型或来源的信息的文本数据集。不同视图可以来源于不同的数据模式&#xff08;如原始文本、元数据、网络结构等&#xff09;&#xff0c;或者不同的文本表示方法&#xff08;如 TF-IDF、词嵌入、主题分布等&#xff09;。这些数据集常用于多…

学透Spring Boot — 007. 七种配置方式及优先级

Spring Boot 提供很多种方式来加载配置&#xff0c;本文我们会用Tomcat的端口号作为例子&#xff0c;演示Spring Boot 常见的配置方式。 几种配置方式 使用默认配置 新建一个项目什么都不配置&#xff0c;Spring Boot会自动配置Tomcat端口号。 启动日志 TomcatWebServer :…

【youcans论文精读】弱监督深度检测网络(Weakly Supervised Deep Detection Networks)

欢迎关注『youcans论文精读』系列 本专栏内容和资源同步到 GitHub/youcans 【youcans论文精读】弱监督深度检测网络 WSDDN 0. 弱监督检测的开山之作0.1 论文简介0.2 WSDNN 的步骤0.3 摘要 1. 引言2. 相关工作3. 方法3.1 预训练网络3.2 弱监督深度检测网络3.3 WSDDN训练3.4 空间…

【服务日志链路追踪】

MDCInheritableThreadLocal和spring cloud sleuth 在微服务架构中&#xff0c;日志链路追踪&#xff08;Logback Distributed Tracing&#xff09; 是一个关键需求&#xff0c;主要用于跟踪请求在不同服务间的调用链路&#xff0c;便于排查问题。常见的实现方案有两种&#x…

【行测】判断推理:图形推理

> 作者&#xff1a;დ旧言~ > 座右铭&#xff1a;读不在三更五鼓&#xff0c;功只怕一曝十寒。 > 目标&#xff1a;掌握 图形推理 基本题型&#xff0c;并能运用到例题中。 > 毒鸡汤&#xff1a;有些事情&#xff0c;总是不明白&#xff0c;所以我不会坚持。早安! …

3D模型给可视化大屏带来了哪些创新,都涉及到哪些技术栈。

一、3D 模型给可视化大屏带来的创新 更直观的视觉体验 传统的可视化大屏主要以二维图表和图形的形式展示数据&#xff0c;虽然能够传达一定的信息&#xff0c;但对于复杂的场景和数据关系&#xff0c;往往难以直观地呈现。而 3D 模型可以将数据以三维立体的形式展示出来&#…

Unity HDRP管线用ShaderGraph还原Lit,方便做拓展;

里面唯一的重点就是判断有无这张复合图&#xff0c;我用的是颜色判断&#xff1a; float Tex TexCol.r*TexCol.g*TexCol.b*TexCol.a; if(Tex 1) { IsOrNot 1; } else { IsOrNot 0; } 其他的正常解码就行&#xff0c;对了法线贴图孔位记得设置成normal&#xff0c;不然的话…

绝缘升级 安全无忧 金能电力环保绝缘胶垫打造电力安全防护新标杆

在电力安全领域&#xff0c;一块看似普通的胶垫&#xff0c;却是守护工作人员生命安全的“第一道防线”。近年来&#xff0c;随着电网设备升级和环保要求趋严&#xff0c;传统绝缘胶垫有异味、易老化、绝缘性能不足等问题逐渐暴露。为此&#xff0c;金能电力凭借技术创新推出新…

Linux命令-iotop

iotop 命令 iotop 是一个用于实时监控磁盘 I/O 活动的工具&#xff0c;可以显示哪些进程正在使用磁盘资源。 参数 描述 –version 显示程序版本号并退出 -h, --help 显示此帮助消息并退出 -o, --only 仅显示实际进行 I/O 操作的进程或线程 -b, --batch 非交互模式&#xff0c;适…

QTableWidget 中insertRow(0)(头插)和 insertRow(rowCount())(尾插)的性能差异

一、目的 在 Qt 的 QTableWidget 中&#xff0c;insertRow(0) &#xff08;头插&#xff09;和 insertRow(rowCount())&#xff08;尾插&#xff09;在性能上存在显著差异。 二、QAbstractItemModel:: insertRows 原文解释 QAbstractItemModel Class | Qt Core 5.15.18 AI 解…

【万字总结】前端全方位性能优化指南(完结篇)——自适应优化系统、遗传算法调参、Service Worker智能降级方案

前言 自适应进化宣言 当监控网络精准定位病灶&#xff0c;真正的挑战浮出水面&#xff1a;系统能否像生物般自主进化&#xff1f; 五维感知——通过设备传感器实时捕获环境指纹&#xff08;如地铁隧道弱光环境自动切换省电渲染&#xff09; 基因调参——150个性能参数在遗传算…