计算机视觉——基于树莓派的YOLO11模型优化与实时目标检测、跟踪及计数的实践

概述

设想一下,你在多地拥有多个仓库,要同时监控每个仓库的实时状况,这对于时间和精力而言,都构成了一项艰巨挑战。从成本和可靠性的层面考量,大规模部署计算设备也并非可行之策。一方面,大量计算设备的购置、维护成本会让你的预算不堪重负;另一方面,设备数量增多,出现故障的概率也会相应提升,这无疑会给仓库的稳定监控带来极大的不确定性。

基于云的系统看似是一个解决之道,但实际上也存在诸多弊端。云计算系统在运行过程中,常常会受到网络状况、服务器负载等因素的影响,导致数据处理速度缓慢,甚至出现服务中断的情况。并且,随着数据量的不断增长以及使用时长的累积,基于云的系统所产生的费用也会持续攀升,这无疑会进一步加重你的经济负担。

在此种情形下,边缘计算技术的优势便凸显出来。与传统模式中将数据在本地与遥远服务器之间来回传输不同,边缘计算支持在数据产生的源头直接进行本地处理。这种方式不仅能够显著减少数据传输过程中的延迟,还能降低对网络带宽的依赖,从而大大提高了数据处理的效率和稳定性。

在众多实现边缘计算的方案中,在 树莓派 上运用 YOLO11 是一种极具性价比的选择。树莓派以其低成本、低功耗且具备一定计算能力的特性,为边缘计算提供了一个理想的硬件载体。而 YOLO11 作为先进的目标检测算法,能够高效精准地识别和分析图像或视频中的目标物体。将二者结合,能够在仓库现场实现实时的数据处理与分析,为仓库的安全管理和高效运营提供有力保障。

一、树莓派

树莓派最初是一款信用卡大小的计算机,其设计初衷是激发人们对基础计算机科学的兴趣。随着时间的推移,它已发展成为各类应用的首选平台,尤其是在边缘人工智能领域表现出色。2012 年,树莓派基金会发布了第一代树莓派,当时售价仅约合人民币 230 元,这一举措立刻在爱好者、教育工作者和专业人士群体中引发了极大的轰动。截至目前,树莓派系列的销量已突破6000 万台,且每一代产品都在前一代的基础上实现了性能的显著提升。
在这里插入图片描述

1.1 树莓派各代产品快速概览

  • 树莓派 1:作为低成本单板计算领域的先驱,其处理能力相对有限,更适合执行轻量级任务以及开展教育项目。
  • 树莓派 2 和 3:这两代产品在 CPU 性能上有了显著升级,内存容量也有所增加,同时还内置了 Wi - Fi 和蓝牙连接功能。这些改进为开展轻量级服务器任务、机器人技术研究以及早期人工智能实验奠定了坚实基础。
  • 树莓派 4:引入了 USB 3.0 端口,最高支持 8GB 内存,并配备了更强大的 GPU。这些特性拓宽了其在计算机视觉、媒体中心以及更复杂应用场景中的应用范围。
  • 树莓派 5:作为最新款型号,配备了2.4 GHz 四核 ARM Cortex - A76 处理器、经过优化的VideoCore VII GPU,支持PCIe连接,以及4GB 或 8GB 配置的 LPDDR4X - 4267 SDRAM,性能得到了进一步飞跃。

1.2 为什么树莓派非常适合边缘人工智能

  1. 成本效益高:树莓派价格低于人民币 700 元(树莓派 5 基础版通常约为 350 元),这使得用户能够在不同位置部署多个设备。想象一下,用这些小巧的板子装备整个工厂车间,实现分布式实时分析,而无需担心超出预算。
  2. 强大的社区支持:丰富的开源文档、众多的技术论坛以及社区驱动的库,让故障排除变得更加轻松。例如,picamera2 或 libcamera 等工具可以直接集成摄像头模块,用户几乎可以立即捕获图像数据,用于基于 YOLO 的推理。
  3. 改进的硬件加速:随着树莓派各代新产品的不断推出,其硬件加速能力也在持续提升。树莓派 5 增强的 GPU,再加上可能添加的谷歌珊瑚 USB 加速器,能够为更复杂的 YOLO11 变体提供额外的性能提升。

注意:本文使用的是树莓派 5(8GB)。

如果有关注过YOLO系列模型,就会了解到它们以高精度和实时目标检测能力而闻名。从 YOLOv3、YOLOv5 到 YOLOv8 等每一个新版本,都引入了更优的架构,以更快速、高效地处理计算机视觉任务。如今,YOLO11进一步推动了这些优化,以下是它在像树莓派这样的边缘设备上脱颖而出的原因:

  • 低延迟:由于采用了诸如C3k2C2PSA模块等架构改进,YOLO11 不仅能够准确地检测目标,还能以毫秒级延迟完成检测。这在需要快速决策以节省时间、资源甚至挽救生命的场景中至关重要,例如无人机应用、机器人技术或安全系统。
  • NCNN 集成:通过将 PyTorch 权重转换为专为边缘设备设计的NCNN格式,推理时间最多可缩短62%,使实时检测不再仅仅停留在理论层面。
  • 保持高 mAP:尽管 YOLO11 的模型更为轻量,但在常见的目标检测基准测试中仍能保持约**55%**的平均精度均值(mAP)。这种速度和精度的平衡确保了在提高效率的同时,不会牺牲检测质量。

我们之所以选择在树莓派上使用YOLO11,是因为它在速度精度资源效率方面实现了最佳平衡。传统的解决方案可能需要强大的 GPU 或大型计算集群才能实现实时结果,而 YOLO11 可以直接在边缘设备上运行——无需额外的硬件加速器(当然,如果您有需求,也可以添加)。

二、实现流程

为了在树莓派上实现高效的实时目标检测与跟踪,我们首先需要构建一个适合的开发环境,并对YOLO11模型进行优化导出。以下是详细的实现流程:

2.1 环境搭建

首先,创建一个独立的Python开发环境,以确保依赖库的兼容性与稳定性:

conda create -n yolo11xrpi python=3.11
conda activate yolo11xrpi
pip install ultralytics

此环境配置为后续模型导出与推理任务提供了必要的基础支持。

2.2 模型导出策略

鉴于树莓派的硬件特性,我们重点关注三种模型导出格式:OpenVINO、NCNN 和 MNN。这三种格式均针对边缘设备进行了优化,能够在保持模型精度的同时,显著提升推理速度。

  • OpenVINO:作为英特尔推出的工具包,OpenVINO通过深度优化,能够在英特尔硬件及兼容设备(如树莓派)上实现高效的神经网络推理。它提供了丰富的预优化模型与推理引擎,能够显著降低推理延迟。
  • NCNN:由腾讯开发的高性能神经网络推理框架,专为ARM架构的移动与边缘设备设计。NCNN以其轻量级特性与高效的计算性能,成为在树莓派上部署深度学习模型的理想选择。
  • MNN:阿里巴巴开发的移动神经网络框架,针对移动与嵌入式平台进行了全面优化。MNN支持多种硬件加速技术,包括GPU加速,能够在树莓派上实现快速且稳定的推理。

我们使用Ultralytics提供的导出命令将YOLO11模型转换为上述格式:

yolo export model=yolo11n.pt format=ncnn

详细的导出参数与配置可参考Ultralytics文档。

在本实验中,我们选用YOLO11n模型作为主要研究对象,因其在存储空间占用与检测精度之间取得了良好的平衡,能够满足树莓派的硬件约束,同时提供较高的帧率与检测精度。

2.3 代码实现

2.3.1 导入库与设置

导入必要的Python库,为后续的图像处理、模型推理与结果展示提供支持:

import cv2
import numpy as np
import time
from ultralytics import YOLO
from collections import defaultdict
  • OpenCV(cv2:用于视频帧的读取、边界框的绘制以及图像的显示与保存。
  • NumPy(np:用于高效的数值计算与数组操作,便于处理模型输出的检测结果。
  • time:用于测量每帧的处理时间,进而计算实时帧率(FPS)。
  • YOLO:Ultralytics提供的YOLO模型接口,用于加载预训练模型并执行检测与跟踪任务。
  • defaultdict:用于存储跟踪目标的历史信息,无需手动检查键是否存在,简化了代码逻辑。

2.3.2 定义推理函数

定义inference函数,封装模型推理的完整流程:

def inference(model,mode,task,video_path=None,save_output=False,output_path="output.mp4",show_output=True,count=False,show_tracks=False,
):pass

该函数接受以下参数:

  • model:加载的YOLO模型实例。
  • mode:输入模式,可选值为"cam"(使用网络摄像头)或"video"(从视频文件读取)。
  • task:任务类型,可选值为"detect"(目标检测)或"track"(目标跟踪)。
  • video_path:当mode"video"时,指定视频文件的路径。
  • save_output:是否保存处理后的视频输出。
  • output_path:保存输出视频的路径。
  • show_output:是否实时显示处理结果。
  • count:是否对检测到的目标进行计数。
  • show_tracks:是否绘制目标的运动轨迹。

2.3.3 预处理

根据输入模式初始化视频捕获对象,并设置相关参数:

if mode == "cam":cap = cv2.VideoCapture(0)
elif mode == "video":if video_path is None:raise ValueError("Please provide a valid video path for video mode.")cap = cv2.VideoCapture(video_path)
else:raise ValueError("Invalid mode. Use 'cam' or 'video'.")track_history = defaultdict(lambda: [])
seen_ids_per_class = defaultdict(set)fourcc = cv2.VideoWriter_fourcc(*"mp4v")
input_fps = cap.get(cv2.CAP_PROP_FPS)
out = None
  • 创建VideoCapture对象,用于从网络摄像头或视频文件中读取视频帧。
  • 初始化track_history字典,用于存储每个跟踪目标的历史轨迹信息,便于后续绘制运动轨迹。
  • 初始化seen_ids_per_class字典,用于记录每个类别中已检测到的唯一目标ID,以便进行目标计数。
  • 设置视频编码格式与输入视频的帧率,为保存输出视频做准备。

2.3.4 主处理循环

进入主循环,逐帧处理视频数据:

while cap.isOpened():success, frame = cap.read()if not success:print("Failed to read frame or end of video")breakstart_time = time.time()class_counts = defaultdict(int)if task == "track":results = model.track(frame, conf=0.3, persist=True, tracker="bytetrack.yaml")elif task == "detect":results = model.predict(frame, conf=0.5)else:raise ValueError("Invalid task. Use 'detect' or 'track'.")end_time = time.time()annotated_frame = results[0].plot()
  • 从视频捕获对象中读取一帧,若读取失败则退出循环。
  • 记录当前帧的处理开始时间,用于后续计算帧率。
  • 根据任务类型(检测或跟踪),调用YOLO模型的相应方法进行推理。
    • 在跟踪模式下,设置较低的置信度阈值(conf=0.3),并启用目标持久化跟踪(persist=True),同时指定跟踪算法配置文件("bytetrack.yaml")。
    • 在检测模式下,使用较高的置信度阈值(conf=0.5)进行目标检测。
  • 记录当前帧的处理结束时间,并调用results[0].plot()方法生成带有检测或跟踪结果的注释帧。

2.3.5 YOLO的输出张量解析

YOLO模型的输出结果存储在results列表中,其中results[0]包含了当前帧的检测或跟踪信息。关键属性如下:

  • results[0].boxes:包含检测到的目标边界框信息。
    • boxes.xywh:以(x_center, y_center, width, height)格式表示边界框的中心点坐标、宽度与高度。
    • boxes.cls:每个边界框对应的类别索引,可通过results[0].names将其映射为类别名称。
    • boxes.id(仅在跟踪模式下可用):每个边界框的唯一跟踪ID,用于在连续帧中标识同一目标。

2.3.6 检测与跟踪逻辑

检测模式

在检测模式下,对每个检测到的目标进行类别统计:

if task == "detect":results = model.predict(frame, conf=0.5)if results[0].boxes and results[0].boxes.cls is not None:boxes = results[0].boxes.xywh.cpu()class_ids = results[0].boxes.cls.int().cpu().tolist()names = results[0].namesif count:class_counts = defaultdict(int)for cls_id in class_ids:class_counts[names[cls_id]] += 1
  • 获取检测结果中的边界框坐标、类别索引以及类别名称映射表。
  • 若启用了目标计数功能(count=True),则遍历类别索引列表,统计每个类别的目标数量。
跟踪模式

在跟踪模式下,利用目标的唯一ID进行更复杂的处理:

if task == "track":results = model.track(frame, conf=0.3, persist=True, tracker="bytetrack.yaml")if task == "track" and results[0].boxes.id is not None:track_ids = results[0].boxes.id.int().cpu().tolist()for box, cls_id, track_id in zip(boxes, class_ids, track_ids):x, y, w, h = boxclass_name = names[cls_id]if count:seen_ids_per_class[class_name].add(track_id)track_history[track_id].append((x, y))
  • 获取跟踪结果中的目标ID列表。
  • 遍历每个目标的边界框、类别索引与跟踪ID,执行以下操作:
    • 若启用了目标计数功能,则将当前目标的跟踪ID添加到对应类别的集合中,确保每个目标仅被计数一次。
    • 将当前目标的坐标信息添加到其跟踪历史记录中,便于后续绘制运动轨迹。

2.3.7 目标计数与轨迹绘制

在跟踪模式下,通过维护目标的唯一ID,实现对每个类别的唯一目标数量统计:

if count:seen_ids_per_class[class_name].add(track_id)

在检测模式下,仅对当前帧中的目标进行简单计数:

if task == "detect" and count:for cls_id in class_ids:class_counts[names[cls_id]] += 1

通过这两种方式,我们能够在不同任务模式下灵活地统计目标数量,满足多样化的应用场景需求。

三、推理结果与性能分析

为了评估YOLO11模型在树莓派上的推理性能,我们对其进行了全面的基准测试。测试环境为树莓派5,使用YOLO11n模型在COCO数据集上进行评估,图像尺寸设置为640×640像素。测试结果如下表所示:

格式状态大小 (MB)mAP (50-95)推理时间 (ms/帧)FPS
PyTorch5.40.610360.092.78
TorchScript10.50.608472.032.12
ONNX10.20.608156.846.38
OpenVINO10.40.60980.9312.36
TensorFlow SM26.50.608510.251.96
TensorFlow GD10.30.608515.561.94
TensorFlow Lite10.30.608354.822.82
PaddlePaddle20.40.608665.491.5
MNN10.10.610115.838.63
NCNN10.20.611292.103.42

从测试结果可以看出,OpenVINO和MNN格式在树莓派上表现出了较高的推理速度,分别达到了12.36 FPS和8.63 FPS。其中,OpenVINO格式在保持较高平均精度均值(mAP)的同时,具有最快的推理速度,适合对实时性要求较高的应用场景;而NCNN格式虽然在推理速度上略逊于OpenVINO,但其mAP值最高,达到了0.611,表明在检测精度方面具有一定优势。

为了进一步验证模型在实际应用中的效果,我们分别使用MNN、OpenVINO和NCNN格式进行了目标检测与跟踪任务的推理实验,并通过视频展示了推理结果。以下是部分实验结果的描述:

3.1 MNN格式推理结果

使用MNN格式进行目标检测与跟踪任务的推理实验,结果表明,该格式在树莓派上能够实现较为流畅的实时推理,平均帧率约为8-10 FPS。实验中,模型能够准确地检测出视频中的目标,并为其绘制边界框与类别标签。在跟踪任务中,目标的运动轨迹能够被清晰地绘制出来,且跟踪效果稳定,即使在目标发生遮挡或快速运动的情况下,仍能保持较好的跟踪精度。这表明MNN格式在树莓派上具有良好的适用性,能够在资源受限的嵌入式设备上实现高效的目标检测与跟踪。

在树莓派上部署yolo11目标检测与行人追踪效果

3.2 OpenVINO格式推理结果

在OpenVINO格式下进行目标检测与分割任务的推理实验,结果显示,该格式在树莓派上能够实现较高的推理速度,平均帧率可达10-12 FPS。在目标检测任务中,模型能够快速准确地检测出视频中的目标,并为其绘制边界框与类别标签。在目标分割任务中,模型能够对目标进行较为精细的分割,分割结果的边界较为清晰,且与目标的实际轮廓较为贴合。这表明OpenVINO格式在树莓派上具有较高的推理效率和较好的分割精度,适合对实时性和分割精度要求较高的应用场景。

基于OpenVINO对yolo11分割推理结果

3.3 NCNN格式推理结果

使用NCNN格式进行目标检测与姿态估计任务的推理实验,实验结果表明,该格式在树莓派上能够实现较为准确的目标检测与姿态估计。在目标检测任务中,模型能够准确地检测出视频中的目标,并为其绘制边界框与类别标签。在姿态估计任务中,模型能够对目标的姿态进行较为准确的估计,并绘制出目标的关键点与姿态骨架。虽然NCNN格式的推理速度略低于OpenVINO格式,但其检测精度和姿态估计精度较高,能够满足对检测精度和姿态估计精度要求较高的应用场景。

在树莓派上输出基于 yolo11 的姿态 ncnn 推理结果

3.4 实时检测、跟踪与计数实验结果

了模拟实时工业应用场景,我们进行了实时目标检测、跟踪与计数的实验。实验中,模型能够实时地检测出视频中的目标,并对其进行跟踪与计数。在检测任务中,模型能够准确地检测出视频中的目标,并为其绘制边界框与类别标签;在跟踪任务中,目标的运动轨迹能够被清晰地绘制出来,且跟踪效果稳定;在计数任务中,模型能够准确地统计出每个类别的目标数量,并实时显示在屏幕上。实验结果表明,该系统能够在实时场景中实现高效的目标检测、跟踪与计数,满足工业生产中的实时监控与统计需求。

yolo11在树莓派基于mnn与ncnn效果

四、 回顾与总结

4.1 树莓派在边缘人工智能中的重要性

树莓派作为一种经济实惠且功能强大的嵌入式计算平台,在边缘人工智能领域具有重要的应用价值。随着边缘人工智能市场的快速发展,越来越多的应用场景需要在本地进行数据处理,以减少对云端计算的依赖,降低延迟,提高数据隐私性。树莓派凭借其低功耗、高性能的特点,以及强大的社区支持,成为在边缘部署人工智能的理想选择之一。特别是树莓派5的推出,其在处理能力和硬件接口方面都有了显著提升,进一步拓展了其在边缘人工智能领域的应用范围。

4.2 YOLO11模型的优化特性

YOLO11模型是专门为边缘设备优化的目标检测模型,与YOLOv8相比,它在显著降低模型复杂度(最多降低37%)的同时,仍保持了较高的检测精度(约85%的平均精度均值)。这种优化使得YOLO11能够在资源受限的树莓派上实现高效的实时目标检测,为边缘设备上的复杂计算机视觉任务提供了可能。其轻量级的模型结构和高效的推理性能,使其成为在树莓派上部署目标检测应用的首选模型之一。

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

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

相关文章

通信协议记录仪-产品规格书

以下是为 ​​通信协议记录仪(ProtoLogger Pro)​​ 的​​详细产品规格书​​,覆盖 ​​技术细节、场景需求、竞品差异化​​,确保可作为产品开发、市场营销及竞品分析的核心依据。 ​​通信协议记录仪产品规格书​​ ​​产品名称​​:ProtoLogger Pro(中文名称:蹲守…

python:sklearn 决策树(Decision Tree)

5. 决策树(Decision Tree) - 第5章 算法思想:基于信息增益(ID3)或基尼不纯度(CART)递归划分特征。 编写 test_dtree_1.py 如下 # -*- coding: utf-8 -*- """ 5. 决策树&…

【2-sat】2-sat算法内容及真题

A.2-sat简介 2-sat算法可以求解给定推出关系下的一种合法情况。题目中重常常,给定一些布尔变量A、B、C、D…,再给出一系列形如 B ⟶ A , C ⟶ D B \longrightarrow A , C \longrightarrow \neg D B⟶A,C⟶D的推出关系,询问使得所有推出关系…

【git】获取特定分支和所有分支

1 特定分支 1.1 克隆指定分支&#xff08;默认只下载该分支&#xff09; git clone -b <分支名> --single-branch <仓库URL> 示例&#xff08;克隆 某一个 分支&#xff09;&#xff1a; git clone -b xxxxxx --single-branch xxxxxxx -b &#xff1a;指定分支…

LWIP带freeRTOS系统移植笔记

以正点原子学习视频为基础的文章 LWIP带freeRTOS系统移植 准备资料/工程 1、lwIP例程1 lwIP裸机移植 工程 &#xff0c; 作为基础工程 改名为LWIP_freeRTOS_yizhi工程 2、lwIP例程6 lwIP_FreeRTOS移植 工程 3、freeRTO源码 打开https://www.freertos.org/网址下载…

组网技术知识点

1.port-isloate enable命令用于实现两个接口之间的二层数据隔离&#xff0c;三层数据互通。 2.交换机最多支持4096个VLAN&#xff0c;编号为1-4094 3.display bfd session all&#xff1a;查看BFD会话状态是否UP 4.RJ45通过双绞线连接以太网&#xff1b; AUI端口&#xff1…

Linux系统:进程程序替换以及相关exec接口

本节重点 理解进程替换的相关概念与原理掌握相关程序替换接口程序替换与进程创建的区别程序替换的注意事项 一、概念与原理 进程程序替换是操作系统中实现多任务和资源复用的关键机制&#xff0c;允许进程在运行时动态加载并执行新程序。 1.1 定义 进程程序替换是指用新程…

从此,K8S入门0门槛!

前言 当你想要入门K8S的时候&#xff0c;往往会被各种概念搞的晕乎乎的&#xff0c;什么API Server&#xff0c;Scheduler&#xff0c;Controller manager&#xff0c;Etcd&#xff0c;Pod&#xff0c;Kubelet&#xff0c;kube-proxy&#xff0c;deployment…… 哪怕你使用了…

[Python开发] 如何用 VSCode 编写和管理 Python 项目(从 PyCharm 转向)

在 Python 开发领域,PyCharm 一直是广受欢迎的 IDE,但其远程开发功能(如远程 SSH 调试)仅在付费版中提供。为了适应服务器部署需求,很多开发者开始将目光转向更加轻量、灵活且免费扩展能力强的 VSCode。本篇文章将详细介绍,从 PyCharm 转向 VSCode 后,如何高效搭建和管理…

处方流转平台权限控制模块设计(基于RBAC模型)

这是基于笔者的一些经验设计并加以完善的方案&#xff0c;仅供参考。 处方流转平台权限控制模块设计&#xff08;基于RBAC模型&#xff09; 1. 需求分析 处方流转平台需要严格的权限控制&#xff0c;确保&#xff1a; 患者隐私数据保护处方开具、审核、调配、发药等流程的合…

基于BM1684X+RK3588的智能工业视觉边缘计算盒子解决方案

智能工业视觉边缘计算终端技术方案书‌ ‌1. 产品概述‌ 1.1 产品定位 面向工业自动化场景的高性能AI视觉处理设备集成BM1684X&#xff08;8TOPS INT8&#xff09;AI加速芯片 RK3588&#xff08;6TOPS NPU&#xff09;异构计算支持工业级多相机接入、实时缺陷检测、高精度定…

软件工程中的 QFD

: 软件工程中的 QFD 在软件工程领域,随着市场竞争的加剧和用户需求的日益复杂,如何有效地将用户需求转化为软件产品,成为软件开发团队面临的重要挑战。而质量功能部署(Quality Function Deployment,QFD)作为一种强大的工具,为这一问题提供了有效的解决方案。 一、QF…

Vue2基础速成

一、准备工作 首先下载vue2的JavaScript库&#xff0c;并且命名为vue.min.js 下载链接&#xff1a;https://cdn.jsdelivr.net/npm/vue2&#xff08;若链接失效可去vue官网寻找&#xff09; CTRLS即可下载保存 文件目录结构 二、使用操作原生DOM与使用VUE操作DOM的便捷性比较…

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(14):かもしれません (~た・~ない)ほうがいいです

日语学习-日语知识点小记-构建基础-JLPT-N4阶段&#xff08;1&#xff14;&#xff09;&#xff1a;かもしれません &&#xff08;&#xff5e;た・&#xff5e;ない&#xff09;ほうがいいです 1、前言&#xff08;1&#xff09;情况说明&#xff08;2&#xff09;工程师…

传统银行服务和 区块链支付无缝融合的一种解决方案

Dragonfly Capital 的合伙人 Alex Pack 曾表示:“DeFi 的目标是重构全球银行体系,并打造开放且无须许可的经营环境。”在 DeFi 的金融世界中,加密资产架构在区块链上,通过各个协议实现资产之间的高效转移和价值的实时流通,如 Metamask 钱包的自托管,Uniswap 的资产交易,…

基于深度学习的毒蘑菇检测

文章目录 任务介绍数据概览数据处理数据读取与拼接字符数据转化标签数据映射数据集划分数据标准化 模型构建与训练模型构建数据批处理模型训练 文件提交结果附录 任务介绍 本次任务为毒蘑菇的二元分类&#xff0c;任务本身并不复杂&#xff0c;适合初学者&#xff0c;主要亮点…

时间给了我们什么?

时间给了我们什么&#xff1f; ​春秋易逝&#xff0c;青春难留&#xff0c;转瞬之间已过半百。 ​过往中&#xff0c;有得有失&#xff0c;这就是人生。 ​一日三餐四季&#xff0c;日起日落里&#xff0c;成就了昨天、今天和明天&#xff0c;在历史长河中&#xff0c;皆是…

软件工程国考

软件工程-同等学力计算机综合真题及答案 &#xff08;2004-2014、2017-2024&#xff09; 2004 年软工 第三部分 软件工程 &#xff08;共 30 分&#xff09; 一、单项选择题&#xff08;每小题 1 分&#xff0c;共 5 分&#xff09; 软件可用性是指&#xff08; &#xff09…

数据结构*栈

栈 什么是栈 这里的栈与我们之前常说的栈是不同的。之前我们说的栈是内存栈&#xff0c;它是JVM内存的一部分&#xff0c;用于存储局部变量、方法调用信息等。每个线程都有自己独立的栈空间&#xff0c;当线程启动时&#xff0c;栈就会被创建&#xff1b;线程结束&#xff0c…

IntelliJ IDEA 保姆级使用教程

文章目录 一、创建项目二、创建模块三、创建包四、创建类五、编写代码六、运行代码注意 七、IDEA 常见设置1、主题2、字体3、背景色 八、IDEA 常用快捷键九、IDEA 常见操作9.1、类操作9.1.1、删除类文件9.1.2、修改类名称注意 9.2、模块操作9.2.1、修改模块名快速查看 9.2.2、导…