当前位置: 首页 > news >正文

GroundingDINO微调训练_训练日志解释

文章目录

    • 1. 训练日志
      • 1. Epoch 和 Iteration
      • 2. Learning Rate(学习率)
      • 3. ETA(预计剩余时间)
      • 4. Time 和 Data Time
      • 5. Memory
      • 6. Gradient Norm(梯度范数)
      • 7. Loss(损失)
      • 8. Individual Losses
      • 9. Losses for Different Detectors (d0, d1, d2, d3, d4)
      • 10. Encoder Losses (enc_loss_cls, enc_loss_bbox, enc_loss_iou)
      • 11. DN (Dynamic Network) Losses
      • 12. DN Losses for Different Detectors (d0.dn_loss_cls, d1.dn_loss_cls, etc.)
      • 总结
    • 2. 模型在验证集上的评估结果
      • 1. 评估流程
      • 2. COCO评估标准
        • 主要指标
      • 3. 关键评估结果分析
      • 总结

1. 训练日志

12/09 03:54:02 - mmengine - INFO - Epoch(train)  [3][190/794]  base_lr: 1.0000e-04 lr: 1.0000e-04  eta: 15:15:19  time: 1.8053  data_time: 0.0080  memory: 8415  grad_norm: 49.9182  loss: 4.0043  loss_cls: 0.0733  loss_bbox: 0.1035  loss_iou: 0.1393  d0.loss_cls: 0.0847  d0.loss_bbox: 0.1103  d0.loss_iou: 0.1460  d1.loss_cls: 0.0822  d1.loss_bbox: 0.1027  d1.loss_iou: 0.1421  d2.loss_cls: 0.0785  d2.loss_bbox: 0.1031  d2.loss_iou: 0.1392  d3.loss_cls: 0.0774  d3.loss_bbox: 0.1007  d3.loss_iou: 0.1376  d4.loss_cls: 0.0736  d4.loss_bbox: 0.1034  d4.loss_iou: 0.1392  enc_loss_cls: 0.1123  enc_loss_bbox: 0.1300  enc_loss_iou: 0.1698  dn_loss_cls: 0.0012  dn_loss_bbox: 0.1218  dn_loss_iou: 0.1251  d0.dn_loss_cls: 0.0132  d0.dn_loss_bbox: 0.1820  d0.dn_loss_iou: 0.1937  d1.dn_loss_cls: 0.0025  d1.dn_loss_bbox: 0.1306  d1.dn_loss_iou: 0.1352  d2.dn_loss_cls: 0.0016  d2.dn_loss_bbox: 0.1240  d2.dn_loss_iou: 0.1278  d3.dn_loss_cls: 0.0015  d3.dn_loss_bbox: 0.1220  d3.dn_loss_iou: 0.1252  d4.dn_loss_cls: 0.0012  d4.dn_loss_bbox: 0.1217  d4.dn_loss_iou: 0.1250
12/09 03:54:11 - mmengine - INFO - Epoch(train)  [3][195/794]  base_lr: 1.0000e-04 lr: 1.0000e-04  eta: 15:15:18  time: 1.8176  data_time: 0.0080  memory: 9694  grad_norm: 50.3365  loss: 4.0305  loss_cls: 0.0829  loss_bbox: 0.1019  loss_iou: 0.1496  d0.loss_cls: 0.0977  d0.loss_bbox: 0.1050  d0.loss_iou: 0.1537  d1.loss_cls: 0.0886  d1.loss_bbox: 0.1026  d1.loss_iou: 0.1524  d2.loss_cls: 0.0862  d2.loss_bbox: 0.1014  d2.loss_iou: 0.1492  d3.loss_cls: 0.0871  d3.loss_bbox: 0.0994  d3.loss_iou: 0.1476  d4.loss_cls: 0.0839  d4.loss_bbox: 0.1020  d4.loss_iou: 0.1493  enc_loss_cls: 0.1203  enc_loss_bbox: 0.1227  enc_loss_iou: 0.1762  dn_loss_cls: 0.0012  dn_loss_bbox: 0.1099  dn_loss_iou: 0.1237  d0.dn_loss_cls: 0.0130  d0.dn_loss_bbox: 0.1664  d0.dn_loss_iou: 0.1918  d1.dn_loss_cls: 0.0026  d1.dn_loss_bbox: 0.1182  d1.dn_loss_iou: 0.1338  d2.dn_loss_cls: 0.0015  d2.dn_loss_bbox: 0.1119  d2.dn_loss_iou: 0.1264  d3.dn_loss_cls: 0.0015  d3.dn_loss_bbox: 0.1103  d3.dn_loss_iou: 0.1238  d4.dn_loss_cls: 0.0012  d4.dn_loss_bbox: 0.1098  d4.dn_loss_iou: 0.1236

在训练日志中,包含了很多与模型训练相关的参数。这些参数帮助我们理解训练过程中模型的状态、损失以及优化情况。下面是对日志中每一部分的详细解释:

1. Epoch 和 Iteration

Epoch(train)  [3][190/794]
  • Epoch: 当前是第 3 轮训练。
  • 190/794: 这意味着当前训练的第 190 个 batch,在总共有 794 个 batch 的训练集里。

2. Learning Rate(学习率)

base_lr: 1.0000e-04 lr: 1.0000e-04
  • base_lr: 初始学习率。
  • lr: 当前学习率。在这个例子中,base_lr 和当前学习率是相同的,表示没有动态变化或调整。

3. ETA(预计剩余时间)

eta: 15:15:19
  • eta: 预计剩余训练时间,格式为时:分:秒。根据当前的训练进度,预计整个训练还需要 15 小时 15 分 19 秒完成。

4. Time 和 Data Time

time: 1.8053  data_time: 0.0080
  • time: 当前迭代的总时间,1.8053 秒,即每个 batch 的训练时间。
  • data_time: 数据加载时间,0.0080 秒,表示加载每个 batch 数据的时间。

5. Memory

memory: 8415
  • memory: 当前训练所使用的 GPU 显存量(单位为 MB)。在这个例子中,使用了 8415 MB 的 GPU 显存。

6. Gradient Norm(梯度范数)

grad_norm: 49.9182
  • grad_norm: 当前梯度的范数(L2 范数),表示梯度的大小。梯度范数过大或过小可能表明梯度爆炸或消失,影响模型的训练效果。

7. Loss(损失)

loss: 4.0043
  • loss: 当前 batch 的总损失值。它是所有损失项(分类损失、回归损失等)的加和。

8. Individual Losses

loss_cls: 0.0733  loss_bbox: 0.1035  loss_iou: 0.1393

这些是不同类型的损失:

  • loss_cls: 分类损失,衡量模型预测的类别与真实标签之间的差距。
  • loss_bbox: 边框损失,衡量模型预测的边框与真实边框之间的差距。
  • loss_iou: IoU(交并比)损失,衡量预测框与真实框之间的重叠程度。

9. Losses for Different Detectors (d0, d1, d2, d3, d4)

d0.loss_cls: 0.0847  d0.loss_bbox: 0.1103  d0.loss_iou: 0.1460

这些是针对不同级别的检测器(d0 到 d4)计算的损失:

  • d0, d1, d2, d3, d4: 表示不同检测器(可能代表不同分辨率或不同尺度的预测头)。
  • 对每个检测器,损失包括分类损失、边框损失和 IoU 损失。

10. Encoder Losses (enc_loss_cls, enc_loss_bbox, enc_loss_iou)

enc_loss_cls: 0.1123  enc_loss_bbox: 0.1300  enc_loss_iou: 0.1698
  • enc_loss_cls: 编码器中的分类损失。
  • enc_loss_bbox: 编码器中的边框损失。
  • enc_loss_iou: 编码器中的 IoU 损失。

11. DN (Dynamic Network) Losses

dn_loss_cls: 0.0012  dn_loss_bbox: 0.1218  dn_loss_iou: 0.1251
  • dn_loss_cls, dn_loss_bbox, dn_loss_iou: 动态网络的损失,可能涉及模型处理的动态对象或自适应模块的损失。

12. DN Losses for Different Detectors (d0.dn_loss_cls, d1.dn_loss_cls, etc.)

d0.dn_loss_cls: 0.0132  d0.dn_loss_bbox: 0.1820  d0.dn_loss_iou: 0.1937
  • d0.dn_loss_cls, d0.dn_loss_bbox, d0.dn_loss_iou 等表示对于不同检测器(d0 到 d4)中的动态网络损失。它们在不同检测器中针对分类、边框和 IoU 进行的损失计算。

总结

  • 这些日志输出帮助我们追踪训练过程中的模型表现,包括学习率、损失、梯度、内存使用等。
  • 训练损失由多个部分组成,每个部分表示不同任务的损失,例如分类、边框回归和 IoU。
  • 如果损失变化较大,可能需要调整模型结构、学习率、数据预处理等因素。

如果你需要进一步优化训练或分析训练过程,可以使用这些信息来判断哪些方面的损失较大,从而调整模型或训练参数。

2. 模型在验证集上的评估结果

12/09 07:33:42 - mmengine - INFO - Epoch(val) [11][345/352]    eta: 0:00:01  time: 0.1365  data_time: 0.0019  memory: 3155
12/09 07:33:42 - mmengine - INFO - Epoch(val) [11][350/352]    eta: 0:00:00  time: 0.1361  data_time: 0.0019  memory: 3155
12/09 07:33:45 - mmengine - INFO - Evaluating bbox...
Loading and preparing results...
DONE (t=0.46s)
creating index...
index created!
Running per image evaluation...
Evaluate annotation type *bbox*
DONE (t=2.59s).
Accumulating evaluation results...
DONE (t=1.88s).Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.533Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=1000 ] = 0.652Average Precision  (AP) @[ IoU=0.75      | area=   all | maxDets=1000 ] = 0.562Average Precision  (AP) @[ IoU=0.50:0.95 | area= small | maxDets=1000 ] = 0.368Average Precision  (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=1000 ] = 0.497Average Precision  (AP) @[ IoU=0.50:0.95 | area= large | maxDets=1000 ] = 0.597Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.859Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=300 ] = 0.860Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=1000 ] = 0.860Average Recall     (AR) @[ IoU=0.50:0.95 | area= small | maxDets=1000 ] = 0.606Average Recall     (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=1000 ] = 0.833Average Recall     (AR) @[ IoU=0.50:0.95 | area= large | maxDets=1000 ] = 0.883
12/09 07:33:50 - mmengine - INFO - bbox_mAP_copypaste: 0.533 0.652 0.562 0.368 0.497 0.597
12/09 07:33:50 - mmengine - INFO - Epoch(val) [11][352/352]    coco/bbox_mAP: 0.5330  coco/bbox_mAP_50: 0.6520  coco/bbox_mAP_75: 0.5620  coco/bbox_mAP_s: 0.3680  coco/bbox_mAP_m: 0.4970  coco/bbox_mAP_l: 0.5970  data_time: 0.0057  time: 0.1436

这些内容显示了模型在验证集上的评估结果,基于 COCO 数据集的评估标准,以下是详细解析:


1. 评估流程

  1. Evaluating bbox

    • 表明模型正在验证集上评估目标检测的边界框(bounding box, bbox)性能。
  2. Loading and preparing results…

    • 模型生成的预测结果被加载并准备好进行评估。
  3. Running per image evaluation…

    • 针对验证集中每一张图片,计算各项指标,如平均精度(AP)和平均召回率(AR)。
  4. Evaluate annotation type bbox

    • 说明评估的是边界框任务。
  5. Accumulating evaluation results…

    • 将单张图片的评估结果汇总,以计算整体性能指标。

2. COCO评估标准

主要指标
  • AP (Average Precision)
    AP 是目标检测中的核心指标,表示模型在不同的阈值(IoU)下的平均精度:

    • AP @[ IoU=0.50:0.95 | area=all | maxDets=100 ]
      综合了多个 IoU 阈值(从 0.50 到 0.95,步长为 0.05),计算所有目标的平均精度。这是 COCO 的主要指标,当前值为 0.533
    • AP @[ IoU=0.50 | area=all | maxDets=1000 ]
      在 IoU=0.50 时计算 AP,当前值为 0.652,表示较宽松条件下的精度。
    • AP @[ IoU=0.75 | area=all | maxDets=1000 ]
      在 IoU=0.75 时计算 AP,当前值为 0.562,表示较严格条件下的精度。
  • AP by Area
    按物体大小划分 AP:

    • small(小目标,area < 32^2):当前值为 0.368。说明模型对小目标的检测效果较差。
    • medium(中等目标,32^2 ≤ area < 96^2):当前值为 0.497
    • large(大目标,area ≥ 96^2):当前值为 0.597。说明模型对大目标检测效果更好。
  • AR (Average Recall)
    AR 是衡量模型召回能力的指标,表示在不同的最大检测数(maxDets)下的平均召回率:

    • AR @[ IoU=0.50:0.95 | area=all | maxDets=100 ]: 当前值为 0.859
    • AR @[ IoU=0.50:0.95 | area=all | maxDets=300 ]maxDets=1000: 当前值为 0.860
    • 按物体大小划分的 AR:
      • small: 当前值为 0.606
      • medium: 当前值为 0.833
      • large: 当前值为 0.883

3. 关键评估结果分析

  • 模型整体表现

    • coco/bbox_mAP: 0.533 是综合指标,表示在多个 IoU 阈值下的平均性能。
    • 结合 AP 和 AR 指标,可以看到模型对大目标(large)的检测效果最佳(AP=0.597AR=0.883),对小目标(small)的检测效果较差(AP=0.368AR=0.606)。
  • 时间和资源消耗

    • 验证过程耗时较短(每次迭代的平均时间约为 0.1436s)。
    • 占用显存较少,内存仅 3155 MB
  • IoU 阈值的影响

    • 当 IoU 阈值提高到 0.75 时,AP=0.562,相较 IoU=0.50 的 0.652 略有下降,说明模型在更严格的定位条件下仍具有较强表现。

总结

  • 模型优点

    • 整体性能良好,综合 mAP=0.533,在 COCO 基准中属于中上游水平。
    • 对大目标的检测效果突出(AP=0.597AR=0.883)。
    • 资源消耗较低,验证时间快。
  • 模型不足

    • 小目标检测性能仍有待提高,AP_s=0.368 较低,可能需要优化特征提取器或多尺度检测头。
  • 改进方向

    • 提升小目标检测:考虑增加小目标增强(如分辨率调整、多尺度数据增强)。
    • 加强定位能力:通过优化边框回归损失(如 IoU 损失的调整)。

相关文章:

GroundingDINO微调训练_训练日志解释

文章目录 1. 训练日志1. Epoch 和 Iteration2. Learning Rate&#xff08;学习率&#xff09;3. ETA&#xff08;预计剩余时间&#xff09;4. Time 和 Data Time5. Memory6. Gradient Norm&#xff08;梯度范数&#xff09;7. Loss&#xff08;损失&#xff09;8. Individual L…...

【0362】Postgres内核 XLogReaderState readBuf 有完整 XLOG page header 信息 ? ( 7 )

上一篇: 【0361】Postgres内核 page_read 读取所请求数据长度(至少 short page header)( 6 ) 文章目录 1. 检查 page_read 返回值 readLen2. 根据 readBuf 计算 XLogPageHeader 大小2.1 验证 XLOG Page header2.2 更新 XLogReaderState 读取状态信息1. 检查 page_read 返回…...

H5接入Steam 获取用户数据案例 使用 OpenID 登录绑定公司APP账户 steam公开用户信息获取 steam webapi文档使用

官方文档地址 1.注册 Steam API Key&#xff1a; 你需要一个 Steam Web API Key&#xff0c;可以在 Steam API Key 页面 获取。https://steamcommunity.com/dev/apikey 这里开发做demo用自己steam账户的就好&#xff0c;后续上线要用公司的账户 2.使用 OpenID 登录&#xff…...

pytorch多GPU训练教程

pytorch多GPU训练教程 文章目录 pytorch多GPU训练教程1. Torch 的两种并行化模型封装1.1 DataParallel1.2 DistributedDataParallel 2. 多GPU训练的三种架构组织方式2.2 数据不拆分&#xff0c;模型拆分&#xff08;Model Parallelism&#xff09;2.3 数据拆分&#xff0c;模型…...

力扣--LCR 178.训练计划VI

题目 教学过程中&#xff0c;教练示范一次&#xff0c;学员跟做三次。该过程被混乱剪辑后&#xff0c;记录于数组 actions&#xff0c;其中 actions[i] 表示做出该动作的人员编号。请返回教练的编号。 示例 1&#xff1a; 输入&#xff1a;actions [5, 7, 5, 5] 输出&#…...

Linux 网络接口配置

在 Linux 中,网络接口配置文件用于控制系统中的软件网络接口,并通过接口实现对网络设备的控制。当系统启动时,系统通过这些接口配置文件决定启动哪些接口,以及如此对这些接口进行配置. 在 Linux 中,网络接口配置文件用于控制系统中的软件网络接口,并通过这些接口实现对网络…...

【从零开始入门unity游戏开发之——C#篇01】理论开篇

文章目录 前言前置条件什么是编程&#xff1f;什么是代码&#xff1f;什么是编程语言&#xff1f;常见的编程语言什么是C#&#xff1f;学习Unity为什么要先学习C#&#xff1f;选择适合自己的IDE集成开发环境VSCode安装和环境配置VSCode调试模式专栏推荐完结 前言 这个系列我想…...

ABAP开发-批量导入BAPI和BDC_1

系列文章目录 文章目录 系列文章目录[TOC](文章目录) 前言一、概念二、BDC和BAPI数据导入1、BDC数据导入&#xff08;录屏&#xff09;2、BAPI数据导入 三、实例1、BAPI2、BDC 总结 前言 一、概念 SAP中&#xff0c;对一个事务码反复操作并且达到批量处理数据的效果&#xff0…...

RabbitMQ七种工作模式之 RPC通信模式, 发布确认模式

文章目录 六. RPC(RPC通信模式)客户端服务端 七. Publisher Confirms(发布确认模式)1. Publishing Messages Individually(单独确认)2. Publishing Messages in Batches(批量确认)3. Handling Publisher Confirms Asynchronously(异步确认) 六. RPC(RPC通信模式) 客⼾端发送消息…...

并非传统意义上的整体二分

是的&#xff0c;如标题所见&#xff0c;本文章会以作者所理解的整体二分思想来介绍一系列整体二分食用方法。 一下内容均是作者本人理解&#xff0c;可能会与算法本身冲突。 1 本质 1.1 板子及从中的启发 我们在做主席树板子的时候&#xff0c;如果使用整体二分&#xff0…...

PostgreSQL的一主一从集群搭建部署 (同步)

一、实验环境 虚拟机名IP身份简称keep-postgres12-node1192.168.122.87主节点node1keep-postgres12-node2192.168.122.89备节点node2 二、安装数据库 源码包方式&#xff08;主&#xff09; 1、创建用户 [rootkeep-postgres12-node1 ~]# groupadd postgres [rootkeep-post…...

ios逆向某新闻 md5+aes

本期的案例比较简单&#xff0c;也许是ios逆向算法本来就比较简单的原因&#xff0c;所以前面我就多扯一些爬虫和逆向的东西。之前写的文章都是js逆向和android逆向的案例&#xff0c;这也是首篇ios的案例&#xff0c;所以会从入门开始讲起。 3大逆向对比 首先爬虫工程师大部…...

grpc的负载均衡

grpc的负载均衡分为client-side load balance和server-side load balance。 所谓的“客户端负载均衡”是指主调方调用被调方的时候&#xff0c;在grpc.DialContext里需要指定grpc.WithDefaultServiceConfig&#xff0c;这个DefaultServiceConfig默认是用pick-first策略。也支持…...

提升搜索体验!—— 推出 Elastic Rerank 模型(技术预览版)

作者&#xff1a;来自 Elastic Shubha Anjur Tupil 几分钟内即可开始使用 Elastic Rerank 模型&#xff1a;强大的语义搜索功能&#xff0c;无需重新索引&#xff0c;提供灵活性和成本控制&#xff1b;高相关性、顶级性能和文本搜索效率。 使用我们全新的先进跨编码器 Elastic …...

【51单片机】程序实验1112.外部中断-定时器中断

主要参考学习资料&#xff1a;B站【普中官方】51单片机手把手教学视频 前置知识&#xff1a;C语言 单片机套装&#xff1a;普中STC51单片机开发板A4标准版套餐7 码字不易&#xff0c;求点赞收藏加关注(•ω•̥) 有问题欢迎评论区讨论~ 目录 程序实验11&12.外部中断-定时器…...

webrtc-java:引领Java进入实时通信新时代

webrtc-java&#xff1a;引领Java进入实时通信新时代 项目地址:https://gitcode.com/gh_mirrors/we/webrtc-java 在现代互联网应用中&#xff0c;实时通信&#xff08;Real-Time Communication, RTC&#xff09;已成为连接人们的桥梁。而说起RTC技术的先锋&#xff0c;不得不…...

TongWeb7-东方通快速使用手册

TongWeb7-东方通 快速使用手册 文章目录 第1章 TongWeb7 产品介绍 1.1 概述1.2 规范支持 第2章 TongWeb7 安装 2.1 TongWeb7 安装要求 2.1.1 TongWeb7 支持的操作系统2.1.2 系统要求2.1.3 其他 2.2 安装TongWeb72.3TongWeb7 目录结构说明2.4 TongWeb7 的启动和停止 第3章 应用…...

JVM内存区块

大家好&#xff0c;经过前两篇文章的介绍&#xff0c;大家对数组也有了一定了解&#xff0c;其实所有的数组都是对象&#xff0c;我们在方法中引用数组的变量叫做引用变量&#xff08;简称引用&#xff09;&#xff0c;那么数组到底是存放在哪里的呢&#xff0c;为什么引用再出…...

C语言单元总结

黑色加粗表示刷题刷到这样的题 红色加粗表示可能重要 单元一 程序设计宏观认识 C语言程序框架 C语言程序最基本的程序框架由两部分构成&#xff0c;分别是 1) 编译预处理 2) 函数组 C语言程序构成 C程序最大的特点就是所有的程序都是用函数来装配的&#xff0c;函数是构成…...

通过PS和Unity制作2D动画之一:创建形象

1、通过路径画出轮廓 使用路径的过程中&#xff0c;需要注意&#xff1a; 1&#xff09;如果使用形状工具作图&#xff0c;比如使用椭圆工具画正圆形&#xff0c;需要设置其属性为“路径”。 2&#xff09;使用路径选择工具&#xff0c;再按住Alt键点击某个路径&#xff0c;可…...

【Linux】shell脚本忽略错误继续执行

在 shell 脚本中&#xff0c;可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行&#xff0c;可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令&#xff0c;并忽略错误 rm somefile…...

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误

HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误&#xff0c;它们的含义、原因和解决方法都有显著区别。以下是详细对比&#xff1a; 1. HTTP 406 (Not Acceptable) 含义&#xff1a; 客户端请求的内容类型与服务器支持的内容类型不匹…...

解锁数据库简洁之道:FastAPI与SQLModel实战指南

在构建现代Web应用程序时&#xff0c;与数据库的交互无疑是核心环节。虽然传统的数据库操作方式&#xff08;如直接编写SQL语句与psycopg2交互&#xff09;赋予了我们精细的控制权&#xff0c;但在面对日益复杂的业务逻辑和快速迭代的需求时&#xff0c;这种方式的开发效率和可…...

协议转换利器,profinet转ethercat网关的两大派系,各有千秋

随着工业以太网的发展&#xff0c;其高效、便捷、协议开放、易于冗余等诸多优点&#xff0c;被越来越多的工业现场所采用。西门子SIMATIC S7-1200/1500系列PLC集成有Profinet接口&#xff0c;具有实时性、开放性&#xff0c;使用TCP/IP和IT标准&#xff0c;符合基于工业以太网的…...

React从基础入门到高级实战:React 实战项目 - 项目五:微前端与模块化架构

React 实战项目&#xff1a;微前端与模块化架构 欢迎来到 React 开发教程专栏 的第 30 篇&#xff01;在前 29 篇文章中&#xff0c;我们从 React 的基础概念逐步深入到高级技巧&#xff0c;涵盖了组件设计、状态管理、路由配置、性能优化和企业级应用等核心内容。这一次&…...

【51单片机】4. 模块化编程与LCD1602Debug

1. 什么是模块化编程 传统编程会将所有函数放在main.c中&#xff0c;如果使用的模块多&#xff0c;一个文件内会有很多代码&#xff0c;不利于组织和管理 模块化编程则是将各个模块的代码放在不同的.c文件里&#xff0c;在.h文件里提供外部可调用函数声明&#xff0c;其他.c文…...

echarts使用graphic强行给图增加一个边框(边框根据自己的图形大小设置)- 适用于无法使用dom的样式

pdf-lib https://blog.csdn.net/Shi_haoliu/article/details/148157624?spm1001.2014.3001.5501 为了完成在pdf中导出echarts图&#xff0c;如果边框加在dom上面&#xff0c;pdf-lib导出svg的时候并不会导出边框&#xff0c;所以只能在echarts图上面加边框 grid的边框是在图里…...

云原生安全实战:API网关Envoy的鉴权与限流详解

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关 作为微服务架构的统一入口&#xff0c;负责路由转发、安全控制、流量管理等核心功能。 2. Envoy 由Lyft开源的高性能云原生…...

二叉树-144.二叉树的前序遍历-力扣(LeetCode)

一、题目解析 对于递归方法的前序遍历十分简单&#xff0c;但对于一位合格的程序猿而言&#xff0c;需要掌握将递归转化为非递归的能力&#xff0c;毕竟递归调用的时候会调用大量的栈帧&#xff0c;存在栈溢出风险。 二、算法原理 递归调用本质是系统建立栈帧&#xff0c;而非…...

Linux入门课的思维导图

耗时两周&#xff0c;终于把慕课网上的Linux的基础入门课实操、总结完了&#xff01; 第一次以Blog的形式做学习记录&#xff0c;过程很有意思&#xff0c;但也很耗时。 课程时长5h&#xff0c;涉及到很多专有名词&#xff0c;要去逐个查找&#xff0c;以前接触过的概念因为时…...