计算机视觉——对比YOLOv12、YOLOv11、和基于Darknet的YOLOv7的微调对比
概述
目标检测领域取得了巨大进步,其中 YOLOv12、YOLOv11 和基于 Darknet 的 YOLOv7 在实时检测方面表现出色。尽管这些模型在通用目标检测数据集上表现卓越,但在 HRSC2016-MS(高分辨率舰船数据集) 上对 YOLOv12 进行微调时,却面临着独特的挑战。
本文提供了一个详细的端到端流程,用于在 HRSC2016-MS 上微调 YOLOv12、YOLOv11 和基于 Darknet 的 YOLOv7。它涵盖了数据集预处理(基本的洗牌和将数据集划分为训练集、测试集和验证集)、训练、评估以及对它们性能的对比分析。重点关注领域包括:
- 处理数据集偏差以提高小目标检测能力。
- 洗牌数据集以确保适当的泛化能力。
- 在验证集 / 测试集上对比 YOLOv12、YOLOv11 和基于 Darknet 的 YOLOv7。
- 可视化检测结果以比较模型性能。
此外,本文强调了理解数据集结构和偏差的重要性。研究人员花费大量时间进行数据集准备和适当的训练 - 验证 - 测试划分,以增强模型的泛化能力并避免误导性结果。通过解决 HRSC2016-MS 中的这些挑战,我们展示了适当的数据准备和结构化如何直接提高模型的准确性。
一、HRSC2016-MS 数据集
HRSC2016-MS 是一个海上目标检测数据集,包含舰船的航拍图像。该数据集仅有一个类别,即 舰船。它包含各种舰船大小、密度和方向,使其成为目标检测模型的一个具有挑战性的数据集。
1.1 为何引入 HRSC2016-MS?
在 HRSC2016-MS 之前,已经存在 HRSC2016 数据集,其中包含用于检测任务的舰船图像。然而,HRSC2016-MS 的作者引入了这个修改后的数据集,以解决原始数据集的几个关键限制:
增强多尺度表示
- 原始 HRSC2016 数据集中的舰船尺度相对相似,未能充分表示 多尺度变化。
- HRSC2016-MS 引入了更广泛的舰船尺寸,确保在实际应用中具有更好的泛化能力。
提高数据集多样性
- 原始 HRSC2016 数据集缺乏 舰船杂乱程度和尺度过渡的足够变化。
- HRSC2016-MS 引入了 更密集的舰船,提高了数据集在小目标检测方面的实用性。
更具挑战性的目标分布
- 原始数据集在每张图像中的舰船方向和密度变化较少。
- HRSC2016-MS 旨在 增加数据集的复杂性,使其成为高级目标检测模型的一个更好的基准。
1.2 原始数据集结构
首次下载时,数据集具有以下结构:
HRSC2016-MS/
├── AllImages/ # 包含所有图像(未按训练 / 验证 / 测试划分)
├── Annotations/ # 每张图像的 VOC XML 注释
└── ImageSets/├── train.txt # 训练图像文件名列表├── val.txt # 验证图像文件名列表├── test.txt # 测试图像文件名列表└── trainval.txt # 开发者测试的训练和验证图像组合列表
1.3 原始数据集的问题
非 YOLO 兼容的注释
- 数据集使用 VOC 风格的 XML 注释,需要转换为 YOLO 格式。
非 YOLO 兼容的目录结构
- 所有图像都存储在 AllImages/ 而不是按训练集、验证集和测试集划分。
- 数据集包含 文本文件(train.txt、val.txt、test.txt、trainval.txt),其中仅包含 图像文件名,使其 与 YOLO 和 DarkNet 不兼容。
有偏的训练 - 测试划分
- 数据集总共包含 1680 张图像,理想情况下,测试集应包含文件名为 1-1680 范围内的图像。然而,在分析原始 HRSC2016-MS 数据集中的标签文件名后,我们发现 测试集包含文件名为大约 1-650 范围内的连续图像。这表明 图像在训练集、测试集和验证集之间的分布不当,可能会导致潜在的偏差并影响模型性能。
- 测试集包含较小、密集的舰船,与训练集和验证集相比。
- 这导致了 泛化能力差,模型在 检测小舰船 方面存在困难。
二、数据集转换与预处理
为了解决原始数据集的问题,我们手动将数据集转换并重新构建为 YOLO 和 DarkNet 兼容的格式。所有数据集转换和预处理代码都可以直接下载。
2.1 将注释从 XML 转换为 YOLO(.txt)格式
- 从 XML 文件中提取边界框坐标(xmin、ymin、xmax、ymax),并将其转换为 YOLO(.txt)格式:<class_id> <x_center> <y_center>
- 我们没有使用旋转边界框注释,只是为了使评估过程更简单一些。
2.2 洗牌整个数据集以实现泛化
- 由于测试集主要包含小而密集的舰船,使用原始数据集进行训练会导致泛化能力差。
- 我们 合并、洗牌并重新划分 数据集,以确保以下几点:
- 在训练集、验证集和测试集中平衡分布小舰船和大舰船。
- 防止对特定目标尺寸产生过拟合。
- 这里呈现的结果只是一个 基线。鉴于数据集划分的固有随机性,其他研究人员可能会观察到 略有不同的结果;有些人可能会取得 更好的结果,而另一些人可能会得到 略差的结果。为了确保透明度和可重复性,我们还将提供我们在实验中使用的 确切数据集划分,它将以 zip 文件 的形式提供参考。
2.3 为 YOLO 重新构建数据集
经过处理后,数据集被构建并转换为 YOLO 特定的格式,如下所示:
HRSC-YOLO/
├── train/
│ ├── images/ # 训练图像
│ └── labels/ # 训练标签,以 YOLO 格式
├── val/
│ ├── images/ # 验证图像
│ └── labels/ # 验证标签,以 YOLO 格式
└── test/├── images/ # 测试图像└── labels/ # 测试标签,以 YOLO 格式
2.4 为 DarkNet 重新构建数据集
DarkNet 需要不同的结构,其中 每个图像及其对应的标签文件存储在一起。格式如下:
darknet_dataset/
├── train/
│ ├── image1.JPG
│ └── image1.txt
├── valid/
│ ├── image2.JPG
│ └── image2.txt
└── test/├── image3.JPG└── image3.txt
三、在 HRSC2016-MS 数据集上微调 YOLOv12
3.1 模型配置
- 使用 YOLOv12(Ultralytics 实现)。
- 设置 图像大小为 640×640,以实现最佳性能。
3.2 训练流程
- 设置 批量大小为 8,训练周期数为 100。
- 使用 马赛克增强,使模型能够接触到 不同尺度下的小目标。
- 自适应学习率调度 有助于防止过拟合。
def train_yolov12(epochs=100, batch_size=8):model = YOLO(yolov12_model_path)model.train(data=data_yaml, epochs=epochs, batch=batch_size, imgsz=640, device='cuda', workers=4, save=True, save_period=10)model.val()print(model)print("YOLOv12 训练在 HRSC2016-MS 上完成。")
3.3 评估指标
- 跟踪 mAP@50、mAP@75 和 mAP@[50:95]。
- 对比了在原始数据集和预处理数据集上训练后的性能,观察结果如下。
模型 - YOLOv12 | mAP@50 | mAP@75 | mAP@[50:95] |
---|---|---|---|
在原始数据集上训练 | 74.9% | 61.5% | 54.5% |
在洗牌后的数据集上训练 | 85.2% | 75.1% | 66.3% |
四、在 HRSC2016-MS 数据集上微调 YOLOv11
- 采用了与 YOLOv12 相同的训练流程。
- 对比了 YOLOv11 在原始数据集和预处理数据集上的性能。
- 使用条形图对比了 mAP 分数,观察结果如下。
模型 - YOLOv11 | mAP@50 | mAP@75 | mAP@[50:95] |
---|---|---|---|
在原始数据集上训练 | 75.3% | 61.6% | 55.0% |
在洗牌后的数据集上训练 | 86.2% | 75.8% | 67.0% |
五、在 HRSC2016-MS 上微调基于 Darknet 的 YOLOv7
DarkNet 是开发 YOLO(You Only Look Once)目标检测模型家族的原始框架。与 Ultralytics 的 YOLO 模型实现不同,基于 Darknet 的 YOLOv7 需要特定的目录结构、配置文件以及手动定义的数据集路径。本节详细介绍了如何在 HRSC2016-MS 数据集上设置、训练和评估基于 Darknet 的 YOLOv7。
我们将提供一个 Jupyter 笔记本,可以在 VS Code 编辑器 中轻松执行。该笔记本将指导您完成 数据准备、预处理以及生成 DarkNet 所需的配置和文本文件,以启动训练过程。然而,需要注意的是,对于实际训练部分,不建议在代码编辑器中启动 DarkNet 训练。这是由于训练过程中产生的 大量输出 可能会导致 代码编辑器窗口崩溃。
因此,仅对于训练和评估部分,建议在终端中执行训练和评估命令,而不是在任何代码编辑器中执行它们。笔记本中已提供了适当的操作说明。在实际应用中,建议仔细遵循这些说明。
5.1 设置 DarkNet
-
克隆 DarkNet 仓库
克隆 DarkNet 仓库到本地目录。git clone https://github.com/AlexeyAB/darknet.git
-
编译 DarkNet
使用 CUDA 和 OpenCV 支持编译 DarkNet。可以参考我们关于 YOLOv4 和 Darknet 用于坑洼检测 的文章中的逐步过程,以构建 Darknet。文章链接如下:构建 Darknet 参考文章
5.2 下载基于 YOLOv7 的 DarkNet 预训练权重
为了在 HRSC2016-MS 上微调基于 Darknet 的 YOLOv7,我们使用预训练权重作为起点。使用以下命令下载 YOLOv7 DarkNet 权重:
cd /path/to/darknet
wget https://github.com/AlexeyAB/darknet/releases/download/yolov4/yolov7x.conv.147
wget https://github.com/AlexeyAB/darknet/releases/download/yolov4/yolov7x.weights
将权重保存在 darknet/
目录中。实际上,从现在开始,所有命令都必须在克隆的 Darknet 目录中的 darknet
子目录中执行。
5.3 Darknet 所需的文本文件
DarkNet 需要 明确的文本文件 指定图像的路径。
- train.txt → 包含用于训练的图像的绝对路径。
- valid.txt → 包含用于验证的图像的绝对路径。
- test.txt → 包含用于评估的图像的绝对路径。
为了生成这些文本文件,我们将编写一个 Python 脚本,然后执行该脚本。脚本如下:
# prepare_darknet_image_txt_paths.py
import os# 设置数据集路径
DATA_ROOT_TRAIN = '/path/to/train/directory'
DATA_ROOT_VALID = '/path/to/valid/directory'
DATA_ROOT_TEST = '/path/to/test/directory'# 获取图像文件名
train_image_files = [f for f in os.listdir(DATA_ROOT_TRAIN) if f.endswith('.jpg') or f.endswith('.png')]
valid_image_files = [f for f in os.listdir(DATA_ROOT_VALID) if f.endswith('.jpg') or f.endswith('.png')]
test_image_files = [f for f in os.listdir(DATA_ROOT_TEST) if f.endswith('.jpg') or f.endswith('.png')]# 写入 train.txt
with open('train.txt', 'w') as f:for file_name in train_image_files:f.write(os.path.join(DATA_ROOT_TRAIN, file_name) + '\n')# 写入 valid.txt
with open('valid.txt', 'w') as f:for file_name in valid_image_files:f.write(os.path.join(DATA_ROOT_VALID, file_name) + '\n')# 写入 test.txt
with open('test.txt', 'w') as f:for file_name in test_image_files:f.write(os.path.join(DATA_ROOT_TEST, file_name) + '\n')
在 darknet
目录中运行以下命令以执行脚本:
python prepare_darknet_image_txt_paths.py
5.4 DarkNet 配置文件
DarkNet 还需要 三个自定义配置文件:
- obj.names(ship.names)→ 类别名称文件
- obj.data(hrsc2016-ms-yolov7.data)→ 训练数据文件
- 自定义.cfg文件(yolov7-darknet-hrsc2016-ms.cfg)→ 用于定义特定于该数据集的基于 YOLOv7 的 Darknet 架构
5.4.1 准备自定义基于 Darknet 的 YOLOv7 类别名称文件
echo "ship" > build/darknet/x64/data/ship.names
5.4.2 准备自定义基于 Darknet 的 YOLOv7 训练数据文件
在开始训练过程之前,确保已经创建了一个名为 backup_2000
的目录。
echo "classes = 1" > build/darknet/x64/data/hrsc2016-ms-yolov7.data
echo "train = train.txt" >> build/darknet/x64/data/hrsc2016-ms-yolov7.data
echo "valid = valid.txt" >> build/darknet/x64/data/hrsc2016-ms-yolov7.data
echo "names = build/darknet/x64/data/ship.names" >> build/darknet/x64/data/hrsc2016-ms-yolov7.data
echo "backup = backup_2000" >> build/darknet/x64/data/hrsc2016-ms-yolov7.data
5.4.3 准备自定义基于 Darknet 的 YOLOv7 测试数据文件
在开始推理和测试过程之前,建议创建一个名为 backup_test_2000
的目录。
echo "classes = 1" > build/darknet/x64/data/ship_test.data
echo "train = train.txt" >> build/darknet/x64/data/ship_test.data
echo "valid = test.txt" >> build/darknet/x64/data/ship_test.data
echo "names = build/darknet/x64/data/ship.names" >> build/darknet/x64/data/ship_test.data
echo "backup = backup_test_2000" >> build/darknet/x64/data/ship_test.data
5.4.4 准备自定义基于 Darknet 的 YOLOv7 配置文件
我们将创建一个自定义配置文件,其中大部分内容与默认的 yolov7x.cfg
相同(因为我们正在比较大型 YOLO 模型),但需要根据我们的数据集修改一些参数。
# yolov7-darknet-hrsc2016-ms.cfg
[net]
# Testing
# batch=64
# subdivisions=64
# Training
batch=64
subdivisions=64
width=640
height=640
channels=3
momentum=0.9
decay=0.0005
angle=0
saturation = 1.5
exposure = 1.5
hue=.1
learning_rate=0.00261
burn_in=1000
max_batches = 2000
policy=steps
steps=1600,1800
scales=.1,.1# 其他层的配置保持不变,仅修改以下部分
[convolutional]
size=1
stride=1
pad=1
filters=18
activation=logistic[yolo]
mask = 6,7,8
anchors = 12,16, 19,36, 40,28, 36,75, 76,55, 72,146, 142,110, 192,243, 459,401
classes=1
5.5 训练基于 Darknet 的 YOLOv7
提醒:仅在终端中运行以下命令。
以下终端命令启动基于 Darknet 的 YOLOv7 模型的训练过程,并在训练结束后计算 mAP@50 分数。
./darknet detector train build/darknet/x64/data/hrsc2016-ms-yolov7.data cfg/yolov7-darknet-hrsc2016-ms.cfg yolov7x.conv.147 -map -dont_show
5.6 评估指标:基于 YOLOv7 的 Darknet
我们将使用以下终端命令在验证集上获得 mAP 分数,IoU 阈值为 0.75。我们只需在命令中更改 iou_thresh 值,即可根据需要设置 IoU 阈值。
./darknet detector map build/darknet/x64/data/ship_test.data cfg/yolov7-darknet-hrsc2016-ms.cfg backup_2000/yolov7-darknet-hrsc2016-ms_final.weights -iou_thresh 0.75
如果需要在测试集上计算 mAP 分数,我们只需修改 ship_test.data
配置文件。只需将 “valid” 参数值从 “valid.txt” 更改为 “test.txt”。
使用以下命令生成训练模型对提供的图像的检测结果。注意在命令中指定包含要检测图像的目录路径。输出将包含模型为传递的图像预测的边界框的位置。
./darknet detector test build/darknet/x64/data/hrsc2016-ms-yolov7.data cfg/yolov7-darknet-hrsc2016-ms.cfg backup_2000/yolov7-darknet-hrsc2016-ms_final.weights -dont_show -ext_output < test.txt > results_darknet_test.txt
5.7 可视化检测结果
为了可视化检测结果,我们需要修改 Darknet 内部的 Python 脚本 darknet_images.py
。打开该文件并添加以下两行代码,以便将标注后的图像保存到目录中。
output_image_path = os.path.join("yolov7_darknet_test_results", image_name.split(os.path.sep)[-1])
cv2.imwrite(output_image_path, image)
修改后的 darknet_images.py
文件如下:
# 修改后的 darknet_images.py
import cv2
import os# 添加这两行代码
output_image_path = os.path.join("yolov7_darknet_test_results", image_name.split(os.path.sep)[-1])
cv2.imwrite(output_image_path, image)
运行以下命令以执行脚本并保存检测结果:
python darknet_images.py --data_file build/darknet/x64/data/ship_test.data --input /path/to/test/images --config_file cfg/yolov7-darknet-hrsc2016-ms.cfg --weights backup_2000/yolov7-darknet-hrsc2016-ms_final.weights --thresh 0.25 --ext_output --save_labels --dont_show
现在,我们已经完成了所有实验。是时候比较微调模型的性能了。
六、比较 YOLOv12、YOLOv11 和基于 Darknet 的 YOLOv7 的 mAP 分数
预处理后的数据集上的 mAP 分数明显高于原始数据集,如本文前面所示。基于评估指标 mAP@50、mAP@75 和 mAP@[50:95],在预处理后的数据集上的最终比较如下。
在验证集上
模型 | mAP@50 | mAP@75 | mAP@[50:95] |
---|---|---|---|
YOLOv7 (DarkNet) | 85.6% | 71.9% | 61.56% |
YOLOv11 | 83.7% | 72.2% | 63.8% |
YOLOv12 | 83% | 71.8% | 63.5% |
在测试集上
模型 | mAP@50 | mAP@75 | mAP@[50:95] |
---|---|---|---|
YOLOv7 (DarkNet) | 88.2% | 75.6% | 65.5% |
YOLOv11 | 86.2% | 75.8% | 67.0% |
YOLOv12 | 85.2% | 75.1% | 66.3% |
七、训练和损失图的可视化
YOLOv12
YOLOv11
基于 Darknet 的 YOLOv7
八、在一些图像上的推理结果
所有三个模型在给定的真实值图像上表现出类似的性能。Darknet 在识别被其他模型遗漏或检测不准确的小目标方面表现出更高的准确性。
所有评估的模型在检测密集和小目标方面表现出色。然而,YOLOv11 出现了重叠检测,这可能表明存在冗余或检测精度较低。总体而言,这些模型在检测任务中表现出不同程度的重叠和精度。
YOLOv12 是唯一能够在真实值图像中检测到标记目标的模型。总体而言,所有模型在目标检测方面表现出类似的性能。然而,YOLOv11 继续产生重叠检测,这表明可能存在冗余或检测精度降低。
该图像是一个理想的测试案例,特别是在密集和小目标场景中评估目标检测模型。初步比较可能表明 YOLOv12 基于检测数量优于其他模型。然而,详细分析揭示了许多 YOLOv12 检测是重叠的、冗余的或误检。基于 Darknet 的 YOLOv7 尽管检测到的目标较少,但显示出更高的准确性,误检和重叠最少。一个健全的评估必须考虑精度、召回率和误检率,而不仅仅是依赖于检测数量。
关键要点
- mAP@50 分数表明基于 Darknet 的 YOLOv7 在基本目标定位(检测舰船)方面表现出色,但在更严格的定位约束下可能表现不佳。
- YOLOv11 在高 IoU 阈值(mAP@75 和 mAP@[50:95])下表现优于其他模型。这意味着 YOLOv11 在目标定位和更精确的边界框方面优于其他模型。
- YOLOv12 在 mAP 分数评估指标中从未超过其他模型,但它在实际推理性能方面表现出色,这可能是由于它在密集环境中对舰船特征提取能力更强。
- HRSC2016-MS 数据集从预处理(主要是洗牌)中受益。洗牌和重新构建数据集提高了泛化能力,使所有模型都能更有效地检测到小舰船。
- 模型性能取决于数据集。尽管 YOLOv12 是最新的模型,但它在任何 mAP 分数评估指标中都没有占据主导地位。基于 Darknet 的 YOLOv7 在 mAP@50 方面表现出色,表明旧架构在特定数据集中仍然具有竞争力。
结论
本研究对在 HRSC2016-MS 数据集上微调 YOLOv12、YOLOv11 和基于 Darknet 的 YOLOv7 进行了深入分析,重点关注提高航拍舰船图像中小目标的检测能力。原始数据集的洗牌和重新构建在提高模型性能方面发挥了关键作用,因为初始的训练 - 测试划分存在偏差,影响了泛化能力。
YOLOv11 在更严格的 IoU 阈值(mAP@75 和 mAP@[50:95])下表现优于所有模型,使其成为精确边界框预测的最佳选择。尽管 YOLOv12 在 mAP 分数评估指标中没有占据主导地位,但它在实际推理性能方面表现出色,表明定性检测有效性超出了数值 mAP 值的范围。
原文地址:https://learnopencv.com/fine-tuning-yolov12/#circle=on
相关文章:
计算机视觉——对比YOLOv12、YOLOv11、和基于Darknet的YOLOv7的微调对比
概述 目标检测领域取得了巨大进步,其中 YOLOv12、YOLOv11 和基于 Darknet 的 YOLOv7 在实时检测方面表现出色。尽管这些模型在通用目标检测数据集上表现卓越,但在 HRSC2016-MS(高分辨率舰船数据集) 上对 YOLOv12 进行微调时&…...
Pygame跨平台打包:将游戏发布到Windows、Mac和Linux
Pygame跨平台打包:将游戏发布到Windows、Mac和Linux 引言 在游戏开发的世界中,Pygame 是一个非常受欢迎的库,它使得使用 Python 编写 2D 游戏变得简单而有趣。然而,当你完成了一个游戏并希望将其发布给更多的玩家时,如何将你的游戏打包成可以在不同操作系统上运行的可执…...
关于图论的知识
如果一个无向图有 $n\times (n-1)\div 2$ 条边,称为**完全图** 如果一个完全图任意两个点都可以互相到达,称为**连通图** 一个包含 $dfs$ 与 $bfs$ 的图的遍历程序 程序可做到的: 1、每一行输出一个 **搜索树** 2、$dfs$ 与 $bfs$ 并存 c…...
365打卡第R3周: RNN-心脏病预测
🍨 本文为🔗365天深度学习训练营中的学习记录博客 🍖 原作者:K同学啊 🏡 我的环境: 语言环境:Python3.10 编译器:Jupyter Lab 深度学习环境:torch2.5.1 torchvision0…...
如何解决IDE项目启动报错 error:0308010C:digital envelope routines::unsupported 问题
如何解决IDE项目启动报错 error:0308010C:digital envelope routines::unsupported 问题 在现代软件开发过程中,开发人员通常使用集成开发环境(IDE)如IntelliJ IDEA、Visual Studio Code(VSCode)等进行Node.js项目开发…...
嵌入式学习笔记 - HAL_xxx_MspInit(xxx);函数
使用cubeMX生成的HAL库函数中,所有外设的初始化函数HAL_xxx_Init(&xxxHandle)中都存在有此调用函数,此调用函数其实是对各外设模块比如UART,I2C等的底层硬件初始化,包括UART时钟,以及UART用到的GPIO的工作模式以及…...
Dify框架面试内容整理-Dify框架
什么是Dify框架? Dify框架是一个开源的AI应用开发平台,专注于帮助开发者和非技术人员快速构建、部署和管理基于大语言模型(如GPT系列、国产开源模型)的应用。 Dify框架的特点:...
计算机网络的五层结构(物理层、数据链路层、网络层、传输层、应用层)到底是什么?
文章目录 五层结构1. 物理层(Physical Layer)2. 数据链路层(Data Link Layer)3. 网络层(Network Layer)4. 传输层(Transport Layer)5. 应用层(Application Layer…...
【计算机视觉】CV实战项目 -深度解析PaddleSegSharp:基于PaddleSeg的.NET图像分割解决方案
深度解析PaddleSegSharp:基于PaddleSeg的.NET图像分割解决方案 技术背景与项目概述核心功能与特点实战部署指南环境要求硬件要求软件依赖 项目结构快速开始1. 获取项目2. 准备模型文件3. 运行示例 高级使用技巧模型切换背景替换性能优化 常见问题与解决方案技术原理…...
面试新收获-大模型学习
大模型原理 Transformer 架构与自注意力机制 Transformer 是当前大多数大模型采用的核心架构,由编码器-解码器组成,摒弃了传统 RNN 的顺序处理方式。Transformer 中关键在于多头自注意力机制(Multi-Head Self-Attention)…...
《Keras 3部署全攻略:从新手到实战高手》
《Keras 3部署全攻略:从新手到实战高手》 一、引言:开启 Keras 3 部署之旅 在深度学习的广阔领域中,Keras 一直以其简洁易用、高度模块化的特性,深受开发者的喜爱,被誉为深度学习的 “福音”。而如今,Keras 3 的强势登场,更是为这个领域注入了全新的活力。它像是一位集…...
如何修改npm的全局安装路径?
修改 npm 的全局安装路径可以通过以下步骤完成,确保全局包(使用 -g 安装的模块)和缓存文件存储到自定义路径。以下是详细步骤: 1. 创建自定义路径的目录 在目标路径下创建两个文件夹,分别用于存储全局模块和缓存文件…...
计算机网络 | Chapter1 计算机网络和因特网
💓个人主页:mooridy-CSDN博客 💓文章专栏:《计算机网络:自定向下方法》 大纲式阅读笔记_mooridy的博客-CSDN博客 🌹关注我,和我一起学习更多计算机网络的知识 🔝🔝 目录 …...
前端面试 HTML篇
src和href的区别 src和href都是用来加载外部资源,区别如下 src:当浏览器解析到该元素时,会暂停其他资源的加载和处理,直到该资源加载完成。 它会将资源内容嵌入到当前标签所在的位置,将其指向的资源下载应用到文档内…...
Prometheus、Zabbix 和 Nagios 这三个工具的对100个节点的部署设计的信息流
Prometheus 1. 基本组件及角色 Prometheus主要由Prometheus Server、Exporter、Alertmanager和Grafana(可选)等组件构成。 Prometheus Server:负责数据的收集、存储和查询,以及规则的评估。Exporter:部署在被监控节点上,负责收集节点的各种指标数据。Alertmanager:负责…...
Tableau 基础表制作
目录 1.数据连接 2. 数据可视化 3. 基础表制作 3.1 对比分析:比大小 1. 柱状图 2. 条形图 3. 热力图 4. 气泡图 5. 词云 3.2 变化分析:看趋势 1. 折线图 2. 面积图 3.3 构成分析:看占比 1. 饼图 2. 树地图 3. 堆积图 3.4 关…...
openAICEO山姆奥特曼未来预测雄文之三个观察
《三个观察》 山姆奥特曼 这篇文章主要讲的是关于AGI(人工通用智能)的未来发展及其对社会的影响,用大白话总结如下: 核心观点: AGI是什么? AGI是一种能像人类一样解决各种复杂问题的智能系统,比…...
springboot入门-service层构造器注入原理
在 Spring Boot 中,通过构造器注入的方式将 Repository(JPA)或 Mapper(MyBatis)注入到 Service 层的原理及示例如下: 1. 构造器注入的原理 依赖注入(DI)机制: Spring 容…...
JavaScript 笔记 --- part6 --- JS进阶 (part1)
JS 进阶(part1) 作用域 局部作用域 定义: 局部作用域指的是在函数内部定义的变量,只能在函数内部访问,外部不能访问。 特点: 局部作用域变量只能在函数内部或代码块中访问,外部不能访问。 分类: 函数作用域: 指的是在函数内部定义的变量&…...
使用matplotlib绘制Raincloud图/云雨图/柱状图/小提琴图
需求: 使用Python的matplotlib绘制数据分布、数据箱型图、数据散点图 参考: https://blog.csdn.net/weixin_39559994/article/details/128197965?fromshareblogdetail&sharetypeblogdetail&sharerId128197965&sharereferPC&sharesource…...
BT152-ASEMI机器人率器件专用BT152
编辑:LL BT152-ASEMI机器人率器件专用BT152 型号:BT152 品牌:ASEMI 封装:TO-220F 批号:最新 引脚数量:3 封装尺寸:如图 特性:单向可控硅 工作结温:-40℃~150℃ …...
【Redis——通用命令】
文章目录 Redis为什么快?生产环境的概念Redis中最核心的两个命令get:通过key拿valueset:将key和value存入数据库 其他通用命令keysexist判定key是否存在delexpire:为指定的key设置一个过期时间TTL(Time To Live&#x…...
qt之开发大恒usb3.0相机一
1.在大恒相机给的sample里没有看见qt开发的demo. 第一步先运行c sdk中中的demo,看了下代码,大恒使用的UI框架是MFC.然后 vs2022编译。运行结果 第一步,先用qt进行坐下页面布局,如下图(保存图片的地方做了些更改&#…...
系列位置效应——AI与思维模型【80】
一、定义 系列位置效应思维模型是指在一系列事物或信息的呈现过程中,人们对于处于系列开头和结尾部分的项目的记忆效果优于中间部分项目的现象。具体而言,开头部分的记忆优势被称为首因效应,结尾部分的记忆优势被称为近因效应。这种效应反映…...
解决conda虚拟环境安装包却依旧安装到base环境下
最近跑项目装包装到几度崩溃,包一直没有安装到正确位置,为此写下这篇文章记录一下,也希望能帮到有需要的人。(此文章开发环境为anaconda和window) 方法一 先conda deactivate,看到(base)消失…...
设计看似完美却测不过? Intra-Pair Skew 是「讯号完整性(Signal Integrity)」里最隐形的杀手
各位不知道有没有遇过,一对很长的差分走线,看起来很正常,但是测试结果偶尔会fail偶尔会pass,不像是软件问题,也不像是制程问题。 看了一下Layout,发现阻抗匹配控制的非常好,TDR测试也显示阻抗好…...
使用MyBatis注解方式的完整示例,涵盖CRUD、动态SQL、分页、事务管理等场景,并附详细注释和对比表格
以下是使用MyBatis注解方式的完整示例,涵盖CRUD、动态SQL、分页、事务管理等场景,并附详细注释和对比表格: 项目结构 mybatis-annotation-demo/ ├── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com.example/…...
【头脑风暴】加权平均
一些加权平均而不是算术平均的思路,启发来源:ACLS,WACLS。 简单平均假设所有样本的误差和噪声特性相同,但在实际电路中,不同阶段、不同时间点的样本价值(对最终精度的贡献)是不同的。加权平均的核心思想…...
DAM-3B,英伟达推出的多模态大语言模型
DAM-3B是什么 DAM-3B(Describe Anything 3B)是英伟达推出的一款多模态大语言模型,专门用于为图像和视频中的特定区域生成详细描述。用户可以通过点、边界框、涂鸦或掩码等方式来标识目标区域,从而得到精准且符合上下文的文本描述…...
2025年暨南大学 ACM校赛分析与题解
文章目录 C.最长公共前缀D.排列H.回文串 法不定法,在于因时因势AC不了就是还得加练! C.最长公共前缀 字典树模版题目,不了解字典树的同学,可以看我的另一篇博客 算法 之 字典树 class Node: # 和模版题目相似,但是多…...
图像处理——边缘检测
1 概述 边缘检测是图像处理和计算机视觉中的一项基本技术,用于识别图像中亮度变化剧烈的像素点,这些像素点通常对应于物体的边界。它通过检测图像中亮度或颜色变化显著的区域,提取出物体的轮廓,常用于计算机视觉、图像处理和模式识…...
认识哈希以及哈希表的模拟实现
文章目录 1.什么是哈希2.哈希函数2.1 除留余数法/除法散列法2.2 乘法散列法2.3 全域散列法 3.哈希冲突4.解决哈希冲突的方法4.1 开放定址法4.1.1 用除留余数法和线性探测模拟实现简单的哈希表 4.2 链地址法4.2.1 用除留余数法和链地址法模拟实现简单的哈希表 1.什么是哈希 概念…...
【Castle-X机器人】二、智能导览模块安装与调试
持续更新。。。。。。。。。。。。。。。 【Castle-X机器人】智能导览模块安装与调试 二、智能导览模块安装与调试2.1 智能导览模块安装2.2 智能导览模块调试2.2.1 红外测温传感器测试2.2.2 2D摄像头测试 二、智能导览模块安装与调试 2.1 智能导览模块安装 使用相应工具将智能…...
硬件须知的基本问题2
目录 1、典型电路 1. DC5V 转 DC3.3V 电路 2. 通信电路 2、STM32F103RCT6 最小系统如何设计搭建电路 1. 电源电路 2. 复位电路 3. 时钟电路 4. 下载电路 5. 单片机连接连接 3、请列举你所知道的二极管型号? 1. 整流二极管 2. 小信号二极管 3. 肖特基二极管 4. 超…...
Dify 使用 excel 或者 csv 文件创建知识库
Dify 使用 excel 或者 csv 文件创建知识库 1. 创建知识库2. 创建聊天助手3. 其他 1. 创建知识库 创建知识库,导入excel/csv文件, 文件内容, 单击 “预览块”,可以确认会生成多个键值对的块, 配置 Embedding 模型和检索…...
深入理解二叉树遍历:递归与栈的双重视角
二叉树的遍历前序遍历中序遍历后续遍历总结 二叉树的遍历 虽然用递归的方法遍历二叉树实现起来更简单,但是要想深入理解二叉树的遍历,我们还必须要掌握用栈遍历二叉树,递归其实就是利用了系统栈去遍历。特此记录一下如何用双重视角去看待二叉…...
通过gap看margin和padding在布局中的应用
在CSS布局中,控制元素之间的间距有多种方式:margin、padding,还有新晋的gap属性。虽然选择多了,但这也带来了不少头疼的问题。比如,你的自定义组件到底该不该加margin?如果加了,那在使用这个组件…...
图像畸变-径向切向畸变实时图像RTSP推流
实验环境 注意:ffmpeg进程stdin写入两张图片的时间间隔不能太长,否则mediamtx会出现对应的推流session超时退出。 实验效果 全部代码 my_util.py #进度条 import os import sys import time import shutil import logging import time from datetime i…...
2025最新Facefusion3.1.2使用Docker部署,保姆级教程,无需配置环境
Docker部署Facefusion 环境 windows10 Facefusion3.1.2 安装 拉取源代码 git clone https://github.com/facefusion/facefusion-docker.git 此处如果拉不下来,需要科学上网,不会的可以找我。 运行容器 将Dockerfile.cpu文件中的的From python:3.…...
区块链实战:Hyperledger Fabric多节点网络部署与高性能业务链码
一、联盟链架构设计与技术选型 1.1 架构设计原则 联盟链采用分层架构,包含应用层、共识层、网络层和数据层: 应用层:提供用户接口(Web/API)和智能合约交互入口共识层:采用PBFT或…...
C++学习笔记(四十)——STL之归约算法
STL 算法分类: 类别常见算法作用排序sort、stable_sort、partial_sort、nth_element等排序搜索find、find_if、count、count_if、binary_search等查找元素修改copy、replace、replace_if、swap、fill等修改容器内容删除remove、remove_if、unique等删除元素归约for…...
docker容器运维工具——ctop
概述 Github主页:https://github.com/bcicen/ctop 当服务器上运行多个容器时,迅速查看所有容器运行情况及指标将会大为提高工作效率。ctop工具可以像top命令一样,对所有容器进行总览,并实现简单的操作。 部署 下载(…...
RAG vs 微调:大模型知识更新的最优解之争
一、技术本质:知识注入的两条路径 在大模型应用落地的实践中,RAG(检索增强生成)与微调(Fine-tuning)已成为知识更新的两大核心技术路径。二者的本质差异在于是否对模型参数进行修改: 维度RAG微…...
FPGA前瞻篇-组合逻辑电路设计-多路复用器
多路选择器(MUX)简介 基本概念 多路选择器(MUX,Multiplexer)是一种多输入、单输出的组合逻辑电路。 它通过选择控制信号,在多个输入信号中选择一个连接到输出端。 可以理解为一个多路数字开关。 &…...
Day13(前缀和)——LeetCode2845.统计趣味子数组的数目
1 题目描述 给定一个下标从0开始的数组nums,以及整数modulo和k。找出并统计数组中趣味子数组的数目: 在范围[l,r]内,设cnt为满足nums[i]%modulok的索引i的数量,并且cnt%modulok。子数组是数组中的一个连续非空的元素序列。 其中一…...
WebcamJS中文文档
文章目录 WebcamJS针对Chrome 47及以上版本的重要说明浏览器支持演示示例开源协议快速入门指南配置初始化拍摄照片自定义图像大小裁剪图像翻转图像(镜像模式)冻结/预览图像设置备用SWF文件位置重置(关闭)API 参考自定义事件向服务器提交图像跟踪上传进度包含在现有表单中自…...
论文笔记(八十)π0.5: a Vision-Language-Action Model with Open-World Generalization
π0.5: a Vision-Language-Action Model with Open-World Generalization 文章概括摘要I. 引言II. 相关工作通用机器人操作策略。非机器人数据的协同训练。使用语言进行机器人推理和规划。具有开放世界泛化能力的机器人学习系统。 III. 序言IV. π 0.5 π_{0.5} π0.5 模型与…...
pymongo功能整理与基础操作类
以下是 Python 与 PyMongo 的完整功能整理,涵盖基础操作、高级功能、性能优化及常见应用场景: 1. 安装与连接 (1) 安装 PyMongo pip install pymongo(2) 连接 MongoDB from pymongo import MongoClient# 基础连接(默认本地,端口…...
硬件须知的基本问题1
目录 1. 电路表示中的电压源表示符号有哪些? 2.查找电路表示中的电流源表示符号有哪些? 3.上拉电阻和下拉电阻的作用是什么? 4.0 欧姆电阻在电路中有什么作用? 5.电容的耦合…...
LangChain 中的 Task(任务) 主要通过 生成器(Generator) 实现,而非传统的迭代器(Iterator)
LangChain 中的 Task(任务) 主要通过 生成器(Generator) 实现,而非传统的迭代器(Iterator)。以下是关键分析: 任务链的流程控制 LangChain 的 链式结构(Chains࿰…...