【3】使用YOLOv8训练自己的目标检测数据集-【收集数据集】-【标注数据集】-【划分数据集】-【配置训练环境】-【训练模型】-【评估模型】-【导出模型】

news/2024/5/20 0:19:10/文章来源:https://blog.csdn.net/weixin_43694096/article/details/129814232

请添加图片描述


在自定义数据上训练 YOLOv8 目标检测模型的步骤可以总结如下 6 步:

  1. 🌟收集数据集
  2. 🌟标注数据集
  3. 🌟划分数据集
  4. 🌟配置训练环境
  5. 🌟训练模型
  6. 🌟评估模型

1. 收集数据集

随着深度学习技术在计算机视觉领域的广泛应用,行人检测和车辆检测等任务已成为热门研究领域。然而,实际应用中,可用的预训练模型可能并不适用于所有应用场景。

例如,虽然预先训练的模型可以检测出行人,但它无法区分“好人”和“烂人”,因为它没有接受相关的训练。因此,我们需要为自定义检测模型提供足够数量的带有标注信息的图像数据,来训练模型以区分“好人”和“烂人”。

从而更好地保护我们的安全。同时提醒大家在生活中也应该注意识别那些道貌岸然的小人行为,以保护自己的权益。

在这里插入图片描述

本文将介绍几种收集数据集的常见方法,帮助大家更好地解决实际问题。


1.1 使用开源已标记数据集

使用开源数据集是收集数据的最简便方式之一。例如,ImageNet是一个大型图像数据库,包含超过1400万张图像,可用于深度学习模型的训练。此外,像COCOPASCAL VOC这样的数据集也经常用于目标检测模型的训练和评估。但是这些数据库中的图像通常来自不同的领域和应用场景,因此可能无法完全满足特定研究的需求。

在这里插入图片描述


1.2 爬取网络图像

另一种选择是通过网络搜索图像,并手动选择要下载的图像。然而,由于需要收集大量数据,因此此方法的效率较低。需要注意的是,网络上的图像可能受到版权保护。在使用这些图像之前,务必检查图像的版权信息。

或者,您可以编写一个程序来爬取网络并下载所需的图像,但是这需要对数据进行清洗,以确保数据质量。同样需要注意检查每个图像的版权信息。

在这里插入图片描述


1.3 自己拍摄数据集

对于一些特定的应用场景,如自动驾驶和安防监控等,需要收集特定场景下的数据,这时候就需要进行自主拍摄。可以在实际场景中拍摄图像或视频,并对其进行标注,以获得适用于特定场景的高质量数据集。

在这里插入图片描述


1.4 使用数据增强生成数据集

我们知道深度学习模型需要大量的数据。当我们只有一个小数据集时,可能不足以训练一个好的模型。在这种情况下,我们可以使用数据增强来生成更多训练数据。

常见的增强方式就是几何变换,类似翻转、裁剪、旋转和平移这些。

在这里插入图片描述

左边是狗的原始图像,右边是水平翻转的图像

在这里插入图片描述

猫的原始和随机裁剪图像

1.5 使用算法合成图像

最后一种获取目标检测数据集的方法是使用合成图像。合成图像是通过使用图像处理软件(例如Photoshop)在图像中添加对象、更改背景或合成多个图像以创建新的图像。这种方法可以提供一些特殊情况或无法通过其他方式获得的图像,但是合成图像通常无法完全代替真实场景的数据,可能会对模型的准确性产生一定的影响。

或者我们可以使用生成对抗网络 (GAN) 来生成数据集。
在这里插入图片描述

值得注意的是,收集训练数据集只是我们训练自定义检测模型的第一步。。。接下来我们要介绍如何标注数据集,当然这一步是假设你的图片已经准备完成。

本次案例依然使用我个人的月饼数据集

下载地址:https://download.csdn.net/download/weixin_43694096/87094367

在这里插入图片描述


2. 标注数据集

为什么要标注数据集?标注好的数据集有什么作用呢?
答:为了让计算机学会正确地识别物体,我们需要提供大量的标注数据集,这些数据集包含了图像或视频中物体的位置和类别信息。
标注数据集的作用在于,它可以帮助计算机学习到如何识别不同种类的物体,并且能够正确地定位它们的位置。通过标注数据集,我们可以让计算机逐渐学会如何识别和分类不同种类的物体,例如人、车、动物等等。这些数据集可以被用来训练深度学习模型,让模型学会如何识别新的图像或视频中的物体。

举个简单例子:比如说,我们想要让计算机自动识别图像中的猫和狗。为了让计算机学会如何识别这两个物体,我们需要提供一些图像样本,并在这些样本上标注猫和狗的位置。
如果我们没有标注数据集,计算机就无法学习到如何识别猫和狗。即使我们给计算机提供了大量的图像,它也无法准确地区分这两个物体。但是,如果我们有了标注数据集,计算机就可以通过学习这些数据来理解猫和狗之间的差异,并且可以在新的图像中准确地识别它们。
(当然这个例子指的是监督学习)


2.1 确认标注格式

YOLOv8 所用数据集格式与 YOLOv5 YOLOv7 相同,采用格式如下:

<object-class-id> <x> <y> <width> <height>

常用的标注工具有很多,比如LabelImgLabelMeVIA等,但是这些工具都需要安装使用,我这里给大家介绍一款在线标注数据集的工具Make Sense,打开即用,非常的便捷,在标注之前,我们来看一下一般情况下遵循的标注规则

  1. 目标框必须框住整个目标物体,不能有遗漏和重叠。
  2. 目标框应该与目标物体尽可能接近,但不能与目标物体重合。
  3. 目标框的宽度和高度应该为正数,不能为零或负数。
  4. 如果一张图片中有多个目标物体,每个目标物体应该用一个独立的目标框进行标注,不允许多个目标共用一个框。
  5. 如果目标物体的形状不规则,可以使用多个框进行标注,但必须框住整个目标物体。
  6. 目标框的坐标必须在数据集中统一。

2.2 开始标注

确认好标注格式后我们就可以开始标注了,进入网页后点击 Get Started 开始使用。

在这里插入图片描述

首先点击 Drop images 然后 Ctrl+A 选中整个数据集里面的图片。

在这里插入图片描述

随后添加标签信息,有几类就添加几个,因为我这里只检测月饼一类,所以只添加一个标签 Moon Cake

在这里插入图片描述

随后就进入了漫长的标注环节,这里大家一定要认真标注,不然对最终模型的影响还是很大的。

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

大约 3 3 3 个小时以后就标注完毕了。。。。

我们点击Action -> Export Annotation 导出 yolo 格式的标签文件。

在这里插入图片描述

导出之后的标签文件就是这个样子的,我们可以随机抽查几个看看有没有问题。

在这里插入图片描述


3. 划分数据集

也就是说,我们现在导出后的图片和标签是这个样子的:

Moon_Cake├─images└─all└─labels└─all

但是 YOLOv8 所需要的数据集路径的格式是下面这样子的(YOLOv8支持不止这一种格式),我们接下来要通过脚本来来划分一下数据集:

├── yolov8_dataset└── train└── images (folder including all training images)└── labels (folder including all training labels)└── test└── images (folder including all testing images)└── labels (folder including all testing labels)└── valid└── images (folder including all testing images)└── labels (folder including all testing labels)

具体其实只要修改路径就行了,代码我都做了注释。

# by CSDN 迪菲赫尔曼
import os
import random
import shutil# 设置随机数种子
random.seed(123)# 定义文件夹路径
root_dir = 'Moon_Cake'
image_dir = os.path.join(root_dir, 'images', 'all')
label_dir = os.path.join(root_dir, 'labels', 'all')
output_dir = 'yolov8_dataset'# 定义训练集、验证集和测试集比例
train_ratio = 0.7
valid_ratio = 0.15
test_ratio = 0.15# 获取所有图像文件和标签文件的文件名(不包括文件扩展名)
image_filenames = [os.path.splitext(f)[0] for f in os.listdir(image_dir)]
label_filenames = [os.path.splitext(f)[0] for f in os.listdir(label_dir)]# 随机打乱文件名列表
random.shuffle(image_filenames)# 计算训练集、验证集和测试集的数量
total_count = len(image_filenames)
train_count = int(total_count * train_ratio)
valid_count = int(total_count * valid_ratio)
test_count = total_count - train_count - valid_count# 定义输出文件夹路径
train_image_dir = os.path.join(output_dir, 'train', 'images')
train_label_dir = os.path.join(output_dir, 'train', 'labels')
valid_image_dir = os.path.join(output_dir, 'valid', 'images')
valid_label_dir = os.path.join(output_dir, 'valid', 'labels')
test_image_dir = os.path.join(output_dir, 'test', 'images')
test_label_dir = os.path.join(output_dir, 'test', 'labels')# 创建输出文件夹
os.makedirs(train_image_dir, exist_ok=True)
os.makedirs(train_label_dir, exist_ok=True)
os.makedirs(valid_image_dir, exist_ok=True)
os.makedirs(valid_label_dir, exist_ok=True)
os.makedirs(test_image_dir, exist_ok=True)
os.makedirs(test_label_dir, exist_ok=True)# 将图像和标签文件划分到不同的数据集中
for i, filename in enumerate(image_filenames):if i < train_count:output_image_dir = train_image_diroutput_label_dir = train_label_direlif i < train_count + valid_count:output_image_dir = valid_image_diroutput_label_dir = valid_label_direlse:output_image_dir = test_image_diroutput_label_dir = test_label_dir# 复制图像文件src_image_path = os.path.join(image_dir, filename + '.jpg')dst_image_path = os.path.join(output_image_dir, filename + '.jpg')shutil.copy(src_image_path, dst_image_path)# 复制标签文件src_label_path = os.path.join(label_dir, filename + '.txt')dst_label_path = os.path.join(output_label_dir, filename + '.txt')shutil.copy(src_label_path, dst_label_path)

运行完脚本后我们的数据集就会划分成这个格式了,现在数据准备工作就彻底完成了,接下来我们开始着手训练模型。

在这里插入图片描述


4. 配置训练环境

4.1 获取代码

git clone https://github.com/ultralytics/ultralytics

针对网络不好的同学,我这里上传了一份:点击下载

4.2 安装环境

cd ultralytics
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install ultralytics

5. 训练模型

5.1 新建一个数据集yaml文件

这个是我新建的,里面写绝对路径(主要是怕出错):

# moncake
train: D:\Pycharm_Projects\ultralytics\ultralytics\datasets\mooncake\train  # train images (relative to 'path') 128 images
val: D:\Pycharm_Projects\ultralytics\ultralytics\datasets\mooncake\valid # val images (relative to 'path') 128 images
test: D:\Pycharm_Projects\ultralytics\ultralytics\datasets\mooncake\test # test images (optional)# Classes
names:0: MoonCake

这个是自带的,里面写相对路径,和我们的写法不同,但是都可以使用,据我所只还有很多种数据集读取方式:

# coco128
path: ../datasets/coco128  # dataset root dir
train: images/train2017  # train images (relative to 'path') 128 images
val: images/train2017  # val images (relative to 'path') 128 images
test:  # test images (optional)# Classes
names:0: person1: bicycle2: car''''''79: toothbrush

在这里插入图片描述

相应的数据集位置就在这里,我们可以和coco128对比一下,这两种划分格式都可以的,这里一定要注意路径问题!


5.2 预测模型

这是官方提供的一些命令行方式,下面我们分开来介绍一下:

yolo task=detect    mode=train    model=yolov8n.pt        args...classify       predict        yolov8n-cls.yaml  args...segment        val            yolov8n-seg.yaml  args...export         yolov8n.pt        format=onnx  args...

终端中直接键入以下指令就可以实现对图进行推理了,推理后如果不指定文件夹,就会默认保存到runs/detect/predict下。

yolo task=detect mode=predict model=yolov8n.pt source=data/images device=0 save=True

在这里插入图片描述

在这里插入图片描述
就这张图来说,v8确实比v5牛🍺,左上角的标志都检测出来了,但是阳台上的自行车还是没检测出来。

YOLOv8 关于模型的各种参数其实都写到了一起,在ultralytics/yolo/cfg/default.yaml,这是与先前版本最大的不同,通过使用这些指令我们就可以实现各种我们所需的操作。

在这里插入图片描述

参数名默认值说明
source图像或视频所在的目录
showFalse如果可能,显示结果
save_txtFalse将结果保存为.txt文件
save_confFalse保存带置信度得分的结果
save_cropFalse保存裁剪后带结果的图像
show_labelsTrue在绘图中显示对象标签
show_confTrue在绘图中显示对象置信度得分
vid_stride1视频帧率跨度
line_thickness3边界框的厚度(像素)
visualizeFalse可视化模型特征
augmentFalse对预测源应用图像增强
agnostic_nmsFalse类无关NMS
classes空列表按类别筛选结果,例如:class = 0或class = [0,2,3]
retina_masksFalse使用高分辨率分割掩模
boxesTrue在分割预测中显示边界框

5.3 训练模型

模型训练阶段的原理和预测步骤一致,都可以直接通过命令行搞定,关于这部分参数依然在ultralytics/yolo/cfg/default.yaml中,但我们要训练自己的数据集时记得在 data 参数后指定我们自己的数据集yaml文件路径哦。

以下提供三种指令,分别对应了不同的需求。这里有一点值得注意, 我直接写data=MoonCake.yaml是报错的!

# 从YAML构建一个新模型,从头开始训练
yolo detect train data=coco128.yaml model=yolov8n.yaml epochs=100 imgsz=640
yolo detect train data=ultralytics/datasets/MoonCake.yaml model=yolov8n.yaml epochs=100 imgsz=640# 从预训练的*.pt模型开始训练
yolo detect train data=coco128.yaml model=yolov8n.pt epochs=100 imgsz=640
yolo detect train data=ultralytics/datasets/MoonCake.yaml model=yolov8n.pt epochs=100 imgsz=640# 从YAML中构建一个新模型,将预训练的权重转移到它并开始训练
yolo detect train data=coco128.yaml model=yolov8n.yaml pretrained=yolov8n.pt epochs=100 imgsz=640
yolo detect train data=ultralytics/datasets/MoonCake.yaml model=yolov8n.yaml pretrained=yolov8n.pt epochs=100 imgsz=640

在这里插入图片描述

参数默认值描述
model模型文件路径,如yolov8n.pt,yolov8n.yaml
data数据文件路径,如coco128.yaml
epochs100训练的轮数
patience50等待没有观察到改进的轮数,以便提前停止训练
batch16每个批次的图像数量(-1表示自动批处理)
imgsz640输入图像的大小,可以是整数或w,h
saveTrue保存训练检查点和预测结果
save_period-1每x个轮数保存检查点(如果<1,则禁用)
cacheFalseTrue / ram,磁盘或False。使用缓存加载数据
device运行的设备,如cuda device=0或device=0,1,2,3或device=cpu
workers8加载数据的工作线程数(每个RANK如果DDP)
project项目名称
name实验名称,结果保存到“project / name”目录中
exist_okFalse是否覆盖现有实验
pretrainedFalse是否使用预训练模型
optimizerSGD要使用的优化器,choices=[‘SGD’, ‘Adam’, ‘AdamW’, ‘RMSProp’]
verboseTrue是否打印详细输出
seed0用于可重复性的随机种子
deterministicTrue是否启用确定性模式
single_clsFalse将多类数据训练为单类
image_weightsFalse使用加权图像选择进行训练
rectFalse如果mode ='train’则进行矩形训练,如果mode ='val’则进行矩形验证
cos_lrFalse使用余弦学习率调度程序
close_mosaic10对于最后10个轮数禁用马赛克增强
resumeFalse从上一个检查点恢复训练
ampTrue自动混合精度(AMP)训练,choices=[True, False],True运行AMP检查

在训练过程中(训练结束后也可以看)我们可以通过Tensorboard实时查看模型的训练进度, 只需要在终端中键入如下的指令,这个在我们每次训练时候都会有提示:

tensorboard --logdir runs\detect\train2

在这里插入图片描述

训练结束后我们可以查看得到的一些指标数据:

在这里插入图片描述

在这里插入图片描述
我这里展示一张PR曲线图。


5.4 验证模型

验证模型同样是简单命令行即可实现,如果没有修改中的 ultralytics/yolo/cfg/default.yaml 默认值,同样别忘了指定自己数据集的yaml,即data=ultralytics/datasets/MoonCake.yaml

yolo task=detect mode=val model=yolov8n.pt
# mode=val 就是看验证集
yolo task=detect mode=val model=runs/detect/train2/weights/best.pt  data=ultralytics/datasets/MoonCake.yaml
# mode=test 就是看测试集
yolo task=detect mode=test model=runs/detect/train2/weights/best.pt  data=ultralytics/datasets/MoonCake.yaml

在这里插入图片描述
同样的,我们验证完后依然可以得到一个文件夹:
在这里插入图片描述
我们可以看一下检测效果:

在这里插入图片描述

嗯~ 古德古德~

参数名默认值描述
valTrue在训练过程中进行验证/测试
splitval用于验证的数据集划分,可选项有’val’、‘test’或’train’
save_jsonFalse是否将结果保存为JSON文件
save_hybridFalse是否保存标签的混合版本(标签+额外的预测结果)
conf0.25(predict),0.001(val)检测的物体置信度阈值(默认值),在训练和验证过程中使用不同的阈值
iou0.7非极大值抑制(NMS)的交并比(IoU)阈值
max_det300每个图像最多检测出的目标数量
halfFalse是否使用半精度(FP16)
dnnFalse是否使用OpenCV DNN进行ONNX推理
plotsTrue在训练/验证过程中是否保存图表

5.5 导出模型

只需使用如下命令,就可完成模型的导出。

yolo task=detect mode=export model=runs/detect/train/weights/best.pt

导出有关的具体参数如下:
在这里插入图片描述

参数名默认值描述
formattorchscript导出的模型格式
kerasFalse是否使用Keras
optimizeFalseTorchScript: 是否针对移动设备进行优化
int8FalseCoreML/TF的INT8量化
dynamicFalseONNX/TF/TensorRT: 是否动态轴
simplifyFalseONNX: 是否简化模型
opsetONNX: 操作版本(可选)
workspace4TensorRT: 工作空间大小(GB)
nmsFalseCoreML: 是否添加NMS

注:TorchScript是PyTorch的模型导出工具。INT8(8位整数量化)是一种量化方法,可将神经网络参数表示为8位整数,以降低存储和计算成本。ONNX(Open Neural Network Exchange)是一种跨平台、开放式的机器学习框架。TensorRT是一种用于加速深度学习推理的高性能引擎。CoreML是苹果公司推出的机器学习框架。Keras是一种流行的深度学习框架。


至此使用YOLOv8训练自己的目标检测数据集-【收集数据集】-【标注数据集】-【划分数据集】-【配置训练环境】-【训练模型】-【评估模型】-【导出模型】就完成了,欢迎大家一起交流学习~

请添加图片描述


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

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

相关文章

8 集群管理

8 集群管理 8.1 集群结构 ES通常以集群方式工作&#xff0c;这样做不仅能够提高 ES的搜索能力还可以处理大数据搜索的能力&#xff0c;同时也增加了系统的容错能力及高可用&#xff0c;ES可以实现PB级数据的搜索。 下图是ES集群结构的示意图&#xff1a; 从上图总结以下概念…

【ChirpStack 】如何获取 JWT TOKEN并利用 API 下发数据?

LoRa App Server 提供了两类 API 接口&#xff0c;其中 RESTful JSON API 提供了一个 API console&#xff0c;在AS地址的基础上使用 /api 即可访问&#xff0c;罗列了 API 端点和文档介绍&#xff0c;测试起来非常方便。 本文主要介绍 如何使用 chirpstack 的API 进行测试以及…

187页9万字企业大数据治理与云平台实施方案(word)

1 项目背景概述 1.1 项目背景理解 1.2 项目需求范围 2 项目技术方案 2.1 咨询研究服务方案 2.1.1 咨询研究服务内容 2.1.2 咨询服务方案 2.2 第三方独立评估 2.2.1 概述 2.2.2 管理办法 2.2.3 考核机制 2.3 安全咨询研究服务方案 2.3.1 安全咨询服务内…

静态库和动态库的制作与使用

1.静态库的制作与使用 小知识&#xff1a;删除命令行&#xff0c;或者是配置好的路径之类的&#xff1a;退出编辑模式后&#xff1a;dd 保存并退出&#xff1a;退出编辑模式后&#xff0c;&#xff1a;wq (1)静态库的制作 1.首先生成你需要加入的文件的.O文件。使用如下代码 …

(浙大陈越版)数据结构 第二章 线性结构 2.4 多项式的加法和乘法运算实现

目录 2.4.1多项式的加法运算实现 如何设计一个函数分别求两个一元多项式的和&#xff1f; 算法思路&#xff1a;两个指针p1&#xff0c;p2分别指向两个多项式的第一个结点&#xff08;最高项&#xff09;并循环 循环&#xff1a; 2.4.2 多项式的乘积 1.多项式的表示 2.程…

前端本地存储方案-localForage

1 前言 前端有多种本地存储方案可供选择&#xff0c;以下是其中一些常见的方案&#xff1a; Cookie&#xff1a;Cookie是一种小型的文本文件&#xff0c;可以在浏览器中存储少量数据。Cookie通常用于存储会话信息或用户偏好设置等数据&#xff08;只能存储少量数据&#xff0…

c语言实现三子棋(思路+项目展示+源代码)

&#x1f4d5;博主介绍&#xff1a;目前大一正在学习c语言&#xff0c;数据结构&#xff0c;计算机网络。 c语言学习&#xff0c;是为了更好的学习其他的编程语言&#xff0c;C语言是母体语言&#xff0c;是人机交互接近底层的桥梁。 本章来写一个三子棋小游戏吧。 让我们开启c…

eSIM证书要求-证书验证-EID

SM-DP 和 SM-DS 应该验证 EUM 和 eUICC 证书中限制的 IIN 和 EID 的一致性&#xff08;参见第 4.5.2.1.0.2 和 4.5.2.1.0.3 节&#xff09;&#xff0c;并考虑 SGP.29 [ 89]。 根据 SGP.29 [89] 颁发的 EID 没有 SGP.02 [2] 中定义的 8 位 IIN。 相反&#xff0c;它们具有可变长…

系统移植 5-10

1.进入linux内核源码目录下&#xff0c;打开Makefile文件&#xff0c;搜索vmlinux&#xff0c;找到cmd_link-vmlinux命令&#xff0c; 1179 cmd_link-vmlinux \ 1180 $(CONFIG_SHELL) $< "$(LD)" "…

NOA上车「清一色」自主品牌,哪些供应商正在突围前线

随着入门级L2进入普及周期&#xff0c;以NOA&#xff08;高速、城区&#xff09;为代表的L2/L2赛道&#xff0c;正在成为主机厂、硬件供应商、算法及软件方案商的下一波市场制高点的争夺阵地。 高工智能汽车研究院监测数据显示&#xff0c;2023年1-3月中国市场&#xff08;不含…

Linux shell编程 数组 ^ 数组排序

数组定义 数组内数据类型可以为数值也可以为字符串。 若字符串类型需要使用 " " 包含以免空格扰乱数组。 方法1 空格分隔直接定义数组 arr(10 20 30 40 50) arr1(zhangsan lisi wangwu) 方法2 指定元素下标定义&#xff0c;若跳过元素不设置会显示为空 arr([0]1…

科技云报道:ChatGPT应用爆火,安全的大数据底座何处寻?

科技云报道原创。 毫无疑问&#xff0c;AIGC正在给人类社会带来一场深刻的变革。 而剥开其令人眼花缭乱的华丽外表&#xff0c;运行的核心离不开海量的数据支持。 ChatGPT的“入侵”已经引起了各行各业对内容抄袭的担忧&#xff0c;以及网络数据安全意识的提高。 虽然AI技术…

如何考核产品经理的绩效?

公司里几乎任何一个岗位都会被考核&#xff0c;产品经理也不例外。那么在产品经理实际工作该如何去考核呢&#xff1f;相信即将步入或身在职场的产品经理一定感兴趣&#xff0c;其实产品经理考核主要分为业绩考核和文化考核两大部分&#xff0c;下面将这两部分具体聊聊。 一、…

Xilinx 7系列FPGA内置ADC

Xilinx 7系列FPGA全系内置了一个ADC&#xff0c;称之为XADC。这个XADC&#xff0c;内部是两个1mbps的ADC&#xff0c;可以采集模拟信号转为数字信号送给FPGA内部使用。 XADC内部可以直接获取芯片结温和FPGA的若干供电电压&#xff08;7系列不包括VCCO&#xff09;&#xff0c;用…

翻遍GitHub帮你总结了一份并发图册+高并发笔记,一次性搞懂并发编程

前言 现在的面试&#xff0c;动不动就是“三高”&#xff0c;Java并发编程已然成为名企大厂面试的必考问题&#xff0c;其重要性不⾔⽽喻。 我也问了一些面试官&#xff0c;他们说&#xff1a;很多面试者&#xff0c;最基本的Java内存模型和JVM内存结构都分不清楚&#xff0c…

华硕ROG|玩家国度魔霸新锐2023 Windows11原厂预装系统 工厂模式恢复安装带ASUSRecevory一键还原

华硕ROG|玩家国度魔霸新锐2023 Windows11原厂预装系统 工厂模式恢复安装带ASUSRecevory一键还原 文件地址&#xff1a;https://pan.baidu.com/s/1snKOsH3OMl3GZLqeAf-GLA?pwd8888 华硕工厂恢复系统 &#xff0c;安装结束后带隐藏分区以及机器所有驱动软件 需准备一个16G左右…

Unity Audio -- (3)创建3D音效

本节会添加场景中小瀑布的音效。小瀑布的音效会有一个作用范围&#xff0c;也会根据角色所处的位置不同&#xff0c;产生不同的效果。 添加小瀑布的声音 1. 在Hierarchy中&#xff0c;点击右键&#xff0c;选择Audio -> Create Audio Source&#xff0c;将这个新的Audio So…

C/C++每日一练(20230510) 编辑距离、多数元素、数列累和

目录 1. 编辑距离 &#x1f31f;&#x1f31f;&#x1f31f; 2. 多数元素 &#x1f31f; 3. 求分数数列的前N项和 ※ &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏 1. 编辑距离 给你…

Baumer工业相机堡盟工业相机如何进行多个工业相机IP地址配置

Baumer工业相机堡盟工业相机如何进行多个工业相机IP地址配置 Baumer工业相机Baumer工业相机进行多相机IP配置的技术背景Baumer工业相机如何进行多相机IP配置1.配置Baumer工业相机连接的PC端IP地址2.配置Baumer工业相机的IP地址 Baumer工业相机 Baumer工业相机堡盟相机是一种高…

pc端项目的h5页面运行在手机浏览器使用vconsole查看页面元素、控制台、请求等信息

文章目录 一、vconsole介绍1. 作用2. 优势 二、使用1、jq项目和js项目2、vue项目 三、使用介绍1. 使用成功&#xff0c;在页面右下角会出现如下图的vConsole2. 常用功能&#xff08;控制台、请求、元素、存储器&#xff09; 一、vconsole介绍 1. 作用 使用vconsole来查看h5页…