端到端图像分类算法开发实战:从 Arm 虚拟硬件到 Grove Vision AI Module V2 物理硬件

端到端图像分类算法开发实战:从 Arm 虚拟硬件到 Grove Vision AI Module V2 物理硬件

文章目录

  • 1. 写在前面
  • 2. 产品简介
    • 2.1 Arm 虚拟硬件镜像产品简介
    • 2.2 Grove - Vision AI V2 产品简介
  • 3. 实验前准备
  • 4. 实验步骤
    • 4.1 模型训练
    • 4.2 Arm 虚拟硬件镜像上的部署测试
      • 4.2.1 克隆实验代码
      • 4.2.2 配置环境
      • 4.2.3 应用构建与测试
      • 4.2.4 部署效果对比
    • 4.3 Grove - Vision AI V2 上的部署测试
      • 4.3.1 配置开发环境
      • 4.3.2 连接开发板
      • 4.3.3 构建编译工程
      • 4.3.4 生成烧录固件
      • 4.3.5 查看运行结果
  • 5. 实验感悟
  • 6. 参考文档


本实验过程中所显示的优惠价格及费用报销等相关信息仅在【Arm AI 开发体验创造营】体验活动过程中有效,逾期无效,请根据实时价格自行购买和体验。
同时,感谢本次体验活动 Arm 导师 Liliya 对于本实验手册的共创与指导。
详见活动地址:https://marketing.csdn.net/p/a11ba7c4ee98e52253c8608a085424be

1. 写在前面

传统的嵌入式开发流程中,往往需要用到物理开发板才能进行相应的软件开发。但是,对于诸如:物理开发板运送途中、缺货或想要尝试一些新推出的处理器产品(例如:Arm® Cortex®-M55,Cortex-M85, Ethos™-U 系列 NPU 等)但市场上硬件资源较为稀缺,或需要等待较长的时间(短至几个月,长至几年)才能拿到相应的物理开发板的情况下,是否有办法在相应的处理器平台上早早地进行软件开发呢?没有新型处理器平台的开发经验,又希望规避高昂的试错成本,有没有什么好的开发方式呢?

答案自然是有的,这就是我们本期博客要给大家介绍的一个非常强大的开发工具:Arm 虚拟硬件(Arm Virtual Hardware)。Arm 虚拟硬件可以极大地助力端侧人工智能应用的开发,让传统的 AI/ML 开发者和数据科学家们都可以轻松地上手端侧嵌入式设备上的 AI 应用开发。

本项目案例正是基于此背景。在基于 Cortex-M55 处理器 IP 的芯片和物理开发板还未在市场流通时,我们首先使用 Arm 虚拟硬件中含有 Cortex-M55 处理器的参考设计系统 Corstone-300 的虚拟硬件模型完成了基于百度飞桨 PaddlePaddle 深度学习框架的图像分类应用的开发,验证了整个软件技术栈的可行性。约两年后的今天,在 seeed studio 发布的搭载 Himax 的 WiseEye2 AI 处理器芯片(内含 Cortex-M55 处理器 IP)的 Grove Vision AI Module V2 开发板大规模上市后,我们快速轻松地完成了物理开发板上图像分类应用的部署与调试。

2. 产品简介

2.1 Arm 虚拟硬件镜像产品简介

Arm 虚拟硬件(Arm Virtual Hardware)提供了一个 Ubuntu Linux 镜像,包括用于物联网、机器学习和嵌入式应用程序的 Arm 开发工具:例如,Arm 编译器、 FVP 模型和其他针对 Cortex-M 系列处理器的开发工具帮助开发者快速入门。Arm 虚拟硬件限时免费提供用于评估用途,例如,评估 CI/CD、MLOps 和 DevOps 工作流中的自动化测试工作流等。订阅访问和使用此版本的 Arm 虚拟硬件,您需同意产品最终用户许可协议中与免费测试版许可相关的条款和协议。

Arm 虚拟硬件产品的技术概览示意图如下所示。开发者也可访问 Arm 虚拟硬件产品介绍页和产品技术文档了解更多关于 Arm 虚拟硬件产品知识。


Arm 虚拟硬件产品概览
图2-1. Arm 虚拟硬件产品概览

2.2 Grove - Vision AI V2 产品简介

Grove - Vision AI 模块 V2 人工智能模块是一个基于单片机的视觉 AI 模块,由 Arm Cortex-M55 和 Ethos-U55 驱动。它支持 TensorFlow 和 PyTorch 框架,并与 Arduino IDE 兼容。通过 SenseCraft AI 算法平台,可以将训练好的 ML 模型部署到传感器上,而不需要编码。它具有标准的 CSI 接口、车载数字麦克风和 SD 卡插槽,非常适合各种嵌入式 AI 视觉项目。该模块具有以下特点:

  • 强大的 AI 处理能力:搭载 WiseEye2 HX6538 处理器,配备双核 Arm Cortex-M55 和集成的 Arm Ethos-U55 神经网络单元。
  • 多样化的 AI 模型支持:轻松部署 SenseCraft AI 提供的现成或自定义 AI 模型,包括 Mobilenet V1、V2、Efficientnet-lite、Yolo v5 & v8 等。支持 TensorFlow 和 PyTorch 框架。
  • 丰富的外设设备:包括 PDM 麦克风、SD 卡槽、Type-C、Grove 接口等其他外设,功能更加丰富。
  • 完全开源:所有代码、设计文件和原理图均可进行修改和使用。
  • 更多关于该物理开发板产品介绍和使用方法,可以参考 seeed studio 的官方 wiki 文档平台。

需注意,本项目实验并不直接使用 SenseCraft AI 算法平台进行图像分类应用的开发。由于所使用的图像分类模型的框架的特殊性(基于 PaddlePaddle 深度学习框架),因此本项目将使用 Himax 公司提供的 SDK 套件对该开发板进行自定义开发,该 SDK 目前可以通过 GitHub 仓库获取和使用。


Grove - Vision AI Module V2
图2-2. Grove - Vision AI Module V2 开发板

3. 实验前准备

1. 订阅 Arm 虚拟硬件镜像的百度智能云云服务器 BCC 实例

  • 访问 Arm 虚拟硬件产品介绍网站或 Arm 公司 官网了解 Arm 虚拟硬件产品信息。微信搜索并关注 “Arm 社区” 微信公众号(二维码见文末),回复 “AVH” 和 “AI” 即可获取更全面的关于 Arm 虚拟硬件产品和 Arm AI 技术的最新资讯和技术指南博客。
  • 订阅使用 Arm 虚拟硬件镜像的百度智能云云服务器 BCC 实例,可以参考【帮助文档】 完成订阅流程。
  • 登录所购买的云服务器 BCC 实例并熟悉 Arm 虚拟硬件镜像环境。

2. 购买 Grove - Vision AI V2 物理开发板

  • 订购 Grove - Vision AI V2 物理开发板及相关开发调试配件(例如:CMSIS-DAP 兼容的高速仿真器、摄像头模块等)。推荐通过官方销售渠道或 seeedstudio 淘宝企业店铺购买。CMSIS-DAP 仿真器可参考文末购买链接。
  • 熟悉 Grove - Vision AI V2 物理开发板的组件,安装相应驱动并根据【官方入门教程】快速测试开发板的功能,确认是否有异常。
  • 了解【官方文档平台】提供的开发板的相关资源。

4. 实验步骤

本项目实验将展示一个端到端图像分类应用开发的案例。包括:从飞桨模型的训练到使用 Arm 虚拟硬件上进行部署测试,最终再将整个应用完整地部署到物理开发板 Grove - Vision AI V2上,完整地展示了如何通过 Arm 以及 Arm 的生态系统合作伙伴的解决方案来实现高效的 MLOps 工作流

4.1 模型训练

本应用中图像分类模型的开发将使用 Arm AI 生态系统合作伙伴百度飞桨 PaddlePaddle 提供的 PaddleClas 套件来进行模型的训练。飞桨图像识别套件 PaddleClas 是飞桨为工业界和学术界所准备的一个图像识别和图像分类任务的工具集,助力使用者训练出更好的视觉模型和应用落地。更多关于如何使用 PaddleClas 套件训练自定义的模型可参考其 GitHub 仓库中的帮助文档,本文不做过多陈述。

AI Studio 是基于百度深度学习平台飞桨的人工智能学习与实训社区,提供在线编程环境、免费GPU算力、海量开源算法和开放数据,帮助开发者快速创建和部署模型。为了便于开发者快速体验本案例,作者在 AI Studio 创建了项目《基于 TVM 在 Cortex-M55 系列 MCU 上部署 PaddleClas 模型》,提供了完整的模型训练步骤。开发者可以借助 AI Studio 提供的 GPU 算力资源(每日可领取免费时长)运行本项目,进行飞桨模型训练。

需要注意的是,模型训练的过程本身即具有一定随机性,因此即使在完全相同的训练配置(同一个训练配置文件)的情况下,每次所训练出的模型在推理结果的精度上也会存在一定的差异。在下一章节中提供的代码仓库中,我们提供了两个模型 BaseMobileNetV1 和 BaseMobileNetV2 即为同一配置文件下,两次独立的训练过程获得的模型文件。借助 Arm 提供的 Arm 虚拟硬件平台,我们可以快速地在众多模型中筛选出性能效果较优的模型,并将其最终部署到物理开发板上。整个筛选过程不仅可以自动化、并行化,也节省了物理开发板上的刷机时间,降低了对物理硬件的损耗,大大地加速了端侧人工智能应用开发的流程。

4.2 Arm 虚拟硬件镜像上的部署测试

4.2.1 克隆实验代码

参考第三章中的内容登录所购买的云服务器 BCC 实例并熟悉 Arm 虚拟硬件镜像环境后,参考以下代码将实验代码克隆(下载)至 BCC 服务器实例中。

git clone https://github.com/ArmDeveloperEcosystem/Paddle-examples-for-AVH.git
cd Paddle-examples-for-AVH/
git checkout EW24

4.2.2 配置环境

  • 更新 CMSIS Toolbox 工具。

    sudo bash scripts/config_cmsis_toolbox.sh
    
  • 安装项目依赖的 Python 软件包。因网络问题,安装过程若出现报错,可多次运行直至全部成功安装。

    sudo bash scripts/config_tvm.sh
    
  • 【可选】手动安装项目依赖的 CMSIS Packs 软件包。请注意,此步骤可跳过,若跳过后则在构建工程的工程中会自动安装。只是因网络环境和带宽等问题的影响,可能出现下载速度较慢的情况,耐心等待即可。若想比较快速的安装,则可以参考下面步骤进行手动安装。

    cd object_classification
    csolution list packs object_classification.csolution.yml -m
    

    出现提示信息可能如下所示。可以忽略前几行的 warning 提示,模型编译操作完成之后相应路径和文件会出现。

    /home/ubuntu/Paddle-examples-for-AVH/object_classification/object_classification.cproject.yml:60:17 - warning csolution: path 'cls/codegen/host/src/cls_lib0.c' was not found
    /home/ubuntu/Paddle-examples-for-AVH/object_classification/object_classification.cproject.yml:61:17 - warning csolution: path 'cls/codegen/host/src/cls_lib1.c' was not found
    /home/ubuntu/Paddle-examples-for-AVH/object_classification/object_classification.cproject.yml:62:17 - warning csolution: path 'cls/runtime/src/runtime/crt/common/crt_backend_api.c' was not found
    /home/ubuntu/Paddle-examples-for-AVH/object_classification/object_classification.cproject.yml:16:11 - warning csolution: path 'cls/codegen/host/include' was not found
    /home/ubuntu/Paddle-examples-for-AVH/object_classification/object_classification.cproject.yml:17:11 - warning csolution: path 'cls/runtime/include' was not found
    ARM::CMSIS@5.9.0
    ARM::CMSIS-DSP@1.15.0
    ARM::CMSIS-NN@4.1.0
    ARM::V2M_MPS3_SSE_300_BSP@1.4.0
    ARM::V2M_MPS3_SSE_310_BSP@1.3.0
    Keil::ARM_Compiler@1.7.2
    

    因此我们需要安装的 CMSIS Packs 软件包即为如下 6 个。

    ARM::CMSIS@5.9.0
    ARM::CMSIS-DSP@1.15.0
    ARM::CMSIS-NN@4.1.0
    ARM::V2M_MPS3_SSE_300_BSP@1.4.0
    ARM::V2M_MPS3_SSE_310_BSP@1.3.0
    Keil::ARM_Compiler@1.7.2
    

    通过 CMSIS Packs 软件包下载网址逐个手动下载,并上传至所创建的 Arm 虚拟硬件镜像中。例如:使用 scp -r ARM.CMSIS.5.9.0.pack ubuntu@ip:/home/ubuntu 命令将该软件包从主机上上传至云端的 Arm 虚拟硬件镜像中的目录 /home/ubuntu 下面。然后切换至该目录下后使用 cpackget add ARM.CMSIS.5.9.0.pack 命令完成安装。一个简单的安装示例如下所示:

    ubuntu@ip:~$ cpackget add ARM.CMSIS.5.9.0.pack
    I: Adding pack "ARM.CMSIS.5.9.0.pack"
    I: Extracting files to /home/ubuntu/packs/ARM/CMSIS/5.9.0...
    I: 100% |████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████  | (8642/8642, 8219 it/s)    
    

    参考下面命令逐个将缺失的软件包安装完毕(需先将相应的 CMSIS Packs 软件包提前下载并上传至所创建的 Arm 虚拟硬件镜像中)。

    cpackget add ARM.CMSIS.5.9.0.pack
    cpackget add ARM.CMSIS-DSP.1.15.0.pack
    cpackget add ARM.CMSIS-NN.4.1.0.pack
    cpackget add ARM.V2M_MPS3_SSE_300_BSP.1.4.0.pack
    cpackget add ARM.V2M_MPS3_SSE_310_BSP.1.3.0.pack
    cpackget add Keil.ARM_Compiler.1.7.2.pack
    

4.2.3 应用构建与测试

运行以下命令我们可以测试将前一章节中训练获得的 BaseMobileNetV1 模型部署在含有 Cortex-M55 处理器的 Corstone-300 虚拟硬件 FVP 模型上的效果。需注意,若前一章节未手动安装 CMSIS Packs 软件包,第一次运行(第一次)此脚本可能花较长时间自动下载和安装相应的软件包,耐心等待即可。

bash run_demo.sh --model BaseMobileNetV1 --device cortex-m55

run_demo.sh 脚本中主要包括里以下几个步骤的处理(其余命令的说明请参考 run_demo.sh 脚本的注释):

  • line 80-112:飞桨模型的转换与编译。
  • line 120-124:输入输出数据及标签预处理。
  • line 126-138:使用 cbuild 工具构建该图像分类应用。
  • line 141-151:调用 Corstone-300 的 FVP 模型 FVP_Corstone_SSE-300 执行所构建好的应用获取部署效果的测试结果。
    具体命令如下:
    FVP_Corstone_SSE-300  -C cpu0.CFGDTCMSZ=15 \-C cpu0.CFGITCMSZ=15 \-C mps3_board.uart0.out_file=\"-\" \-C mps3_board.uart0.shutdown_tag=\"EXITTHESIM\" \-C mps3_board.visualisation.disable-visualisation=1 \-C mps3_board.telnetterminal0.start_telnet=0 \-C mps3_board.telnetterminal1.start_telnet=0 \-C mps3_board.telnetterminal2.start_telnet=0 \-C mps3_board.telnetterminal5.start_telnet=0 \"out/object_classification/PaddleClas$RUN_DEVICE_NAME/object_classification.axf" \--stat
    
    其中,
    - FVP_Corstone_SSE-300 即为所使用的含有 Cortex-M55 处理器平台的 FVP 模型。
    - object_classification.axf 为所构建的图像分类应用的可执行文件。
    - --stat 指定打印运行信息。
    - -C 指定 FVP 模型运行的具体参数。

同样地,运行以下命令可以将前文所述的 BaseMobileNetV2 模型部署在含有 Cortex-M55 处理器的 Corstone-300 虚拟硬件 FVP 模型上。

bash run_demo.sh --model BaseMobileNetV2 --device cortex-m55

4.2.4 部署效果对比

如下图所示,经过测试结果比较,不难发现模型 BaseMobileNetV2 的推理性能优于 BaseMobileNetV1。因此,我们仅需要将 BaseMobileNetV2 模型导出并作为我们最终在物理开发板上部署的端侧图像分类模型即可。


BaseMobileNetV1(左侧) 和 BaseMobileNetV2 (右侧)运行效果对比示意图
图4-1. BaseMobileNetV1(左侧) 和 BaseMobileNetV2 (右侧)运行效果对比示意图

4.3 Grove - Vision AI V2 上的部署测试

4.3.1 配置开发环境

本实验项目在 Windows 系统环境下使用 Keil MDK μVision 集成开发环境进行开发(可参考 Himax 提供的帮助文档 How to run WE2 Keil example?)。值得一提的是,因为本项目符合 Open-CMSIS-Pack 工程标准,因此开发者也可以使用 Visual Studio Code 在 Mac,Linux,Windows 等多种环境下体验和测试本项目(参考 Arm Keil Studio Visual Studio Code Extensions User Guide 帮助指南以及 How to debug a program in VS Code using SWD Interface? 了解更多细节)。

整个开发环境的软件要求,可参考以下配置:

  • Keil MDK μVision v5.38
  • Python 3.9.10
  • pyOCD v0.34.3

1. 安装 Keil MDK μVision:参考 µVision User’s Guide(推荐) 以及 Arm Keil Microcontroller Development Kit (MDK) Getting Started Guide 下载并安装 Keil MDK μVision 开发环境。

2. 下载并安装 WE2 系列的 CMSIS Packs 软件包:访问 CMSIS Packs 下载仓库 直接下载或访问 Himax 提供的 GitHub 仓库 下载和解压整个工具包。解压完成后,双击 Himax.WE2_DFP.1.0.0.pack 即可启动自动的软件包安装程序 Pack Installer。根据提示信息逐步操作并完成安装即可。

3. 安装 pyOCD:参考 How to install pyOCD? 进行安装。也可以直接参考以下代码:

python -m pip uninstall pyocd
python -m pip uninstall pyocd_hx
python -m pip install pyocd_hx-0.34.3.dev0+dirty-py3-none-any.whl

4.3.2 连接开发板

参考下图,将 CMSIS-DAP 兼容的高速仿真器(图示为参考文档 7 提及的猛龙仿真器)与 Grove - Vision AI V2 开发板的 SWD 接口相连。即,将仿真调试器上的 DIO 、CLK 、GND 接口分别与 Grove - Vision AI V2 开发板上的 D2 、TXD 、GND 引脚通过杜邦线(公-母头)相连。具体原理图以及 SWD 接口的调试使用说明可参考 Himax 在 GitHub 上提供的帮助文档。需注意,除了仿真器和开发板之间的连线外,还需要为开发板和仿真烧录器供电。可以考虑通过将 Type-C 线连接至主机的 USB 接口上供电,也可以额外使用合适的电源适配器等等其他方式。


硬件连接示意图
图4-2. 硬件连接示意图

连接完成后,可以通过 Keil MDK μVision 集成开发环境中 Options for Target ...(位于 Project 栏目下面)中 Debug 选项下的 Debugger Setting 设置里查看是否有相应的串口信息(Serial No.) 来确认是否开发板已经成功连接。

4.3.3 构建编译工程

  • 1. 下载示例工程:本示例工程代码位于 GitHub 仓库 主分支下。将示例代码下载后,使用 Keil MDK μVision 集成开发环境打开工程文件。需注意,我们已经提前将 Arm 虚拟硬件环境中测试出的效果较优的 BaseMobileNetV2 模型经 TVM 编译后生成的 cls 软件包解压至相应的工程目录下。若开发者需要测试自己的模型,则可将 TVM 编译后生成的 cls 软件压缩包从云端导出直接替换示例工程中的软件包即可(测试图片、标签等数据的处理方法也一致,可从 Arm 虚拟硬件镜像中直接导出并覆盖相应的工程目录即可)。

  • 2. 编译示例工程:在 Keil MDK μVision 集成开发环境中点击本示例工程进行编译和构建。工程编译完成后,项目根目录下会出现项目名.elf (例如: PaddleClasDemo.elf)文件。关于 Keil MDK μVision 的使用方法,本文不做过多赘述。开发者可自行参考 µVision User’s Guide 相关章节学习和了解。

4.3.4 生成烧录固件

  • 1. 生成固件:本项目使用了 Himax 仓库中提供的固件生成工具(位于 GitHub 仓库 下的 tool.7z 压缩包)。为便于开发者体验,本文对该工具包做了一定的精简和修改并随项目工程一并提供,位于 tool 目录下。
    • 将 4.3.3 编译中生成的 .elf 文件拷贝至工具包目录下的 /tool/we2_image_gen_local_exe_release_177231/input_secboot 路径下。可选地,也可以在 .elf 文件生成的目录下,运行以下命令执行拷贝操作。
      copy *.elf "./tool/we2_image_gen_local_exe_release_177231/input_secboot"
      
    • 切换至 tool/we2_image_gen_local_exe_release_177231 路径。可选地,运行以下命令进行路径切换操作。
      cd ./tool/we2_image_gen_local_exe_release_177231
      
    • 运行以下命令生成相应的镜像。当显示如下图所示,即提示 IMAGE GEN DONE 则说明已经成功地打包生成了相应的固件。
      we2_local_image_gen PaddleClasDemo.json
      

      固件生成示意图
      图4-3. 固件生成示意图

  • 2. 烧录固件:同上,本项目使用了 Himax 仓库中提供的固件烧录工具并随工程一并提供。切换到 tool/swdflash 目录下,并运行以下命令进行固件的烧录操作。当显示如下图所示,则说明已经成功地将生成的固件烧录至开发板中了。
    python swdflash.py --addr=0x00000 --bin=../we2_image_gen_local_exe_release_177231/output/output.img
    

    烧录完成示意图
    图4-4. 烧录完成示意图

4.3.5 查看运行结果

烧录完成后,即可去掉仿真烧录器与开发板的连接,仅通过串口将开发板连接至主机上(通过 Type-C 线与主机 USB 接口相连)。在主机上打开串口工具(例如:作者使用的 Tera Term )并将串口通讯的波特率调整至 115200 保持其他选项不变,查看串口输出的结果,并将其与 Arm 虚拟硬件镜像中 Corstone-300 FVP 模型仿真的结果进行比较(图4-1)。可以看出来该结果与 Arm 虚拟硬件上的运行结果高度一致。通过代码比较,也可以轻松地发现我们虚拟硬件上运行的代码与物理开发板上运行的代码仅有非常少量的相关接口代码改动,也体现出了 Open-CMSIS-Pack 工程的优势之一。


运行结果示意图
图4-5. 运行结果示意图

5. 实验感悟

  • Arm 拥有很强大的 AI 生态系统可以帮助开发者快速地在基于 Arm 的平台上开发 AI 应用。Arm 与其多元化的生态系统合作伙伴(例如:百度飞桨,Seeed Studio, Himax等)合作为开发者提供了端到端的 MLOps 的解决方案,从模型到硬件。
  • Arm 虚拟硬件可以帮助我们快速地验证我们所开发的 AI 应用能否在设备资源有限的端运行起来。同时,利用 Arm 虚拟硬件上云的优势,通过撰写自动化测试脚本等方式,我们可以并行高效地完成模型的筛选,提高了整体的开发效率。
  • 借助 Arm 的 Open-CMSIS-Pack 项目的软件工具和生态,我们可以快速地将 Arm 虚拟硬件上验证完成的项目在物理开发板上运行起来,极大地加速了端侧人工智能应用开发。

6. 参考文档

  1. Arm 虚拟硬件产品简介
  2. Arm 虚拟硬件帮助文档
  3. Arm 虚拟硬件开发者资源
  4. 【中文技术指南】Arm 虚拟硬件实践专题一:产品订阅指南(百度智能云版)
  5. 【中文技术指南】Arm 虚拟硬件实践专题二:Arm 虚拟硬件 FVP 模型入门指南
  6. 【中文视频直播课】加速AI开发,1小时快速入门Arm虚拟硬件
  7. 【可选】CMSIS-DAP 高速仿真调试器可参考购买链接:猛龙 或 树莓派调试器
  8. Arm 社区微信公众号
    Arm 社区微信公众号

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

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

相关文章

OpenAI 开启买买买模式:接连收购 Rockset 与 Multi,科技巨头创新布局

引言 最近,OpenAI 在科技领域引起了广泛关注,通过接连收购两家初创公司 Rockset 和 Multi,开启了所谓的“买买买模式”。这一战略举措不仅展现了 OpenAI 对于技术发展的深远布局,也预示着未来更多创新产品的推出。本文将详细探讨…

Linux通用系统高危漏洞(CVE-2024-1086)修复案例

一、漏洞描述 2024年3月28日, Linux kernel权限提升漏洞(CVE-2024-1086)的PoC/EXP在互联网上公开,该漏洞的CVSS评分为7.8,目前漏洞细节已经公开披露,美国网络安全与基础设施安全局(CISA&#x…

测试:MyBatisDemo

MyBatis Demo 先创建一个 Maven 项目,名称为 MyBatis01。 之后创建并连接 MySQL 数据库,然后执行 sql 脚本: CREATE DATABASE mybatis;USE mybatis;DROP TABLE IF EXISTS user;CREATE TABLE user ( id int(20) NOT NULL, name varchar(30)…

ABB机器人控制柜各模块指示灯状态说明

ABB机器人控制柜各模块指示灯状态说明 主计算机模块位于控制柜的正前方,负责机器人的各种运算处理,安全模块主要负责安全相关的信号处理,驱动单元模块用于接收上位机指令,驱动机器人运动,轴计算机模块用于接收主计算机的运动指令和串

入门JavaWeb之 Response 验证码和重定向

Response 写验证码: package com.demo.response;import javax.imageio.ImageIO; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse…

浏览器页面打不开(网络连接正常的情况下)

目录 一、代理被打开 二、DNS被篡改 三、网络配置出现问题 四、浏览器配置问题 一、代理被打开 1. 右击Wifi图标 2.点击“打开网络和internet设置” 3. 点击代理,把该窗口所有的东西都关闭,尤其是代理服务器 二、DNS被篡改 如果第一个方法不行&am…

浅谈逻辑控制器之仅一次控制器

浅谈逻辑控制器之仅一次控制器 “仅一次控制器”(Once Only Controller) 是一个非常实用的组件,它允许用户控制测试计划中的某些操作仅执行一次,无论其所在的线程组或父级控制器设置了多少次循环。本指南将详细介绍“仅一次控制器”的功能、使用场景及配…

HarmonyOS ArkUi Tabs+TabContent+List实现tab吸顶功能

Demo效果 Entry Component struct StickyNestedScroll {State message: string Hello WorldState arr: number[] []scroller new Scroller()StyleslistCard() {.backgroundColor(Color.White).height(72).width("100%").borderRadius(12)}build() {Scroll(this.sc…

医药研发项目管理系统:适合CRO/CDMO企业使用的项目管理系统有哪些?

近日,北京民康百草医药科技有限公司(以下简称“民康百草”)与北京瑞杰智能科技有限公司(以下简称“瑞杰科技”)宣布达成战略合作,双方将共同打造一套符合民康百草企业特色的研发项目管理系统。该系统将基于…

postGreSQL关系数据库介绍

什么是postGreSQL关系数据库? PostgreSQL 是一个强大的、开源的对象关系型数据库管理系统(ORDBMS)。它基于POSTQUEL查询语言的继承,提供了对SQL标准的广泛支持,并扩展了许多高级功能,如事务处理、多版本并…

使用 Webmin 中模块注意事项

一、 Docker中Webmin忘记密码解决方法 Webmin忘记Web登陆时候的密码,无法登陆,可以通过changepass.pl 文件修改密码来进行解决。但在 Docker 中这一方法很难,因为不知道changepass.pl 在那里? 我是通过如下方法来解决的&#xff…

JAVA医院绩效考核系统源码:优化绩效考核的必要性 系统技术架构:java+springboot、mybaits +avue +MySQL

JAVA医院绩效考核系统源码:优化绩效考核的必要性 系统技术架构:javaspringboot、mybaits avue MySQL 医院绩效考核系统,建立以医院发展目标为导向,以医务人员劳动价值、工作量为评价基础,统筹效率、质量、成本的绩效管…

mysql窗口函数选择每个窗口的第一条数据

需求 假设我们有一个名为sales的表,我们想要按product分组,并为每个产品选择销售额最高的那一天 sales表 首先给每个产品按照销售量进行排名 SELECT product,sale_date,sales_amount,ROW_NUMBER() OVER (PARTITION BY product ORDER BY sales_amount …

AI在落地企业应用时的“数据幻觉”缘何这么难解决一谈LORA微调与数据质量处理之争

开篇 近年来,随着人工智能技术的飞速发展,越来越多的企业开始将AI落地应用于业务中。然而,不可忽视的是,企业在落地LLM RAG系统时,常常面临一个令人头痛的问题——数据幻觉。 就像透过雾霭的眼睛,看到了一片迷人的景…

火山引擎ByteHouse:新一代云数仓必不可少的五大核心能力

从数据库领域的发展历程来看,分析型数据库已有 40 多年的发展历史,与数据库基本同时代。从OLTP 和 OLAP 的分支来看,分析型数据库支持了海量数据规模下的聚合性分析。尤其是随着移动互联网甚至 AI 等领域的发展,用户画像行为分析的…

NGINX配置web文件服务

一、需求描述 系统需要提供文件(pdf、图片)等上传后支持预览功能。 二、实现方式 2.1 文件权限配置 chmod arwx -R public/chmod 是更改文件权限的命令。-R 是递归选项,表示更改目录及其所有子目录和文件的权限。arwx 是权限设置&#xf…

阿里巴巴找黄金宝箱(IV)

系列文章目录 本人最近再练习算法,所以会发布自己的解题思路,希望大家多指教 文章目录 系列文章目录前言一、题目描述二、输入描述三、输出描述四、java代码五、测试用例 前言 一、题目描述 贫如洗的椎夫阿里巴巴在去砍柴的路上,无意中发现…

一款专为网页开发者设计的高效工具,它简化了响应式网站的开发流程

大家好,今天给大家分享的是一款专为web开发人员和测试人员设计的工具,它通过改进的web浏览器功能,帮助用户进行响应式web开发和兼容性测试。 主要功能 所有设备上的镜像用户交互:允许开发人员在单一设备上进行操作,实时…

Python高精度浮点运算库之mpmath使用详解

概要 在科学计算和工程应用中,精确的数学计算至关重要。Python 作为一种灵活而强大的编程语言,提供了多种数学库,其中 mpmath 库因其高精度浮点运算和丰富的数学函数支持而备受关注。mpmath 库不仅适用于基本的高精度计算,还支持复数运算、矩阵运算和特殊函数计算,广泛应…

使用微信开发者工具创建运行项目全流程

小程序基础知识 1. 认识什么是小程序 什么是微信小程序 微信小程序是一种运行在微信内部的 轻量级 应用程序。 在使用小程序时 不需要下载安装,用户 扫一扫 或 搜一下 即可打开应用。它也体现了 “用完即走” 的理念,用户不用关心安装太多应用的问题…