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

深度学习实战野生动物识别

在这里插入图片描述

  本文采用YOLOv11作为核心算法框架,结合PyQt5构建用户界面,使用Python3进行开发。YOLOv11以其高效的实时检测能力,在多个目标检测任务中展现出卓越性能。本研究针对野生动物数据集进行训练和优化,该数据集包含丰富的野生动物图像样本,为模型的准确性和泛化能力提供了有力保障。通过深度学习技术,模型能够自动提取野生动物的特征并进行分类识别。PyQt5界面设计简洁直观,便于用户操作和实时查看检测结果。本研究不仅提高了野生动物识别的自动化水平,还为野生动物保护系统的构建提供了有力支持,具有重要的理论应用价值。

YOLOv11实战野生动物识别

文章目录

  • 研究背景
  • 1.前言
    • 1.1 YOLO 系列:目标检测领域的璀璨明星
    • 1.2 Transformer与注意力机制:为目标检测注入新活力
    • 1.3 野生动物检测技术:迎接挑战,砥砺前行
    • 1.4 YOLOv11算法在野生动物检测系统中的精彩演绎
    • 1.5 项目获取
  • 2.野生动物数据集介绍
  • 3.界面效果演示
    • 3.1 图像测试
    • 3.2 视频测试
    • 3.3 摄像头测试
  • 4. YOLOv11 原理
  • 5 模型训练
    • 5.1 Conda环境构建
    • 5.2 基础环境构建
    • 5.3 安装YOLOv11环境
    • 5.4 构建野生动物检测模型
  • 6 系统实现
    • 6.1架构设计
    • 6.2 系统流程
    • 6.3 代码实现
  • 安装与资源说明
  • 总结与展望
  • 结束语


研究背景


1.前言

1.1 YOLO 系列:目标检测领域的璀璨明星

  在实时目标检测的算法星空中,YOLO 系列无疑是最为耀眼的星座之一。从 YOLOv5 到 YOLOv11,每一次的迭代都宛如一次华丽的蜕变,在性能、速度与准确度上实现了跨越式的提升。YOLOv11,作为这一系列的最新杰作,凭借其更为深邃复杂的网络架构以及精妙绝伦的训练技巧,将检测的准确性与速度推向了新的高峰。尤其在应对动态视频流中的野生动物检测任务时,它宛如一位技艺精湛的舞者,展现出了令人赞叹的卓越性能。这些显著的改进,如同强大的引力,使得 YOLO 系列在野生动物检测领域的应用版图不断拓展,愈发完美地契合了实时性与准确性的双重严苛要求。
多元算法共筑野生动物标志检测的坚实堡垒
  除了光芒四射的 YOLO 系列,其他深度学习算法,诸如 Faster R - CNN、SSD 以及基于 Transformer 的 DETR 等,也纷纷在野生动物佩戴检测的舞台上崭露头角。它们各具独特的优势,恰似一群才华横溢的艺术家,在不同的领域绽放光彩。Faster R - CNN 以其在检测精度上的非凡表现,犹如一位精雕细琢的工匠,刻画着每一个细节;而 SSD 则在速度方面具备明显优势,恰似一阵疾风,迅速而敏捷。最新的研究恰似一场永不停歇的探索之旅,不断挖掘这些算法的改进版本,力求在速度与准确性之间找到那最为完美的平衡点,如同在钢丝上寻找平衡的舞者,追求极致的和谐。

1.2 Transformer与注意力机制:为目标检测注入新活力

  Transformer 在视觉任务中的应用,犹如一颗璀璨的新星划破夜空,吸引了广泛的关注,其中视觉 Transformer(ViT)更是备受瞩目。ViT 通过巧妙引入自注意力机制,仿佛为模型赋予了一双敏锐的眼睛,能够精准捕捉图像中的长距离依赖关系,这在中国野生动物形态复杂多样且背景纷繁复杂的情况下,显得尤为关键。相较于传统的卷积神经网络(CNN),ViT 在处理图像全局信息时展现出了更为卓越的能力,如同一位宏观把控的大师,为中国野生动物检测开辟了一片崭新的天地,提供了全新的解决思路。
注意力机制,作为 Transformer 的核心瑰宝,已如同星星之火,在各种深度学习模型中形成燎原之势,在中国野生动物检测领域更是大放异彩。它赋予了模型对图像特定部分的 “专注” 能力,如同为模型戴上了一副神奇的眼镜,使其能够在复杂的背景或多变的中国野生动物形态中,依然清晰地定位并准确识别目标,即便在干扰信息如潮水般涌来的环境中,也能稳如泰山,保持较高的检测准确率。

1.3 野生动物检测技术:迎接挑战,砥砺前行

当前,中国野生动物检测技术正置身于充满挑战的浪潮之中,亟待提高检测的实时性、准确性以及在多变环境下的适应性,如同在波涛汹涌的大海中航行的船只,需要不断调整航向,迎接风浪的挑战。为了跨越这些难关,研究人员们宛如勇敢的探险家,不断探索新的算法和技术。例如,通过深度学习模型的轻量化设计,如同为船只减轻负重,提高算法的运行效率,使其在复杂的环境中更加灵活敏捷;利用创新的数据增强技术和自适应学习方法,仿佛为船只加固船身,提升模型的泛化能力和鲁棒性,使其能够在各种未知的海域中稳健前行。

1.4 YOLOv11算法在野生动物检测系统中的精彩演绎

  本博客致力于基于 YOLOv11 算法构建一个野生动物检测系统,并全方位展示其魅力。我们将呈现系统精致的界面效果,如同揭开一幅美丽画卷,让您领略其独特风采;深入阐述其算法原理,恰似探秘一座神秘城堡,为您揭示其中的奥秘;毫无保留地提供代码实现,仿佛为您递上一把开启知识宝库的钥匙;详细分享该系统的实现过程,如同陪伴您走过一段精彩旅程,让您亲身体验其中的艰辛与喜悦。希望本博客的倾心分享能如同一盏明灯,为读者照亮前行的道路,给予您深刻的启示,进而推动更多相关研究的蓬勃发展。本文的核心内容主要涵盖以下几个方面:

  1. YOLOv11 算法的卓越应用与性能对比
      本文不仅详细介绍了基于 YOLOv11 算法的中国野生动物检测系统的构建历程,如同讲述一个精彩的创业故事,而且还深入细致地比较了 YOLOv7、YOLOv6、YOLOv5 等早期版本的性能差异,仿佛展开一场激烈的武林高手对决。这一全面深入的比较研究,恰似一本权威的指南,为中国野生动物检测技术的选型提供了坚实有力的参考依据。特别是 YOLOv11 算法在效率和精准度方面所展现出的显著优势,犹如一座明亮的灯塔,为 野生动物检测指明了一条更为高效、更为准确的技术路径。
  2. PyQt5 打造的友好用户界面
      通过 Python 的 PyQt5 库精心打造的野生动物检测系统,不仅具备高效卓越的检测能力,如同一位内功深厚的武林高手,更提供了直观便捷、令人赏心悦目的用户操作界面,仿佛为用户搭建了一座温馨的家园。这种贴心的设计,使得野生动物检测变得更加亲切友好,如同一位热情好客的主人,有助于广泛推广 YOLOv11 算法的应用,同时也为野生动物检测技术的普及和实用化注入了强大的动力,如同春风化雨,滋润着这片技术的田野。
  3. YOLOv11 模型的深度研究与性能剖析
      YOLOv11是YOLO系列的最新版本,旨在提高实时目标检测技术的准确性和效率,引入了C3k2块、SPPF和C2PSA组件,增强了特征提取能力。
      主干网络:YOLOv11的主干网络采用了C3k2块,替代了之前版本中的C2f块,提升了计算效率。
      颈部结构:在颈部引入了C2PSA模块,增强了空间注意力机制。
      头部预测:头部使用了多个C3k2块和CBS层,进一步细化特征图,最终输出边界框和类别标签。支持的计算机视觉任务:

  精度与效率:YOLOv11在COCO数据集上取得了更高的平均精度(mAP),同时参数数量减少了22%。
  多任务能力:YOLOv11在多种计算机视觉任务中表现出色,包括姿态估计、对象识别、图像分类等。
  架构优化:通过改进的架构设计和训练流程,YOLOv11实现了更快的处理速度和更高的计算效率。

1.5 项目获取

在这里插入图片描述

2.野生动物数据集介绍

  野生动物数据集包含四种野生动物,分别是大象、水牛、犀牛以及斑马,在数据预处理阶段,采取了几项关键步骤以确保数据集的质量。首先,所有图像都经过了自动方向校正。接着,所有图像都被统一调整至640x640像素,通过拉伸的方式来适配这一分辨率。

在这里插入图片描述
在这里插入图片描述

3.界面效果演示

3.1 图像测试

在这里插入图片描述

3.2 视频测试

在这里插入图片描述

3.3 摄像头测试

在这里插入图片描述

4. YOLOv11 原理

  YOLOv11是YOLO系列另一个SOTA模型,该模型是相对于YOLOV5进行更新的。其主要结构如下图所示:
在这里插入图片描述

  从图中可以看出,网络还是分为三个部分: 主干网络(backbone),特征增强网络(neck),检测头(head) 三个部分。
  相比较于YOLOv8模型,其将CF2模块改成C3K2,同时在SPPF模块后面添加了一个C2PSA模块,且将YOLOv10的head思想引入到YOLO11的head中,使用深度可分离的方法,减少冗余计算,提高效率

  主干网络:YOLOv11的主干网络采用了C3k2块,替代了之前版本中的C2f块,提升了计算效率。

class C3k2(C2f):"""Faster Implementation of CSP Bottleneck with 2 convolutions."""def __init__(self, c1, c2, n=1, c3k=False, e=0.5, g=1, shortcut=True):"""Initializes the C3k2 module, a faster CSP Bottleneck with 2 convolutions and optional C3k blocks."""super().__init__(c1, c2, n, shortcut, g, e)self.m = nn.ModuleList(C3k(self.c, self.c, 2, shortcut, g) if c3k else Bottleneck(self.c, self.c, shortcut, g) for _ in range(n))

  颈部结构:在颈部引入了C2PSA模块,增强了空间注意力机制。
  C2PSA是对 C2f 模块的扩展,它结合了PSA(Pointwise Spatial Attention)块,用于增强特征提取和注意力机制。通过在标准 C2f 模块中引入 PSA 块,C2PSA实现了更强大的注意力机制,从而提高了模型对重要特征的捕捉能力。
在这里插入图片描述

  头部预测:头部使用了多个C3k2块和CBS层,进一步细化特征图,最终输出边界框和类别标签。

5 模型训练

模型训练主要分为如下几步:

5.1 Conda环境构建

  新人安装Anaconda环境可以参考博主写的文章Anaconda3与PyCharm安装配置保姆教程

5.2 基础环境构建

  新人安装PyTorch GPU版本可以参考博主写的文章基于conda的PyTorch深度学习框架GPU安装教程

5.3 安装YOLOv11环境

conda create -n yolov11 python=3.8
conda activate yolov11
pip install ultralytics

5.4 构建野生动物检测模型

  野生动物检测系统,分别为

names: ['大象', '水牛', '犀牛', '斑马']

  野生动物数据集训练集一共1000左右,验证集300张,标注格式采用yolo格式组织

	imagestrainimage1.jpgimage2.jpg...valimage11.jpgimage22.jpg...labelstrainimage1.txtimage2.txt...valimage11.txtimage22.txt...

  我们开启训练之旅的第一步是导入一系列不可或缺的模块,其中涵盖了 os 模块,它犹如一把万能钥匙,为我们处理各种文件路径相关的操作提供了便利;torch 模块恰似一台强大的引擎,助力我们高效地执行各类数值计算任务;yaml 模块则如同一位精准的翻译官,能够帮助我们轻松解析配置文件中的各种信息;还有专门的 YOLO 类,它是我们构建模型的关键基石,为实例化模型奠定了基础。
  紧接着,我们着手确定训练过程所依托的计算设备。在这个环节中,我们秉持优先选择的策略,将目光聚焦于 GPU(cuda:0),因为它具备强大的并行计算能力,能够极大地加速训练过程。然而,若 GPU(cuda:0)不可用,我们也做好了充分的应对准备,即退而求其次,选择使用 CPU 来继续我们的训练任务。尽管 CPU 的计算速度相对较慢,但它依然能够确保训练工作的顺利进行,为我们的研究提供持续的支持。

import os
import torch
import yaml
from ultralytics import YOLO  # 导入YOLO模型
device = "cuda:0" if torch.cuda.is_available() else "cpu"

  接下来,我们对一些基本的训练参数进行了设定,其中包括工作进程数以及批次大小。随后,明确了数据集的名称与路径,并且借助 abs_path 函数获取到了配置文件的绝对路径。这样做能够保证在不同的运行环境下路径具有一致性,同时也提升了代码的可移植性。

workers = 1
batch = 8data_name = "wildAnimal"
data_path = abs_path(f'datasets/{data_name}/{data_name}.yaml', path_type='current')  # 数据集的yaml的绝对路径
unix_style_path = data_path.replace(os.sep, '/')# 获取目录路径
directory_path = os.path.dirname(unix_style_path)')

  在加载数据配置文件之前,必须先读取并解析 YAML 格式的配置文件。这一环节极为重要,原因在于该配置文件中涵盖了训练过程所需的关键信息,例如类别标签以及数据集路径等等。我们对配置文件中的“path”键值进行修改,以此确保模型能够准确无误地找到训练和验证数据。

# 读取YAML文件,保持原有顺序
with open(data_path, 'r') as file:data = yaml.load(file, Loader=yaml.FullLoader)
# 修改path项
if 'path' in data:data['path'] = directory_path# 将修改后的数据写回YAML文件with open(data_path, 'w') as file:yaml.safe_dump(data, file, sort_keys=False)

  接着,我们加载了预先训练好的 YOLOv11 模型,进而开启了训练进程。YOLO 类的 train 方法接纳了众多参数,其中有数据路径、设备、工作进程数、输入图像的尺寸、训练周期以及批次大小。在此处,name参数为训练任务赋予了标识,便于后续进行追踪与分析。


model = YOLO(abs_path('./weights/yolo11s.pt'), task='detect')  # 加载预训练的YOLOv11模型
results = model.train(  # 开始训练模型data=data_path,  # 指定训练数据的配置文件路径workers=0,  imgsz=640,  # 指定输入图像的大小为640x640epochs=100,  # 指定训练100个epochbatch=batch,  # 指定每个批次的大小为8name='train_v11_' + data_name  # 指定训练任务的名称
)

50个epoch训练输出曲线如下
在这里插入图片描述

  在目标检测领域,对训练过程中的损失函数展开分析可谓至关重要。这是因为它不但能够反映出模型的学习状况,还能指示出模型性能或许存在的问题。
  首先,从训练和验证的损失图当中能够看出,伴随训练进程的不断推进,train/box_loss、train/cls_loss 以及 train/obj_loss 皆呈现出下降的态势,这表明模型在学习的过程里逐渐对训练数据进行拟合,并且在边界框定位、类别分类以及目标检测方面的表现持续改进。相应地,验证损失 val/box_loss、val/cls_loss 和 val/obj_loss 尽管波动较大,然而总体上也显现出下降的趋势,这意味着模型对未曾见过的数据的泛化能力正在增强。
  具体而言,train/box_loss 从接近 0.8 降至大约 0.3,这无疑是一个极为良好的信号,意味着模型在边界框的定位方面变得越发精准。与此类似,train/cls_loss 和 train/obj_loss 的下降表明分类误差在减少,同时对目标的识别准确度得到提高。我们期望验证损失也能够呈现出相似的下降趋势,尽管中途存在一些波动,但整体的下降趋势表明模型的泛化能力在逐步提高,并未出现过拟合的状况。

  在性能指标这一方面,metrics/precision、metrics/recall、metrics/mAP50 以及 metrics/mAP50 - 95 的图表展现出了模型性能的稳步上升。准确率(Precision)与召回率(Recall)随着训练周期的增加而不断增长,这就意味着模型在识别正样本方面变得更为精确,同时也能够回收更多的正样本。mAP(mean Average Precision)属于目标检测中极为重要的评估指标之一,metrics/mAP50 和 metrics/mAP50 - 95 的提升表明模型针对不同 IoU 阈值的检测性能均在提高。mAP50 是指在 IoU 为 0.5 时的平均精度,而 mAP50 - 95 则表示在 IoU 从 0.5 到 0.95 不同阈值下的平均精度,它能够更为全面地反映出模型在各种重叠度下的表现。观察到这些指标的稳步提升,便可以说明模型在整个训练过程中的表现是在持续优化的。

  在机器学习领域当中,F1 分数是一个极为关键的性能指标,它对模型的准确率和召回率进行了综合考虑,为我们提供了有关模型分类性能的全面视角。这个指标尤其适用于正负样本分布不平衡的情况,能够助力我们理解模型在检测难以区分的类别时的具体表现。
在这里插入图片描述
在这里插入图片描述

6 系统实现

6.1架构设计

   MainWindow 类的核心目标是打造一个用户友好的交互式中国野生动物检测系统。为了达成这一目标,采用了将界面、媒体处理与模型进行集成的设计理念。通过对象组合的手段,把不同的处理器和模型整合在一起,使得每个功能模块都可以独立运作。与此同时,还运用信号和槽机制来实现模块之间的交互以及数据的传递。
   我们的系统设计理念以三层架构作为核心,分别是处理层、界面层以及控制层。在系统设计过程中,我们将重点置于确保各个组件能够协同运作的同时,保持充分的模块独立性,以便于未来进行维护和升级。
在这里插入图片描述

   处理层(Processing Layer):通过运用模块化的处理层,我们对 YOLOv11Detector 类所实现的深度学习模型予以封装。如此一来,图像处理与目标检测的复杂性对于其他系统组件而言是不可见的。这种封装不但提升了系统的可靠性,还使得未来替换或升级模型变得更为容易。

   界面层(UI Layer):在界面层方面,我们借助 PyQt5 库构建出一套完整的用户界面,提供了直观的操作按钮、状态标签以及实时的图像显示。该界面不但能够对用户的操作做出响应,还能实时反馈模型的检测结果,进而提高用户的操作便利性与系统的交互性。界面的设计目标在于降低用户的学习曲线,即便是没有技术背景的用户也能够轻松掌握。

   控制层(Control Layer):控制层是连接用户界面与后端处理模块的桥梁。在这一层中,MainWindow 类肩负着响应用户交互、控制视频流处理以及展示模型预测结果的重任。通过信号和槽机制,我们能够将用户的操作转化为系统的响应,例如启动和停止视频流、调整检测设置等。这样的设计不仅提高了系统反应的及时性,还增强了用户的控制感。
在这里插入图片描述

6.2 系统流程

在这里插入图片描述
  当用户启动我们的应用程序时,系统会首先对 MainWindow 类进行实例化。该类不但负责初始化用户界面,设定窗口大小以及展示区域,还会准备好后续处理所需的各类参数。用户界面作为与系统交互的重要桥梁,为用户提供了选择视频输入源的机会。输入源的灵活性可谓此系统的一大亮点,用户能够选择实时视频流、预录视频文件或者单张图片作为检测的媒介。

  一旦输入源被用户选定,系统就会开始调用内置的媒体处理器来进行数据的读取与处理。这个过程涵盖了摄像头的实时捕获设置、视频文件的解码读取以及图像数据的加载至内存等环节。这些环节均是自动进行的,无需用户进行手动配置,充分彰显了智能化的设计理念。

  接下来,系统将进入连续的处理循环,持续对实时获取的帧数据进行分析。在预处理阶段,系统会通过一系列的图像处理技术,例如缩放、色彩转换等,让每帧图像符合 YOLOv11 模型的输入标准。这一步骤对于提升模型的识别效率与准确度起着至关重要的作用。

  紧接着,经过预处理的图像会被送入经过训练的 YOLOv11 模型进行实时检测。模型能够快速地在图像中定位中国野生动物,并对它们进行分类,其结果将用于后续的界面更新。我们的系统设计允许在用户界面上实时显示检测框,标注目标类别,并在界面上实时展示检测的统计数据。这种即时的反馈为用户提供了清晰的视觉指引,有助于他们了解当前环境的安全状况。

6.3 代码实现

  在现代计算机视觉领域中,把深度学习模型应用于实时图像处理任务已然成为一项关键技术。在本博客里,我们会详细阐述如何运用 YOLOv11 算法,并结合 PyQt5 来创建一个实时目标检测系统。这个系统能够在视频流中识别并标注特定对象,比如 野生动物检测。

(1)引入必要的库:

  首先,系统的构建从导入必要的 Python 模块开始。sys 模块是 Python 内置的模块,它提供了诸多与 Python 解释器紧密相关的功能。例如,sys.argv 可用于获取命令行参数,这在启动应用程序时非常重要。time 模块允许我们获取当前时间,这对于性能评估以及监控推理时间起着至关重要的作用。OpenCV 库(cv2)是图像处理的核心,它提供了一系列强大的功能来捕捉和处理图像数据。

import cv2
import numpy as np
from PyQt5.QtCore import QTimer, Qt, pyqtSignal, QThread
from PyQt5.QtGui import QImage, QPixmap, QPalette
from PyQt5.QtWidgets import QMainWindow, QFileDialog, QDesktopWidgetfrom ui_mainwindow import Ui_MainWindow
from utils import image_read_from_chinese_pathfrom ultralytics import YOLO

(2)设置主窗口:

  构建用户界面(UI)是实现系统的关键一步。我们借助 PyQt5 库构建了图形用户界面。QMainWindow 作为我们窗口的基类,为展示处理后的图像提供了一个画布。

class MyMainWindow(QMainWindow):def __init__(self, parent=None):# 调用父类构造函数,创建窗体super().__init__(parent)# 创建UI对象self.ui = Ui_MainWindow()# 构造UI界面self.ui.setupUi(self)self.set_centre()self.image_file_path = None

(3)初始化模型

self.model = YOLO('./weights/best.pt')     

(4)界面信号槽绑定

self.ui.comboBox_source.currentIndexChanged.connect(self.comboBox_source_slot)self.ui.toolButton_fileOpen.clicked.connect(self.toolButton_fileOpen_slot)
self.ui.pushButton_infer.clicked.connect(self.pushButton_infer_slot)
self.ui.pushButton_infer_stop.clicked.connect(self.pushButton_infer_stop_slot)
self.ui.doubleSpinBox_conf.valueChanged.connect(self.doubleSpinBox_conf_slot)
self.ui.horizontalSlider_conf.valueChanged.connect(self.horizontalSlider_conf_slot)self.ui.doubleSpinBox_iou.valueChanged.connect(self.doubleSpinBox_iou_slot)
self.ui.horizontalSlider_iou.valueChanged.connect(self.horizontalSlider_iou_slot)

(5)图像显示

@staticmethod
def show_image(img_src, label):try:# img_src = cv2.resize(img_src, None, fx=0.5, fy=0.5)ih, iw, _ = img_src.shapew = label.geometry().width()h = label.geometry().height()# 保持纵横比# 找出长边if iw > ih:scal = w / iwnw = wnh = int(scal * ih)img_src_ = cv2.resize(img_src, (nw, nh))else:scal = h / ihnw = int(scal * iw)nh = himg_src_ = cv2.resize(img_src, (nw, nh))frame = cv2.cvtColor(img_src_, cv2.COLOR_BGR2RGB)img = QImage(frame.data, frame.shape[1], frame.shape[0], frame.shape[2] * frame.shape[1],QImage.Format_RGB888)label.setPixmap(QPixmap.fromImage(img))except Exception as e:print(repr(e))

安装与资源说明

离线安装配置文件说明
在这里插入图片描述

总结与展望

  在本博客当中,我们对一个基于 YOLOv11 模型的实时野生动物检测系统进行了详细的介绍。该系统采用模块化的设计方式,充分运用了合理的架构设计,从而具备良好的可维护性与可扩展性。它的用户界面十分友好,能够实时展示野生动物检测和识别的结果。

  此系统支持摄像头、视频、图像以及批量文件等多种输入源,能够满足用户在不同场景下的需求。后续可以添加更多的预训练模型,以增加检测和识别的种类;对用户界面进行优化,增强个性化设置;并且积极倾听用户反馈,期望不断改进系统,从而更好地满足用户的需求。

结束语

   由于博主能力有限,博文中提及的方法即使经过试验,也难免会有疏漏之处。希望您能热心指出其中的错误,以便下次修改时能以一个更完美更严谨的样子,呈现在大家面前。同时如果有更好的实现方法也请您不吝赐教。

相关文章:

深度学习实战野生动物识别

本文采用YOLOv11作为核心算法框架,结合PyQt5构建用户界面,使用Python3进行开发。YOLOv11以其高效的实时检测能力,在多个目标检测任务中展现出卓越性能。本研究针对野生动物数据集进行训练和优化,该数据集包含丰富的野生动物图像样…...

windows安装使用conda

在Windows系统上安装和使用Conda的详细步骤如下: 一、下载Conda安装包 访问Conda的官方网站Anaconda | The Operating System for AI,点击“Downloads”按钮。在下载页面,选择适合您系统的安装包。通常,对于Windows系统&#xf…...

手机租赁系统开发全流程解析与实用指南

内容概要 在如今快速发展的科技时代,手机租赁系统已经成为一种新兴的商业模式,非常符合当下市场需求。那么,在开发这样一个系统的时候,首先要从需求分析和市场调研开始。在这一阶段,你需要了解用户需要什么&#xff0…...

SpringBoot 开发—— YAML文件深度分析

文章目录 一、YAML概述二、数据表示三、YAML 的语法四、YAML 的应用五、YAML 与其他格式的比较1、YAML vs .properties文件可读性和结构数据类型支持扩展性和灵活性使用场景性能和支持2、YAML vs. JSON3、YAML vs. XML六、使用 YAML 的注意事项七、总结YAML 是非常流行的一种配…...

复合机器人整体解决方案

复合机器人是一种集成移动机器人和协作机器人两项功能为一身的新型机器人,更符合人们想象中“脑、眼、手、脚”融合的机器人终极形态。复合机器人的整体解决方案通常涉及多个方面,包括机器人本体、控制系统、感知系统、执行系统以及周边配套设备等。以下…...

【Oracle11g SQL详解】日期和时间函数:SYSDATE、TO_DATE、TO_CHAR 等

日期和时间函数:SYSDATE、TO_DATE、TO_CHAR 等 在 Oracle 数据库中,日期和时间函数用于处理日期和时间数据。它们在记录创建时间、分析时间间隔、格式化输出等场景中非常重要。本文将详细讲解常用的日期和时间函数及其应用。 一、SYSDATE:获…...

VSCode设置字体

参考文章:【面向小白】vscode最佳实践(2)—— 字体设置(fira code更纱黑体),这篇文章末尾给了安装字体的链接。 配置的字体还是很好看的。 ‘Fira Code Retina’, ‘Sarasa Mono Sc’ 需要注意的一个点&am…...

shell编程入门之提取字符并设置rtc时间

awk用法 awk是一款文本处理工具,通常在Unix和Linux操作系统中使用,用于以行为单位对文本进行处理和操作。它可以读取输入文本,对其进行处理,生成报表、统计信息等,并将结果输出到标准输出设备中。 它主要有以下特点&…...

react 不可变数据更新(Immutable Update)合并对象 类似与Java 的BeanUtils.copyProperties‌

{ ...state, // 保留原有的 state 的其他部分data: { ...state.data, // 保留 state.data 中的其他字段...action.payload // 使用 action.payload 覆盖 state.data 中需要更新的字段} }这段代码是 Redux 中常见的一种状态更…...

Linux GCC基础用法⑦

在 CentOS 7 系统中使用 GCC 与编写 99 乘法表 一、GCC 简介 GCC(GNU Compiler Collection)是一套功能强大的编程语言编译器,在 CentOS 7 系统中广泛用于编译 C、C等多种编程语言的程序。它能够将源代码转换为可执行文件,让计算…...

PyTorch 切片运算 (Slice Operator)

PyTorch 切片运算 {Slice Operator} 1. [:, -1, :]2. [:, [-1], :]References 1. [:, -1, :] https://github.com/karpathy/llama2.c/blob/master/model.py import torchlogits torch.arange(1, 16) print("logits.shape:", logits.shape) print("logits:\n&…...

SpringSecurity Oauth2 -账号密码实现多因子身份认证

1. 密码策略问题 CREATE TABLE t_storage (id bigint(20) NOT NULL AUTO_INCREMENT COMMENT 自增主键,nameSpace varchar(64) NOT NULL COMMENT 隔离字段,groupId varchar(128) NOT NULL COMMENT 分组,比如不同app,dataId varchar(64) NOT NULL COMMENT 数据存储id…...

【CSS in Depth 2 精译_071】11.4 思考字体颜色的对比效果 + 11.5 本章小结

当前内容所在位置(可进入专栏查看其他译好的章节内容) 第四部分 视觉增强技术 ✔️【第 11 章 颜色与对比】 ✔️ 11.1 通过对比进行交流 11.1.1 模式的建立11.1.2 还原设计稿 11.2 颜色的定义 11.2.1 色域与色彩空间11.2.2 CSS 颜色表示法 11.2.2.1 RGB…...

Y3编辑器文档4:触发器1(对话、装备、特效、行为树、排行榜、不同步问题)

文章目录 一、触发器简介1.1 触发器界面1.2 ECA语句编辑及快捷键1.3 参数设置1.4 变量设置1.5 实体触发器1.6 函数库与触发器复用 二、触发器的多层结构2.1 子触发器(在游戏内对新的事件进行注册)2.2 触发器变量作用域2.3 复合条件2.4 循环2.5 计时器2.6…...

趣味编程:猜拳小游戏

1.简介 这个系列的第一篇以猜拳小游戏开始,这是源于我们生活的灵感,在忙碌的时代中,我们每个人都在为自己的生活各自忙碌着,奔赴着自己所走向的那条路上,即使遍体鳞伤。 但是,生活虽然很苦,也不…...

软件工程 概述

软件 不仅仅是一个程序代码。程序是一个可执行的代码,它提供了一些计算的目的。 软件被认为是集合可执行的程序代码,相关库和文档的软件。当满足一个特定的要求,就被称为软件产品。 工程 是所有有关开发的产品,使用良好定义的&…...

CountDownLatch阻塞后countDown未执行会如何?

背景 某项目封装了 Kafka 消费者 API,根据传递的消费者线程数,创建 N 个消费者线程同时消费对应 topic 的数据,并在线程启动后收集到全局列表中,方便在程序调用 stop 流程时逐个停止。 主控类在创建 Kafka 消费线程时使用了 Cou…...

k8s,operator

相对更加灵活和编程友好的管理“有状态应用”的解决方案,它就是:Operator 会议一下有状态应用: 比如数据库集群,数据挂载需要有顺序维护拓扑关系的应用 使用statefulSet这个对象来描述。 CRD又是什么? Operator的工作…...

使用 pyperclip 进行跨平台剪贴板操作

简介:pyperclip 是一个轻量级的 Python 库,支持在不同操作系统(Windows、macOS、Linux)中进行剪贴板的复制和粘贴。这个库的设计简单易用,非常适合需要频繁进行文本复制粘贴操作的场景。 历史攻略: 使用f…...

20 设计模式之职责链模式(问题处理案例)

一、什么是职责链模式 职责链模式是一种行为型设计模式,它允许将请求沿着处理者的链进行传递,直到有一个处理者能够处理它为止。换句话说,它将请求的发送者和接收者解耦,使得多个对象都有机会处理这个请求,从而避免了将…...

SpringBoot3集成MybatisPlus3和knife4j(swagger3兼容增强版)

针对Swagger2规范和OpenAPI3规范的说明: 在Spring Boot框架中,Knife4j对于服务端将Spring的开放接口解析成Swagger2或者OpenAPI3规范的框架,也是依赖的第三方框架组件。说明如下: Swagger2规范:依赖Springfox项目,该项目目前几乎处于停更状态,但很多老项目依然使用的是该…...

【MIT-OS6.S081作业1.3】Lab1-utilities primes

本文记录MIT-OS6.S081 Lab1 utilities 的primes函数的实现过程 文章目录 1. 作业要求primes (moderate)/(hard) 2. 实现过程2.1 代码实现 1. 作业要求 primes (moderate)/(hard) Write a concurrent version of prime sieve using pipes. This idea is due to Doug McIlroy, in…...

游戏引擎学习第35天

开场介绍 今天的任务是继续改进一个虚拟的瓦片地图系统,使其适合处理更大的世界。我们希望这个系统能管理大范围的游戏世界,其中包含按需存储的小区域。昨天,我们介绍了“内存区域”的概念,用于管理持久性存储。我们计划今天继续…...

learn-(Uni-app)输入框u-search父子组件与input输入框(防抖与搜索触发)

1.父子组件u-search &#xff08;1&#xff09;父组件 <!-- 父组件 --> <template> <div><searchBar change"change" search"search"></searchBar> </div> </template> <script> // 子组件搜索 import…...

设置IMX6ULL开发板的网卡IP的两种方法(临时生效和永久有效两种方法)

设置开发板网卡的IP&#xff0c;有两种方法。 方法一&#xff1a;临时生效 第一种方式是临时设置&#xff0c;只有本次有效&#xff0c;重启后又要重新设&#xff0c;命令为&#xff1a; ifconfig eth0 192.168.5.9设置成功后可以使用ifconfig命令来查看已设置的 IP 地址。 …...

流量转发利器之Burpsuite概述(1)

目录 一、Burpsuite Burp Suite Spider 的主要特点&#xff1a; 在 Burp Suite 中使用 Spider&#xff1a; Spider 的用例&#xff1a; 限制&#xff1a; 声明&#xff1a;学习视频来自b站up主 泷羽sec&#xff0c;如涉及侵权马上删除文章 声明&#xff1a;本文主要用作技…...

Transformer入门(6)Transformer编码器的前馈网络、加法和归一化模块

文章目录 7.前馈网络8.加法和归一化组件9.组合所有编码器组件构成完整编码器 7.前馈网络 编码器块中的前馈网络子层如下图所示&#xff1a; 图1.32 – 编码器块 前馈网络由两个带有ReLU激活函数的全连接层组成。全连接层&#xff08;Fully Connected Layer&#xff09;有时也…...

element-plus中的resetFields()方法

resetFields&#xff08;&#xff09;确实是Element Plus中的方法&#xff0c;该方法主要用于重置表单&#xff0c;将其值重置为初始值&#xff0c;并移除校验结果。以下是对该方法的详细解释&#xff1a; 一、resetFields方法的作用 在Vue3结合Element Plus开发时&#xff0…...

【过滤器】.NET开源 ORM 框架 SqlSugar 系列

目录 0、 过滤器介绍 1、表过滤器 &#xff08;推荐&#xff09; 1.1 手动添加过滤器 1.2 禁用、清空、备份和还原 1.3 联表查询设置 1.4 动态添加 2、修改和删除用过滤器 2.1 局部设置 2.2 全局设置 &#xff08;5.1.4.62&#xff09; 3、子查询用过滤器 4、联表过滤…...

Jmeter Address already in use: connect 解决

做压测接口时&#xff0c;并发一段时间后&#xff0c;会报java.net.BindException: Address already in use: connect 原因&#xff1a; windows提供给TCP/IP链接的端口为 1024-5000&#xff0c;并且要四分钟来循环回收它们&#xff0c;就导致在短时间内跑大量的请求时将端口占…...

公司网站建设工作总结/哈尔滨网络优化推广公司

MySQL 在修改表结构的时候可能会中断产品的正常运行影响用户体验&#xff0c;甚至更坏的结果&#xff0c;丢失数据。不是所有的数据库管理员、程序员、系统管理员都非常了解MySQL能避免这种情况。DBA会经常碰到这种生产中断的情况&#xff0c;当升级脚本修改了应用层和数据库层…...

wordpress评论推广/太原优化排名推广

模板介绍 医疗保健服务宣传和医疗咨询服务PPT模板-优页文档。一套,疫情防护,幻灯片模板&#xff0c;内含青色,蓝色多种配色&#xff0c;风格设计&#xff0c;动态播放效果&#xff0c;精美实用。 希望下面这份精美的PPT模板能给你带来帮助&#xff0c;温馨提示&#xff1a;本…...

口腔医院网站做优化/关键词分析

随着人工智能的发展&#xff0c;人脸识别技术在各个领域的场景应用中日益丰富&#xff0c;在多个场景可以看到人脸识别系统的应用落地&#xff0c;在社区、企业、工地、安防等方面。而现在随着各地智慧校园的建设&#xff0c;有些学校逐步引入人脸识别技术&#xff0c;通过校园…...

学院招生网站建设方案/临沂百度推广多少钱

给你一个整数 n &#xff0c;返回 和为 n 的完全平方数的最少数量 。 完全平方数 是一个整数&#xff0c;其值等于另一个整数的平方&#xff1b;换句话说&#xff0c;其值等于一个整数自乘的积。例如&#xff0c;1、4、9 和 16 都是完全平方数&#xff0c;而 3 和 11 不是。 …...

如何建设和优化一个网站/百度开户返点

相比LCS的组策略&#xff0c;OCS增加了很多功能。做为IT人员管理和实施人员统一部署的好助手&#xff0c;它的一些功能非常有用&#xff0c;比如保存用户密码、设置通讯薄URL和限制用户添加数量等&#xff0c;有效的扩展和补充了了OCS控制台的现有功能而不必再做二次开发。策略…...

秦皇岛建设工程交易网/长沙seo服务哪个公司好

转自&#xff1a;http://www.cnblogs.com/aiguozhe/p/3541941.html 一、总体框架 先上一张google提供官方的Android框架图&#xff1a; Android系统架构由5部分组成&#xff0c;分别是&#xff1a;Linux Kernel、Android Runtime、Libraries、Application Framework、Applicati…...