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

【深度学习】【目标检测】【Ultralytics-YOLO系列】YOLOV3源码整体结构解析

【深度学习】【目标检测】【Ultralytics-YOLO系列】YOLOV3源码整体结构解析

文章目录

  • 【深度学习】【目标检测】【Ultralytics-YOLO系列】YOLOV3源码整体结构解析
  • 前言
  • 代码结构整体
  • data文件结构
    • 模型训练超参数配置文件解析
    • 数据集配置文件解析
  • models文件结构
  • utils文件结构
  • runs文件结构
  • 总结


前言

Ultralytics YOLO 是一系列基于 YOLO(You Only Look Once)算法的检测、分割、分类、跟踪和姿势估计模型,此前博主已经搭建完成绍Ultralytics–YOLOv人脸检测项目【Windows11下YOLOV3人脸检测】,本博文解析Ultralytics–YOLOV3源码的整体结构。


代码结构整体

核心结构部分如下图所示:

本博文不对具体的代码进行讲解,只对主要的yaml配置文件进行解析。


data文件结构

模型训练超参数配置文件解析

hyp.scratch.yaml内容解析:

################## 1、学习率相关参数 ##################
lr0: 0.01   # 学习率的初始值:通常使用SGD时为0.01,使用Adam时为0.001.
lrf: 0.1    # 学习率调度器OneCycleLR中的最终学习率(lr0 * lrf):在一个训练周期内逐步增加然后减少学习率来加速模型的收敛,有助于模型跳出局部最优解.
momentum: 0.937 # 学习率动量:记录之前梯度(方向和大小)的加权平均值并将其用于参数更新以决定当前梯度的大小和方向
weight_decay: 0.0005  # optimizer权重衰减系数5e-4:有效地限制模型复杂度,减少过拟合的风险.
warmup_epochs: 3.0    # 预热阶段:先用较小的学习率在训练初始时预热,避免出现不稳定的梯度或损失的情况.
warmup_momentum: 0.8  # 预热学习率动量
warmup_bias_lr: 0.1   # 预热学习率
################## 学习率相关参数  ####################################### 2、损失函数相关参数  ###################
box: 0.05  # 预测边界框损失的系数(位置和尺寸)
cls: 0.5   # 分类损失的系数
cls_pw: 1.0 # 分类损失的二元交叉熵损失中正样本的权重
obj: 1.0      # 置信度损失权重
obj_pw: 1.0   # 置信度损失的二元交叉熵损失中正样本的权重
iou_t: 0.20     # Iou阈值:当预测框和真实框之间的IoU大于阈值时为检测正确,否则为检测错误.
anchor_t: 4.0   # anchor的阈值:真实框与预测框的尺寸的比例在阈值范围内为检测正确,否则为检测错误.
# anchors: 3  # anchors per output layer (0 to ignore)
fl_gamma: 0.0  # focal loss gamma (efficientDet default gamma=1.5)  通过调节因子降低容易分类样本的权重,gamma值越大模型更加关注难分类的样本.
################### 损失函数相关参数 ########################################### 3、数据增强相关参数 ####################
# hsv_h、hsv_s、hsv_v表示图像HSV颜色空间的色调、饱和度、明度的增强参数,取值范围都是[0, 1],值越大强度越大.
hsv_h: 0.015  # 色调
hsv_s: 0.7    # 饱和度
hsv_v: 0.4    # 明度
# degrees、translate、scale、shear表示图像旋转、平移、缩放、扭曲的增强参数
degrees: 0.0    # 旋转角度
translate: 0.1  # 水平和垂直随机平移,取值范围都是[0,1],这里允许的最大水平和垂直平移比例分别为原图宽高的0.1
scale: 0.5      # 随机缩放,图像会被随机缩放到原图大小的0.5到1之间。
shear: 0.0      # 剪切:沿着某个方向对图像进行倾斜或拉伸
# 模拟从不同的角度拍摄图像:将图像中的点映射到一个新的位置,产生类似倾斜、拉伸或压缩的效果,取值范围都是[0, 0.001].
perspective: 0.0 # 透视变换参数
# flipud、fliplr表示图像上下翻转、左右翻转的增强概率,取值范围都是[0, 1]。
flipud: 0.0   # 上下翻转
fliplr: 0.5   # 左右翻转
# mosaic、mixup、copy_paste表示选择不同方式增强训练集多样性的概率,取值范围都是[0, 1].
mosaic: 1.0  # 将四张图片拼接成一张,增强了模型对多物体的感知能力和位置估计能力
mixup: 0.0   # 对两张图片进行线性混合,增强了模型对物体形状和纹理的学习能力
copy_paste: 0.0   # 将一张图片的一部分复制到另一张图片上,增强了模型对物体的位置和尺度变化的鲁棒性。
#################### 数据增强相关参数 ######################

其他的模型训练超参数配置文件只是一些具体超参数数值上不同。

数据集配置文件解析

coco.yaml内容解析:

path: ../datasets/coco128       # 数据集源路径
train: images/train2017 # path下训练集地址,
val: images/train2017   # path下验证集地址
test:   # path下测试集地址nc: 80  # 检测的类别数量
names: ['person', 'bicycle', 'car', 'motorcycle', 'airplane', 'bus', 'train', 'truck', 'boat', 'traffic light','fire hydrant', 'stop sign', 'parking meter', 'bench', 'bird', 'cat', 'dog', 'horse', 'sheep', 'cow','elephant', 'bear', 'zebra', 'giraffe', 'backpack', 'umbrella', 'handbag', 'tie', 'suitcase', 'frisbee','skis', 'snowboard', 'sports ball', 'kite', 'baseball bat', 'baseball glove', 'skateboard', 'surfboard','tennis racket', 'bottle', 'wine glass', 'cup', 'fork', 'knife', 'spoon', 'bowl', 'banana', 'apple','sandwich', 'orange', 'broccoli', 'carrot', 'hot dog', 'pizza', 'donut', 'cake', 'chair', 'couch','potted plant', 'bed', 'dining table', 'toilet', 'tv', 'laptop', 'mouse', 'remote', 'keyboard', 'cell phone','microwave', 'oven', 'toaster', 'sink', 'refrigerator', 'book', 'clock', 'vase', 'scissors', 'teddy bear','hair drier', 'toothbrush']     # 检测的类别名,避免用中文# 数据集下载URL(可选)
download: https://ultralytics.com/assets/coco128.zip

coco128.yaml内容解释: 调用了utils中的函数,采用脚本方式下载数据集。

path: ../datasets/coco  # 数据集源路径
# txt列出了训练集/验证集/测试集中的所有图像文件名或相对路径
train: train2017.txt  # path下训练集地址
val: val2017.txt  # path下验证集地址
test: test-dev2017.txt  # path下测试集地址nc: 80  # 检测的类别数量
names: ['person', 'bicycle', 'car', 'motorcycle', 'airplane', 'bus', 'train', 'truck', 'boat', 'traffic light','fire hydrant', 'stop sign', 'parking meter', 'bench', 'bird', 'cat', 'dog', 'horse', 'sheep', 'cow','elephant', 'bear', 'zebra', 'giraffe', 'backpack', 'umbrella', 'handbag', 'tie', 'suitcase', 'frisbee','skis', 'snowboard', 'sports ball', 'kite', 'baseball bat', 'baseball glove', 'skateboard', 'surfboard','tennis racket', 'bottle', 'wine glass', 'cup', 'fork', 'knife', 'spoon', 'bowl', 'banana', 'apple','sandwich', 'orange', 'broccoli', 'carrot', 'hot dog', 'pizza', 'donut', 'cake', 'chair', 'couch','potted plant', 'bed', 'dining table', 'toilet', 'tv', 'laptop', 'mouse', 'remote', 'keyboard', 'cell phone','microwave', 'oven', 'toaster', 'sink', 'refrigerator', 'book', 'clock', 'vase', 'scissors', 'teddy bear','hair drier', 'toothbrush']  # 检测的类别名,避免用中文# 数据集下载脚本(可选)
download: |# 导入模块utils下的函数from utils.general import download, Path# 下载标签segments = False  # 决定下载的标签类型(分割标签或者检测标签)dir = Path(yaml['path'])  # 指定了数据集的路径# 构建标签下载URLurl = 'https://github.com/ultralytics/yolov5/releases/download/v1.0/'     # 基础URLurls = [url + ('coco2017labels-segments.zip' if segments else 'coco2017labels.zip')]  # 下载指定标签的URLdownload(urls, dir=dir.parent)  # 下载标签文件# 下载数据文件urls = ['http://images.cocodataset.org/zips/train2017.zip',  # 19G, 118k images'http://images.cocodataset.org/zips/val2017.zip',  # 1G, 5k images'http://images.cocodataset.org/zips/test2017.zip']  # 7G, 41k images (optional)# 使用3个线程并行下载提高下载速度download(urls, dir=dir / 'images', threads=3)

voc.yaml内容解释: 调用了utils中的函数,采用脚本方式下载数据集。

path: ../datasets/VOC  # 数据集源路径
train:  # path下训练集地址- images/train2012  # YAML语法格式中 - 表示一个列表项- images/train2007- images/val2012- images/val2007
val:  # path下验证集地址- images/test2007
test: # path下测试集地址- images/test2007nc: 20  # 检测的类别数量
names: ['aeroplane', 'bicycle', 'bird', 'boat', 'bottle', 'bus', 'car', 'cat', 'chair', 'cow', 'diningtable', 'dog','horse', 'motorbike', 'person', 'pottedplant', 'sheep', 'sofa', 'train', 'tvmonitor']  # 检测的类别名,避免用中文# 数据集下载脚本(可选)
download: |# 导入模块import xml.etree.ElementTree as ETfrom tqdm import tqdm# 导入utils下的函数from utils.general import download, Path# 将PASCAL VOC的XML标注文件转换为YOLO格式的标注文件def convert_label(path, lb_path, year, image_id):# 将PASCAL VOC的边界框坐标(xmin, xmax, ymin, ymax)转换为YOLO格式的归一化的中心点坐标和宽高def convert_box(size, box):dw, dh = 1. / size[0], 1. / size[1]x, y, w, h = (box[0] + box[1]) / 2.0 - 1, (box[2] + box[3]) / 2.0 - 1, box[1] - box[0], box[3] - box[2]return x * dw, y * dh, w * dw, h * dh# 读取XML文件in_file = open(path / f'VOC{year}/Annotations/{image_id}.xml')#  保存YOLO格式的.txt文件out_file = open(lb_path, 'w')# 并解析XML文件内容tree = ET.parse(in_file)root = tree.getroot()# 获取图像的尺寸size = root.find('size')w = int(size.find('width').text)h = int(size.find('height').text)# 遍历XML文件中的每个目标对象for obj in root.iter('object'):# 获取目标对象的类别名称cls = obj.find('name').text# 类别属于数据集配置文件中的内容中且不是困难样本,则进行转换if cls in yaml['names'] and not int(obj.find('difficult').text) == 1:# 获取目标对象的边界框信息xmlbox = obj.find('bndbox')# 转化为YOLO格式的归一化的中心点坐标和宽高bb = convert_box((w, h), [float(xmlbox.find(x).text) for x in ('xmin', 'xmax', 'ymin', 'ymax')])# 类别序号cls_id = yaml['names'].index(cls)# 保存数据out_file.write(" ".join([str(a) for a in (cls_id, *bb)]) + '\n')# 下载数据集# 数据集存储的根目录dir = Path(yaml['path'])# : 需要下载的文件 URL 列表url = 'https://github.com/ultralytics/yolov5/releases/download/v1.0/'urls = [url + 'VOCtrainval_06-Nov-2007.zip',  # 446MB, 5012 imagesurl + 'VOCtest_06-Nov-2007.zip',  # 438MB, 4953 imagesurl + 'VOCtrainval_11-May-2012.zip']  # 1.95GB, 17126 images# 下载urls指定的数据集download(urls, dir=dir / 'images', delete=False)# 转换数据集path = dir / f'images/VOCdevkit'# 遍历年份和数据集类型for year, image_set in ('2012', 'train'), ('2012', 'val'), ('2007', 'train'), ('2007', 'val'), ('2007', 'test'):# 创建对应的图像和标签文件夹imgs_path = dir / 'images' / f'{image_set}{year}'lbs_path = dir / 'labels' / f'{image_set}{year}'imgs_path.mkdir(exist_ok=True, parents=True)lbs_path.mkdir(exist_ok=True, parents=True)# 读取每组数据集的图像ID列表image_ids = open(path / f'VOC{year}/ImageSets/Main/{image_set}.txt').read().strip().split()# 遍历所有图片for id in tqdm(image_ids, desc=f'{image_set}{year}'):# 移动图像文件到目标目录f = path / f'VOC{year}/JPEGImages/{id}.jpg'  # 旧图像路径lb_path = (lbs_path / f.name).with_suffix('.txt')  # 新图像路径f.rename(imgs_path / f.name)  # 移动图像convert_label(path, lb_path, year, id)  # 生成YOLO格式的标签文件

其他的数据集配置文件基本结构都与这三种相似,除了下载数据集脚本略微不同。


models文件结构


网络模型配置文件yolov3.yaml内容解析:

nc: 80   # 模型识别的类别数量
# 通过以下两个参数就可以实现不同复杂度的模型设计(原本Joseph Redmon的YOLOV3版本没有以下俩个参数的)
depth_multiple: 1.0  # 模型深度系数:卷积模块的缩放因子,原始模型的所有模块乘以缩放因子,得到当前模型的模块数
width_multiple: 1.0  # 模型通道系数:卷积层通道的缩放因子,backbone和head中所有卷积层的通道数乘以缩放因子得到,得到当前模型的所有卷积层的新通道数# 初始化了9个anchors,在3个检测头中中使用,每个检测头对应的特征图中,每个网格单元都有3个anchor进行预测
anchors:  #  以下3组anchors不能保证适用于所有的数据集- [10,13, 16,30, 33,23]  # P3/8- [30,61, 62,45, 59,119]  # P4/16- [116,90, 156,198, 373,326]  # P5/32# darknet53 主干网络
backbone:# [from, number, module, args]# from表示当前模块的输入来自那一层的输出,-1表示来自上一层的输出.# number表示本模块的理论重复次数,实际的重复次数:number×depth_multiple.# module表示模块名,通过模块名在common.py中寻找相应的类完成模块化的搭建网络.# args表示模块搭建所需参数的列表,包括channel,kernel_size,stride,padding,bias等.[[-1, 1, Conv, [32, 3, 1]],  # 0[-1, 1, Conv, [64, 3, 2]],  # 1-P1/2[-1, 1, Bottleneck, [64]],[-1, 1, Conv, [128, 3, 2]],  # 3-P2/4[-1, 2, Bottleneck, [128]],[-1, 1, Conv, [256, 3, 2]],  # 5-P3/8[-1, 8, Bottleneck, [256]],[-1, 1, Conv, [512, 3, 2]],  # 7-P4/16[-1, 8, Bottleneck, [512]],[-1, 1, Conv, [1024, 3, 2]],  # 9-P5/32[-1, 4, Bottleneck, [1024]],  # 10]# 检测头(包含了neck模块)
head:# [from, number, module, args] 同理[[-1, 1, Bottleneck, [1024, False]],[-1, 1, Conv, [512, [1, 1]]],[-1, 1, Conv, [1024, 3, 1]],[-1, 1, Conv, [512, 1, 1]],[-1, 1, Conv, [1024, 3, 1]],  # 15 (P5/32-large)[-2, 1, Conv, [256, 1, 1]],[-1, 1, nn.Upsample, [None, 2, 'nearest']],[[-1, 8], 1, Concat, [1]],  # cat backbone P4[-1, 1, Bottleneck, [512, False]],[-1, 1, Bottleneck, [512, False]],[-1, 1, Conv, [256, 1, 1]],[-1, 1, Conv, [512, 3, 1]],  # 22 (P4/16-medium)[-2, 1, Conv, [128, 1, 1]],[-1, 1, nn.Upsample, [None, 2, 'nearest']],[[-1, 6], 1, Concat, [1]],  # cat backbone P3[-1, 1, Bottleneck, [256, False]],[-1, 2, Bottleneck, [256, False]],  # 27 (P3/8-small)[[27, 22, 15], 1, Detect, [nc, anchors]],   # Detect(P3, P4, P5)]

模型配置文件与模型结构图的对应关系如下图所示:

这里注意一个点,Bottleneck是2个卷积层组成:1×1卷积层和3×3卷积层,所以在head配置部分与模型结构图的对应有点差异,即模型结构图展现了1×1卷积层和3×3卷积层,但是在head配置部分用Bottleneck代替了。

其他网络模型配置文件基本与yolov3.yaml相似。


utils文件结构


功能性代码部分,在使用到这部分代码时候再详细讲解内容。


runs文件结构


执行训练、验证和推理三个不同阶段都会得出相应的输出结果,具体输出的含义在后续不同阶段内容时候详细讲解。


总结

尽可能简单、详细的介绍了YOLOV3源码整体结构解析。后续会根据自己学到的知识结合个人理解讲解YOLOV3的每个阶段的详细代码。

相关文章:

【深度学习】【目标检测】【Ultralytics-YOLO系列】YOLOV3源码整体结构解析

【深度学习】【目标检测】【Ultralytics-YOLO系列】YOLOV3源码整体结构解析 文章目录 【深度学习】【目标检测】【Ultralytics-YOLO系列】YOLOV3源码整体结构解析前言代码结构整体data文件结构模型训练超参数配置文件解析数据集配置文件解析 models文件结构utils文件结构runs文…...

R语言:气象水文领域的数据分析与绘图利器

R 语言是一门由统计学家开发的用于统计计算和作图的语言(a Statistic Language developed for Statistic by Statistician),由 S 语言发展而来,以统计分析功能见长。R 软件是一款集成 了数据操作、统计和可视化功能的优秀的开源软…...

R语言空间水文气象数据分析:从插值到动态可视化

一、R简介与R 在气象水文中的应用 R语言与 R软件简介R 在各行业的应用概览R 与其他语言的比较及其在数据分析与作图上的优势 R 在地学中的应用以及R 在气象水文中的应用 二、出发之前——用什么来同时记录我们的数据、代码及结果——Rmd与 knitr介绍 介绍一种方便的理念——…...

在Unity中实现《幽灵行者》风格的跑酷动作

基础设置 角色控制器选择: 使用Character Controller组件或Rigidbody Capsule Collider 推荐使用Character Controller以获得更精确的运动控制 输入系统: 使用Unity的新输入系统(Input System Package)处理玩家输入 滑铲实现 public class Slide…...

C# Winform 入门(14)之如何使用线程池

什么是线程? 首先我们要弄明白什么是线程,线程和线程池有啥区别? C# 多线程应用(同步异步)_c# 异步线程-CSDN博客 补充:ManualResetEvent 的使用 ManualResetEvent 是一种线程同步机制,用于控制一个或者多个线程的执…...

I have something to say about Vue Node.js

关于Vue Node.js,我真的说了很多次了,让我难以理解为啥这么粗糙的东西能流行一起。真疯狂的世界。 vue让感觉就像玩猫德一样的,如此的疯狂,天哪。睡觉了 Node.js v13 window7_nodejsv13-CSDN博客...

OpenCV 图形API(17)计算输入矩阵 src 中每个元素的平方根函数sqrt()

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 描述 计算数组元素的平方根。 cv::gapi::sqrt 函数计算每个输入数组元素的平方根。对于多通道数组,每个通道会独立处理。其精度大约与内置的 …...

题目练习之set的奇妙使用

♥♥♥~~~~~~欢迎光临知星小度博客空间~~~~~~♥♥♥ ♥♥♥零星地变得优秀~也能拼凑出星河~♥♥♥ ♥♥♥我们一起努力成为更好的自己~♥♥♥ ♥♥♥如果这一篇博客对你有帮助~别忘了点赞分享哦~♥♥♥ ♥♥♥如果有什么问题可以评论区留言或者私信我哦~♥♥♥ ✨✨✨✨✨✨ 个…...

基于人工智能的医学影像关联分析:利用潜在空间几何混杂因素校正法|文献速递-深度学习医疗AI最新文献

Title 题目 AI-based association analysis for medical imaging using latent-spacegeometric confounder correction 基于人工智能的医学影像关联分析:利用潜在空间几何混杂因素校正法 01 文献速递介绍 人工智能(AI)已成为各个领域的…...

进程的创建态、运行状态和阻塞状态

今天与大家来聊聊进程的三种状态: 1. 创建态 当需要创建一个新进程时,系统为该进程分配一个进程控制块 PCB,并为该进程分配内存空间,且装入该进程对应的程序和有关的数据,这时,一个新进程就产生了。 2. …...

科普:GRU、LSTM及RNN

GRU(门控循环单元)、LSTM(长短期记忆网络)、RNN(循环神经网络)均为处理序列数据的神经网络模型,它们之间存在着紧密的联系与明显的差异。 我们重点看一下GRU,并比较它们。 一、GRU算…...

java+postgresql+swagger-多表关联insert操作(七)

入参为json,然后根据需要对多张表进行操作: 入参格式: [{"custstoreName":"swagger-测试经销商01","customerName":"swagger-测试客户01","propertyNo":"swaggertest01",&quo…...

如何将/dev/ubuntu-vg/lv-data的空间扩展到/dev/ubuntu-vg/ubuntu-lv的空间上

要将 /dev/ubuntu-vg/lv-data 的空间扩展到 /dev/ubuntu-vg/ubuntu-lv 上,实际上是将 lv-data 的空间释放出来,并将其分配给 ubuntu-lv。以下是详细的步骤和操作说明: 已知信息 你有两个逻辑卷: /dev/ubuntu-vg/lv-data/dev/ubun…...

No module named ‘keras.engine‘

目录 报错代码: tensorflow-gpu安装 2024.01.05 keras和tf版本对应关系: 报错代码: try:from keras.src.engine import base_layer, data_adapterfrom keras.src.engine.training import _disallow_inside_tf_function, _get_verbosity, …...

python应用之使用pdfplumber 解析pdf文件内容

目录标题 1. 通过 pdfplumber.open() 解析复杂PDF:1-2. 报错:V2 : v3 使用tk 库运行环境准备完整代码保存运行测试步骤方式二:命令行方式(适用于自动化) 测试用例示例常见问题排查1. 无文件选择对话框弹出&…...

【学Rust写CAD】36 颜色插值函数(alpha256.rs补充方法)

源码 pub fn alpha_lerp(self,src: Argb, dst: Argb, clip: u32) -> Argb {self.alpha_mul_256(clip).lerp(src, dst)}这个函数 alpha_lerp 是一个颜色插值(线性插值,lerp)函数,它结合了透明度混合(alpha_mul_256&…...

[GN] 通讯协议 - Uart

系列文章目录 sigrokdecode 模块学习指南 — 准备阶段 文章目录 系列文章目录前言通讯协议Uart通讯协议什么是UartUART通信协议 其他协议后续待更 前言 在阅读libsigrokdecode源码之前,先学习通讯协议。so hard!! 通讯协议 Uart通讯协议 …...

C# 状态模式深度解析:构建灵活的状态驱动系统

一、状态模式概述 状态模式(State Pattern)是一种行为型设计模式,它允许对象在其内部状态改变时改变其行为,使对象看起来像是修改了它的类。这种模式将特定状态相关的行为局部化,并且将不同状态的行为分割开来。 状态…...

MySQL学习笔记四

第六章过滤数据 6.1使用WHERE子句 输入: SELECT job_id, job_title FROM jobs WHERE min_salary4200; 输出: 说明:在需要特定数据时需要根据条件对数据库中的数据进行过滤,即指定搜索条件(过滤条件)&a…...

Node环境安装

1.下载安装 作为开发使用,追求长期运行的Node环境,建议选择LTS版本(长期支持稳定版),本地测试可以选择最新版本。首先,访问Node.js官网下载安装程序,好在官网默认就有下载链接: 直接点击下载即可&#xff…...

浏览器自动化操作AI工具-browser-use

一、项目概述 Browser-Use 是一个将大型语言模型(LLM)与浏览器自动化结合的开源工具,旨在通过AI代理实现智能化的网页交互操作。其核心目标是为开发者提供一种无需编写复杂脚本即可完成网页自动化任务的解决方案,支持从数据抓取到…...

极氪汽车云原生架构落地实践

云原生架构落地实践的背景 随着极氪数字业务的飞速发展,背后的 IT 技术也在不断更新迭代。极氪极为重视客户对服务的体验,并将系统稳定性、业务功能的迭代效率、问题的快速定位和解决视为构建核心竞争力的基石。 为快速响应用户的需求,例如…...

[ctfshow web入门] web16

信息收集 提示:对于测试用的探针,使用完毕后要及时删除,可能会造成信息泄露 试试url/phpinfo.php url/phpsysinfo.php url/tz.php tz.php能用 点击phpinfo,查看phpinfo信息,搜索flag,发现flag被保存为变量…...

沧州铁狮子

又名“镇海吼”,是中国现存年代最久、形体最大的铸铁狮子,具有深厚的历史文化底蕴和独特的艺术价值。以下是关于沧州铁狮子的详细介绍: 历史背景 • 铸造年代:沧州铁狮子铸造于后周广顺三年(953年)&#…...

【Android Sdk】uiautomatorviewer.bats闪退问题如何解决?

目录 一、uiautomatorviewer.bats闪退 1. 报错场景 2. 问题原因 3. 解决方法 前言 具体操作 一、uiautomatorviewer.bats闪退 1. 报错场景 SDK的tools文件夹中uiautomatorviewer.bat双击闪退不能打开,直接双击uiautomatorviewer.bat闪退。 双击打不开uiaut…...

Redis7——进阶篇(八)

前言:此篇文章系本人学习过程中记录下来的笔记,里面难免会有不少欠缺的地方,诚心期待大家多多给予指教。 基础篇: Redis(一)Redis(二)Redis(三)Redis&#x…...

蓝桥杯 封闭图形个数 刷题笔记

分析 写一个node结构 定义两个数一个存数值 一个存图形个数 分解每个输入的数 的每一位 为每个输入的数赋值一个封闭图形个数的值作为判断依据 重写 cmp函数作为 sort的判断依据 #include<iostream> #include<bits/stdc.h> using namespace std; const int N…...

AI大模型底层技术——结合 Prompt Engineering 的 LoRA

目录 1. 结合 Prompt Engineering 的 LoRA&#xff1f; (1) 定义 (2) 核心思想 2. 核心功能 3. 对比传统通用微调 4. 技术要素 (1) Prompt Engineering (2) LoRA 微调 (3) Prompt & LoRA 协同优化 5. 难点及解决 6. 技术路径 7. 具体技术实现 8. 应用场景 9. …...

7-Zip如何创建分卷压缩文件,进行分批压缩?

相信很多小伙伴在传输文件时会选择先压缩成7-Zip等压缩包后再传输&#xff0c;但如果压缩的文件过大大&#xff0c;传输速度就会很慢&#xff0c;或者上传压缩文件到云盘时也会受到文件大小的限制。 要解决以上问题&#xff0c;我们可以 把文件压缩成多个标准的压缩包&#xf…...

【蓝桥杯省赛】 02 包子凑数

题目描述 小明想知道包子铺用给定的蒸笼规格能凑出多少种无法组成的包子数目。若无法组成的数目无限&#xff0c;输出 INF。 输入格式 第一行为整数 N N N&#xff08;蒸笼种数&#xff09;接下来 N N N 行每行一个整数 A i A_i Ai​&#xff08;每种蒸笼的包子数&#x…...

人工智能通识速览(Part3. 强化学习)

三、强化学习 1. 基本概念 强化学习是机器学习中的一个重要领域&#xff0c;它涉及智能体&#xff08;agent&#xff09;如何在环境中采取一系列行动&#xff0c;以最大化累积奖励。以下是关于强化学习的详细介绍&#xff1a; 智能体&#xff1a;是一个能够感知环境并采取行动…...

深度解析LinkedList工作原理

引言 在 Java 编程中&#xff0c;集合框架是处理数据存储和操作的强大工具。LinkedList 作为其中的重要成员&#xff0c;为我们提供了一种灵活的列表实现方式。与 ArrayList 基于数组的实现不同&#xff0c;LinkedList 采用链表结构&#xff0c;这使得它在某些操作上具有独特的…...

excel的逻辑类型函数(主要包括if、and、or、not、xor、iserror、iferror、true、false、ifs、ifna、switch)

目录 1. IF 函数2. AND 函数3. OR 函数4. NOT 函数5. XOR 函数6. ISERROR 函数7. IFERROR 函数8. TRUE 与 FALSE9. IFS 函数10. IFNA 函数11. SWITCH 函数 1. IF 函数 功能&#xff1a; 根据指定条件判断结果&#xff0c;如果条件为 TRUE&#xff0c;则返回一个值&#xff1b;…...

数据驱动金融韧性升级,开启数据交换“新范式”:构建“实时、国产化强适配”的数据交换与共享平台

在金融行业&#xff0c;数据不只是“资产”&#xff0c;更是贯穿风控、合规、营销与运营的核心“生命线”。而在数字化加速与信创战略并行推进的当下&#xff0c;金融行业对于“实时数据流通”的需求从未如此迫切。 面对业务复杂性提升、国产化替代加速&#xff0c;以及监管科…...

cpp自学 day20(文件操作)

基本概念 程序运行时产生的数据都属于临时数据&#xff0c;程序一旦运行结束都会被释放 通过文件可以将数据持久化 C中对文件操作需要包含头文件 <fstream> 文件类型分为两种&#xff1a; 文本文件 - 文件以文本的ASCII码形式存储在计算机中二进制文件 - 文件以文本的…...

Qt饼状图在图例上追踪鼠标落点

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、饼状图的关键接口二、关键代码1.鼠标移动事件2.核心判断逻辑 总结 前言 最近做了一个项目&#xff0c;需要当鼠标在饼状图上移动的时候展示Slice的内容&am…...

ZKmall开源商城服务端验证:Jakarta Validation 详解

ZKmall开源商城基于Spring Boot 3构建&#xff0c;其服务端数据验证采用Jakarta Validation API​&#xff08;原JSR 380规范&#xff09;&#xff0c;通过声明式注解与自定义扩展机制实现高效、灵活的数据校验体系。以下从技术实现、核心能力、场景优化三个维度展开解析&#…...

操作系统概述(3)

批处理系统 1.单道批处理系统 单道批处理系统是成批地处理作用&#xff0c;并且始终只有一道作业在内存中的系统。优点&#xff1a;提高系统资源的利用率和系统吞吐量。缺点&#xff1a;系统中的资源得不到充分利用。 2.多道批处理系统 引入多道程序设计技术&#xff0c;是…...

深入理解 Object.entries():基础用法与 Object.keys() 的核心区别

深入理解 Object.entries()&#xff1a;基础用法与 Object.keys() 的核心区别 一、Object.entries() 是什么&#xff1f; Object.entries() 是 JavaScript 中的一个内置方法&#xff0c;用于将对象的 ‌可枚举属性‌&#xff08;自身的、非继承的&#xff09;转换为一个数组。…...

GitHub 趋势日报 (2025年04月06日)

GitHub 趋势日报 (2025年04月06日) 本日报由 TrendForge 系统生成 https://trendforge.devlive.org/ &#x1f4c8; 今日整体趋势 Top 10 排名项目名称项目描述今日获星语言1microsoft/markitdownPython tool for converting files and office documents to Markdown.⭐ 548Py…...

Visual Studio 中使用 Clang 作为 C/C++ 编译器时,设置优化选项方法

在 Visual Studio 中使用 Clang 作为 C/C 编译器时&#xff0c;可以通过以下方法设置优化选项&#xff1a; 方法 1&#xff1a;通过项目属性设置&#xff08;推荐&#xff09; 右键项目 → 属性 配置属性 → C/C → 优化 优化&#xff1a;选择优化级别 /O0 - 禁用优化&#x…...

现场测试的特点与测试设备的基本要求

在各类测试场景中&#xff0c;现场测试有着不可替代的作用。不过&#xff0c;它也面临着诸多难题&#xff0c;对测试设备也有着特殊要求。今天&#xff0c;咱们就深入探讨一下现场测试的特点与测试设备的基本要求。 现场测试的特点 场地电磁环境噪声问题 建议环境噪声低于…...

构建一个最简单的UDP服务器和客户端并逐行解析

目录 1.服务器 &#xff08;1&#xff09;基本概念 &#xff08;2&#xff09;代码实现 3.逐行解析 1&#xff09; 2&#xff09; 3&#xff09; 4&#xff09; 5&#xff09; 6&#xff09; 7&#xff09; 8&#xff09; 1. response.getBytes(): 2.response.get…...

LeetCode 1638 统计只差一个字符的子串

标题&#xff1a;LeetCode 算法题 - 统计只差一个字符的子串数目 在算法学习的过程中&#xff0c;我们经常会遇到一些有趣的字符串问题。今天就来探讨一道这样的题目&#xff1a;给定两个字符串 s 和 t &#xff0c;找出 s 中的非空子串的数目&#xff0c;这些子串满足替换一个…...

DAY 39 leetcode 18--哈希表.四数之和

题号18 给你一个由 n 个整数组成的数组 nums &#xff0c;和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] &#xff08;若两个四元组元素一一对应&#xff0c;则认为两个四元组重复&#xff09;&#xff1a; 和…...

关于lombok的异常快速解决办法

前言&#xff1a; 通过实践而发现真理&#xff0c;又通过实践而证实真理和发展真理。从感性认识而能动地发展到理性认识&#xff0c;又从理性认识而能动地指导革命实践&#xff0c;改造主观世界和客观世界。实践、认识、再实践、再认识&#xff0c;这种形式&#xff0c;循环往…...

Android SELinux权限使用

Android SELinux权限使用 一、SELinux开关 adb在线修改seLinux(也可以改配置文件彻底关闭) $ getenforce; //获取当前seLinux状态,Enforcing(表示已打开),Permissive(表示已关闭) $ setenforce 1; //打开seLinux $ setenforce 0; //关闭seLinux二、命令查看sel…...

JavaWeb注解的原理

WebServlet("/mayikt") 是 Java Servlet 3.0 及以上版本中引入的注解&#xff0c;用于简化 Servlet 的配置。其原理和与 Servlet 映射关系的知识点如下&#xff1a; 1. 注解的作用与原理 核心功能&#xff1a; WebServlet 注解的作用是将当前类声明为一个 Servlet&am…...

类和对象—多态

目录 1、多态的概念2、多态的条件3、向上转型3.1 概念3.2 使用场景 4、向下转型5、多态的优缺点 1、多态的概念 多态&#xff0c;通俗来讲就是多种形态&#xff0c;即对于同样的行为&#xff0c;不同的对象去完成会产生不同的状态。比如动物都会吃东西&#xff0c;小狗和小猫都…...

vscode启动vite+Vue3项目调试功能,QQ浏览器为例

1、增加launch.json配置 {// 使用 IntelliSense 了解相关属性。 // 悬停以查看现有属性的描述。// 欲了解更多信息&#xff0c;请访问: https://go.microsoft.com/fwlink/?linkid830387"version": "0.2.0","configurations": [{"type&quo…...