目录

 第1章 训练模型和推理框架

1.1 训练模型

1.2 推理框架

1.3 训练模型与推理框架的关系

1.4 推理框架在实际应用场景中的作用

1.5 主流的推理框架

第2章 yolov8的onnx输入输出详解

2.1 coco数据集

2.2 目标检测

2.2.1 输入和输出参数物理意义

2.2.2 自定义数据集

2.4 实例分割

2.5 旋转目标检测

2.6 关键点检测    

第3章 yolov5的onnx输入输出详解

3.1 coco数据集

3.2 输入输出参数的物理意义

3.3 自定义数据集

第4章 yolov5的RKNN输入输出详解

第5章 yolov8的RKNN输入输出详解​​​​​​​

5.1 Downsample + BatchNorm + LeakyReLU模块

第xxx章 参考文献


 第1章 训练模型和推理框架

1.1 训练模型

        AI算法开发借助训练框架完成。

1.2 推理框架

        AI算法落地借助推理框架完成。

1.3 训练模型与推理框架的关系

1.4 推理框架在实际应用场景中的作用

1.5 主流的推理框架

第2章 yolov8的onnx输入输出详解

2.1 coco数据集

coco数据集有80个目标类别

2.2 目标检测

2.2.1 输入和输出参数物理意义

(1)输入的【1 * 3 * 640 * 640】。1表示一张图像(batch_size),3表示RGB三个通道,640*640表示图像的宽和高。

(2)输出的【1*84*8400】。1表示一张图像(batch_size)。

84表示:[ x, y, w, h, class_score_1, class_score_2, ..., class_score_80 ]。如果是检测5个类别就是4+ 5 = 9;

x:目标中心点的 x 坐标;

y:目标中心点的 y 坐标;

w:目标框的宽度;

h:目标框的高度;

class_score_xxx:80 个类别的分类概率;




YOLOv8(尤其是 v8 及之后版本)采用的是 Anchor-Free(无锚框)设计;

        每个网格单元(grid cell)只负责预测一个边界框(Anchor Boxes)(而不是像 YOLOv3/v5 那样每个 grid 预设 3 个 anchor);

至此8400表为:(80*80 + 40*40 + 20*20)* 1;

特征图尺寸 对应 stride 网格数量(即预测框数)
80 × 80 8 80 × 80 = 6400
40 × 40 16 40 × 40 = 1600
20 × 20 32 20 × 20 = 400

数学上(代码处理中),需要处理8400行数据,每一行有84个物理量(变成了矩阵解析)。



2.2.2 自定义数据集

如果检测类别是5个类别,那么就会变成1*9*8400。

在实际开发中,尽量关注输入和输出即可,需要灵活掌握。

2.4 实例分割

2.5 旋转目标检测

2.6 关键点检测    

第3章 yolov5的onnx输入输出详解

3.1 coco数据集

coco数据集有80个目标类别

3.2 输入输出参数的物理意义

(1)输入的【1 * 3 * 640 * 640】。1表示一张图像(batch_size),3表示RGB三个通道,640*640表示图像的宽和高。

(2)输出的【1*25200*85】。1表示一张图像(batch_size)。

84表示:[ x, y, w, h, objectness,class_score_1, class_score_2, ..., class_score_80 ]。如果是检测5个类别就是4+ 5 = 9;

x:目标中心点的 x 坐标;

y:目标中心点的 y 坐标;

objectness得分:表示该边界框内含有物体的概率,范围从0到1。

w:目标框的宽度;

h:目标框的高度;

class_score_xxx:80 个类别的分类概率;




YOLOv5采用的是 Anchor-Based设计;

        每个网格单元(grid cell)负责预测3个边界框(Anchor Boxes);

至此25200表为:(80*80 + 40*40 + 20*20)* 3;

特征图尺寸 对应 stride 网格数量(即预测框数)
80 × 80 8 80 × 80 = 6400
40 × 40 16 40 × 40 = 1600
20 × 20 32 20 × 20 = 400

数学上(代码处理中),需要处理25200行数据,每一行有85个物理量(变成了矩阵解析)。

3.3 自定义数据集

如果检测类别是7个类别,那么就会变成1*25200*( 4 + 1 + 7)。

在实际开发中,尽量关注输入和输出即可,需要灵活掌握。   

第4章 yolov5的RKNN输入输出详解

第5章 yolov8的RKNN输入输出详解​​​​​​​​​​​​​​

5.1 Downsample + BatchNorm + LeakyReLU模块

def DBL(c1, c2, k=1, s=1, p=None, act=True):
    """
    构建一个标准卷积块:Conv2d + BatchNorm2d + (可选)LeakyReLU
    
    参数:
        c1: 输入通道数
        c2: 输出通道数
        k: 卷积核大小 (kernel size)
        s: 步长 (stride)
        p: 填充 (padding),若为 None 则自动计算为 (k-1)//2
        act: 是否添加 LeakyReLU 激活函数
    """
    if p is None:
        p = (k - 1) // 2  # 自动 padding,保持尺寸不变(same padding)

    layers = [
        nn.Conv2d(c1, c2, kernel_size=k, stride=s, padding=p, bias=False),
        nn.BatchNorm2d(c2)
    ]
    
    if act:
        layers.append(nn.LeakyReLU(0.1, inplace=True))
    
    return nn.Sequential(*layers)

第xxx章 参考文献

参考文档

文献二

文献三

文献四

自定义推理框架​​​​​​​

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐