15. YOLO26

Ultralytics YOLO26 是YOLO系列实时目标检测器的最新版本, 专为边缘和低功耗设备而设计 。 它采用流线型设计,去除了不必要的复杂性,同时融入了有针对性的创新,实现了更快、更轻量、更易于部署的部署方案。

broken

YOLO26的特点:

  • 端到端的无NMS推理和去除DFL模块 移除DFL,无NMS推理,大幅简化部署流程、降低延迟,提升系统稳定性,拓宽了对边缘和低功耗设备的支持。

  • 支持多任务统一架构 支持分类、检测、分割、姿态估计、旋转框检测五大任务,极大简化开发与维护成本。

  • 训练优化: 引入了MuSGD优化器,该优化器带来了增强的稳定性和更快的收敛,将语言模型中的优化进展转移到计算机视觉领域。

  • 任务特定优化: 实例分割中引入语义分割损失以改善模型收敛,以及升级的原型模块,该模块利用多尺度信息以获得卓越的掩膜质量。

本章将简单测试YOLO26的 目标检测 、 实例分割 、 姿态检测 、 旋转目标检测 、 深度估计 模型,然后在鲁班猫rk系列板卡上部署。

15.1. YOLO26目标检测

在个人PC上使用Anaconda创建一个yolo26开发环境,然后简单测试yolo26目标检测。

conda create -n yolo26 python=3.10
conda activate yolo26

# 配置pip源(可选)
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple/

# 安装或者更新
pip install -U ultralytics

# 或者从源码安装
git clone https://github.com/ultralytics/ultralytics.git
cd ultralytics
pip install -e .

# 检测版本
(yolo26) llh@llh:/xxx$ yolo version
8.4.2

使用yolo命令或者python程序测试 YOLO26目标检测 。

# 使用yolo命令测试yolo26n.pt模型
(yolo26) llh@llh:/xxx$ yolo detect predict model=yolo26n.pt source='https://ultralytics.com/images/bus.jpg'
Ultralytics 8.4.2 🚀 Python-3.10.15 torch-2.5.1 CUDA:0 (NVIDIA GeForce RTX 4070 Ti SUPER, 16376MiB)
YOLO26n summary (fused): 122 layers, 2,408,932 parameters, 0 gradients, 5.4 GFLOPs

Downloading https://ultralytics.com/images/bus.jpg to 'bus.jpg': 100% ━━━━━━━━━━━━ 134.2KB 931.7KB/s 0.1s
image 1/1 /mnt/e/work/yolo26/bus.jpg: 640x480 4 persons, 1 bus, 68.7ms
Speed: 3.0ms preprocess, 68.7ms inference, 14.0ms postprocess per image at shape (1, 3, 640, 480)
Results saved to /mnt/e/work/yolo26/runs/detect/predict
💡 Learn more at https://docs.ultralytics.com/modes/predict
VS Code: view Ultralytics VS Code Extension ⚡ at https://docs.ultralytics.com/integrations/vscode

将会拉取yolo26n.pt文件,运行推理,结果保存在runs/detect/predict目录下,使用图像查看器查看:

broken

15.1.1. 模型转换

1、导出onnx模型

简单修改 Ultralytics YOLO26 模型, 简单修改模型输出结构,主要的修改请参考 YOLO26 , 可以自行修改输出的结构,比如修改成三个box_head输出加三个cls_head输出(对应的也要修改板端部署后处理)。

ultralytics/nn/modules/head.py
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
class Detect(nn.Module):
# 省略......................

    def forward_head(
        self, x: list[torch.Tensor], box_head: torch.nn.Module = None, cls_head: torch.nn.Module = None
    ) -> dict[str, torch.Tensor]:
        """Concatenates and returns predicted bounding boxes and class probabilities."""
        if box_head is None or cls_head is None:  # for fused inference
            return dict()

        + if self.export and self.format == "rknn":  # for RKNN export
        +    z = []
        +    for i in range(self.nl):
        +        z.append(torch.cat((box_head[i](x[i]), cls_head[i](x[i]).sigmoid()), 1))
        +    return z

        #if self.export and self.format == "rknn":  # for RKNN export
        #    y = []
        #   for i in range(self.nl):
        #       y.append(box_head[i](x[i]))
        #       cls = torch.sigmoid(cls_head[i](x[i]))
        #       cls_sum = torch.clamp(cls.sum(1, keepdim=True), 0, 1)
        #       y.append(cls)
        #       y.append(cls_sum) # 可选
        #   return y

        bs = x[0].shape[0]  # batch size
        boxes = torch.cat([box_head[i](x[i]).view(bs, 4 * self.reg_max, -1) for i in range(self.nl)], dim=-1)
        scores = torch.cat([cls_head[i](x[i]).view(bs, self.nc, -1) for i in range(self.nl)], dim=-1)
        return dict(boxes=boxes, scores=scores, feats=x)
# 获取修改过后的程序
git clone  https://github.com/mmontol/ultralytics.git

# 修改./ultralytics/cfg/default.yaml 中model文件路径,默认为yolo26n.pt,若自己训练模型,请调接至对应的路径。支持检测、分割、姿态、旋转框检测模型。

# 导出onnx模型
export PYTHONPATH=./
python ./ultralytics/engine/exporter.py
Downloading https://github.com/ultralytics/assets/releases/download/v8.4.0/yolo26n.pt to 'x/yolo26/yolo26n.pt': 100% ━━━━━━━━━━━━ 5.3MB 746.5KB/s 7.3s
Ultralytics 8.4.2 🚀 Python-3.11.11 torch-2.4.0+cu121 CPU (Intel Core(TM) i7-14700F)
WARNING ⚠️ Rockchip RKNN export requires a missing 'name' arg for processor type. Using default name='rk3588'.
YOLO26n summary (fused): 122 layers, 2,408,932 parameters, 0 gradients

PyTorch: starting from 'x/yolo26/yolo26n.pt' with input shape (16, 3, 640, 640)
BCHW and output shape(s) ((16, 84, 80, 80), (16, 84, 40, 40), (16, 84, 20, 20)) (5.3 MB)

RKNN: starting export with onnx 1.17.0 opset 19...
RKNN: export success ✅ 0.5s, saved as 'x/yolo26/yolo26n.onnx' (9.3 MB)
Export complete (1.9s)
Results saved to x/yolo26
Predict:         yolo predict task=detect model=x/yolo26/yolo26n.onnx imgsz=640
Validate:        yolo val task=detect model=x/yolo26/yolo26n.onnx imgsz=640 data=/home/lq/codes/ultralytics/ultralytics/cfg/datasets/coco.yaml
Visualize:       https://netron.app

导出的onnx模型会在同目录下,使用 netron 查看其模型输入输出:

broken

2、转成rknn模型

使用toolkit2工具,将onnx模型转换成rknn模型:

Usage: python3 onnx2rknn.py onnx_model_path [platform] [dtype(optional)] [output_rknn_path(optional)]
    platform choose from [rk3562,rk3566,rk3568,rk3588,rk3576,rk1808,rv1109,rv1126]
    dtype choose from [i8, fp] for [rk3562,rk3566,rk3568,rk3588,rk3576]
    dtype choose from [u8, fp] for [rk1808,rv1109,rv1126]

# 测试鲁班猫rv1106,设置rv1106,rv1106目前只支持yolo26量化模型
# 例如: python onnx2rknn.py  ./yolo26n.onnx rv1106 i8 ./yolo26n-rv1106.rknn

# 测试鲁班猫4,设置参数rk3588,并且使用默认量化数据
(toolkit2.3.2) llh@llh:/xxx/yolo11$ python onnx2rknn.py ./yolo26n.onnx rk3588 i8 ./yolo26_i8.rknn
I rknn-toolkit2 version: 2.3.2
--> Config model
done
--> Loading model
I Loading : 100%|██████████████████████████████████████████████| 204/204 [00:00<00:00, 76649.47it/s]
done
--> Building model
I OpFusing 0: 100%|██████████████████████████████████████████████| 100/100 [00:00<00:00, 610.01it/s]
I OpFusing 1 : 100%|█████████████████████████████████████████████| 100/100 [00:00<00:00, 352.66it/s]
I OpFusing 0 : 100%|█████████████████████████████████████████████| 100/100 [00:00<00:00, 157.82it/s]
I OpFusing 1 : 100%|█████████████████████████████████████████████| 100/100 [00:00<00:00, 152.51it/s]
I OpFusing 2 : 100%|██████████████████████████████████████████████| 100/100 [00:01<00:00, 92.92it/s]
W build: found outlier value, this may affect quantization accuracy
                        const name                                  abs_mean    abs_std     outlier value
                        model.2.m.0.cv2.conv.weight                 1.90        2.51        -29.822
                        model.23.one2one_cv3.1.1.0.conv.weight      0.33        0.71        14.041
                        model.23.one2one_cv3.1.1.1.conv.weight      0.23        0.33        -9.717
                        model.23.one2one_cv3.0.1.0.conv.weight      0.65        1.21        -12.786
                        model.23.one2one_cv3.0.1.1.conv.weight      0.21        0.28        -9.696
I GraphPreparing : 100%|███████████████████████████████████████| 261/261 [00:00<00:00, 15191.90it/s]
I Quantizating : 100%|████████████████████████████████████████████| 261/261 [00:06<00:00, 40.94it/s]
# 省略。。
I rknn building ...
I rknn building done.
done
--> Export rknn model
done

rknn保存在当前目录下,文件名为yolo26_i8.rknn(执行导出命令时可以自行修改名称)。

15.1.2. 模型部署

yolo26目标检测模型部署流程(yolo26n):

读取原始图像 → 模型初始化 → 预处理 → NPU推理 → 后处理 → 绘制和保存结果
  • 读取原始图像:可以使用OpenCV或者其他库读取图像

  • 模型初始化:读取rknn模型文件,使用rknn_init函数初始化

  • 预处理:使用RGA或者CPU对图像进行缩放(保持长宽比的缩放),注意数据排布(NHWC),然后设置模型输入(在模型转换时设置了图像的归一化和均值)

  • NPU推理:模型输入图像,模型输出三个tensor(或者六个), 3个尺度(cls + box,cls_sum),box是框坐标和cls是80个类别的置信度,cls_sum是新增置信度的总和(可选)

  • 后处理:获取模型输出,对3个尺度(80×80, 40×40, 20×20)分别处理后合并,筛选出分数高的框,框坐标转换成原始图像的坐标

  • 绘制和保存结果:在原图像上绘制类别名和置信度,并保存结果。

1、测试鲁班猫4板卡

鲁班猫1/2/3/4/5板卡直接在板卡系统中编译, 板卡系统中获取配套例程,然后将前面转换出的rknn模型放到例程model目录下。

# 板卡上安装相关软件
sudo apt update
sudo apt install libopencv-dev git make gcc g++ libsndfile1-dev

# 鲁班猫系统中,使用命令直接拉取教程配套例程(如果以前拉取过,尝试git pull更新下)
git clone https://gitee.com/LubanCat/lubancat_ai_manual_code --depth 1

# 切换到例程目录
cd lubancat_ai_manual_code/example/yolo26/cpp

# 添加可执行权限
chmod +x build-linux.sh

# 在lubancat4板卡(rk3588s)上编译,设置rk3588,,如果是鲁班猫3,请设置rk3576。
cat@lubancat:/xxx/example/yolo26/cpp$ ./build-linux.sh -t rk3588
./build-linux.sh -t rk3588
===================================
TARGET_SOC=rk3588
INSTALL_DIR=/home/cat/lubancat_ai_manual_code/example/yolo26/cpp/install/rk3588_linux
BUILD_DIR=/home/cat/lubancat_ai_manual_code/example/yolo26/cpp/build/build_rk3588_linux
ENABLE_DMA32=OFF
DISABLE_RGA=OFF
BUILD_TYPE=Release
ENABLE_ASAN=OFF
CC=aarch64-linux-gnu-gcc
CXX=aarch64-linux-gnu-g++
# 省略.....
[  8%] Built target imageutils
[ 16%] Built target fileutils
[ 25%] Built target imagedrawing
[ 41%] Built target yolo26_det_demo
[ 58%] Built target yolo26_seg_demo
[ 75%] Built target yolo26_pose_demo
[ 91%] Built target yolo26_obb_demo
[100%] Built target audioutils
Install the project...
# 省略.....

# 如果需要取消其他yolo26系列模型例程编译,修改CMakeLists.txt,注释相关编译,例如下面注释yolo26 seg编译

    # yolo26_seg_demo
    #buildtarget(NAME yolo26_seg_demo
    #    INCS ${CMAKE_CURRENT_SOURCE_DIR} ${LIBRKNNRT_INCLUDES} ${LIBTIMER_INCLUDES}
    #   SRCS yolo26_seg_demo.cc postprocess_seg.cc rknpu2/yolo26_seg.cc
    #   DEPS imageutils fileutils imagedrawing ${LIBRKNNRT} ${OpenCV_LIBS} dl
    # )

重要

如果编译出现:CMake Error at /xxx/3rdparty/CMakeLists.txt:1 (cmake_minimum_required): CMake 3.15 or higher is required. You are running version xxx, 请修改3rdparty/CMakeLists.txt的cmake_minimum_required要求,或者自行拉取编译安装符合要求的 cmake 。

在install/rk3588_linux目录下将生成yolo26_det_demo可执行文件 (其他yolo26系列模型部署类似)。

# 测试lubancat-4 固定cpu,npu频率
# 命令使用 ./yolo26_det_demo <model_path> <image_path>
cat@lubancat:~/xxx/cpp/install/rk3588_linux$ ./yolo26_det_demo  ./model/yolo26n_i8.rknn ./model/bus.jpg
model input num: 1, output num: 3
input tensors:
index=0, name=images, n_dims=4, dims=[1, 640, 640, 3], n_elems=1228800, size=1228800, fmt=NHWC, type=INT8, qnt_type=AFFINE, zp=-128, scale=0.003922
output tensors:
index=0, name=output0, n_dims=4, dims=[1, 84, 80, 80], n_elems=537600, size=537600, fmt=NCHW, type=INT8, qnt_type=AFFINE, zp=-109, scale=0.034189
index=1, name=631, n_dims=4, dims=[1, 84, 40, 40], n_elems=134400, size=134400, fmt=NCHW, type=INT8, qnt_type=AFFINE, zp=-126, scale=0.056458
index=2, name=653, n_dims=4, dims=[1, 84, 20, 20], n_elems=33600, size=33600, fmt=NCHW, type=INT8, qnt_type=AFFINE, zp=-128, scale=0.072688
model is NHWC input fmt
model input height=640, width=640, channel=3
-- init_yolo26_model use: 22.298000 ms
origin size=810x1080 crop size=800x1072
input image: 810 x 1080, subsampling: 4:2:0, colorspace: YCbCr, orientation: 1
-- read_image use: 6.429000 ms
scale=0.592593 dst_box=(80 0 559 639) allow_slight_change=1 _left_offset=80 _top_offset=0 padding_w=160 padding_h=0
src width is not 4/16-aligned, convert image use cpu
-- preprocess use: 8.822000 ms
-- rknn inference use: 22.840000 ms
-- get output and postprocess use: 1.628000 ms
person @ (0 550 64 872) 0.452
bus @ (3 231 803 757) 0.945
person @ (221 405 345 864) 0.872
person @ (47 399 236 901) 0.872
person @ (668 394 810 877) 0.872
write_image path: out.png width=810 height=1080 channel=3 data=0xaaaaf7f63860

保存结果图片为out.png,使用图像编辑器查看:

broken

2、测试鲁班猫rv1106板卡(目前支持yolo26目标检测模型)

测试rv1106,使用交叉编译器编译程序。

# 获取交叉编译器armhf-uclibcgnueabihf,从配套网盘或者 https://console.zbox.filez.com/l/H1fV9a (rknn)
# 解压交叉编译文件到/opt目录下

# 获取配套程序(如果前面拉取过,就不需要重新获取)
git clone https://gitee.com/LubanCat/lubancat_ai_manual_code --depth 1
cd lubancat_ai_manual_code/example/yolo26/cpp

# 设置交叉编译器,请根据实际目录修改路径
export GCC_COMPILER=/opt/arm-rockchip830-linux-uclibcgnueabihf/bin/arm-rockchip830-linux-uclibcgnueabihf

# 然后交叉编译程序
./build-linux.sh -t rv1106

执行程序,需要将install/rv1106_linux目录下文件传输到板卡, 以及前面转换的rknn模型也传输到板卡,然后自行命令:

# 修改可执行权限
chmod +x yolo26_det_demo

# ./yolo26_det_demo ./yolo26n-rv1106.rknn ./model/bus.jpg
model input num: 1, output num: 3
input tensors:
index=0, name=images, n_dims=4, dims=[1, 640, 640, 3], n_elems=1228800, size=1228800, fmt=NHWC, type=INT8, qnt_type=AFFINE, zp=-128, scale=0.003922
output tensors:
index=0, name=output0, n_dims=4, dims=[1, 80, 80, 84], n_elems=537600, size=537600, fmt=NHWC, type=INT8, qnt_type=AFFINE, zp=-109, scale=0.034189
index=1, name=679, n_dims=4, dims=[1, 40, 40, 84], n_elems=134400, size=134400, fmt=NHWC, type=INT8, qnt_type=AFFINE, zp=-126, scale=0.056458
index=2, name=701, n_dims=4, dims=[1, 20, 20, 84], n_elems=33600, size=33600, fmt=NHWC, type=INT8, qnt_type=AFFINE, zp=-128, scale=0.072688
input_attrs[0].size_with_stride=1228800
model is NHWC input fmt
model input height=640, width=640, channel=3
-- init_yolo26_model use: 35.332001 ms
origin size=640x640 crop size=640x640
input image: 640 x 640, subsampling: 4:2:0, colorspace: YCbCr, orientation: 1
-- read_image use: 27.007999 ms
scale=1.000000 dst_box=(0 0 639 639) allow_slight_change=1 _left_offset=0 _top_offset=0 padding_w=0 padding_h=0
rga_api version 1.10.1_[0]
rknn_run
-- inference_yolo26_model use: 133.729996 ms
person @ (79 327 119 517) 0.395
bus @ (84 135 556 449) 0.945
person @ (211 240 285 512) 0.872
person @ (108 237 224 534) 0.872
person @ (476 234 560 520) 0.800
write_image path: out.png width=640 height=640 channel=3 data=0xa6168000
-- draw boxs use: 733.934998 ms

15.2. YOLO26深度估计

Ultralytics 官方为YOLO26推出了专门的单目深度估计(Monocular Depth Estimation)模型, 使用RGB图像,预测出每个像素点到相机的距离(单位:米),输出是一张与输入图像对齐的密集深度图,每个像素值代表该点的空间深度。

深度估计系列模型YOLO26n/s/m/l/x-depth:

模型

输入尺寸

参数量

YOLO26n-depth

768

6.3M

YOLO26s-depth

768

13.2M

YOLO26m-depth

768

23.3M

YOLO26l-depth

768

27.7M

YOLO26x-depth

768

57.0M

简单更新或者安装ultralytics,然后使用命令行方式测试yolo26 depth。

# 安装或者更新ultralytics
pip install -U ultralytics

# 检测版本
(yolo26) llh@llh:/xxx$ yolo version
8.4.153

# 使用yolo命令测试yolo26n-depth.pt
(yolo26) llh@llh:/xxx$ yolo depth predict model=yolo26n-depth.pt source='https://ultralytics.com/images/bus.jpg

Downloading https://github.com/ultralytics/assets/releases/download/v8.4.0/yolo26n-depth.pt to 'yolo26n-depth.pt': 100% ━━━━━━━━━━━━ 12.4MB 3.1MB/s 4.0s
Ultralytics 8.4.153 🚀 Python-3.10.15 torch-2.5.1 CUDA:0 (NVIDIA GeForce RTX 4070 Ti SUPER, 16376MiB)
YOLO26n-depth-log summary (fused): 108 layers, 6,345,865 parameters, 0 gradients, 32.5 GFLOPs

Found https://ultralytics.com/images/bus.jpg locally at bus.jpg
image 1/1 /xxx/bus.jpg: 768x576 depth 2.22-17.84m, 8.3ms
Speed: 56.9ms preprocess, 8.3ms inference, 0.2ms postprocess per image at shape (1, 3, 768, 576)
Results saved to /xxx/runs/depth/predict
💡 Learn more at https://docs.ultralytics.com/modes/predict
VS Code: view Ultralytics VS Code Extension ⚡ at https://docs.ultralytics.com/integrations/vscode

测试结果保存在runs/depth/predict目录下。

15.2.1. 导出onnx模型

和其他yolo26系列模型不同, 导出yolo26-depth模型是直接使用Ultralytics提供的方法,没有进行模型修改或者裁剪等操作。

# 使用yolo命令导出,可以使用imagz参数修改模型输入尺寸,教程使用默认尺寸:768*768

(yolov11) llh@llh:/xxx/work/yolo26$ yolo export model=yolo26n-depth.pt format=onnx
Ultralytics 8.4.153 🚀 Python-3.10.15 torch-2.5.1 CPU (Intel Core i7-14700F)
YOLO26n-depth-log summary (fused): 108 layers, 6,345,865 parameters, 0 gradients, 46.9 GFLOPs

PyTorch: starting from 'yolo26n-depth.pt' with input shape (1, 3, 768, 768) BCHW and output shape(s) (1, 1, 768, 768) (12.4 MB)

ONNX: starting export with onnx 1.17.0 opset 18...
ONNX: slimming with onnxslim 0.1.82...
ONNX: export success ✅ 1.9s, saved as 'yolo26n-depth.onnx' (19.8 MB)

Export complete (2.5s)
Results saved to /xxx/yolo26n-depth.onnx
Predict:         yolo predict task=depth model=yolo26n-depth.onnx imgsz=768
Validate:        yolo val task=depth model=yolo26n-depth.onnx imgsz=768 data=/home/rick/ultralytics_depth_anything/
ultralytics/cfg/datasets/depth-mega-v11-imagenet-u7.yaml
Visualize:       https://netron.app
💡 Learn more at https://docs.ultralytics.com/modes/export
VS Code: view Ultralytics VS Code Extension ⚡ at https://docs.ultralytics.com/integrations/vscode

将在当前目录下生成onnx模型,使用 netron 查看下输入和输出:

broken

15.2.2. 导出rknn模型

使用toolkit2导出rknn模型,toolkit2安装请参考前面教程。导出脚本请查看配套例程的tools目录下文件,测试模型默认没有量化。

# python onnx2rknn.py 查看参数信息

(toolkit2_2.3.2) llh@llh:/xxx/rknn$ python onnx2rknn.py ../yolo26n-depth.onnx rk3588 fp ./depth/yolo26n-depth.rknn
I rknn-toolkit2 version: 2.3.2
--> Config model
done
--> Loading model
I Loading : 100%|██████████████████████████████████████████████| 192/192 [00:00<00:00, 52015.65it/s]
done
--> Building model
W build: The dataset='/mnt/e/work/rv1106/rknn_model_zoo/datasets/COCO/coco_subset_20.txt' is ignored because do_quantization = False!
I OpFusing 0: 100%|██████████████████████████████████████████████| 100/100 [00:00<00:00, 989.26it/s]
I OpFusing 1 : 100%|█████████████████████████████████████████████| 100/100 [00:00<00:00, 428.67it/s]
I OpFusing 0 : 100%|█████████████████████████████████████████████| 100/100 [00:00<00:00, 177.88it/s]
I OpFusing 1 : 100%|█████████████████████████████████████████████| 100/100 [00:00<00:00, 171.72it/s]
I OpFusing 2 : 100%|██████████████████████████████████████████████| 100/100 [00:01<00:00, 65.68it/s]
I rknn building ...
I rknn building done.
done
--> Export rknn model
done

将在指定目录下生成rknn文件,需要将其传送到板卡端。

15.2.3. 部署推理

yolo26深度估计模型部署流程(yolo26n):

读取图像和预处理 → 模型初始化 → NPU推理 → 后处理 → 绘制和保存结果
  • 读取图像和预处理:配套例程默认使用OpenCV进行图像读取和预处理(图像缩放到模型输入尺寸,例程默认是没有使用letterbox,可自行开启)

  • 模型初始化:读取rknn模型文件,使用rknn_init函数初始化

  • NPU推理:设置模型输入,参数pass_through=0,rknn内部对图像进行归一化等操作,得到模型输出等

  • 后处理:深度图还原

  • 绘制和保存结果:深度图伪彩化,热力图叠加原图,主要用于查看

板卡上获取例程,然后编译:

# 板卡上安装opencv,git等等相关软件
sudo apt update
sudo apt install libopencv-dev git make gcc g++ libsndfile1-dev

# 获取配套程序(如果前面测试拉取过,就不需要重新获取)
git clone https://gitee.com/LubanCat/lubancat_ai_manual_code --depth 1
cd lubancat_ai_manual_code/example/yolo26/cpp

# 切换到例程目录
cd lubancat_ai_manual_code/example/yolo26/cpp

# 在lubancat4板卡(rk3588s)上编译,设置rk3588,,如果是鲁班猫3,请设置rk3576。
cat@lubancat:/xxx/example/yolo26/cpp$ ./build-linux.sh -t rk3588 -j
./build-linux.sh -t rk3588
===================================
TARGET_SOC=rk3588
INSTALL_DIR=/home/cat/lubancat_ai_manual_code/example/yolo26/cpp/install/rk3588_linux
BUILD_DIR=/home/cat/lubancat_ai_manual_code/example/yolo26/cpp/build/build_rk3588_linux
ENABLE_DMA32=OFF
DISABLE_RGA=OFF
BUILD_TYPE=Release
ENABLE_ASAN=OFF
CC=aarch64-linux-gnu-gcc
CXX=aarch64-linux-gnu-g++
# 省略.....
[  8%] Built target imageutils
[ 16%] Built target fileutils
[ 25%] Built target imagedrawing
[ 41%] Built target yolo26_det_demo
[ 58%] Built target yolo26_seg_demo
[ 75%] Built target yolo26_pose_demo
[ 91%] Built target yolo26_obb_demo
Install the project...
# 省略.....

重要

yolo26-depth例程使用了系统默认opencv读取图像,编译例程时需要添加-j参数, ``./build-linux.sh -t rk3588 -j `` , 避免和自带的库冲突。

在install/rk3588_linux目录下将生成yolo26_depth_demo可执行文件 (其他yolo26系列模型部署类似),执行程序:

# 简单测试在lubancat-4板卡上
# 命令使用 ./yolo26_depth_demo <model_path> <image_path>
cat@lubancat:~/xxx/cpp/install/rk3588_linux$ ./yolo26_det_demo  ./model/yolo26n_depth_fp.rknn ./model/bus.jpg
model input num: 1, output num: 1
input tensors:
index=0, name=images, n_dims=4, dims=[1, 768, 768, 3], n_elems=1769472, size=3538944, fmt=NHWC, type=FP16, qnt_type=AFFINE, zp=0, scale=1.000000
output tensors:
index=0, name=output0, n_dims=4, dims=[1, 1, 768, 768], n_elems=589824, size=1179648, fmt=NCHW, type=FP16, qnt_type=AFFINE, zp=0, scale=1.000000
model is NHWC input fmt
model input height=768, width=768, channel=3
-- init_yolo26_model use: 67.205002 ms
Read image: ../../bus.jpg, size: 810x1080
-- read_image and preprocess use: 17.056999 ms
-- rknn run use: 117.902000 ms
-- post process use: 0.979000 ms
-- save results use: 193.341995 ms

保存结果图片为depth_heat.png和depth_overlay.png,一个是深度热力图,另一个是热力图叠加原图,使用图像编辑器查看叠加图效果:

broken

以上是在鲁班猫板块上简单部署 yolo26深度估计 模型,可根据实际设备环境自行优化程序。