结果排序规则表

  • 更新时间:2025-12-13 11:58:47

结果排序规则表

YOLO识别结果排序规则表

参数 排序方向/规则 描述
-1 不排序(默认) 不对识别结果集进行任何排序操作(追求效率可选)
1 从左到右 按矩形框的x坐标升序排列(x越小,越靠左,排在前面)
2 从右到左 按矩形框的x坐标降序排列(x越大,越靠右,排在前面)
3 从上到下 按矩形框的y坐标升序排列(y越小,越靠上,排在前面)
4 从下到上 按矩形框的y坐标降序排列(y越大,越靠下,排在前面)
5 从左上到右下 按矩形框x+y的和升序排列(左上区域值更小,排在前面)
6 从右上到左下 按矩形框x-y的差降序排列(右上区域差值更大,排在前面)
7 从左下到右上 按矩形框x-y的差升序排列(左下区域差值更小,排在前面)
8 从右下到左上 按矩形框x+y的和降序排列(右下区域值更大,排在前面)
9 从左到右并且从上到下 优先按x坐标升序,x相同时按y坐标升序
10 从右到左并且从上到下 优先按x坐标降序,x相同时按y坐标升序
11 从左到右并且从下到上 优先按x坐标升序,x相同时按y坐标降序
12 从右到左并且从下到上 优先按x坐标降序,x相同时按y坐标降序
13 大的面积在前面 按矩形框面积降序排列(面积越大,排在前面)
14 小的面积在前面 按矩形框面积升序排列(面积越小,排在前面)
其他(默认) 从左到右(默认规则) 按矩形框的x坐标升序排列(与编码1的规则一致)

具体应用

例如现在我有一个数据集,我主要用来识别数字和一个逗号字符串,我的数据集大多数都是205x30的图片,你觉得我应该用什么样的尺寸比较合适?用什么样的排序规则比较合适?

首先我们要知道:yolo输入的图片尺寸必须是32的倍数,我们的图片是高度为30的,因此使用32来作为模型的输入高度,宽度是205,我们找到最近的32的倍数,就是192,因此输入的尺寸就定好了:192x32

//训练模型的py代码 :
from ultralytics import YOLO
if __name__ == '__main__':
    model = YOLO(r"yolo11n.pt")  # 指定权重 (项目/yolo11n.pt)
    model.train(
        data=r"hydd2.yaml",  # 指定你的数据集配置文件 (项目/ultralytics/cfg/datasets/cm.yaml)
        epochs=50,  # 定义训练的总轮数
        imgsz=[32, 192],  # 指定输入图片的尺寸[高度,宽度]
        batch=2,  # 定义批次大小 每次同时向模型喂送 2 张图片进行处理
        cache=False,  # 不用缓存 避免内存溢出 (如果电脑内存大、可以开启,因为速度会快一点)
        workers=4,  # 指定数据加载时使用的 CPU 线程数 推荐:0、4、8 都是可以的
    )
# 导出为ONNX格式(高在前、宽在后)
model.export(format='onnx', imgsz=[32, 192])

最终把onnx转为ncnn模型时的参数:高在前、宽在后

pnnx best.onnx inputshape=[1,3,32,192]f32 device=cpu

接下来确定排序方向,由于我制作的是文字识别,排序方向当然就是从左到右的,因此代码这么写:

let yolo = $yolo.create(12);
yolo.setSize(192,32);//先宽、后高
yolo.setDir(1);//识别结果按照从左到右排序
//开始加载模型
yolo.init("res/ocr.bin","res/ocr.param",["0","1","2","3","4","5","6","7","8","9",","]);