【跟我学YOLO】(2)YOLO12 环境配置与基本应用

欢迎关注『跟我学 YOLO』系列
【跟我学YOLO】(1)YOLO12:以注意力为中心的物体检测
【跟我学YOLO】(2)YOLO12 环境配置与基本应用
【跟我学YOLO】(3)YOLO12 用于诊断视网膜病变


【跟我学YOLO】(2)YOLO12 环境配置与基本应用

    • 1. YOLO12 简介
    • 2. YOLO12 项目和模型下载
      • 2.1 下载 YOLO12 项目
      • 2.2 下载 YOLO12 模型
    • 3. 虚拟环境的创建与配置
      • 3.1 创建虚拟环境
      • 3.2 安装项目依赖
    • 4. YOLO12 安装与测试
      • 4.1 安装 YOLO12
      • 4.2 YOLO12 安装测试
      • 4.3 配置 Pycharm 编辑器
    • 5. YOLO12 模型推理
      • 5.1 CLI 方式运行
      • 5.2 Python 程序运行
      • 5.3 分割任务和分类任务
    • 6. 参数说明
    • 7. YOLOv12 的模型架构
      • 7.1 YOLOv12 模型架构图
      • 7.2 YOLOv12 模型配置文件
      • 7.3 YOLOv12 模型架构详解
      • 7.4 YOLO12 核心模块 A2C2f 的结构功能


本节介绍 YOLO12 的下载、配置和推理。


1. YOLO12 简介

YOLO(You Only Look Once)是一种流行的物体检测和图像分割模型,最初于 2015 年推出。

YOLOv12 提出了一种以注意力为中心的网络架构,利用区域注意力降低计算复杂度,并通过**残差高效层聚合网络(R-ELAN)**增强特征聚合能力。通过优化注意力机制的关键组件,以更好地适配YOLO的实时性需求,同时保持高速性能。通过有效结合区域注意力、R-ELAN和架构优化,YOLOv12在准确率和效率上均实现了显著提升,达到了SOTA性能,推动了注意力机制在实时目标检测中的集成。

YOLO12 支持一系列核心计算机视觉任务:物体检测、实例分割、图像分类、姿态估计和定向物体检测 (OBB)。与 YOLO10、YOLO11 相比,YOLO12 效率更高,部署灵活。


2. YOLO12 项目和模型下载

YOLOv12 下载:GitHub - YOLO12
Ultralytics 官方文档: YOLO12 使用指南(中文版)


2.1 下载 YOLO12 项目

YOLO12 开源网址:GitHub - YOLO12

  1. 方法一:克隆 repo。
>>> git clone https://github.com/sunsmarterjie/yolov12
  1. 方法二:直接从 GitHub 网页下载压缩文件。

没有安装 git 的同学,可以在 GitHub 网站的 YOLO12 项目页面,点击绿色的 “<>Code”,选择 “Download ZIP”,可以下载 YOLO12 项目的压缩包。

在这里插入图片描述


2.2 下载 YOLO12 模型

使用 YOLO12 进行推理,首先要下载 YOLO12 预训练模型。使用 YOLO12 训练自己的模型,也常用 YOLO12 预训练模型作为初始模型。

YOLO12 支持多种计算机视觉任务,提供了检测(Detection)、分类(Classification)、分割(Segmentation)、姿态估计(Pose)、定向边界框检测(OBB)、跟踪(Track)等任务的预训练模型。

YOLO11 有多个不同规模的模型,从小到大依次是:YOLO12n、YOLO12s、YOLO12m、YOLO12l、YOLO12x。这些模型与各种操作模式兼容,包括推理、验证、训练和导出,便于在部署和开发的不同阶段使用。

在 下载 YOLO12 项目 中的 Readme.md 文件中可以找到以下内容(包括模型下载地址): YOLO12n , YOLO12s, YOLO12m, YOLO12l , YOLO12x。

以检测任务为例,如下图所示,点击所需的模型即可下载相应的预训练模型。
在这里插入图片描述

以分类任务为例,如下图所示,点击所需的模型即可下载相应的预训练模型。
在这里插入图片描述

说明:YOLO12在运行时如果在本地没有检测到预训练模型,,将会自动从网络下载并保存,但下载速度可能很慢甚至连接失败(视网络条件和限制),因此推荐先将 YOLO12 预训练模型下载到本地。

本文选择检测任务模型 YOLO12n,参数约 2.5M。下载完成后,将模型文件保存在 YOLO12 项目的根目录路径下,即 “.\YOLO12\yolov12n.pt”。


3. 虚拟环境的创建与配置

说明:本文所有内容都是基于 python 环境实现的,因此先要确保已经安装了 python 开发环境。推荐使用 python3.8 或以上版本,并安装 PyTorch1.8 或以上版本。


3.1 创建虚拟环境

虚拟环境可以将YOLO12 训练所需的依赖包和其他项目的依赖包隔离开来,避免版本冲突,更加便于管理。

推荐使用 miniconda 搭建Python环境,其安装和使用可以参见:【youcans的深度学习 01】安装环境详解之 miniconda。

创建名称为 YOLO12 的 Python 环境,注意推荐Python 版本为3.11。激活 YOLO12 环境。

conda env list
conda create -n YOLO12 python=3.11
conda activate YOLO12

在这里插入图片描述


3.2 安装项目依赖

在所选择的 Python 环境下,安装 YOLO12 项目所需的依赖(安装项目所需的库)。

1、项目依赖

项目中的 requirements.txt 文件已经详细列出了所需的库及版本。

考虑国内安装环境问题,对 torch,torchvision 和 flash_attn 先注释掉。

#torch==2.2.2 
#torchvision==0.17.2
#flash_attn-2.7.3+cu11torch2.2cxx11abiFALSE-cp311-cp311-linux_x86_64.whl
timm==1.0.14
albumentations==2.0.4
onnx==1.14.0
onnxruntime==1.15.1
pycocotools==2.0.7
PyYAML==6.0.1
scipy==1.13.0
onnxslim==0.1.31
onnxruntime-gpu==1.18.0
gradio==4.44.1
opencv-python==4.9.0.80
psutil==5.9.8
py-cpuinfo==9.0.0
huggingface-hub==0.23.2
safetensors==0.4.3
numpy==1.26.4
supervision==0.22.0

切换到 YOLO12 项目根目录(本例为“C:\Python\Projects\YOLOv12”),激活 YOLO12 环境,从 requirements.txt 文件批量安装项目的所有依赖包(不包括注释的内容)。

cd C:\Python\Projects\yolov12 # YOLOv12 项目根目录
conda activate YOLO12
pip install -r requirements.txt

注意:

  1. 由于安装 YOLO12 项目所需的第三方库内容很多,如果下载太慢,可以指定下载源,也可以从已有的虚拟环境中复制 Lib\site-package 中的内容,但要检查版本能否满足本项目中的 requirements.txt 的要求。

  2. 对于未安装的库或版本不满足要求的库,可以手动安装,例如:

pip install numpy==1.26.4

  1. requirements.txt 中没有 thop,但运行 YOLO12 时可能需要,因此可以手动安装:

pip install thop


在这里插入图片描述

耐心等待安装完成…

在这里插入图片描述


2、下载 FlashAttention

说明:默认情况下,Ultralytics YOLO12 的实现不需要 FlashAttention。不过,可以选择编译 FlashAttention 并与 YOLO12 一起使用,以尽量减少内存访问开销。

项目 requirements.txt 文件列出的 “flash_attn-2.7.3+cu11torch2.2cxx11abiFALSE-cp311-cp311-linux_x86_64.whl” 是针对 Linux 系统的,对于 Windows 系统不能下载和使用。

对于 Windows 系统,推荐从 Github 下载 FlashAttention:

FlashAttention Windows:https://github.com/bdashore3/flash-attention/releases

我选择了 v2.7.0.post2 版本:
flash_attn-2.7.0.post2+cu124torch2.3.1cxx11abiFALSE-cp311-cp311-win_amd64.whl

下载完成之后需要本地安装。将下载的 FlashAttention 的 .whl 文件,复制到 yolov12 项目的根目录下,pip 安装如下。

cd C:\Python\Projects\yolov12 # YOLOv12 项目根目录
conda activate YOLO12
pip install flash_attn-2.7.0.post2+cu124torch2.3.1cxx11abiFALSE-cp311-cp311-win_amd64.whl

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


3、安装 CUDA 和 PyTorch

FlashAttention 的 flash_attn-2.7.0.post2+cu124torch2.3.1cxx11abiFALSE-cp311-cp311-win_amd64.whl 文件名的含义为:适配的 CUDA 版本为 12.4,PyTorch 版本为 2.3.1,Python 版本为 3.11,操作系统为 Windows 64bit。

安装指定版本的 CUDA 和 PyTorch 如下。

pip install torch2.3.1 torchvision0.18.1 torchaudio==2.3.1 --index-url https://download.pytorch.org/whl/cu121


在这里插入图片描述


4. YOLO12 安装与测试

4.1 安装 YOLO12

  1. 在线安装(不推荐)

YOLO12 提供了命令行执行方式,但是需要按照要求来进行安装:

pip install ultralytics -i https://pypi.tuna.tsinghua.edu.cn/simple

这种方式安装方便,但对网络有一定要求,而且不方便对源码的修改(修改后容易出错),因此并不推荐。

  1. 离线安装(推荐)

将 2.1 节所下载的项目文件复制到 Python 项目文件夹,如 “C:\Python\Projects\Yolov12”。如果下载的是压缩文件,解压到 Python 项目文件夹。

打开 miniconda Prompt,激活创建的 Python 环境 Yolo12,切换到本项目文件夹,pip 安装 Yolo12。

“pip install -e .” 用于以"可编辑模式"(editable mode)安装当前目录的 Python 包。注意安装命令中的 “-e” 和 “.” 之间有一个空格。

conda activate Yolo12
cd C:\Python\Projects\YOLOv12
pip install -e .

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


4.2 YOLO12 安装测试

安装完成后,在 miniconda Prompt 直接输入 “yolo help”,系统给出 Yolo 的帮助信息如下图所示,说明安装成功。

yolo help

在这里插入图片描述


4.3 配置 Pycharm 编辑器

1、打开 PyCharm,打开 YOLOv12 项目。
2、在 PyCharm 菜单选择:“文件-设置-项目-Python 解释器(python interpreter)” ,点击右侧窗口中的“添加解释器”,选择“添加本地解释器”,弹出“添加解释器” 窗口。
3、在“添加解释器” 窗口中,选择左侧“conda环境”,选中右侧“使用现有环境”,从“使用现有环境”下拉框中选择 YOLO12 环境,如下图所示。


在这里插入图片描述

4、配置完成后,在 PyCharm 的命令行窗口,激活 YOLO11 虚拟环境,输入 “yolo help” 。如下图所示,系统给出 YOLO11 的帮助提示信息,说明配置成功。

在这里插入图片描述


5. YOLO12 模型推理

5.1 CLI 方式运行

YOLO12 支持使用命令行接口(command line interface, CLI)对模型进行训练、验证或运行推断。

YOLO12 命令行接口(CLI)方便在各种任务和版本上训练、验证或推断模型,不需要定制或代码,可以使用 yolo 命令从终端运行所有任务。

语法:

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

使用 miniconda Prompt 命令行,或在 PyCharm 的命令行窗口,都可以以CLI 方式运行 “yolo predict” 命令进行物体检测任务,具体操作步骤如下:

  1. 使用 miniconda Prompt 命令行,激活 YOLO12 虚拟环境,输入如下命令对指定图片进行检测。

  2. 在 PyCharm 的命令行窗口,激活 YOLO12 虚拟环境,输入如下命令对指定图片进行检测。

conda activate YOLO12
yolo predict model=“./yolov12n.pt” source=“./data/images/bus.jpg”

注意:
(1)必须先激活 YOLO12 虚拟环境。
(2)当前路径必须是 YOLO12 项目所在的目录,例如 “C:\Python\Projects\YOLOv12”。
(3)预训练模型 yolo12n.pt 必须保存在模型配置参数 “model” 指定的路径。例如,如果模型保存在 “.\model\yolov12n.pt”,则将模型配置参数修改为 “model=.\model\yolov12n.pt”。
(4)待检测的图片必须保存在 “source” 指定的路径,可以是图像路径、视频文件、目录、URL 或用于摄像头设备 ID。例如,可以指定网络地址,读取待检测图片。

yolo predict model=“.\yolov12n.pt” source=“https://ultralytics.com/images/bus.jpg”

(5)检测结果默认保存在 “.\runs\detect\predict” 目录下,也可以在命令中使用 “project” 参数,指定保存预测结果的项目目录名称。
(6)完整的写法是:

yolo task=detect mode=predict model=“.\yolov12n.pt” source=“./data/images/bus.jpg”

在命令行窗口显示的运行结果如下。

(base) C:\Python\Projects\YOLOv12>conda activate YOLO12                                            (YOLO12) C:\Python\Projects\YOLOv12>yolo predict model="./yolov12n.pt" source="./data/images/bus.jpg"
Ultralytics 8.3.63 🚀 Python-3.11.13 torch-2.3.1+cu121 CUDA:0 (NVIDIA GeForce RTX 3060, 12288MiB)
YOLOv12n summary (fused): 376 layers, 2,542,440 parameters, 0 gradients, 6.0 GFLOPsimage 1/1 C:\Python\Projects\YOLOv12\data\images\bus.jpg: 640x480 4 persons, 1 bus, 88.5ms
Speed: 2.0ms preprocess, 88.5ms inference, 57.2ms postprocess per image at shape (1, 3, 640, 480)
Results saved to runs\detect\predict

在这里插入图片描述

检测结果保存在 Yolov12项目的子目录路径 “.\runs\detect\predict” 下,如下图所示。

在这里插入图片描述


5.2 Python 程序运行

YOLO12 也提供了 Python 接口的调用方式。它提供了加载和运行模型以及处理模型输出的函数。该界面设计易于使用,以便用户可以在他们的项目中快速实现目标检测。

使用预训练模型 yolov12n.pt 进行推理的 Python 程序如下。

from ultralytics import YOLO# 加载预训练的YOLO12模型
model = YOLO("./yolov12n.pt",task = "detect")# 使用模型对图像执行对象检测
result = model(source="./ultralytics/assets/zidane.jpg", save=True)

运行程序,就实现对指定图像文件的检测,并将检测结果保存到文件夹 “./runs/detect/predict2”。

在这里插入图片描述

Python 程序运行结果与 CLI 方式是相同的,但可以执行更复杂的任务。


5.3 分割任务和分类任务

YOLO12 默认执行检测任务,也可以提供指定参数 TASK 实现分割、分类、姿势、定位任务。注意需要下载或使用对应任务的预训练模型,例如:分割任务模型 YOLO12n-seg.pt,分类任务模型 YOLO12n-cls.pt。

yolo TASK MODE ARGSWhere   TASK (optional) is one of ('detect', 'segment', 'classify', 'pose', 'obb')MODE (required) is one of ('train', 'val', 'predict', 'export', 'track', 'benchmark')ARGS (optional) are any number of custom 'arg=value' pairs like 'imgsz=320' that override defaults.See all ARGS at https://docs.ultralytics.com/usage/cfg or with 'yolo cfg'
  1. 分割任务(segment)

注意要下载分割任务 预训练模型 yolov12n-seg.pt。

from ultralytics import YOLO# 加载预训练的YOLO模型,分割任务
model = YOLO("./yolov12n-seg.pt",task = "segment")# 使用模型对图像执行对象检测
result = model(task="segment", source="./data/images/roadflow.jpg", save=True)

程序运行结果如下图所示,检测结果保存到文件夹 “./runs/segment/predict”。

在这里插入图片描述


  1. 分类任务(“classify”)
from ultralytics import YOLO# 加载预训练的YOLO模型,分类任务
model = YOLO("./YOLO12n-cls.pt",task = "classify")# 使用模型对图像执行对象检测
result = model(task="classify", source="./ultralytics/assets/Mask01.jpg", save=True)

运行程序,检测结果保存到文件夹 “./runs\classify\predict”。

分割任务和分类任务的运行结果如下。


在这里插入图片描述


6. 参数说明

参数类型默认值说明
modelstrNone指定用于训练的模型文件。接受指向 .pt 预训练模型或 .yaml 配置文件。对于定义模型结构或初始化权重至关重要。
datastrNone数据集配置文件的路径(例如 coco8.yaml).该文件包含特定于数据集的参数,包括训练和 验证数据类名和类数。
epochsint100训练历元总数。每个历元代表对整个数据集进行一次完整的训练。调整该值会影响训练时间和模型性能。
timefloatNone最长训练时间(小时)。如果设置了该值,则会覆盖 epochs 参数,允许训练在指定的持续时间后自动停止。对于时间有限的训练场景非常有用。
batchint 或 float16批量大小有三种模式: 设置为整数(如 batch=16)、自动模式,内存利用率为 60%GPU (batch=-1),或指定利用率的自动模式 (batch=0.70).
imgszint 或 list640用于训练的目标图像尺寸。所有图像在输入模型前都会被调整到这一尺寸。影响模型精度和计算复杂度。
saveboolTrue可保存训练检查点和最终模型权重。这对恢复训练或模型部署非常有用。
cacheboolFalse在内存中缓存数据集图像 (True/ram)、磁盘 (disk),或禁用它 (False).通过减少磁盘 I/O,提高训练速度,但代价是增加内存使用量。
deviceint 或 str 或 listNone指定用于训练的计算设备:单个GPU (device=0)、多个 GPU (device=[0,1])、CPU (device=cpu)、MPS for Apple silicon (device=mps),或自动选择最空闲的GPU (device=-1)或多个闲置 GPU (device=[-1,-1])
workersint8加载数据的工作线程数(每 RANK 如果多GPU 训练)。影响数据预处理和输入模型的速度,尤其适用于多GPU 设置。
projectstrNone保存训练结果的项目目录名称。允许有组织地存储不同的实验。
optimizerstr‘auto’为培训选择优化器。选项包括 SGD, Adam, AdamW, NAdam, RAdam, RMSProp 等,或 auto 用于根据模型配置进行自动选择。影响收敛速度和稳定性
classeslist[int]None指定要训练的类 ID 列表。有助于在训练过程中筛选出特定的类并将其作为训练重点。
freezeint 或 listNone冻结模型的前 N 层或按索引指定的层,从而减少可训练参数的数量。这对微调或迁移学习非常有用。
lr0float0.01初始学习率(即 SGD=1E-2, Adam=1E-3).调整这个值对优化过程至关重要,会影响模型权重的更新速度。
lrffloat0.01最终学习率占初始学习率的百分比 = (lr0 * lrf),与调度程序结合使用,随着时间的推移调整学习率。
momentumfloat0.937用于 SGD 的动量因子,或用于Adam 优化器的 beta1,用于将过去的梯度纳入当前更新。
weight_decayfloat0.0005L2正则化项,对大权重进行惩罚,以防止过度拟合。
warmup_epochsfloat3.0学习率预热的历元数,学习率从低值逐渐增加到初始学习率,以在早期稳定训练。

7. YOLOv12 的模型架构

7.1 YOLOv12 模型架构图

在这里插入图片描述


7.2 YOLOv12 模型配置文件

# YOLOv12 🚀, AGPL-3.0 license
# YOLOv12 object detection model with P3-P5 outputs. For Usage examples see https://docs.ultralytics.com/tasks/detect
# CFG file for YOLOv12-turbo# Parameters
nc: 80 # number of classes
scales: # model compound scaling constants, i.e. 'model=yolov12n.yaml' will call yolov12.yaml with scale 'n'# [depth, width, max_channels]n: [0.50, 0.25, 1024] # summary: 497 layers, 2,553,904 parameters, 2,553,888 gradients, 6.2 GFLOPss: [0.50, 0.50, 1024] # summary: 497 layers, 9,127,424 parameters, 9,127,408 gradients, 19.7 GFLOPsm: [0.50, 1.00, 512] # summary: 533 layers, 19,670,784 parameters, 19,670,768 gradients, 60.4 GFLOPsl: [1.00, 1.00, 512] # summary: 895 layers, 26,506,496 parameters, 26,506,480 gradients, 83.3 GFLOPsx: [1.00, 1.50, 512] # summary: 895 layers, 59,414,176 parameters, 59,414,160 gradients, 185.9 GFLOPs# YOLO12-turbo backbone
backbone:# [from, repeats, module, args]- [-1, 1, Conv,  [64, 3, 2]] # 0-P1/2- [-1, 1, Conv,  [128, 3, 2, 1, 2]] # 1-P2/4- [-1, 2, C3k2,  [256, False, 0.25]]- [-1, 1, Conv,  [256, 3, 2, 1, 4]] # 3-P3/8- [-1, 2, C3k2,  [512, False, 0.25]]- [-1, 1, Conv,  [512, 3, 2]] # 5-P4/16- [-1, 4, A2C2f, [512, True, 4]]- [-1, 1, Conv,  [1024, 3, 2]] # 7-P5/32- [-1, 4, A2C2f, [1024, True, 1]] # 8# YOLO12-turbo head
head:- [-1, 1, nn.Upsample, [None, 2, "nearest"]]- [[-1, 6], 1, Concat, [1]] # cat backbone P4- [-1, 2, A2C2f, [512, False, -1]] # 11- [-1, 1, nn.Upsample, [None, 2, "nearest"]]- [[-1, 4], 1, Concat, [1]] # cat backbone P3- [-1, 2, A2C2f, [256, False, -1]] # 14- [-1, 1, Conv, [256, 3, 2]]- [[-1, 11], 1, Concat, [1]] # cat head P4- [-1, 2, A2C2f, [512, False, -1]] # 17- [-1, 1, Conv, [512, 3, 2]]- [[-1, 8], 1, Concat, [1]] # cat head P5- [-1, 2, C3k2, [1024, True]] # 20 (P5/32-large)- [[14, 17, 20], 1, Detect, [nc]] # Detect(P3, P4, P5)

7.3 YOLOv12 模型架构详解

YOLOv12 模型结构包括:Backbone(主干网络)和 Head(头部网络)。Backbone 用作特征提取器,通过一系列卷积层处理输入图像,以生成不同尺度的分层特征图,捕获目标检测所需的基本空间和上下文信息。Head 负责多尺度特征融合,通过结合上采样、级联和卷积操作增强了特征表示,确保对小型、中型和大型目标的鲁棒检测。

1. Backbone(主干网络)

YOLOv12 主干网络的核心是 残差高效层聚合网络(R-ELAN),这是对传统 ELAN 结构的改进,引入了块级残差连接和特征聚合优化,将更深的卷积层与精心设置的残差连接融合在一起。具体地,YOLOv12 的 Backbone 由 Conv(卷积层)、C3k2 和 A2C2f 模块组成。

YOLOv12 的主干网络通过一系列卷积层处理输入图像,逐步降低其空间维度,同时增加特征图的深度。该过程首先由一个初始卷积层开始,用于提取低级特征;然后是其他卷积层,用于执行下采样以捕获层次化信息。第一阶段采用步长为 2 的 3×3 卷积来生成初始特征图。接下来是另一个卷积层,进一步降低空间分辨率,同时增加特征深度。当图像在主干网络中移动时,它会使用 C3k2 和 A2C2F 等专用模块进行多尺度特征学习。C3k2 模块在保持计算效率的同时增强了特征表示,而 A2C2F 模块则改进了特征融合,从而更好地理解空间和上下文。主干网络持续此过程,直到生成三个关键特征图:P3、P4 和 P5,每个图代表不同的特征提取尺度。


2. Head(头部网络)

YOLOv12 的头部网络负责合并多尺度特征并生成最终的目标检测预测。

具体地,通过 Concat(拼接层)、Upsample(上采样层)和 A2C2f 模块,对 Backbone 提取的特征进行特征融合和调整,通过上采样和拼接操作,整合不同层次的特征信息,增强特征的表达。

首先使用最近邻插值方法对最高分辨率特征图 (P5) 进行上采样。然后,将其与相应的低分辨率特征图 (P4) 连接起来,以创建精细的特征表示。融合后的特征将使用 A2C2F 模块进一步处理,以增强其表达能力。对下一个尺度重复类似的过程,即对精细的特征图进行上采样,并将其与低尺度特征 (P3) 连接起来。这种分层融合确保低级和高级特征都能参与最终检测,从而提升模型在不同尺度下检测目标的能力。特征融合后,网络将进行最终处理,为检测做好准备。经过优化的特征再次进行下采样,并在不同层级上进行合并,以增强目标表征。C3k2 模块应用于最大规模(P5/32-large),以确保在降低计算成本的同时保留高分辨率特征。

YOLOv12 的检测头由多个 Detect(检测层)组成,将分类和回归任务分离,以减少特征冲突。特征融合后的特征图被传递到最终检测层,该层对不同的目标类别进行分类和定位预测。


7.4 YOLO12 核心模块 A2C2f 的结构功能

A2C2f(Adaptive channel-wise and spatial attention with context fusion) 是 YOLO12 模型的关键结构,其结构如下。

A2C2f
├── cv1
│   ├── Conv2d(256, 128)
│   ├── BatchNorm2d(128)
│   └── SiLU()
├── cv2
│   ├── Conv2d(256, 256)
│   ├── BatchNorm2d(256)
│   └── SiLU()
└── m (ModuleList)└── Sequential├── ABlock│   ├── AAttn│   │   ├── qkv(Conv2d(128, 384))│   │   ├── proj(Conv2d(128, 128))│   │   └── pe(Conv2d(128, 128))│   └── MLP│       ├── Conv2d(128, 256)│       └── Conv2d(256, 128)└── ABlock├── AAttn│   ├── qkv(Conv2d(128, 384))│   ├── proj(Conv2d(128, 128))│   └── pe(Conv2d(128, 128))└── MLP├── Conv2d(128, 256)└── Conv2d(256, 128)

  • cv1 和 cv2:
    卷积层(Conv),分别将输入通道数从 256 转换到 128 (cv1) 和保持在 256 (cv2)。
    每个 Conv 都由一个 Conv2d 层、一个 BatchNorm2d 层以及一个激活函数(SiLU 或 Identity)组成。
  • m (ModuleList):
    包含了一个或多个 Sequential 模块,每个模块中有一个或多个 ABlock。
  • ABlock:
    每个 ABlock 包含一个注意力机制模块 AAttn 和一个多层感知机(MLP)模块。
    • AAttn (Attention Block):
      qkv: 一个卷积层,用于生成查询(query)、键(key)和值(value)向量。输出通道数为输入的三倍(在这个例子中,输入是 128,输出是 384)。
      proj: 另一个卷积层,用于将注意力结果投影回原始维度。
      pe: 位置编码(Position Encoding),通过一个深度可分离卷积(groups=128)实现,其核大小为 7x7,并带有适当的填充以确保输入和输出尺寸相同。
    • MLP (多层感知机):
      MLP 由两层卷积层构成,其中第一层扩展了特征维度(例如从 128 到 256),而第二层则将其压缩回到原来的维度(如从 256 回到 128)。每层之间使用 SiLU 作为激活函数,除了最后一层使用 Identity(即没有激活函数)。

【本节完】


版权声明:
欢迎关注『youcans动手学模型』系列
转发请注明原文链接:
【跟我学YOLO】(2)YOLO12 环境配置与基本应用
Copyright 2025 youcans
Crated:2025-07

如果您在研究中使用了 YOLO12,请引用水牛城大学和中国科学院大学的原作:
@article{tian2025yolov12,title={YOLOv12: Attention-Centric Real-Time Object Detectors},author={Tian, Yunjie and Ye, Qixiang and Doermann, David},journal={arXiv preprint arXiv:2502.12524},year={2025}
}@software{yolo12,author = {Tian, Yunjie and Ye, Qixiang and Doermann, David},title = {YOLOv12: Attention-Centric Real-Time Object Detectors},year = {2025},url = {https://github.com/sunsmarterjie/yolov12},license = {AGPL-3.0}
}

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

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

相关文章

Python爬虫实战:研究openpyxl库相关技术

1. 引言 在当今数字化时代,互联网上蕴含着海量有价值的数据。如何高效地获取这些数据并进行分析处理,成为数据科学领域的重要研究方向。网络爬虫作为一种自动化的数据采集工具,可以帮助我们从网页中提取所需的信息。而 openpyxl 作为 Python 中处理 Excel 文件的优秀库,能…

Redis学习其一

文章目录1.NoSQL概述1.1概述1.2Nosql的四大分类2.Redis入门2.1概述2.2基础知识2.2.1基础命令/语法2.2.2Redis为什么单线程还这么快2.3性能测试3.五大数据类型3.1Redis-key3.2String(字符串)3.3List(列表)3.4Set(集合)3.5Hash&#xff08;哈希&#xff09;3.6Zset&#xff08;有…

高性能架构模式——高性能缓存架构

目录 一、引入前提二、缓存架构的设计要点2.1、缓存穿透2.1.1、缓存穿透第一种情况:存储数据不存在2.1.2、缓存穿透第二种情况:缓存数据生成耗费大量时间或者资源2.2、缓存雪崩2.2.1、解决缓存雪崩的第一种方法:更新锁机制2.2.2、解决缓存雪崩的第二种方法:后台更新机制2.3…

ubuntu+windows双系统恢复

文章目录前言一、恢复windows1.直接在grub命令行输入exit退出2.手动查找windows引导文件先ls列出所有磁盘和分区查找各个分区是否包含引导文件设置引导分区以及引导文件路径启动windows二、在windows系统下删除Ubuntu残留引导文件三、准备ubuntu系统引导盘四、安装ubuntu系统五…

使用Dify构建HR智能助理,深度集成大模型应用,赋能HR招聘管理全流程,dify相关工作流全开源。

HR智能助理系统 &#x1f4cb; 项目概述 HR智能助理系统是一个基于AI技术的人力资源管理平台&#xff0c;旨在通过智能化工具提升招聘效率&#xff0c;优化候选人评估流程&#xff0c;并提供专业的面试方案生成服务。 &#x1f3af; 核心价值 提升招聘效率60%&#xff1a;自动化…

PowerBI实现仅在需要图表时显示图表

PowerBI实现仅在需要图表时显示图表实现效果点击维度前&#xff1a;点击维度后&#xff1a;实现步骤第一步&#xff0c;先创建一个矩阵表和一个柱形图第二步&#xff0c;添加一个新卡片图第三步&#xff0c;创建文本度量值Text "⭠ 选择一个地区"第四步&#xff0c;创…

信息收集知识总结

信息收集 在信息收集中&#xff0c;需要收集的信息&#xff1a;目标主机的DNS信息、目标IP地址、子域名、旁站和C段、CMS类型、敏感目录、端口信息、操作系统版本、网站架构、漏洞信息、服务器与中间件信息、邮箱、人员、地址等。 域名信息收集 拿到公司名或者一个域名&…

工作第一步建立连接——ssh

照本宣科 SSH&#xff08;Secure Shell&#xff0c;安全外壳协议&#xff09;是一种用于在不安全网络上进行安全远程登录和实现其他安全网络服务的协议.功能主要是远程登陆和文件传输&#xff08;使用scp&#xff09; 为了建立 SSH 远程连接&#xff0c;需要两个组件&#xf…

Markdown变身Word,解锁格式转换新姿势

目录一、引言二、在线转换工具使用法2.1 工具推荐2.2 操作步骤2.3 优缺点分析三、文本编辑器的内置功能或插件3.1 适用编辑器列举3.2 以 Visual Studio Code 为例的操作流程3.3 优势说明四、使用专门的转换软件4.1 Pandoc 软件介绍4.2 安装步骤4.3 命令行转换操作五、编程脚本实…

MR 处于 WIP 状态的WIP是什么

WIP是什么 在MR&#xff08;Merge Request 或代码合并请求&#xff09;中&#xff0c;WIP 是"Work In Progress" 的缩写&#xff0c;意思是“正在进行中”或“在制品”。当一个MR 被标记为WIP&#xff0c;通常表示它尚未准备好被合并&#xff0c;可能还在开发中&…

机器学习-线性回归模型和梯度算法

1. 线性回归模型1.1 线性回归模型线性回归模型&#xff1a;将数据拟合成一条直线。作用&#xff1a;预测数字作为输出。例子&#xff1a;房子的大小与房价的估计&#xff08;图表&#xff09;&#xff08;数据表&#xff09;1.2 训练集训练集&#xff1a;用于训练模型的数据集训…

时序预测 | Matlab代码实现VMD-TCN-GRU-MATT变分模态分解时间卷积门控循环单元多头注意力多变量时序预测

预测效果代码功能 代码主要功能 该代码实现了一个变分模态分解时间卷积门控循环单元多头注意力多变量时间序列预测模型&#xff0c;核心功能为&#xff1a; 使用VMD&#xff08;变分模态分解&#xff09;将原始信号分解为多个IMF分量对每个IMF分量构建TCN-GRU-MATT混合神经网络…

HTML5 离线存储

HTML5 离线存储&#xff08;通常指 Application Cache&#xff09;是早期用于实现 Web 应用离线访问的技术&#xff0c;但由于其设计缺陷已被废弃。现代 Web 开发中&#xff0c;取而代之的是更强大的 Service Worker Cache API 方案&#xff08;属于 Progressive Web Apps 技术…

JavaScript 性能优化实战:深入性能瓶颈,精炼优化技巧与最佳实践

前言 现代前端开发&#xff0c;不仅要“能跑”&#xff0c;更要“跑得快”。在用户体验为王的时代&#xff0c;JavaScript 性能优化已经成为前端工程师的必修课。 为什么要关注 JavaScript 性能 加载缓慢 → 用户流失卡顿滞后 → 交互体验崩溃资源浪费 → 设备电量与内存被吞…

文心4.5开源背后的战略棋局:百度为何选择All in开放?

文章目录引言&#xff1a;一场颠覆AI行业格局的孤注国内开源模型的崛起与威胁国际竞争格局的重塑1.技术维度&#xff1a;开源是突破模型性能瓶颈的“加速器”1.1 闭源模型的“内卷化”困境1.2 文心4.5的开源技术架构&#xff1a;从“黑箱”到“乐高”1.2.1文心4.5的技术创新1.2…

SAP学习笔记 - 开发46 - RAP开发 Managed App Metadata Extension 2 - Booking_M,BookSuppl_M

上一章讲了 RAP开发中&#xff0c;New Service Definition&#xff0c;Metadata Extension&#xff0c;在Metadata 文件中 复习了 lineItem&#xff0c;selectionField&#xff0c;Search&#xff0c;ObjectModel&#xff0c;Value Help&#xff0c;headerInfo 等内容。 SAP学…

# Win11开机卡死?无法进入登录界面?3招强制进安全模式,快速修复系统

Win11开机卡死&#xff1f;无法进入登录界面&#xff1f;3招强制进安全模式&#xff0c;快速修复系统一、问题描述&#xff1a; 当你的win11电脑开机后卡在图片界面就死机&#xff0c;无法进入登录界面&#xff0c;不显示windows徽标&#xff0c;不能正常启动&#xff0c;可能的…

快捷支付与网关支付:两种主流支付方式的深度解析

在当今数字化支付时代&#xff0c;快捷支付和网关支付作为两种主流的电子支付方式&#xff0c;为消费者和商家提供了多样化的支付选择。本文将深入探讨这两种支付方式的区别、适用场景及各自的优劣势&#xff0c;帮助您更好地理解现代支付生态。一、快捷支付&#xff1a;便捷高…

【WRFDA数据教程第一期】LITTLE_R 格式详细介绍

目录LITTLE_R 格式概述LITTLE_R 的结构1-Header Record 详解&#xff1a;观测的“身份证”2-Data Record&#xff1a;观测数据本体3-Ending Record&#xff1a;终止标志4-Tail Integers&#xff1a;尾部校验字段另-Missing Values&#xff08;缺测值处理&#xff09;Mandatory,…

一文读懂循环神经网络—从零实现长短期记忆网络(LSTM)

目录 一、遗忘门&#xff08;Forget Gate&#xff09;&#xff1a;决定 “该忘记什么” 二、输入门&#xff08;Input Gate&#xff09;&#xff1a;决定 “该记住什么新信息” 三、输出门&#xff08;Output Gate&#xff09;&#xff1a;决定 “该输出什么” 四、候选记忆…