一篇文章快速认识 YOLO11 | 目标检测 | 模型训练 | 自定义数据集

 本文分享YOLO11的目标检测,主要内容是自定义数据集、数据标注、标签格式转换、模型训练、模型推理等。

目录

1、数据标注

2、Labelme的json转为YOLO的txt

3、配置YOLO11代码工程

4、数据集yaml配置文件

5、YOLO11模型结构配置文件

6、编写训练代码

7、开始训练模型

 8、模型推理


1、数据标注

推荐使用Labelme工具进行标注,选择“创建矩形”,对物体进行标注。

Labelme官网地址:https://github.com/wkentaro/labelme

点击“打开目录”,然后加载图像,选择“创建矩形”,开始标注啦

标注完成后,点击“Save”,保存保存标注信息,生成和图片同名的json文件;

看一下示例的json文件里面的内容:

2、Labelme的json转为YOLO的txt

首先了解YOLO11的目标检测标签格式,如下所示:

YOLO11的标签文件是一个txt文件,每行表示一个物体的标签。

每一行的格式是:<object-class> <x_center> <y_center> <width> <height>。其中:

  • <object-class>是类别索引。
  • <x_center><y_center>是目标的中心点坐标(归一化到0-1)。
  • <width><height>是目标的宽度高度(归一化到0-1)。
  • 说明:这个格式不但适用于YOLO11、YOLOv8、YOLOv5,还适用于ultralytics工程中其他版本的YOLO。  

txt标签示例数据,表示有两个物体:

0 0.5192 0.4512 0.3985 0.7572
3 0.5061 0.5921 0.2631 0.4561

  • 第一行表示物体1,类别为0,0.5192是中心点x坐标,0.4512是中心点y坐标,0.3985是宽度, 0.7572是高度。
  • 第二行表示物体2,类别为3,0.5061是中心点x坐标,0.5921是中心点y坐标,0.2631是宽度, 0.4561是高度。

了解YOLO11的检测标签txt文件后~

编写代码,把Labelme的json转为YOLO的txt

主要包括两个函数:convert_labelme_to_yolo( )、process_folder( )

函数解析:

convert_labelme_to_yolo(json_path, output_dir):

  • 功能: 将单个LabelMe格式的JSON文件转换为YOLO11格式。
  • 参数:
    • json_path (str): 输入的LabelMe格式JSON文件路径。
    • output_dir (str): 输出的YOLO11格式标注文件夹路径。
  • 操作:
    • 读取JSON文件,获取图像宽度和高度。
    • 遍历所有标注形状,提取标签和坐标,计算YOLO11所需的中心点和宽高。
    • 将结果写入以相同文件名命名的TXT文件中。

process_folder(input_folder, output_folder):

  • 功能: 处理输入文件夹中的所有JSON文件,转换为YOLO11格式。
  • 参数:
    • input_folder (str): 包含LabelMe格式JSON文件的输入文件夹路径。
    • output_folder (str): 用于保存YOLO11格式标注文件的输出文件夹路径。
  • 操作:
    • 创建输出文件夹(如果不存在)。
    • 遍历输入文件夹,调用转换函数处理每个以.json结尾的文件。

 示例代码如下所示:

import json
import os# 定义标签映射,将类别名称映射为ID
label_map = {"car": 0,  # 汽车"bus": 1   # 公交车
}def convert_labelme_to_yolo(json_path, output_dir):"""将LabelMe格式的JSON文件转换为YOLO11格式的标注文件。参数:json_path (str): 输入的LabelMe格式JSON文件路径。output_dir (str): 输出的YOLO11格式标注文件夹路径。"""# 打开LabelMe格式的JSON文件with open(json_path, 'r') as f:labelme_data = json.load(f)  # 读取JSON数据# 获取图像的宽度和高度image_width = labelme_data['imageWidth']image_height = labelme_data['imageHeight']yolo_annotations = []  # 存储YOLO11格式的标注# 遍历所有的标注形状for shape in labelme_data['shapes']:label = shape['label']  # 获取标签名称if label not in label_map:continue  # 如果标签未定义,则忽略class_id = label_map[label]  # 获取对应的类别IDpoints = shape['points']  # 获取标注的坐标点if shape['shape_type'] == 'rectangle':  # 如果是矩形(x1, y1), (x2, y2) = points  # 获取矩形的两个顶点elif shape['shape_type'] == 'polygon':  # 如果是多边形x1, y1 = min(point[0] for point in points), min(point[1] for point in points)  # 计算多边形的左上角x2, y2 = max(point[0] for point in points), max(point[1] for point in points)  # 计算多边形的右下角else:continue  # 其他类型不处理# 计算YOLO11格式所需的中心点和宽高x_center = (x1 + x2) / 2.0 / image_width  # 计算中心点x坐标y_center = (y1 + y2) / 2.0 / image_height  # 计算中心点y坐标width = (x2 - x1) / image_width  # 计算宽度height = (y2 - y1) / image_height  # 计算高度# 添加YOLO11格式的标注到列表中yolo_annotations.append(f"{class_id} {x_center} {y_center} {width} {height}")# 构建输出文件的路径output_file = os.path.join(output_dir, os.path.splitext(os.path.basename(json_path))[0] + '.txt')# 将YOLO11格式的标注写入输出文件with open(output_file, 'w') as f:f.write('\n'.join(yolo_annotations))def process_folder(input_folder, output_folder):"""处理输入文件夹中的所有JSON文件,并将其转换为YOLO11格式的标注文件。参数:input_folder (str): 输入文件夹路径,包含LabelMe格式的JSON文件。output_folder (str): 输出文件夹路径,用于保存YOLO11格式的标注文件。"""# 创建输出文件夹(如果不存在)os.makedirs(output_folder, exist_ok=True)# 处理输入文件夹中的每个 JSON 文件for filename in os.listdir(input_folder):if filename.endswith(".json"):  # 只处理以 .json 结尾的文件json_path = os.path.join(input_folder, filename)  # 获取完整的JSON文件路径convert_labelme_to_yolo(json_path, output_folder)  # 调用转换函数# 示例使用
input_folder = "/mnt/data/json_labels"  # 输入json_labels文件夹路径
output_folder = "/mnt/data/yolo11_txt_labels"  # 输出txt_labels文件夹路径process_folder(input_folder, output_folder)  # 处理文件夹中的所有JSON文件# 列出输出文件夹中的文件以确认
os.listdir(output_folder)  # 打印输出文件夹中的文件列表

我们使用上面代码时,需要设置输入的json_labels文件夹路径输出txt_labels文件夹路径

input_folder = "/mnt/data/json_labels"  # 输入json_labels文件夹路径
output_folder = "/mnt/data/yolo11_txt_labels"  # 输出txt_labels文件夹路径

3、配置YOLO11代码工程

首先到YOLO11代码地址,下载源代码:https://github.com/ultralytics/ultralytics

  • 在 GitHub 仓库页面上,用户点击绿色的 "Code" 按钮后,会弹出一个选项框。
  • 选择通过 HTTPS 或 GitHub CLI 克隆仓库,也可以点击框中的 "Download ZIP" 按钮,将整个仓库下载为 ZIP 压缩包到本地。

解压ultralytics-main.zip文件,在ultralytics同级目录中,

  • 新建文件:训练代码(train.py)、推理代码(infer.py)
  • 以及测试数据的文件夹:datasets,权重文件目录:weights
ultralytics-main/.github/datasets/docker/docs/examples/runs/tests/ultralytics/weights/.gitignoreCITATION.cffCONTRIBUTING.mdLICENSEmkdocs.ymlprint_dir.pypyproject.tomlREADME.mdREADME.zh-CN.mdtrain.pyinfer.py

weights目录可以存放不同任务的权重,比如:yolo11m-cls.pt、yolo11m-obb.pt、yolo11m-pose.pt、yolo11m-seg.pt、yolo11m.pt、yolo11n.pt等。

train.py文件是和ultralytics文件夹同一级目录的

后面可以直接调用ultralytics源代码中的函数、类和依赖库等,如果有需要直接修改ultralytics中的代码,比较方便。

4、数据集yaml配置文件

ultralytics/cfg/datasets/目录下,新建一个yaml文件,比如:auto-parts-det.yaml

# Ultralytics YOLO 🚀, AGPL-3.0 licensepath: ./datasets/det_auto_parts_20241020 # dataset root dir
train: train/images # train images 
val: val/images # val images # Classes
names:0: person1: bicycle2: car

同级目录下还存在许多数据集配置文件

比如:coco128.yaml、coco.yaml、DOTAv1.5.yaml、VOC.yaml、Objects365.yaml、Argoverse.yaml等等

yaml文件中的path,需要根据实际数据路径进行修改,指定数据集的路径

5、YOLO11模型结构配置文件

YOLO11模型结构的配置文件,比如yolo11.yaml,它所在位置是

ultralytics/cfg/models/11/yolo11.yaml

里面有详细的模型结构参数信息 :

# Ultralytics YOLO 🚀, AGPL-3.0 license
# YOLO11 object detection model with P3-P5 outputs. For Usage examples see https://docs.ultralytics.com/tasks/detect# Parameters
nc: 80 # number of classes
scales: # model compound scaling constants, i.e. 'model=yolo11n.yaml' will call yolo11.yaml with scale 'n'# [depth, width, max_channels]n: [0.50, 0.25, 1024] # summary: 319 layers, 2624080 parameters, 2624064 gradients, 6.6 GFLOPss: [0.50, 0.50, 1024] # summary: 319 layers, 9458752 parameters, 9458736 gradients, 21.7 GFLOPsm: [0.50, 1.00, 512] # summary: 409 layers, 20114688 parameters, 20114672 gradients, 68.5 GFLOPsl: [1.00, 1.00, 512] # summary: 631 layers, 25372160 parameters, 25372144 gradients, 87.6 GFLOPsx: [1.00, 1.50, 512] # summary: 631 layers, 56966176 parameters, 56966160 gradients, 196.0 GFLOPs# YOLO11n backbone
backbone:# [from, repeats, module, args]- [-1, 1, Conv, [64, 3, 2]] # 0-P1/2- [-1, 1, Conv, [128, 3, 2]] # 1-P2/4- [-1, 2, C3k2, [256, False, 0.25]]- [-1, 1, Conv, [256, 3, 2]] # 3-P3/8- [-1, 2, C3k2, [512, False, 0.25]]- [-1, 1, Conv, [512, 3, 2]] # 5-P4/16- [-1, 2, C3k2, [512, True]]- [-1, 1, Conv, [1024, 3, 2]] # 7-P5/32- [-1, 2, C3k2, [1024, True]]- [-1, 1, SPPF, [1024, 5]] # 9- [-1, 2, C2PSA, [1024]] # 10# YOLO11n head
head:- [-1, 1, nn.Upsample, [None, 2, "nearest"]]- [[-1, 6], 1, Concat, [1]] # cat backbone P4- [-1, 2, C3k2, [512, False]] # 13- [-1, 1, nn.Upsample, [None, 2, "nearest"]]- [[-1, 4], 1, Concat, [1]] # cat backbone P3- [-1, 2, C3k2, [256, False]] # 16 (P3/8-small)- [-1, 1, Conv, [256, 3, 2]]- [[-1, 13], 1, Concat, [1]] # cat head P4- [-1, 2, C3k2, [512, False]] # 19 (P4/16-medium)- [-1, 1, Conv, [512, 3, 2]]- [[-1, 10], 1, Concat, [1]] # cat head P5- [-1, 2, C3k2, [1024, True]] # 22 (P5/32-large)- [[16, 19, 22], 1, Detect, [nc]] # Detect(P3, P4, P5)

如果需要修改模型结构,可以在这个文件进行修改。

6、编写训练代码

前面准备好了:数据集配置文件(auto-parts-det.yaml)、模型结构配置文件(yolo11.yaml)

  • 这里需要注意结构配置文件,虽然文件名是yolo11.yaml,但是需要再后面指定模型尺寸(n, s, m, l, x)
  • 比如需要m规模的模型,在加载模型时用YOLO("yolo11m.yaml");如果不指定,默认是n的,感觉怪怪的

下面编写训练代码,可以参考一下:

from ultralytics import YOLO# 加载预训练的模型
model = YOLO("yolo11m.yaml").load("weights/yolo11m.pt")  # 定义训练参数,添加默认值、范围和中文注释
train_params = {'data': "auto-parts-det.yaml",   # 数据集配置文件路径,需要自定义修改'epochs': 100,               # 总训练轮次,默认值 100,范围 >= 1'imgsz': 640,               # 输入图像大小,默认值 640,范围 >= 32'batch': 8,                # 批次大小,默认值 16,范围 >= 1'save': True,               # 是否保存训练结果和模型,默认值 True'save_period': -1,          # 模型保存频率,默认值 -1,表示只保存最终结果'cache': False,             # 是否缓存数据集,默认值 False'device': None,             # 训练设备,默认值 None,支持 "cpu", "gpu"(device=0,1), "mps"'workers': 8,               # 数据加载线程数,默认值 8,影响数据预处理速度'project': None,            # 项目名称,保存训练结果的目录,默认值 None'name': None,            # 训练运行的名称,用于创建子目录保存结果,默认值 None'exist_ok': False,          # 是否覆盖已有项目/名称目录,默认值 False'optimizer': 'auto',        # 优化器,默认值 'auto',支持 'SGD', 'Adam', 'AdamW''verbose': True,            # 是否启用详细日志输出,默认值 False'seed': 0,                  # 随机种子,确保结果的可重复性,默认值 0'deterministic': True,      # 是否强制使用确定性算法,默认值 True'single_cls': False,        # 是否将多类别数据集视为单一类别,默认值 False'rect': False,              # 是否启用矩形训练(优化批次图像大小),默认值 False'cos_lr': False,            # 是否使用余弦学习率调度器,默认值 False'close_mosaic': 10,         # 在最后 N 轮次中禁用 Mosaic 数据增强,默认值 10'resume': False,            # 是否从上次保存的检查点继续训练,默认值 False'amp': True,                # 是否启用自动混合精度(AMP)训练,默认值 True'fraction': 1.0,            # 使用数据集的比例,默认值 1.0'profile': False,           # 是否启用 ONNX 或 TensorRT 模型优化分析,默认值 False'freeze': None,             # 冻结模型的前 N 层,默认值 None'lr0': 0.01,                # 初始学习率,默认值 0.01,范围 >= 0'lrf': 0.01,                # 最终学习率与初始学习率的比值,默认值 0.01'momentum': 0.937,          # SGD 或 Adam 的动量因子,默认值 0.937,范围 [0, 1]'weight_decay': 0.0005,     # 权重衰减,防止过拟合,默认值 0.0005'warmup_epochs': 3.0,       # 预热学习率的轮次,默认值 3.0'warmup_momentum': 0.8,     # 预热阶段的初始动量,默认值 0.8'warmup_bias_lr': 0.1,      # 预热阶段的偏置学习率,默认值 0.1'box': 7.5,                 # 边框损失的权重,默认值 7.5'cls': 0.5,                 # 分类损失的权重,默认值 0.5'dfl': 1.5,                 # 分布焦点损失的权重,默认值 1.5'pose': 12.0,               # 姿态损失的权重,默认值 12.0'kobj': 1.0,                # 关键点目标损失的权重,默认值 1.0'label_smoothing': 0.0,     # 标签平滑处理,默认值 0.0'nbs': 64,                  # 归一化批次大小,默认值 64'overlap_mask': True,       # 是否在训练期间启用掩码重叠,默认值 True'mask_ratio': 4,            # 掩码下采样比例,默认值 4'dropout': 0.0,             # 随机失活率,用于防止过拟合,默认值 0.0'val': True,                # 是否在训练期间启用验证,默认值 True'plots': True,             # 是否生成训练曲线和验证指标图,默认值 True # 数据增强相关参数'hsv_h': 0.2,             # 色相变化范围 (0.0 - 1.0),默认值 0.015'hsv_s': 0.7,               # 饱和度变化范围 (0.0 - 1.0),默认值 0.7'hsv_v': 0.4,               # 亮度变化范围 (0.0 - 1.0),默认值 0.4'degrees': 30.0,             # 旋转角度范围 (-180 - 180),默认值 0.0'translate': 0.1,           # 平移范围 (0.0 - 1.0),默认值 0.1'scale': 0.5,               # 缩放比例范围 (>= 0.0),默认值 0.5'shear': 0.0,               # 剪切角度范围 (-180 - 180),默认值 0.0'perspective': 0.0,         # 透视变化范围 (0.0 - 0.001),默认值 0.0'flipud': 0.0,              # 上下翻转概率 (0.0 - 1.0),默认值 0.0'fliplr': 0.5,              # 左右翻转概率 (0.0 - 1.0),默认值 0.5'bgr': 0.0,                 # BGR 色彩顺序调整概率 (0.0 - 1.0),默认值 0.0'mosaic': 0.5,              # Mosaic 数据增强 (0.0 - 1.0),默认值 1.0'mixup': 0.0,               # Mixup 数据增强 (0.0 - 1.0),默认值 0.0'copy_paste': 0.0,          # Copy-Paste 数据增强 (0.0 - 1.0),默认值 0.0'copy_paste_mode': 'flip',  # Copy-Paste 增强模式 ('flip' 或 'mixup'),默认值 'flip''auto_augment': 'randaugment',  # 自动增强策略 ('randaugment', 'autoaugment', 'augmix'),默认值 'randaugment''erasing': 0.4,             # 随机擦除增强比例 (0.0 - 0.9),默认值 0.4'crop_fraction': 1.0,       # 裁剪比例 (0.1 - 1.0),默认值 1.0}# 进行训练
results = model.train(**train_params)

YOLO11模型训练,思路流程:

  • 加载模型:使用 YOLO 类指定模型的配置文件,并加载预训练权重 yolo11m.pt
  • 定义训练参数:通过字典 train_params 定义了一系列训练参数,涵盖了训练过程中可能涉及的配置项,如数据集路径、训练轮数、图像大小、优化器、数据增强等。
  • 执行训练:使用 model.train(**train_params) 将定义的训练参数传入模型,开始训练。
  • 保存训练结果:训练完成后,结果保存在 results 中,包含损失和精度等信息。

在ultralytics工程中,没有了超参数文件了,需要从model.train( )函数参数设置,所以才会有上面的示例代码。

7、开始训练模型

直接运行train.py,就开始训练啦

Transferred 649/649 items from pretrained weights
Ultralytics 8.3.7 🚀 Python-3.9.16 torch-1.13.1 CUDA:0 (NVIDIA A30, 24062MiB)Starting training for 30 epochs...Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size1/30      4.68G      2.238      1.691      2.426         80        640: 100%|██████████| 16/16 [00:02<00:00,  5.91it/s]Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100%|██████████| 8/8 [00:00<00:00, 12.18it/s]all        128        929       0.77      0.728      0.798      0.615......Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size30/30      4.49G      1.171     0.7135      1.319         41        640: 100%|██████████| 16/16 [00:01<00:00,  8.80it/s]Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100%|██████████| 8/8 [00:00<00:00, 13.42it/s]all        128        929      0.847      0.845      0.891      0.57730 epochs completed in 0.027 hours.
Optimizer stripped from runs/detect/train5/weights/last.pt, 40.7MB
Optimizer stripped from runs/detect/train5/weights/best.pt, 40.7MB

训练完成后,可以在runs/detect/train5路径,可以看到保存的权重、训练记录表格和标签信息等

 8、模型推理

使用刚才训练好的模型权重,进行模型推理,看看目标检测效果

示例代码,如下所示:

from ultralytics import YOLO# 加载预训练的YOLOv11n模型
model = YOLO(r"runs/detect/train5/weights/best.pt")# 对指定的图像文件夹进行推理,并设置各种参数
results = model.predict(source="datasets/det_num40/images/",   # 数据来源,可以是文件夹、图片路径、视频、URL,或设备ID(如摄像头)conf=0.45,                      # 置信度阈值iou=0.6,                        # IoU 阈值imgsz=640,                      # 图像大小half=False,                     # 使用半精度推理device=None,                    # 使用设备,None 表示自动选择,比如'cpu','0'max_det=300,                    # 最大检测数量vid_stride=1,                   # 视频帧跳跃设置stream_buffer=False,            # 视频流缓冲visualize=False,                # 可视化模型特征augment=False,                  # 启用推理时增强agnostic_nms=False,             # 启用类无关的NMSclasses=None,                   # 指定要检测的类别retina_masks=False,             # 使用高分辨率分割掩码embed=None,                     # 提取特征向量层show=False,                     # 是否显示推理图像save=True,                      # 保存推理结果save_frames=False,              # 保存视频的帧作为图像save_txt=True,                  # 保存检测结果到文本文件save_conf=False,                # 保存置信度到文本文件save_crop=False,                # 保存裁剪的检测对象图像show_labels=True,               # 显示检测的标签show_conf=True,                 # 显示检测置信度show_boxes=True,                # 显示检测框line_width=None                 # 设置边界框的线条宽度,比如2,4
)

看看简单场景的,目标检测效果:

看看密集重贴场景,目标检测效果:

 YOLO11相关文章推荐:

一篇文章快速认识YOLO11 | 关键改进点 | 安装使用 | 模型训练和推理-CSDN博客

一篇文章快速认识 YOLO11 | 实例分割 | 模型训练 | 自定义数据集-CSDN博客

YOLO11模型推理 | 目标检测与跟踪 | 实例分割 | 关键点估计 | OBB旋转目标检测-CSDN博客

YOLO11模型训练 | 目标检测与跟踪 | 实例分割 | 关键点姿态估计-CSDN博客

YOLO11 实例分割 | 自动标注 | 预标注 | 标签格式转换 | 手动校正标签-CSDN博客

YOLO11 实例分割 | 导出ONNX模型 | ONNX模型推理-CSDN博客

YOLO11 目标检测 | 导出ONNX模型 | ONNX模型推理-CSDN博客

YOLO11 目标检测 | 自动标注 | 预标注 | 标签格式转换 | 手动校正标签_yolo11 标注平台-CSDN博客

分享完成,欢迎大家多多点赞收藏,谢谢~

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

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

相关文章

Unity 开发学习笔记(0):

文章目录 前言为什么要去学Unity安装国际版Unity总结 前言 我最近打算学习一下Unity。所以打算从零开始做一下相关的学习笔记。 为什么要去学Unity 上位机的上限就这样&#xff0c;没有运动控制和机器视觉&#xff0c;薪资上不去C# 我非常熟练&#xff0c;所以学习Unity成本…

excel判断某一列(A列)中的数据是否在另一列(B列)中

如B列如果有7个元素&#xff0c;在A列右边的空白列中&#xff0c;输入如下公式&#xff1a; COUNTIF($B$1:$B$7,A1), 其中&#xff0c;$B$1:$B$7代表A列中的所有数据即绝对范围&#xff0c;A1代表B列中的一个单元格.

JVM 加载 class 文件的原理机制

JVM 加载 class 文件的原理机制 JVM&#xff08;Java虚拟机&#xff09;是一个可以执行Java字节码的虚拟机。它负责执行Java应用程序和应用程序的扩展&#xff0c;如Java库和框架。 文章目录 JVM 加载 class 文件的原理机制1. JVM1.1 类加载器1.2 魔数1.3 元空间 2. 类加载2.1 …

openpnp - 底部相机视觉识别CvPipeLine的参数bug修正

文章目录 openpnp - 底部相机视觉识别的CvPipeLine的参数bug概述笔记openpnp的视觉识别参数的错误原因备注补充 - 如果要直接改默认的底部视觉要注意END openpnp - 底部相机视觉识别的CvPipeLine的参数bug 概述 底部相机抓起一个SOD323的元件&#xff0c;进行视觉识别。 识别…

点餐系统需求分析说明书(软件工程分析报告JAVA)

目录 1 引言 4 1.1 编写目的 4 1.2 项目背景 4 1.3 定义 4 1.4 预期的读者 5 1.5 参考资料 5 2 任务概述 5 2.1 目标 5 2.2 运行环境 5 2.3 条件与限制 6 3 数据描述 6 3.1 静态数据 6 3.2 动态数据 6 3.3 数据库介绍 6 3.4 对象模型 6 3.5 数据采集 7 4 动态模型 7 4.1 脚本 …

《深度学习》 了解YOLO基本知识

目录 一、关于YOLO 1、什么是YOLO 2、经典的检测方法 1&#xff09;one-stage单阶段检测 模型指标介绍&#xff1a; 2&#xff09;two-stage多阶段检测 二、关于mAP指标 1、概念 2、IOU 3、关于召回率和准确率 4、示例 5、计算mAP 一、关于YOLO 1、什么是YOLO YOL…

基于泊松洞过程建模的异构蜂窝网络信干比增益与近似覆盖率分析

大家好&#xff0c;我是带我去滑雪&#xff01; 移动通信业务的高速增长使得传统同构蜂窝网络结构不能满足用户对通信质量的要求&#xff0c;而异 构网络架构可以有效解决这种问题。文中对泊松洞过程下异构蜂窝网络的覆盖率进行研究。首 先&#xff0c;利用泊松洞过程( Poisson…

求助帖:ubuntu22.10 auto install user-data配置了为何还需要选择语言键盘(如何全自动)

0-现象&#xff1a;配置好autoinstll的PXE与user-data文件安装过程仍然要人工选语言、键盘等&#xff0c;非全自动&#xff1b;—— 1.硬件环境&#xff1a;x86_64机器 U盘&#xff08;/dev/sda&#xff09;&#xff1b; 2.软件环境&#xff1a;DHCPPXE启动做好grub与pxe的aut…

【AI绘画】Midjourney进阶:留白构图详解

博客主页&#xff1a; [小ᶻZ࿆] 本文专栏: AI绘画 | Midjourney 文章目录 &#x1f4af;前言&#x1f4af;什么是构图为什么Midjourney要使用构图 &#x1f4af;留白构图特点使用场景提示词书写技巧测试 &#x1f4af;小结 &#x1f4af;前言 【AI绘画】Midjourney进阶&…

Springboot 的手动配置操作讲解

1.创建新项目: 手动创建使用maven 项目 并选择骨架: quickstart 骨架用来搭建spingboot 2.手动输入pom.xml依赖: 要想创建springboot 首先继承springboot 的父类 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-bo…

算法的学习笔记—两个链表的第一个公共结点(牛客JZ52)

&#x1f600;前言 在链表问题中&#xff0c;寻找两个链表的第一个公共结点是一个经典问题。这个问题的本质是在两个单链表中找到它们的相交点&#xff0c;或者说它们开始共享相同节点的地方。本文将详细讲解这个问题的解题思路&#xff0c;并提供一种高效的解决方法。 &#x…

python 爬虫抓取百度热搜

实现思路&#xff1a; 第1步、在百度热搜页获取热搜元素 元素类名为category-wrap_iQLoo 即我们只需要获取类名category-wrap_为前缀的元素 第2步、编写python脚本实现爬虫 import requests from bs4 import BeautifulSoupurl https://top.baidu.com/board?tabrealtime he…

[手机Linux PostmarketOS]七, Linux使用selenium爬虫

一&#xff0c;selenium安装 # 用pip 安装 selenium pip3 install selenium --break-system-packages 二&#xff0c;安装浏览器Chrome Alpine Linux 环境中没有google Chrome&#xff0c; 使用 Chromium 浏览器作为 Chrome 的替代品&#xff0c;Chromium 是 Chrome 的开源版本…

定时任务使用kafka

定时任务使用kafka 在上述业务场景中使用 Kafka 而不是直接定时执行任务有以下几个重要原因&#xff1a; 一、解耦 任务触发与执行分离&#xff1a; 使用 XXL-JOB 定时触发任务并将任务消息发送到 Kafka&#xff0c;实现了任务触发端&#xff08;通常是调度系统&#xff09;和…

数字后端零基础入门系列 | Innovus零基础LAB学习Day5

###Module 12 RC参数提取和时序分析 数字后端零基础入门系列 | Innovus零基础LAB学习Day4 数字后端零基础入门系列 | Innovus零基础LAB学习Day3 数字后端零基础入门系列 | Innovus零基础LAB学习Day2 数字后端零基础入门系列 | Innovus零基础LAB学习Day1 ###LAB12-1 这个章节…

机器学习与神经网络:科技的星辰大海

前提 近日&#xff0c;2024年诺贝尔物理学奖颁发给了机器学习与神经网络领域的研究者&#xff0c;这是历史上首次出现这样的情况。这项奖项原本只授予对自然现象和物质的物理学研究作出重大贡献的科学家&#xff0c;如今却将全球范围内对机器学习和神经网络的研究和开发作为了一…

kotlin 入门总结

目录 1、构造函数 2、数据类 data class&#xff0c; 3、object 单例类&#xff0c;相当于java线程安全的懒加载 4、companion object 伴生对象&#xff0c;类似于包装静态值的一个区域块 5、解构 6、空安全 7、条件语句 8、集合 9 属性和支持属性 属性 支持属性 10 …

kali的下载与配置

kali.org官网下载 选择VMware的版本下载&#xff0c;并解压&#xff0c;复制解压后的路径 在虚拟机中&#xff0c;点击文件&#xff0c;打开 默认的账户密码均为kali 修改密码 sudo passwd root 切换root用户 su root 查看IP ip addr IP:192.168.184.131 粘贴复制shiftinsert…

从图像识别到聊天机器人:Facebook AI的多领域应用

随着人工智能技术的快速发展&#xff0c;Facebook已在多个领域内广泛应用AI技术&#xff0c;以提升用户体验、提高效率并推动创新。从图像识别到聊天机器人&#xff0c;Facebook的AI应用涵盖了社交媒体的方方面面&#xff0c;下面我们将深入探讨这些应用的具体实现及其对用户生…

ecmp观察

文章目录 简述选路策略实验说明开始验证 简述 ECMP&#xff08;Equal Cost Multi Path&#xff09;等价多路径&#xff0c;又称等价路由。指到达同一个目的IP或者目的网段存在多条COST值相等的不同路由路径。在具有多条到达同一目的地的网络链路的环境中&#xff0c;传统路由技…