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

【YOLO V5】目标检测 WSL2 AutoDL VScode SSH

【YOLO V5】目标检测 WSL2 AutoDL VScode SSH

  • 前言
  • 整体思路
    • 理解向
    • YOLO 目标检测完整流程
  • 环境配置
    • Anaconda
  • 获取 YOLO 代码与预训练模型
    • 下载 YOLOv5 代码和预训练模型
    • 配置 YOLOV5 工程环境
      • 解压 YOLOv5 源代码 并 添加预训练模型
      • 调整依赖版本
      • 选择对应的 Python 解释器
  • 数据集准备
    • 下载 COCO 动物数据集
    • 存放数据集
    • 执行 Python 脚本,转换标签格式
    • 正确的数据集格式
  • 训练 YOLO 模型
    • 参数配置
    • 路径管理注意事项
    • 本地训练
    • AutoDL 服务器训练
      • JupyterLab 连接
      • VScode SSH 远程连接
    • 训练结果
  • YOLO 推理

前言

对于初学者来说,学习YOLO和实现目标检测时,其实不需要了解底层原理,比如CNN神经网络。虽然这些知识有助于深入理解,但如果只是想快速上手YOLO,不必从这些复杂的原理开始。本篇内容正是基于这个思路,重点讲解如何快速上手YOLO,如何在服务器上训练自己的模型,并实现目标检测。

本文以 YOLOv5 在 COCO 数据集上的训练为例,阐述 YOLOv5 目标检测任务的完整实现流程。

我的环境:
WSL2 Ubuntu 20.04 YOLOv5 PyTorch 1.7.0 VSCode SSH连接autoDL服务器

参考资料:
【干货】两小时带你训练和使用yolov5,yolov5详细教学,yolov5环境配置,2024年
【手把手带你实战YOLOv5-拓展篇】使用AutoDL服务器进行模型训练
【手把手带你实战YOLOv5-拓展篇】Vscode基本使用与AutoDL服务器连接
【基于Ubuntu下Yolov5的目标识别】保姆级教程 | 虚拟机安装 - Ubuntu安装 - 环境配置(Anaconda/Pytorch/Vscode/Yolov5) |全过程图文by.Akaxi
【Anaconda】Linux系统下Anaconda详细安装过程

整体思路

理解向

我们可以将 YOLO 理解为一个 学生
训练集 = 有标准答案的习题集(帮助学生根据答案总结规律,提升能力)
验证集 = 单元检测卷(让学生训练完后做题并根据表现进行这一轮训练的评分)
测试集 = 期末考试(学期结束时,测试学生的最终学习的成果)

训练YOLO模型的过程: 就是给这个学生提供一套标准答案的习题集(有标注的训练集),让学生据答案总结规律并逐渐提升。随着训练的进行,模型(学生)会不断变强,最终变成一个更“厉害”的学生——这就是训练后的 YOLO 模型(也叫权重)。
验证YOLO模型的过程: 当学生完成一套有标准答案的习题集后,能力有所提升,成为更“厉害”的学生。接着,我们给更“厉害”的学生一套单元检测卷,检查他在这一轮学习后的掌握情况。
测试YOLO模型的过程: 经过多轮习题集的学习和单元检测卷的验证后,我们让最优秀的学生(最优权重 best weights):参加期末考试,以此测试他在所有学习轮次后的最终能力。

举个栗子:
如果我们希望 YOLO 识别水果,就需要提供大量带标签的水果图片(相当于给学生提供带标准答案的习题)。YOLO 通过学习这些图片,掌握规律,最终训练出一个能够识别水果的模型(擅长检测水果的“学生”)。
在训练过程中,YOLO 每训练一轮就会“升级”一次,就像学生每做完一轮习题,能力都会有所提升。每次升级后,我们需要验证它的表现,于是给它一套没有标准答案的题目(验证集),再对比标准答案,评估它这一轮的学习效果。
经过多轮训练和验证,最终会使用测试集进行“终极考核”,类似于学生的期末考试。测试集能衡量模型的最终表现,确保它在实际应用中足够可靠。
训练完成后,我们会选择表现最好的模型(最佳权重)用于后续的水果的目标检测任务,就像学生经过专项训练后,能在相关的专项习题中有更好的表现。

YOLO 目标检测完整流程

环境配置–获取YOLO代码与预训练模型–数据集准备–训练YOLO模型–评估与测试–模型部署与应用

  1. 环境配置 – 安装 Anaconda,并配置 PyTorch 与 CUDA(如果使用本地 GPU 训练)
  2. 获取 YOLO 代码与预训练模型 – 下载 YOLOv5 官方代码库,并准备预训练的权重文件
  3. 数据集准备 – 下载并转换数据集,使其符合 YOLO 格式;若使用自定义数据集,则需收集图片并进行标注。
  4. 训练 YOLO 模型 – 在本地或服务器上进行模型训练,调整超参数并优化权重,提高检测效果。
  5. 模型评估与测试 – 选择训练过程中表现最优的模型,并在测试集上进行评估
  6. 模型部署与应用 – 将训练好的 YOLO 模型部署到实际场景

环境配置

Anaconda

该部分内容可以参考:【Anaconda】Linux系统下Anaconda详细安装过程

安装Anaconda:

在 Windows 下,前往 Anaconda清华镜像站 下载适合的 Anaconda 安装包。本次示例下载的是 Anaconda3-2021.05-Linux-x86_64.sh
在这里插入图片描述

下载完成后,将安装包复制到 WSL,并进入其所在目录执行安装:

cd ~
bash Anaconda3-2021.05-Linux-x86_64.sh

环境变量配置:
安装完成后,需要将 Anaconda 添加到环境变量,使其能够在终端中直接使用

  1. 打开 .bashrc 文件:
    nano ~/.bashrc
    
  2. 在文件末尾添加 Anaconda 路径(请替换 XXX 为你的实际安装路径):
    export PATH="XXX/anaconda3/bin:$PATH"
    
  3. 使环境变量生效:
    source ~/.bashrc
    

最后,关闭并重新打开终端,如果命令行前面显示 (base),就说明 Anaconda 已成功配置并生效

创建虚拟环境:

  1. 创建虚拟环境:(指定 Python 版本 3.8,兼容性较好)

    conda create yolo_v5 python=3.8
    
  2. 激活虚拟环境:

    conda activate yolo_v5
    
  3. 更换 pip 源:

pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
  1. 更换 conda 源
sudo nano ~/.condarc

在打开的文件中,复制并粘贴以下内容,然后保存:

channels:- defaults
show_channel_urls: true
default_channels:- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2
custom_channels:conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloudmsys2: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloudbioconda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloudmenpo: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloudpytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloudpytorch-lts: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloudsimpleitk: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud

后续所有操作均需在(yolo_v5)环境中进行

获取 YOLO 代码与预训练模型

下载 YOLOv5 代码和预训练模型

下载 YOLOv5 源代码

  • 访问 YOLOv5 官方仓库
  • Tags 选项中查看所有历史版本,并选择 v6.0(该版本兼容性较好,较新版本在 Jetson Nano 部署时可能存在依赖兼容性问题)
  • 在 YOLOv5-6.0 中点击 Source code (zip) 下载 YOLOv5 6.0 版本的源代码压缩包

YOLOv5 版本选择

下载预训练模型

  • 在 YOLOv5-6.0 页面中,可以看到官方提供的多种预训练模型,并附带性能参数供选择
  • 根据需求选择适合的模型,这里推荐 YOLOv5s(轻量化,速度快,适用于大多数场景)。
  • 点击 yolov5s.pt 下载 YOLOv5s 预训练权重文件。

预训练模型的性能参数
YOLOv5 预训练模型

yolov5s.pt 预训练的权重文件
下载 yolov5s.pt

配置 YOLOV5 工程环境

解压 YOLOv5 源代码 并 添加预训练模型

  1. 将下载的 yolov5-6.0.zip 复制到 WSL 的 YOLO 项目目录中 解压文件

    tar -xvf yolov5-6.0.zip
    
  2. 进入项目目录,打开该文件夹

    cd yolov5-6.0
    code .
    
  3. yolov5s.pt 预训练权重文件复制到 weights 目录(如果没有该目录,则手动创建):

    mkdir -p weights  # 创建 weights 目录(若不存在)
    mv yolov5s.pt weights/  # 移动权重文件
    

调整依赖版本

打开 requirements.txt,将所有 >= 替换为 =,确保依赖版本固定,避免因版本过新导致兼容性问题

在这里插入图片描述

注释 PyTorch 相关依赖:由于训练将在服务器上进行,本地无需安装 PyTorch,因此需在 requirements.txt 中注释掉 torch 和 torchvision。但请记住 PyTorch 版本要求,确保在服务器上选择符合要求的 PyTorch 版本

关于 PyTorch 的安装及 requirements.txt 依赖安装过程中可能遇到的报错,可以参考 【干货】两小时带你训练和使用 YOLOv5,YOLOv5 详细教学,YOLOv5 环境配置(2024) 视频的 21 分钟 部分

选择对应的 Python 解释器

在 VSCode 中,按下 Shift + Ctrl + P 调出命令面板,在搜索栏输入 “Python: Select Interpreter”,然后选择 yolo_v5 虚拟环境下的 Python 3.8 解释器,如下图所示

在这里插入图片描述

数据集准备

本次示例使用 COCO 动物数据集,但由于 COCO 数据集的标签格式与 YOLO 格式不兼容,因此需要进行格式转换。

下载 COCO 动物数据集

Files 目录中,找到 dataset.tar.gz 文件并下载
在这里插入图片描述

存放数据集

  • 下载完成后,将 dataset.tar.gz 解压,并将其复制到 YOLOv5-6.0 项目目录下的 data/dataset 文件夹。
  • 此外,还需将数据集复制一份至 data/data_org 目录,该目录用于格式转换。
  • 由于 COCO 数据集的标签格式不同于 YOLO(COCO 仅提供一个标签文件,而 YOLO 需要为每张图片生成一个对应的 .txt 标签文件),因此需编写脚本进行转换。

执行 Python 脚本,转换标签格式

import os
import cv2 as cv
import json# 定义项目根目录
ROOT = os.path.dirname(os.path.abspath(__file__))  # 获取当前脚本所在目录# 使用 Path 进行路径拼接
img_folder = ROOT / 'data/dataset/val/images'
label_path = ROOT / 'data/data_org/val/_annotations.coco.json'# test 测试集图片文件名列表
img_path_lst = os.listdir(img_folder)# 为每一张图片创建一个空白的 .txt 标签
for img_name in img_path_lst:with open(os.path.join(img_folder.replace("images","labels"),img_name.replace(".jpg",".txt")),'w') as f:# 读取文件
with open(label_path, 'r') as f:content = json.load(f)
pass# 创建一个id到图片名的映射,以字典形式存储
dict_id2img = dict()
for img_info in content['images']:dict_id2img[img_info['id']] = img_info['file_name']
pass# 开始读取标注信息,处理后写入txt文件
for label_info in content['annotations']:img_name = dict_id2img[label_info['image_id']]class_name = label_info['category_id']x_center = (label_info['bbox'][0] + label_info['bbox'][2]) / 2 / 640y_center = (label_info['bbox'][1] + label_info['bbox'][3]) / 2 / 640w = label_info['bbox'][2] / 640h = label_info['bbox'][3] / 640with open(os.path.join(img_folder.replace("images", "labels"), img_name.replace(".jpg", ".txt")), 'a') as f:f.write("{} {} {} {} {}\n".format(class_name, x_center, y_center, w, h))

注意事项

  • 单次转换单个数据集
    该脚本 每次只能转换一个数据集(训练集 train、验证集 val 或测试集 test)。
    如需转换多个数据集,请分别修改 img_folderlabel_path 的路径,并 单独运行 脚本。

  • 数据转换完成后,数据集应符合 YOLO 格式

    转换后,dataset 目录下应包含:

    • images/ 文件夹(存放图像文件)。
    • labels/ 文件夹(存放与图像一一对应的 .txt 标签文件)。
  • 确保 COCO 格式 JSON 文件路径正确

    • label_path 需要正确指向 COCO 数据集的 JSON 标签文件,否则转换时会找不到数据,导致错误。
    • 建议 将 COCO 的 JSON 标签文件 单独存放在 labels/ 目录,确保 images/ 目录下 仅存放图片,避免混淆和潜在错误。

正确的数据集格式

your_project/
│── yolov5-6.0/             # YOLOv5 项目主目录
│   ├── data/               # 数据集相关文件
│   │   ├── dataset/        # 存放实际的图片和标签
│   │   │   ├── train/      # 训练集
│   │   │   │   ├── images/ # 训练集图片
│   │   │   │   │   ├── img_1.jpg
│   │   │   │   │   ├── img_2.jpg
│   │   │   │   │   ├── ...
│   │   │   │   ├── labels/ # 训练集标签(YOLO 格式,一一对应)
│   │   │   │   │   ├── img_1.txt
│   │   │   │   │   ├── img_2.txt
│   │   │   │   │   ├── ...
│   │   │   ├── val/        # 验证集
│   │   │   │   ├── images/
│   │   │   │   ├── labels/
│   │   │   ├── test/       # 测试集
│   │   │   │   ├── images/
│   │   │   │   ├── labels/
│   │   ├── data_org/       # 存放原始数据(COCO 格式)
│   │   │   ├── train/ 
│   │   │   │   ├── images/ 
│   │   │   │   ├── labels/   # 存放单个 COCO 的 JSON 文件
│   │   │   │   │   ├── _annotations.coco.json  
│   │   │   ├── val/ 
│   │   │   │   ├── images/  
│   │   │   │   ├── labels/  
│   │   │   │   │   ├── _annotations.coco.json  
│   │   │   ├── test/  
│   │   │   │   ├── images/  
│   │   │   │   ├── labels/  
│   │   │   │   │   ├── _annotations.coco.json  

训练 YOLO 模型

参数配置

YOLO的训练主要通过 train.py 函数进行,因此我们只需关注这个文件。以下是一些关键的传入参数,它们用于配置训练过程:

  1. weights (权重文件)
    这是预训练模型的文件,可以选择进行微调,使用官方模型(如 yolov5s),或者从零开始训练(不推荐)。

填写权重文件的路径时,ROOT 表示从项目根目录开始的相对路径。

  1. cfg (结构文件)
    该文件用于描述 YOLO 模型的架构和结构。根据所使用的模型选择对应的 YAML 配置文件。
    例如,若选择 yolov5s 模型,则应选择 yolov5s.yaml 配置文件。每个模型都有对应的 YAML 文件,其中定义了网络层、输入输出参数等结构信息。

  2. data (数据集文件)
    该文件定义了数据集(训练集、验证集、测试集)的路径、类别数量
    例如,以下文件包含了这些信息,用于告知模型如何加载和处理数据。

# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
path: ../yolov5-6.0/data/dataset  # dataset root dir
train: train/images  # train images (relative to 'path') 118287 images
val: val/images  # train images (relative to 'path') 5000 images
test: test/images  # 20288 of 40670 images, submit to https://competitions.codalab.org/competitions/20794# Classes
nc: 11  # number of classes
names: ['animals', 'cat', 'chicken', 'cow', 'dog', 'fox', 'goat', 'horse', 'person', 'racoon', 'skunk'] # class names
  1. epochs (训练轮数)
    训练的轮次,轮数越高,模型训练得越充分,但训练时间也越长。YOLO 在训练到认为是最佳模型时会自动停止,因此不必担心过度训练。

  2. batchsize (批次大小)
    这是每次训练时投入的数据量,直接影响到 GPU 显存的使用。显存越大,可以设置更大的批次大小。
    PS:GPU显存的占用情况可以在训练过程中看到,每轮训练时会显示 GPU 显存的实时使用情况。如果使用租赁服务器,记得充分利用显卡的性能,以确保训练效率最大化。

  3. imgsz (图片尺寸)
    图像尺寸,通常默认设置为 640x640

  4. device (训练设备)
    指定用于训练的设备。如果使用 CPU,则填写 cpu;如果使用 GPU 训练,则填写指定 GPU 的编号(默认通常为 0)。如果使用多个 GPU,可以填写 0,1,...

路径管理注意事项

  • Python 中,建议使用 ROOT 变量表示项目的根目录,例如:
from pathlib import Path
import osFILE = Path(__file__).resolve()  # 获取当前脚本的绝对路径
ROOT = FILE.parents[0]  # 获取项目根目录(即当前文件所在目录的父目录)
if str(ROOT) not in sys.path:  # 如果 ROOT 目录不在 sys.path 中,将其添加到 sys.pathsys.path.append(str(ROOT))  # add ROOT to PATH
ROOT = Path(os.path.relpath(ROOT, Path.cwd()))  # 使用相对路径获取 ROOT 目录相对于当前工作目录的路径data_path = ROOT / 'data/dataset.yaml'  # 数据集路径
weights_path = ROOT / 'weights/yolov5s.pt'  # 预训练模型路径
  • YAML 文件中,使用 .. 表示回退上一级目录,例如:
train: ../yolov5-6.0/data/dataset/train/images
val: ../yolov5-6.0/data/dataset/val/images

在 YAML 文件中,使用 ../yolov5-6.0 来表示当前项目目录的上层文件夹。.. 表示回退到当前文件夹的上层文件夹,例如,若文件结构是 a/b/c,在 c 文件夹中,.. 就代表 a 文件夹。相对路径有时容易混淆,导致出错。如果无法区分清楚,使用绝对路径也是可行的,尽管修改时会更麻烦一些。

本地训练

1. 直接运行

python train.py

该命令会使用 train.py 中预设的默认参数进行训练

2. 运行时指定参数

python train.py --weights yolov5s.pt --epochs 100 --batch-size 16

这样可以 临时修改参数,不会影响 train.py 文件中的默认配置,方便灵活调整训练设置

AutoDL 服务器训练

该部分建议参考:
【手把手带你实战YOLOv5-拓展篇】使用AutoDL服务器进行模型训练
【手把手带你实战YOLOv5-拓展篇】Vscode基本使用与AutoDL服务器连接

首先,我们需要创建服务器实例:

进入 AutoDL AI算力云 的算力市场选择所需的GPU

然后选择适合YOLO环境的镜像版本。注意镜像要满足YOLO依赖的框架(PyTorch)、Python版本以及CUDA版本。
如果你不清楚具体版本要求,可以查看YOLO项目中的依赖说明(一般在requirements.txt中)
确认镜像选择无误后,点击下方“立即创建”按钮创建实例。

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

JupyterLab 连接

服务器创建完成后,直接点击控制台中的JupyterLab按钮进行连接:
在这里插入图片描述
进入JupyterLab后,上传你的YOLO项目文件。接下来,参照前文说明修改相关参数(如weights路径等),即可在服务器上快速开始训练。其他的训练操作步骤与本地训练流程一致。

VScode SSH 远程连接

该部分内容建议参考:【手把手带你实战YOLOv5-拓展篇】Vscode基本使用与AutoDL服务器连接 9分钟 后的内容

步骤如下:

  • 在VSCode中点击左下角打开远程资源管理器,点击+添加SSH连接:

  • 将生成的SSH配置文件保存到默认位置即可,无需额外修改:

  • 输入AutoDL中的登录指令与对应的密码进行连接

  • 连接成功后,即可在VSCode远程环境中操作

后续具体流程和本地训练以及 JupyterLab 方式一致。
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

训练结果

每次训练会生成一个 runs/train 文件夹,其中的 exp 目录代表实验编号(即训练的轮次)。我们主要关注 runs/train/exp/weights 文件夹中的**权重文件**,该文件夹包含:

  • 最新的权重文件:通常是 last.pt,代表当前训练过程中的最新模型权重。
  • 最佳权重文件:通常是 best.pt,代表在训练过程中性能最好的模型

通常我们重点关注 best.pt 作为最优模型

此外,在训练完成后,runs/train/exp 目录下会生成基于 best.pt 模型运行验证集的结果(即 best.pt 在验证集上的目标检测表现)。同时,还会包含损失、精度、mAP 等评估指标,用于衡量和优化模型的性能。在初学阶段,可以将这些细节放在一边,专注于模型的最终表现。

YOLO 推理

在训练出合适的模型后,我们可以使用最优模型进行推理。YOLO 推理主要通过 detect.py 脚本实现,和训练过程类似,我们需要修改一些参数来配置推理。

参数配置

  1. weights (权重文件)
    选择训练好的模型进行推理。如果任务简单,也可以使用预训练模型(例如 yolov5s.pt)进行推理。

  2. source(输入数据源)
    指定推理的输入数据源,可以是图片集、URL或者使用摄像头作为输入源(0 表示使用摄像头)。

  3. imgsz (图片尺寸)
    设置输入图像的尺寸,默认通常为 640x640

  4. conf-thres (置信度阈值)
    用于过滤低置信度的检测框。默认设置为 0.25,意味着只有置信度高于 25% 的目标才会被保留。根据实际情况调整,如果阈值设置得过低,可能会出现很多错误的检测框。

  5. device (设备)
    指定推理时使用的设备。如果使用 CPU,则填写 cpu;如果使用 GPU,则填写指定 GPU 的编号(通常默认为 0)。如果使用多个 GPU,则可以指定多个设备(如 0,1)。

注意:只需修改 source 参数,即可指定推理本地图片、视频文件或摄像头输入。
推理完成后,检测结果(标注后的图片和视频)默认保存在 runs/detect/exp/ 目录下。

相关文章:

【YOLO V5】目标检测 WSL2 AutoDL VScode SSH

【YOLO V5】目标检测 WSL2 AutoDL VScode SSH 前言整体思路理解向YOLO 目标检测完整流程 环境配置Anaconda 获取 YOLO 代码与预训练模型下载 YOLOv5 代码和预训练模型配置 YOLOV5 工程环境解压 YOLOv5 源代码 并 添加预训练模型调整依赖版本选择对应的 Python 解释器 数据集准备…...

前端基础之ajax

vue-cli配置代理服务器解决跨域问题 我们可以使用一个代理服务器8080,Vue项目8080发送请求向代理服务器8080发送请求,再由在理服务器转发给后端服务器 首先需要在vue.config.js中配置代理服务器 const { defineConfig } require(vue/cli-service) modul…...

vscode离线配置远程服务器

目录 一、前提 二、方法 2.1 查看vscode的commit_id 2.2 下载linux服务器安装包 2.3 安装包上传到远程服务器,并进行文件解压缩 三、常见错误 Failed to set up socket for dynamic port forward to remote port(vscode报错解决方法)-C…...

C语言——string.h下的特殊库函数

string.h下的特殊函数 strtok(分割字符串)strerror(错误码信息)memcpy(拷贝)memmove(拷贝)memset(设置内存)memcmp(比较大小) strtok(分割字符串) char * strtok ( char * str, const char * s…...

烟花燃放安全管控:智能分析网关V4烟火检测技术保障安全

一、方案背景 在中国诸多传统节日的缤纷画卷中,烟花盛放、烧纸祭祀承载着人们的深厚情感。一方面,烟花璀璨,是对节日欢庆氛围的热烈烘托,寄托着大家对美好生活的向往与期许;另一方面,袅袅青烟、点点烛光&a…...

【一个月备战蓝桥算法】递归与递推

字典序 在刷题和计算机科学领域,字典序(Lexicographical order)也称为词典序、字典顺序、字母序,是一种对序列元素进行排序的方式,它模仿了字典中单词的排序规则。下面从不同的数据类型来详细解释字典序: …...

二、Java-封装playwright UI自动化(根据官网执行步骤,首先封装BrowserFactory枚举类及BrowserManager)

前言 查看playwright官网,api文档了解到,playwright的基本步骤: 1、实例化一个playwright 2、启动一个浏览器类型 3、打开一个页面 所以,在封装时需要有一个浏览器工厂类,定义不同的浏览器类型,在配置文…...

java项目之基于ssm的在线视频网站开发(源码+文档)

项目简介 基于ssm的在线视频网站开发实现了以下功能: 该系统的目标用户包括管理员,用户。管理员上传视频,管理视频,查看视频留言,回复视频留言,管理视频收藏信息,管理公告,管理用户…...

观察者模式的C++实现示例

核心思想 观察者模式是一种行为型设计模式,定义了对象之间的一对多依赖关系。当一个对象(称为Subject,主题)的状态发生改变时,所有依赖于它的对象(称为Observer,观察者)都会自动收到…...

c语言中的主要知识点

一、基础语法与结构 程序结构 包含顺序结构、选择结构(if/switch)、循环结构(for/while/do-while)。 程序必须包含且仅有一个main函数作为入口。 数据类型与变量 基本类型:整型(int、long)、浮…...

Pytorch构建LeNet进行MNIST识别 #自用

LeNet是一种经典的卷积神经网络(CNN)结构,由Yann LeCun等人在1998年提出,主要用于手写数字识别(如MNIST数据集)。作为最早的实用化卷积神经网络,LeNet为现代深度学习模型奠定了基础,…...

docker:Dockerfile案例之自定义centos7镜像

1 案例需求 自定义centos7镜像。要求&#xff1a; 默认登录路径为 /usr可以使用vim 2 实施步骤 编写dockerfile脚本 vim centos_dockerfile 内容如下&#xff1a; #定义父镜像 FROM centos:7#定义作者信息 MAINTAINER handsome <handsomehandsome.com># 设置阿里云…...

post get 给后端传参数

post 方式一 &#xff1a; data: params 作为请求体&#xff08;Request Body&#xff09;传递&#xff1a; 你已经展示了这种方式&#xff0c;通过data字段直接传递一个对象或数组。这种方式通常用于传递复杂的数据结构。dowmfrom: function (params) { return request({ u…...

Linux 系统不同分类的操作命令区别

Linux 系统有多种发行版,每种发行版都有其独特的操作命令和工具。以下是一些常见的分类及其操作命令的区别: 1. 基于 Red Hat 的发行版 (RHEL, CentOS, Fedora) 1.1 包管理 安装软件包: bash复制 sudo yum install <package> 更新软件包: bash复制 sudo yum update…...

Checkpoint 模型与Stable Diffusion XL(SDXL)模型的区别

Checkpoint 模型与 Stable Diffusion XL&#xff08;SDXL&#xff09;模型 在功能、架构和应用场景上有显著区别&#xff0c;以下是主要差异的总结&#xff1a; 1. 基础架构与定位 Checkpoint 模型 是基于 Stable Diffusion 官方基础模型&#xff08;如 SD 1.4/1.5&#xff09;…...

软件工程与实践(第4版 新形态) 练习与实践1

软件工程与实践&#xff08;第4版 新形态&#xff09; 练习与实践1 1.填空题 (1)程序&#xff0c;文档 (2)系统软件&#xff0c;支撑软件&#xff0c;应用软件 (3)系统方法 (4)软件开发和维护 (5)工程的概念、原理、技术和方法 (6)实现软件的优质高产 (7)软件开发技术和…...

探秘基带算法:从原理到5G时代的通信变革【九】QPSK调制/解调

文章目录 2.8 QPSK 调制 / 解调简介QPSK 发射机的实现与原理QPSK 接收机的实现与原理QPSK 性能仿真QPSK 变体分析 本博客为系列博客&#xff0c;主要讲解各基带算法的原理与应用&#xff0c;包括&#xff1a;viterbi解码、Turbo编解码、Polar编解码、CORDIC算法、CRC校验、FFT/…...

侯捷 C++ 课程学习笔记:深入理解智能指针

文章目录 每日一句正能量一、引言二、智能指针的核心概念&#xff08;一&#xff09;std::unique_ptr&#xff08;二&#xff09;std::shared_ptr&#xff08;三&#xff09;std::weak_ptr 三、学习心得四、实际应用案例五、总结 每日一句正能量 如果说幸福是一个悖论&#xff…...

基于Qwen-VL的手机智能体开发

先上Demo&#xff1a; vl_agent_demo 代码如下&#xff1a; 0 设置工作目录&#xff1a; 你的工作目录需要如下&#xff1a; 其中utils文件夹和qwenvl_agent.py均参考自 GitHub - QwenLM/Qwen2.5-VL: Qwen2.5-VL is the multimodal large language model series developed by …...

系统盘还原成正常U盘

选择格式化,等格式化完毕就完了 点击还原设备的默认值格式化就完了...

Leetcode 103: 二叉树的锯齿形层序遍历

Leetcode 103: 二叉树的锯齿形层序遍历 问题描述&#xff1a; 给定一个二叉树&#xff0c;返回其节点值的锯齿形层序遍历&#xff08;即第一层从左到右&#xff0c;第二层从右到左&#xff0c;第三层从左到右&#xff0c;依此类推&#xff09;。 适合面试的解法&#xff1a;广…...

FastGPT 引申:基于 Python 版本实现 Java 版本 RRF

文章目录 FastGPT 引申&#xff1a;基于 Python 版本实现 Java 版本 RRF函数定义使用示例 FastGPT 引申&#xff1a;基于 Python 版本实现 Java 版本 RRF 函数定义 使用 Java 实现 RRF 相关的两个函数&#xff1a;合并结果、过滤结果 import java.util.*;// 搜索结果类型定义…...

C++中的无锁编程

引言 在当今多核处理器普及的时代&#xff0c;并发编程已成为高性能应用程序开发的关键技术。传统的基于锁的同步机制虽然使用简单&#xff0c;但往往会带来性能瓶颈和死锁风险。无锁编程&#xff08;Lock-Free Programming&#xff09;作为一种先进的并发编程范式&#xff0c…...

【全栈开发】---- 一文掌握 Websocket 原理,并用 Django 框架实现

目录 介绍 底层原理 握手环节详解&#xff1a; 收发数据&#xff08;加密&#xff09; Django 中配置 channels 1、注册 channels 2、在 settings.py 中添加 asgi_application 3、修改 asgi.py 文件 4、routing 5、consumers 实现 聊天室 介绍 WebSocket是一种先进的通信协议&…...

游戏引擎学习第135天

仓库:https://gitee.com/mrxiao_com/2d_game_3 回顾 game_asset.cpp 的创建 在开发过程中&#xff0c;不使用任何现成的游戏引擎或第三方库&#xff0c;而是直接基于 Windows 进行开发&#xff0c;因为 Windows 目前仍然是游戏的标准平台&#xff0c;因此首先在这个环境中进行…...

国内支持Stable Diffusion模型的平台

国内支持Stable Diffusion模型的平台 截至2025年3月&#xff0c;国内支持SD模型的平台主要包括以下六类&#xff0c;覆盖不同用户需求和技术层级&#xff1a; 一、模型分享与下载平台 Liblib.ai 描述&#xff1a;国内最大SD原创模型社区&#xff0c;提供海量基础模型、Lora…...

扣子(Coze):重构AI时代的工作流革命

文章目录 扣子&#xff08;Coze&#xff09;&#xff1a;重构AI时代的工作流革命使用Coze&#xff1a;一、工作流的本质&#xff1a;从单点智能到系统智能二、扣子工作流的技术基因三、场景化实践&#xff1a;从知识库到智能员工四、未来图景&#xff1a;AI Agent的进化之路结语…...

alloc、malloc 与 allocator:内存管理三剑客

内存管理是C语言开发者的核心能力&#xff0c;也是系统级编程的基石。 一、内存分配三剑客&#xff1a;malloc/calloc/realloc 1. malloc函数原理 int* arr (int*)malloc(5 * sizeof(int)); // 分配20字节空间&#xff08;假设int为4字节&#xff09; 从堆区分配指定字节的连…...

单细胞分析(21)——SCENIC 分析流程(singularity容器版)

SCENIC 分析流程笔记 SCENIC (Single-Cell rEgulatory Network Inference and Clustering) 是一种基于单细胞 RNA 测序数据的调控网络分析方法&#xff0c;主要用于识别调控因子&#xff08;TFs&#xff09;及其靶基因&#xff08;Regulons&#xff09;&#xff0c;并评估这些…...

亚马逊云科技Marketplace(中国区)上架专业服务产品, “云生态连接器”价值凸显

近日&#xff0c;由西云数据运营的亚马逊云科技Marketplace&#xff08;中国区&#xff09;正式支持专业服务产品。此次发布将大幅简化企业对云专业服务的采购流程&#xff0c;实现云软件从规划、部署到支持的全生命周期管理&#xff0c;同时也为合作伙伴提供了更多的销售机会。…...

拉普拉斯·隆格·楞次矢量

L − R − L L-R-L L−R−L 矢量的推导 有平方反比有心力&#xff1a; F ⃗ − k r 2 r ^ \vec F-\dfrac{k}{r^2}\hat r F −r2k​r^ 显然角动量 L ⃗ r ⃗ p ⃗ \vec L\vec r\times \vec p L r p ​ 守恒。 故 ∣ L ⃗ ∣ Const \begin{vmatrix}\vec L\end{vmatrix}\…...

GStreamer —— 2.3、Windows下Qt加载GStreamer库后运行 - “教程3:动态管道“(附:完整源码)

运行效果&#xff08;音频&#xff09; 简介 上一个教程演示了GStreamer 概念。本教程中的管在它设置为 playing 状态之前完全构建。这没关系。如果 我们没有采取进一步的行动&#xff0c;数据会到达 pipeline 的 pipeline 和 pipeline 将生成错误消息并停止。但 我们将采取进一…...

jupyter notebook更改文件存储路径

默认情况打开是这样的 进入cmd或者Anaconda Prompt&#xff0c;输入以下命令 jupyter notebook --generate-config进入该目录 打开该文件&#xff0c;CTRLF 查找c.ServerApp.root_dir 进行修改。 这样就修改好啦&#xff01;...

基于遗传算法的无人机三维路径规划仿真步骤详解

基于遗传算法的无人机三维路径规划仿真步骤详解 一、问题定义 目标:在三维空间内,寻找从起点到终点的最优路径,需满足: 避障:避开所有障碍物。路径最短:总飞行距离尽可能短。平滑性:转折角度不宜过大,降低机动能耗。输入: 三维地图(含障碍物,如立方体、圆柱体)。起…...

①EtherCAT转Modbus485RTU网关多路同步高速采集无需编程串口服务器

EtherCAT转Modbus485RTU网关多路同步高速采集无需编程串口服务器https://item.taobao.com/item.htm?ftt&id798036415719 型号 1路总线EC网关 MS-A2-1011 2路总线EC网关 MS-A2-1021 4路总线EC网关 MS-A2-1041 EtherCAT 串口网关 EtherCAT 转 RS485 技术规格 …...

Spring Boot WebFlux 中 WebSocket 生命周期解析

Spring Boot WebFlux 中的 WebSocket 提供了一种高效、异步的方式来处理客户端与服务器之间的双向通信。WebSocket 连接的生命周期包括连接建立、消息传输、连接关闭以及资源清理等过程。此外&#xff0c;为了确保 WebSocket 连接的稳定性和可靠性&#xff0c;我们可以加入重试…...

集合论之集合的表示法

目录 1. 说明 2. 常用表示法 2.1 枚举法(Roster Notation) 2.2 构建法(Set-builder notation) 3. 其它表示法 1. 说明 要表示一个集合&#xff0c;可以直接列出其元素&#xff0c;或者提供一种可以唯一地刻画其元素的方当。 2. 常用表示法 2.1 枚举法(Roster Notatio…...

【C语言】值传递与指针传递,以及 `.` 和 `->` 操作详解

在 C 语言中,函数参数的传递机制和结构体成员的访问方式是编程中的核心概念。值传递(pass-by-value)和指针传递(pass-by-pointer)决定了函数如何处理传入的数据,而 . 操作符 和 -> 操作符 则是访问结构体成员的两种主要工具。这两者密切相关,尤其在处理结构体时,它们…...

机器人训练环境isaac gym以及legged_gym项目的配置问题

完整的安装环境教程(强烈推荐):...

DeepSeek 开源周回顾「GitHub 热点速览」

上周&#xff0c;DeepSeek 发布的开源项目用一个词形容就是&#xff1a;榨干性能&#xff01;由于篇幅有限&#xff0c;这里仅列出项目名称和简介&#xff0c;感兴趣的同学可以前往 DeepSeek 的开源组织页面&#xff0c;深入探索每个项目的精彩之处&#xff01; 第一天 FlashML…...

冯 • 诺依曼体系结构

文章目录 冯 • 诺依曼体系结构的介绍冯 • 诺依曼体系结构的由来内存是如何提高冯•诺依曼体系结构效率的&#xff1f;为什么程序运行之前必须先加载到内存&#xff1f;从软件层面上再理解冯 • 诺依曼体系结构&#xff08;QQ聊天的数据流动&#xff09;一些知识的补充 冯 • …...

软考架构师笔记-存储管理

1.5 存储管理 存储管理 页式存储组织 虚地址 页号 | 页内地址页表 页号 | 块号物理地址 块号 | 页内地址访存两次&#xff1a;访问页表得到物理地址&#xff0c;根据物理地址得到数据就是把用户程序的空间分成若干页&#xff0c;把内存空间分成若干块&#xff0c;块和页的…...

【杂谈】信创电脑华为w515(统信系统)登录锁定及忘记密码处理

华为w515麒麟芯片版&#xff0c;还有非麒麟芯片版本&#xff0c;是一款信创电脑&#xff0c;一般安装的UOS系统。 准备一个空U盘&#xff0c;先下载镜像文件及启动盘制作工具&#xff0c;连接如下&#xff1a; 百度网盘 请输入提取码 http://livecd.uostools.com/img/apps/l…...

C#实现语音合成播报器——基于System.Speech的语音交互方案,在windows上实现语音播报指定文本

——基于System.Speech的语音交互方案&#xff0c;在windows上实现语音播报指定文本 一、语音合成播报应用场景 语音合成播报器广泛应用于以下领域&#xff1a; 工业控制&#xff1a;生产线异常报警、设备状态实时播报&#xff08;如网页4中的WinCC语音报警插件&#xff09;…...

【数据库】关系代数

关系代数 一、关系代数的概念二、关系代数的运算2.1 并、差、交2.2 投影、选择2.3 笛卡尔积2.4 连接2.5 重命名2.6 优先级 一、关系代数的概念 关系代数是一种抽象的数据查询语言用对关系的运算来表达查询 运算对象&#xff1a;关系运算符&#xff1a;4类运算结果&#xff1a;…...

点云滤波方法:特点、作用及使用场景

点云滤波是点云数据预处理的重要步骤&#xff0c;目的是去除噪声点、离群点等异常数据&#xff0c;平滑点云或提取特定频段特征&#xff0c;为后续的特征提取、配准、曲面重建、可视化等高阶应用打下良好基础。以下是点云中几种常见滤波方法的特点、作用及使用场景&#xff1a;…...

MWC 2025 | 移远通信大模型解决方案加速落地,引领服务机器人创新变革

随着人工智能、大模型等技术的蓬勃发展&#xff0c;生成式AI应用全面爆发。在此背景下&#xff0c;服务机器人作为大模型技术在端侧落地的关键场景&#xff0c;迎来了前所未有的发展机遇。 作为与用户直接交互的智能设备&#xff0c;服务机器人需要应对复杂场景下的感知、决策和…...

如何下载安装 PyCharm?

李升伟 整理 一、下载 PyCharm 访问官网 打开 PyCharm 官网&#xff0c;点击 "Download" 按钮25。 版本选择&#xff1a; 社区版&#xff08;Community&#xff09;&#xff1a;免费使用&#xff0c;适合个人学习和基础开发。 专业版&#xff08;Professional&#…...

STM32F407IGT的USB功能

使用STM32F407IGT的USB功能时,需注意硬件设计、协议配置、软件开发和调试等关键点。以下是分步指南和注意事项: 1. 硬件设计 USB接口选择: OTG FS(全速,12 Mbps):内置PHY,适用于简单应用(如HID、CDC)。OTG HS(高速,480 Mbps):需外接ULPI PHY芯片(如USB3300),…...

虚拟机IP配置

以下是在常见操作系统中配置虚拟机IP的一般步骤&#xff1a; 一、VMware Workstation&#xff08;Windows或Linux主机下的虚拟机&#xff09; 1. 桥接模式&#xff08;Bridged&#xff09;下的IP配置 - 在虚拟机设置中&#xff0c;将网络适配器设置为桥接模式。 - 启动虚拟机…...