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

征程 6 yolov5s-rgb-nhwc 量化指南

在 征程 6 平台,我们可以按照这个方式编译 input_typr_rt 为 rgb,且 layout 为 NHWC 的模型。这样做的好处是,当用户的数据输入源本身就是 NHWC 的 rgb 图像时,这么做可以避免额外的数据处理操作。这里以 yolov5s 为例进行介绍。

一、模型信息

输入节点
img

输出节点(其中一个)

img

输入输出信息总览

img

二、校准数据

seed100 文件夹存放原始图像,可借助 horizon_model_convert_sample 的脚本完成校准数据的处理。

02_preprocess.sh 脚本内容如下:

set -e -v
cd 
$(dirname $
0) || exit
python3 ../../data_preprocess.py \--src_dir ./seed100 \--dst_dir ./calibration_data_rgb_f32 \--pic_ext .rgb \--read_mode opencv \--saved_data_type float32

preprocess.py 脚本相关内容修改如下:

from horizon_tc_ui.data.transformer import (PadResizeTransformer,BGR2RGBTransformer,NormalizeTransformer)
def calibration_transformers():transformers = [PadResizeTransformer(target_size=(384, 2048)),BGR2RGBTransformer(data_format="HWC"),NormalizeTransformer(255.0)]return transformers

这段代码的主要作用是创建一个由多个数据预处理步骤组成的转换器(transformers)列表。这些转换器会对输入数据进行处理,以适应深度学习模型的要求。

  • PadResizeTransformer:这个转换器的作用是对输入数据进行填充(padding)和调整大小(resize),通常是为了确保输入的图像尺寸与模型要求的输入尺寸一致。
  • BGR2RGBTransformer:这个转换器将输入图像从 BGR 格式转换为 RGB 格式。BGR 是 OpenCV 默认的颜色格式,而许多深度学习框架(如 TensorFlow 或 PyTorch)更习惯使用 RGB 格式。因此,这个转换器是为了进行格式的转换。
  • NormalizeTransformer:这个转换器用于对图像进行归一化处理,将像素值缩放到指定的范围。归一化是深度学习中常见的预处理步骤,有助于提高模型的收敛速度和性能。

这段代码的作用是定义并返回一个包含多个数据预处理步骤的转换器列表。这些预处理步骤包括:

  1. 填充和调整大小:将图像调整为目标尺寸 (384, 2048)
  2. 颜色格式转换:将图像从 BGR 格式转换为 RGB 格式。
  3. 归一化:将图像像素值缩放到 0 到 1 的范围内。

这些步骤通常用于图像数据预处理,以便将原始图像调整为模型输入所需要的格式和数值范围。

三、YAML

calibration_parameters:cal_data_dir: "./calibration_data_rgb_f32"quant_config: {"model_config": {"all_node_type": "int8","activation": {"calibration_type": "max","max_percentile": 0.99999,},},}  
compiler_parameters:compile_mode: latencydebug: truejobs: 32optimize_level: O2
input_parameters:input_name: inputinput_shape: 1x384x2048x3input_layout_rt: NHWCinput_layout_train: NHWCinput_type_rt: rgbinput_type_train: rgbstd_value: 255.0
model_parameters:march: nash-monnx_model: ./yolov5s.onnxoutput_model_file_prefix: yolov5sworking_dir: ./model_output

四、模型编译

hb_compile -c ./config.yaml
+-------------+-------------------+------------------+
| TensorName  | Calibrated Cosine | Quantized Cosine |
+-------------+-------------------+------------------+
| featuremap1 | 0.999015          | 0.998999         |
| featuremap2 | 0.999408          | 0.999395         |
| featuremap3 | 0.999311          | 0.999321         |
+-------------+-------------------+------------------+

五、python 推理

import cv2
import numpy as np
from horizon_tc_ui.hb_runtime import HBRuntime
def prepare_onnx_input():data = cv2.imread('./seed.jpg').astype(np.float32)data = cv2.cvtColor(data, cv2.COLOR_BGR2RGB)data = data / 255.0data = data[np.newaxis,:,:,:]return data
def prepare_bc_input():data = cv2.imread('./seed.jpg').astype(np.uint8)data = cv2.cvtColor(data, cv2.COLOR_BGR2RGB)data = (data - 128).astype(np.int8)data = data[np.newaxis,:,:,:]return data
def infer_onnx():data = prepare_onnx_input()sess = HBRuntime("yolov5s.onnx")input_names = sess.input_namesoutput_names = sess.output_namesinput_feed = {input_names[0]: data}output = sess.run(output_names, input_feed)print("==========infer_onnx==========")print(output[0][0][0][0])return 0
def infer_ori_onnx():data = prepare_onnx_input()sess = HBRuntime("./model_output/yolov5s_original_float_model.onnx")input_names = sess.input_namesoutput_names = sess.output_namesinput_feed = {input_names[0]: data}output = sess.run(output_names, input_feed)print("==========infer_ori_onnx==========")print(output[0][0][0][0])
def infer_opt_onnx():data = prepare_onnx_input()sess = HBRuntime("./model_output/yolov5s_optimized_float_model.onnx")input_names = sess.input_namesoutput_names = sess.output_namesinput_feed = {input_names[0]: data}output = sess.run(output_names, input_feed)print("==========infer_opt_onnx==========")print(output[0][0][0][0])
def infer_calib_onnx():data = prepare_onnx_input()sess = HBRuntime("./model_output/yolov5s_calibrated_model.onnx")input_names = sess.input_namesoutput_names = sess.output_namesinput_feed = {input_names[0]: data}output = sess.run(output_names, input_feed)print("==========infer_calib_onnx==========")print(output[0][0][0][0])
def infer_ptq_onnx():data = prepare_onnx_input()sess = HBRuntime("./model_output/yolov5s_ptq_model.onnx")input_names = sess.input_namesoutput_names = sess.output_namesinput_feed = {input_names[0]: data}output = sess.run(output_names, input_feed)print("==========infer_ptq_onnx==========")print(output[0][0][0][0])
def infer_quantized_bc():data = prepare_bc_input()sess = HBRuntime("./model_output/yolov5s_quantized_model.bc")input_names = sess.input_namesoutput_names = sess.output_namesinput_feed = {input_names[0]: data}output = sess.run(output_names, input_feed)print("==========infer_quantized_bc==========")print(output[0][0][0][0])
if 
name== "
__main__
":infer_onnx()infer_ori_onnx()infer_opt_onnx()infer_calib_onnx()infer_ptq_onnx()infer_quantized_bc()

这段代码的主要作用是使用不同的模型和输入数据进行推理(inference),并输出推理结果。它通过调用 HBRuntime 来加载不同的模型进行推理。下面是对代码的详细分析:

1.导入必要的库:

  • cv2:用于图像处理,加载和转换图像。
  • numpy:用于数值计算,尤其是矩阵操作。
  • HBRuntime:从 horizon_tc_ui.hb_runtime 导入,显然是一个用于执行推理任务的接口,可能是用于调用经过优化的计算图或深度学习模型。

2.准备输入数据:

  • prepare_onnx_input():该函数读取图像文件 seed.jpg,将其转换为 RGB 格式,进行归一化处理,并为模型的输入格式添加额外的维度(np.newaxis)。数据被归一化到 [0, 1] 范围,以便于输入 ONNX 模型。
  • prepare_bc_input():此函数和 prepare_onnx_input() 类似,不过它读取的图像经过不同的处理。图像被转换为 np.uint8 类型,减去 128 后转换为 np.int8 类型,这通常是用于处理量化后的模型数据格式。

3.进行推理的不同函数:

  • 每个 infer_*_onnxinfer_quantized_bc 函数负责加载不同的模型并执行推理:
    • infer_onnx():加载 yolov5s.onnx 模型并进行推理。
    • infer_ori_onnx():加载原始浮点数版本的 yolov5s 模型 (yolov5s_original_float_model.onnx)。
    • infer_opt_onnx():加载优化过的浮点数版本的 yolov5s 模型 (yolov5s_optimized_float_model.onnx)。
    • infer_calib_onnx():加载经过校准的浮点数模型 (yolov5s_calibrated_model.onnx)。
    • infer_ptq_onnx():加载经过量化后的浮点数模型 (yolov5s_ptq_model.onnx)。
    • infer_quantized_bc():加载量化后的 BC 格式模型 (yolov5s_quantized_model.bc)。

4.推理过程:

  • 每个 infer_* 函数都会执行以下步骤:
    • 调用相应的准备输入函数(如 prepare_onnx_input()prepare_bc_input()),将图像转换为模型所需的输入格式。
    • 使用 HBRuntime 加载不同的模型。
    • 获取模型的输入和输出节点名称。
    • 将输入数据传入模型进行推理。
    • 输出推理结果的一部分(通过 output[0][0][0][0] 打印输出,可能是某个检测框的值)。

5.主函数 if name == "__main__":

  • 在主程序执行时,依次调用上述所有的推理函数进行推理,打印每个模型的推理结果。

六、总结:

这段代码主要用于进行不同版本的 YOLOv5 模型的推理,涉及到原始浮点数模型、优化后的浮点数模型、量化模型、校准模型等,并对每种模型进行推理结果输出。通过不同的输入准备函数,代码还演示了如何处理不同的数据格式(如浮点数和量化后的数据)。

输出信息如下,可以看到,数值大体相当,可以认为推理结果正确。

==========infer_onnx==========
[ -0.36140022   0.14068425  -0.12884808   0.38683856 -10.027128-3.727932    -2.6472187   -3.4907613   -0.8754431   -1.8876309-1.6180705   -2.6833398   -2.4786358   -3.0784476   -3.320454-4.3665814   -3.2660558   -3.767973    -4.428035    -3.4952142-2.8823838   -4.920804    -0.36190268   0.24379599  -0.52514255-0.40856832 -11.233256    -3.9329526   -2.7249336   -3.4358976-0.8108312   -1.852678    -1.4934196   -2.7427323   -2.4955802-3.2720697   -3.3685834   -4.5204425   -3.2479987   -3.8060267-4.4632807   -3.5123816   -2.8149266   -5.1647396   -0.359670970.22670399  -0.854579    -0.18010648 -13.903754    -4.169511-2.4058053   -3.4251635   -0.8236269   -1.8188286   -1.6522415-2.8259125   -2.4029486   -3.3103113   -3.409004    -4.688325-3.2148345   -3.948554    -4.4465227   -3.5018692   -2.8768973  -5.213859  ]
==========infer_ori_onnx==========
[ -0.36140022   0.14068425  -0.12884808   0.38683856 -10.027128-3.727932    -2.6472187   -3.4907613   -0.8754431   -1.8876309-1.6180705   -2.6833398   -2.4786358   -3.0784476   -3.320454-4.3665814   -3.2660558   -3.767973    -4.428035    -3.4952142-2.8823838   -4.920804    -0.36190268   0.24379599  -0.52514255-0.40856832 -11.233256    -3.9329526   -2.7249336   -3.4358976-0.8108312   -1.852678    -1.4934196   -2.7427323   -2.4955802-3.2720697   -3.3685834   -4.5204425   -3.2479987   -3.8060267-4.4632807   -3.5123816   -2.8149266   -5.1647396   -0.359670970.22670399  -0.854579    -0.18010648 -13.903754    -4.169511-2.4058053   -3.4251635   -0.8236269   -1.8188286   -1.6522415-2.8259125   -2.4029486   -3.3103113   -3.409004    -4.688325-3.2148345   -3.948554    -4.4465227   -3.5018692   -2.8768973  -5.213859  ]
==========infer_opt_onnx==========
[ -0.36140022   0.14068425  -0.12884808   0.38683856 -10.027128-3.727932    -2.6472187   -3.4907613   -0.8754431   -1.8876309-1.6180705   -2.6833398   -2.4786358   -3.0784476   -3.320454-4.3665814   -3.2660558   -3.767973    -4.428035    -3.4952142-2.8823838   -4.920804    -0.36190268   0.24379599  -0.52514255-0.40856832 -11.233256    -3.9329526   -2.7249336   -3.4358976-0.8108312   -1.852678    -1.4934196   -2.7427323   -2.4955802-3.2720697   -3.3685834   -4.5204425   -3.2479987   -3.8060267-4.4632807   -3.5123816   -2.8149266   -5.1647396   -0.359670970.22670399  -0.854579    -0.18010648 -13.903754    -4.169511-2.4058053   -3.4251635   -0.8236269   -1.8188286   -1.6522415-2.8259125   -2.4029486   -3.3103113   -3.409004    -4.688325-3.2148345   -3.948554    -4.4465227   -3.5018692   -2.8768973  -5.213859  ]
==========infer_calib_onnx==========
[ -0.43238506   0.11002721  -0.07907629   0.40861583  -9.97794-3.6856174   -2.735222    -3.633584    -0.96581066  -1.6290709-1.5608525   -2.6134243   -2.3609822   -3.004236    -3.2058396-4.3830314   -3.0389607   -3.8800378   -4.4044924   -3.417421-2.7247229   -4.8871512   -0.41328928   0.18615645  -0.5093392-0.40168345 -11.165181    -3.8985913   -2.8401194   -3.6001463-0.93232083  -1.6206057   -1.4628205   -2.6981122   -2.3167949-3.2422874   -3.2519443   -4.5322804   -3.002402    -3.9381328-4.4415045   -3.4783902   -2.6498706   -5.107289    -0.436165750.1885212   -0.8195747   -0.17303436 -13.778434    -4.1264076-2.5370815   -3.6029017   -0.91676974  -1.5773652   -1.6292106-2.8174675   -2.254434    -3.2408853   -3.2774894   -4.6843886-2.9586797   -4.0764017   -4.4135203   -3.4192595   -2.7116857  -5.1625004 ]
==========infer_ptq_onnx==========
[ -0.43238506   0.11002721  -0.07907629   0.40861583  -9.97794-3.6856174   -2.735222    -3.633584    -0.96581066  -1.6290709-1.5608525   -2.6134243   -2.3609822   -3.004236    -3.2058396-4.3830314   -3.0389607   -3.8800378   -4.4044924   -3.417421-2.7247229   -4.8871512   -0.41328928   0.18615645  -0.5093392-0.40168345 -11.165181    -3.8985913   -2.8401194   -3.6001463-0.93232083  -1.6206057   -1.4628205   -2.6981122   -2.3167949-3.2422874   -3.2519443   -4.5322804   -3.002402    -3.9381328-4.4415045   -3.4783902   -2.6498706   -5.107289    -0.436165750.1885212   -0.8195747   -0.17303436 -13.778434    -4.1264076-2.5370815   -3.6029017   -0.91676974  -1.5773652   -1.6292106-2.8174675   -2.254434    -3.2408853   -3.2774894   -4.6843886-2.9586797   -4.0764017   -4.4135203   -3.4192595   -2.7116857  -5.1625004 ]
==========infer_quantized_bc==========
[ -0.37202302   0.18693314  -0.06567554   0.40963683  -9.98054-3.6307201   -2.703453    -3.4887328   -0.9094247   -1.7791512-1.54388     -2.5430217   -2.399686    -2.996389    -3.1917665-4.3041177   -2.9921875   -3.7818878   -4.3069286   -3.3589668-2.8220906   -4.8398676   -0.34859642   0.2652311   -0.50713307-0.40864512 -10.916675    -3.8250697   -2.8117514   -3.4346225-0.8636422   -1.7796087   -1.4381862   -2.6121027   -2.3534453-3.2200432   -3.2179508   -4.427741    -2.9437149   -3.8163087-4.323068    -3.4090939   -2.7401025   -5.0440025   -0.376438080.2674079   -0.8191366   -0.1740098  -13.797277    -4.0533657-2.4911644   -3.4408677   -0.8496779   -1.7336257   -1.605081-2.7330828   -2.2852495   -3.2210054   -3.2354999   -4.5808883-2.8986108   -3.9594183   -4.282491    -3.3463652   -2.8071992  -5.093343  ]

-4.323068 -3.4090939 -2.7401025 -5.0440025 -0.37643808
0.2674079 -0.8191366 -0.1740098 -13.797277 -4.0533657
-2.4911644 -3.4408677 -0.8496779 -1.7336257 -1.605081
-2.7330828 -2.2852495 -3.2210054 -3.2354999 -4.5808883
-2.8986108 -3.9594183 -4.282491 -3.3463652 -2.8071992 -5.093343 ]

至此,模型的量化和 python 推理验证就结束了。我们可以愉快地开始 C++推理了

相关文章:

征程 6 yolov5s-rgb-nhwc 量化指南

在 征程 6 平台,我们可以按照这个方式编译 input_typr_rt 为 rgb,且 layout 为 NHWC 的模型。这样做的好处是,当用户的数据输入源本身就是 NHWC 的 rgb 图像时,这么做可以避免额外的数据处理操作。这里以 yolov5s 为例进行介绍。 …...

国产化Word处理控件Spire.Doc教程:如何使用 C# 从 Word 中提取图片

通过编程方式从 Word 文档中提取图片,可以用于自动化文档处理任务。E-iceblue旗下Spire系列产品是国产文档处理领域的优秀产品,支持国产化,帮助企业高效构建文档处理的应用程序。本文将演示如何使用 C# 和 Spire.Doc for .NET 库从 Word 文件…...

Telnet 类图解析

Telnet 类图(文本描述) --------------------------------------- | Telnet | --------------------------------------- | - host: str | # 目标主机 | - port: int …...

Python之with语句

文章目录 Python中的with语句详解一、基本语法二、工作原理三、文件操作中的with语句1. 基本用法2. 同时打开多个文件 四、with语句的优势五、自定义上下文管理器1. 基于类的实现2. 使用contextlib模块 六、常见应用场景七、注意事项 Python中的with语句详解 with语句是Python…...

【Flask全栈开发指南】从零构建企业级Web应用

目录 🌟 前言🏗️ 技术背景与价值🚧 当前技术痛点🛠️ 解决方案概述👥 目标读者说明 🔍 一、技术原理剖析📊 核心概念图解💡 核心作用讲解🧩 关键技术模块说明⚖️ 技术选…...

mac 10.15.7 svn安装

macOS 版本推荐 SVN 安装方式≤10.14Homebrew 安装独立 SVN≥10.15优先使用 CLT 自带 SVN 一、使用 brew 安装 (没成功) brew install subversion 这个方法安装一直不成功,一直在提示说版本旧或都是一些引用工具安装失败, 二、使…...

PowerShell 实现 conda 懒加载

问题 执行命令conda init powershell会在 profile.ps1中添加conda初始化的命令。 即使用户不需要用到conda,也会初始化conda环境,拖慢PowerShell的启动速度。 解决方案 本文展示了如何实现conda的懒加载,默认不加载conda环境,只…...

笔记项目 day02

一、用户登录接口 请求参数: 用loginDTO来封装请求参数,要加上RequestBody注解 响应参数: 由于data里内容较多,考虑将其封装到一个LoginUser的实体中,用户登陆后,需要生成jwtToken并返回给前端。 登录功…...

Memcached 服务搭建和集成使用的详细步骤示例

以下是 Memcached 服务搭建和集成使用的详细步骤示例: 一、搭建 Memcached 服务 安装 Memcached Linux 系统 yum 安装:执行命令 yum install -y memcached memcached-devel。源码安装 下载源码:wget http://www.memcached.org/files/memcach…...

国鑫主板bios切换显示模式为独立显卡

# 进入到Platform Miscellaneous Configuration Active Video 切换为PCIE Device保存退出! 如果之前有安装过nvidia驱动,记得卸载掉再安装一遍。...

嵌入式硬件篇---CAN

文章目录 前言1. CAN协议基础1.1 物理层特性差分信号线终端电阻通信速率总线拓扑 1.2 帧类型1.3 数据帧格式 2. STM32F103RCT6的CAN硬件配置2.1 硬件连接2.2 CubeMX配置启用CAN1模式波特率引脚分配过滤器配置(可选) 3. HAL库代码实现3.1 CAN初始化3.2 发…...

【日撸 Java 300行】Day 14(栈)

目录 Day 14:栈 一、栈的基本知识 二、栈的方法 1. 顺序表实现栈 2. 入栈 3. 出栈 三、代码及测试 拓展: 小结 Day 14:栈 Task: push 和 pop 均只能在栈顶操作.没有循环, 时间复杂度为 O(1). 一、栈的基本知识 详细的介…...

2025最新出版 Microsoft Project由入门到精通(七)

目录 优化资源——在资源使用状况视图中查看资源的负荷情况 在资源图表中查看资源的负荷情况 优化资源——资源出现冲突时的原因及处理办法 资源过度分类的处理解决办法 首先检查任务工时的合理性并调整 增加资源供给 回到资源工作表中双击对应的过度分配资源 替换资…...

修改(替换)文件中的指定内容并保留文件修改前的时间(即修改前后文件的最后修改时间保持不变)

🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 修改(替换)文件中的指…...

Linux云计算训练营笔记day07(MySQL数据库)

数据库 DataBase 保存数据的仓库 数据库管理系统 DBMS 这是一个可以独立运行,用于维护磁盘上的数据的一套软件 特点: 维护性高,灵活度高,效率高,可扩展性强 常见的DBMS Mysql Mariadb Oracle DB2 SQLServer MySQL是一个关系型…...

应用探析|千眼狼PIV测量系统在职业病防治中的应用

1、职业病防治背景 随着《职业病防治法》及各省市“十四五”职业病防治规划的深入推进,工作场所粉尘危害监测与防控已成为疾控部门的核心任务。以矿山、建材、冶金、化工等行业为例,粉尘浓度、分布及传播特性的精准测量是评估职业病风险的关键。 传统的…...

获取accesstoken时,提示证书解析有问题,导致无法正常获取token

错误: https://qyapi.weixin.qq.com/cgi-bin/gettoken": sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested targ…...

面试中被问到谈谈你对threadlocal的理解

ThreadLocal 的核心理解 1. 基本概念 ThreadLocal 是 Java 提供的线程局部变量机制,用于在多线程环境中为每个线程维护独立的变量副本,实现线程隔离。其核心思想是空间换时间,通过避免共享变量带来的同步开销,提升并发性能。 2…...

nvidia驱动更新-先卸载再安装-ubuntu

显卡驱动升级前,卸载旧版本,可采用两种方式。 1.命令行 (1)查找已安装的 NVIDIA 驱动和相关包:dpkg -l | grep nvidia (2)完全卸载 NVIDIA 驱动:sudo apt remove purge nvidia-*…...

FlashInfer - 安装

FlashInfer - 安装 flyfish 一、JIT 版安装FlashInfer 对于 JIT 版本(即每次都从源代码编译每个内核,此过程需要 NVCC),可通过 PyPI 进行安装。 解释 JIT 版本(JIT Version) JIT 即 Just-In-Time Compi…...

推荐算法工程化:ZKmall模板商城的B2C 商城的用户分层推荐策略

在 B2C 电商竞争激烈的市场环境中,精准推荐已成为提升用户体验、促进商品销售的关键。ZKmall 模板商城通过推荐算法工程化手段,深度挖掘用户数据价值,制定科学的用户分层推荐策略,实现 “千人千面” 的个性化推荐,帮助…...

jackson-dataformat-xml引入使用后,响应体全是xml

解决方案: https://spring.io/blog/2013/05/11/content-negotiation-using-spring-mvc import org.springframework.context.annotation.Configuration; import org.springframework.http.MediaType; import org.springframework.web.servlet.config.annotation.Con…...

嵌入式硬件篇---TOF|PID

文章目录 前言1. 硬件准备主控芯片ToF模块1.VL53L0X2.TFmini 执行机构:电机舵机其他 2. 硬件连接(1) VL53L0X(IC接口)(2) TFmini(串口通信) 3. ToF模块初始化与数据读取(1) VL53L0X(基于HAL库)(…...

Realtek 8126驱动分析第四篇——multi queue相关

Realtek 8126是 5G 网卡,因为和 8125 较为接近,第四篇从这里开始也无不可。本篇主要是讲 multi queue 相关,其他的一些内容在之前就已经提过,不加赘述。 1 初始化 1.1 rtl8126_init_one 从第一篇我们可以知道每个 PCI 驱动都注…...

基于Java和PostGIS的AOI面数据球面面积计算实践

目录 前言 一、计算方法简介 二、球面面积计算 1、AOI数据转Polygon 2、Geotools面积计算 3、GeographicLib面积计算 4、PostGIS面积计算 三、结果分析 1、不同算法结果对比 2、与互联网AOI对比 3、与天地图测面对比 四、总结 前言 在现代地理信息系统(G…...

Spring Boot之Web服务器的启动流程分析

如何判断创建哪种web容器:servlet?reactive? 我们在启动Spring Boot程序的时候,会使用SpringApplication.run方法来启动,在启动流程中首先要判断的就是需要启动什么类型的服务器,是servlet?或者…...

C# SQLite高级功能示例

目录 1 主要功能 2 程序结构和流程 3 详细实现说明 3.1 基础设置 3.2 事务演示 3.3 索引演示 3.4 视图演示 3.5 触发器演示 3.6 全文搜索演示 3.7 窗口函数演示 3.8 外键约束演示 4 高级功能示例 5 单个方法详细介绍 5.1 SetupExampleData()方法 5.2 UseTransact…...

【周输入】510周阅读推荐-1

本号一年了,有一定的成长,也有很多读者和点赞。自觉更新仍然远远不够,需要继续努力。 但是还是要坚持2点: 在当前这个时代,信息大爆炸,层次不齐,不追加多, 信息输入可以很多&#x…...

基于动态规划的强化学习方法

目录 # 动态规划 # 基于动态规划的强化学习方法 # 求解过程: ## 策略评估 ## 策略提升 # 价值迭代算法 # 参考 # 动态规划 动态规划的基本思想是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到目标问题的解。…...

启动 spyder ModuleNotFoundError: No module named ‘PyQt5.QtWebKitWidgets‘

一、根本原因 Spyder 版本兼容性:Spyder 4.x 依赖 QtWebKitWidgets,但该模块在 PyQt5 5.15 中已被移除。 PyQt5 版本冲突:如果你安装了较新的 PyQt5(如 5.15),则会缺少 QtWebKitWidgets。 二、解决方案 方法…...