计算机视觉——对比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 是一个海上目标检测数据集,包含舰船的航拍图像。该数据集仅有一个类别,即 舰船。它包含各种舰船大小、密度和方向,使其成为目标检测模型的一个具有挑战性的数据集。

HRSC2016-MS:海上目标检测的基准数据集

1.1 为何引入 HRSC2016-MS?

HRSC2016-MS 之前,已经存在 HRSC2016 数据集,其中包含用于检测任务的舰船图像。然而,HRSC2016-MS 的作者引入了这个修改后的数据集,以解决原始数据集的几个关键限制:

增强多尺度表示

  • 原始 HRSC2016 数据集中的舰船尺度相对相似,未能充分表示 多尺度变化
  • HRSC2016-MS 引入了更广泛的舰船尺寸,确保在实际应用中具有更好的泛化能力。

提高数据集多样性

  • 原始 HRSC2016 数据集缺乏 舰船杂乱程度和尺度过渡的足够变化
  • HRSC2016-MS 引入了 更密集的舰船,提高了数据集在小目标检测方面的实用性。

更具挑战性的目标分布

  • 原始数据集在每张图像中的舰船方向和密度变化较少。
  • HRSC2016-MS 旨在 增加数据集的复杂性,使其成为高级目标检测模型的一个更好的基准。

HRSC2016 与 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 不兼容

HRSC2016-MS 数据集的有偏训练 - 测试划分可视化

有偏的训练 - 测试划分

  • 数据集总共包含 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]
  • 对比了在原始数据集和预处理数据集上训练后的性能,观察结果如下。
模型 - YOLOv12mAP@50mAP@75mAP@[50:95]
在原始数据集上训练74.9%61.5%54.5%
在洗牌后的数据集上训练85.2%75.1%66.3%

数据集洗牌对 YOLOv12 性能的影响

四、在 HRSC2016-MS 数据集上微调 YOLOv11

  • 采用了与 YOLOv12 相同的训练流程。
  • 对比了 YOLOv11 在原始数据集和预处理数据集上的性能。
  • 使用条形图对比了 mAP 分数,观察结果如下。
模型 - YOLOv11mAP@50mAP@75mAP@[50:95]
在原始数据集上训练75.3%61.6%55.0%
在洗牌后的数据集上训练86.2%75.8%67.0%

数据集洗牌对 YOLOv11 性能的影响

五、在 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

  1. 克隆 DarkNet 仓库
    克隆 DarkNet 仓库到本地目录。

    git clone https://github.com/AlexeyAB/darknet.git
    
  2. 编译 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 需要 明确的文本文件 指定图像的路径。

  1. train.txt → 包含用于训练的图像的绝对路径。
  2. valid.txt → 包含用于验证的图像的绝对路径。
  3. 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 还需要 三个自定义配置文件

  1. obj.names(ship.names)→ 类别名称文件
  2. obj.data(hrsc2016-ms-yolov7.data)→ 训练数据文件
  3. 自定义.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@50mAP@75mAP@[50:95]
YOLOv7 (DarkNet)85.6%71.9%61.56%
YOLOv1183.7%72.2%63.8%
YOLOv1283%71.8%63.5%

验证集上 Darknet 和 YOLO 模型的性能比较

在测试集上

模型mAP@50mAP@75mAP@[50:95]
YOLOv7 (DarkNet)88.2%75.6%65.5%
YOLOv1186.2%75.8%67.0%
YOLOv1285.2%75.1%66.3%

测试集上 Darknet 和 YOLO 模型的性能比较

七、训练和损失图的可视化

YOLOv12

YOLOv12 的训练和损失图

YOLOv11

YOLOv11 的训练和损失图

基于 Darknet 的 YOLOv7

基于 Darknet 的 YOLOv7 的损失图

八、在一些图像上的推理结果

真实值与 Darknet 和 YOLO 模型预测的舰船检测对比

所有三个模型在给定的真实值图像上表现出类似的性能。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

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

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

相关文章

‌MySQL 事务隔离级别详解

‌ 以下是 MySQL 支持的四种事务隔离级别及其特性&#xff0c;按并发安全性从低到高排列&#xff1a; ‌1. 读未提交 (Read Uncommitted)‌ ‌问题‌&#xff1a; ‌脏读 (Dirty Read)‌&#xff1a;事务可读取其他事务未提交的数据。‌不可重复读 (Non-repeatable Read)‌&am…

如何解决IDE项目启动报错 error:0308010C:digital envelope routines::unsupported 问题

如何解决IDE项目启动报错 error:0308010C:digital envelope routines::unsupported 问题 在现代软件开发过程中&#xff0c;开发人员通常使用集成开发环境&#xff08;IDE&#xff09;如IntelliJ IDEA、Visual Studio Code&#xff08;VSCode&#xff09;等进行Node.js项目开发…

2025最新Facefusion3.1.2使用Docker部署,保姆级教程,无需配置环境

Docker部署Facefusion 环境 windows10 Facefusion3.1.2 安装 拉取源代码 git clone https://github.com/facefusion/facefusion-docker.git 此处如果拉不下来&#xff0c;需要科学上网&#xff0c;不会的可以找我。 运行容器 将Dockerfile.cpu文件中的的From python:3.…

docker容器监控自动恢复

关于实现对docker容器监控以及自动恢复&#xff0c;这里介绍两种实现方案。 方案1&#xff1a; 实现思路&#xff1a; 找到&#xff08;根据正则表达式&#xff09;所有待监控的docker容器&#xff0c;此处筛选逻辑根据docker运行状态找到已停止&#xff08;Exit&#xff09;类…

HackMyVM - Chromee靶机

HackMyVM - chromee靶机https://mp.weixin.qq.com/s/hF09_24PRXpx_lmB6dzWVg

Cursor中调用本地大语言模型

引言 随着大语言模型(LLM)技术的快速发展&#xff0c;越来越多的开发者希望在本地环境中运行这些强大的AI模型&#xff0c;以获得更好的隐私保护、更低的延迟以及不依赖网络连接的使用体验。Cursor作为一款面向开发者的AI增强编辑器&#xff0c;提供了与本地大语言模型集成的功…

青少年CTF-贪吃蛇

题目描述&#xff1a; 进入赛题页面&#xff1a; 按F12&#xff0c;查看源代码&#xff0c; 可以看到是当分数大于或等于10000时&#xff0c;获得flag&#xff0c;值已经给出&#xff0c;直接引用就可以&#xff0c;check_score.php?score${score}&#xff0c;这里将${score}换…

亚马逊测评老砍单?了解过全新自养号系统吗?

以全球电商巨头亚马逊为例&#xff0c;其风控技术的进化堪称一部永不停歇的“升级史”。然而&#xff0c;令人遗憾的是&#xff0c;不少卖家和测评服务商却依旧沉浸在过去的“舒适区”&#xff0c;过度依赖指纹浏览器、luminati等传统技术手段。这些曾经行之有效的工具&#xf…

module.noParse(跳过指定文件的依赖解析)

1. 说明 module.noParse 是 Webpack 的一个配置项&#xff0c;用于跳过对指定模块的解析。通过忽略某些文件的依赖分析&#xff0c;可以提升构建速度&#xff0c;尤其适用于处理大型、独立的第三方库 2. 使用配置 webpakc.config.js const path require(path); module.exp…

什么是爬虫?——从技术原理到现实应用的全面解析 V

什么是爬虫?——从技术原理到现实应用的全面解析 V 二十一、云原生爬虫架构设计 21.1 无服务器爬虫(AWS Lambda) # lambda_function.py import boto3 import requests from bs4 import BeautifulSoups3 = boto3.client(s3)def lambda_handler(event, context):# 抓取目标…

Web渗透之系统入侵与提权维权

渗透测试步骤 信息收集 搜集一些IP地址以及对应的端口开放情况&#xff0c;看看是否有80、3306、22等等端口开放&#xff0c;以及操作系统和版本号&#xff0c;同时也要扫描可能存在的漏洞 漏洞利用 建立据点 漏洞利用成功后&#xff0c;通常会在目标机上获得一个webshell&…

【数论分块】数论分块算法模板及真题

1.数论分块的含义 数论分块算法&#xff0c;就是枚举出使得取整函数发生变化的地方。 例如&#xff0c;对表达式 ⌊ n i ⌋ \lfloor \frac{n}{i} \rfloor ⌊in​⌋使用数论分块算法&#xff0c;就可以在 O ( n ) O(\sqrt n) O(n ​)的时间复杂度下枚举所有满足 ⌊ n i − 1 ⌋…

SpringBoot 常用注解通俗解释

SpringBoot 常用注解通俗解释 一、启动类相关 1. SpringBootApplication • 作用&#xff1a;这是SpringBoot项目的"总开关"&#xff0c;放在主类上 • 通俗理解&#xff1a;相当于对电脑说&#xff1a;"开机&#xff01;我要用SpringBoot了&#xff01;…

栈应用:括号匹配

1&#xff1a;普通字符串括号匹配 #include <iostream> #include <stack> #include <string> using namespace std; bool mat(char,char); int if_match(string); int main(){string a;cin>>a;cout<<if_match(a)<<endl;return 0; } bool m…

某东h5st_5.1(补环境)

JS逆向实战——某东h5st_5.1&#xff08;补环境&#xff09; 声明网站流程分析结果展示总结 声明 本文章中所有内容仅供学习交流&#xff0c;抓包内容、敏感网址、数据接口均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无…

新增Webhook通知功能,文档目录树展示性能优化,zyplayer-doc 2.5.1 发布啦!

zyplayer-doc是一款适合企业和个人使用的WIKI知识库管理工具&#xff0c;支持在线编辑富文本、Markdown、表格、Office文档、API接口、思维导图、Drawio以及任意的文本文件&#xff0c;支持基于知识库的AI问答&#xff0c;专为私有化部署而设计&#xff0c;最大程度上保证企业或…

macOS安全隐私最佳实践分析

1. 引言 随着数字世界的不断扩展&#xff0c;个人和组织面临的安全与隐私威胁也日益增加。作为专业的安全合规与隐私保护研究团队&#xff0c;Kaamel 对 macOS 系统的安全隐私现状进行了全面分析&#xff0c;并提出了一系列最佳实践建议&#xff0c;旨在帮助用户更好地保护自己…

架构设计之异地多活与单元化(Set化)

公司的业务到达一定规模后,往往会考虑做多数据中心。一方面是面临业务增长带来的挑战,单个数据中心变得难以支撑;另一方面出于对业务容灾的考量,也可能在多个城市建立数据中心达到容灾目的。单元化(Set化)是作为异地多活的一个解决方案。 一、什么是异地多活 异地多活是…

Kettle学习

一、Kettle 简介 Kettle(现称为 Pentaho Data Integration)是一款开源ETL工具,支持从多种数据源抽取、转换和加载数据,广泛应用于数据仓库构建、数据迁移和清洗。其核心优势包括: 可视化操作:通过拖拽组件设计数据处理流程(转换和作业)。多数据源支持:数据库(MySQL/…

苹果计划2026年底前实现美版iPhone“印度造”,以减轻关税及地缘政治风险

基于 6 个来源 据多家媒体报道&#xff0c;苹果公司计划在2026年底前&#xff0c;实现在印度组装销往美国的大部分或全部iPhone手机&#xff0c;以减轻关税和地缘政治紧张局势带来的风险。这一目标意味着苹果需将印度的iPhone产量增加一倍以上&#xff0c;凸显其供应链多元化战…