如何在RK3588开发板上部署YOLOv5模型?从训练到推理的完整流程(附避坑指南)

基于YOLOv5算法实现人数统计和人脸识别并部署于开发板rk3588 YOLO算法在开办板rk3588上部署 阅读详情

在RK3588上实现YOLOv5目标检测:从模型训练到边缘部署的实战手册

最近有不少朋友在折腾边缘计算设备上的AI应用,特别是想把YOLOv5这样的目标检测模型部署到RK3588这类高性能开发板上。我自己也花了些时间走通了这个流程,发现网上资料虽然多,但要么版本对不上,要么步骤不完整,实际操作起来总会遇到各种“坑”。今天我就把自己从模型训练到最终部署的完整经验整理出来,希望能帮你少走弯路。

RK3588作为一款集成了强大NPU的SoC,确实为边缘AI应用提供了不错的硬件基础。但要把一个在PC上训练好的YOLOv5模型真正跑在开发板上,中间需要经过模型转换、量化、优化等多个环节,每个环节都可能出问题。这篇文章我会按照实际操作的顺序,一步步带你完成整个流程,重点放在那些容易出错的地方和实用的调试技巧上。

1. 开发环境搭建与工具链准备

在开始任何模型相关工作之前,先把环境搭建好是至关重要的。我建议采用“宿主机+开发板”的协同工作模式——在性能更强的PC上进行模型训练和转换,然后在RK3588开发板上进行最终部署和测试。

1.1 宿主机环境配置

宿主机我推荐使用Ubuntu 22.04 LTS,这个版本对各类AI框架的支持比较稳定。如果你的机器是Windows系统,可以考虑用WSL2或者直接装个双系统。

关键工具安装清单:

  • Anaconda/Miniconda:用于创建独立的Python环境,避免包冲突
  • PyTorch:YOLOv5训练的基础框架
  • RKNN-Toolkit2:Rockchip官方的模型转换工具
  • Remmina或MobaXterm:用于SSH连接和文件传输

注意:RKNN-Toolkit2目前只支持Linux系统,如果你用的是Windows,要么用WSL2,要么在虚拟机里操作。

安装RKNN-Toolkit2时有个小技巧:官方GitHub仓库下载可能比较慢,可以找国内的镜像源或者用网盘资源。安装完成后,一定要验证版本兼容性:

python -c "import rknn_toolkit2; print(rknn_toolkit2.__version__)"

我用的版本是1.5.0,这个版本对YOLOv5的支持比较完善。如果版本不匹配,后面转换模型时可能会遇到各种奇怪的问题。

1.2 开发板环境准备

RK3588开发板通常预装了Ubuntu系统,但NPU驱动和相关库可能需要手动安装。这里最重要的是RKNPU2——这是Rockchip提供的NPU运行时库。

开发板环境检查清单:

  1. 系统版本:确认是Ubuntu 20.04或更高版本
  2. Python环境:建议Python 3.8或3.9
  3. RKNPU2安装:从官方渠道获取对应版本的库文件
  4. RKNN-Toolkit2-Lite:用于在板端运行RKNN模型

安装完这些组件后,做个简单的测试:

# test_npu.py
from rknnlite.api import RKNNLite

rknn_lite = RKNNLite()
ret = rknn_lite.list_devices()
print(f"Available NPU devices: {ret}")

如果能看到NPU设备信息,说明基础环境已经就绪。

1.3 网络与文件传输设置

为了让宿主机和开发板协同工作更顺畅,我建议把它们放在同一个局域网内。这样可以通过SSH直接访问开发板,用SCP或SFTP传输文件。

网络配置建议:

配置项宿主机开发板
IP地址静态或DHCP静态IP(推荐)
SSH服务开启(用于反向连接)开启
共享目录可选设置NFS可选挂载NFS

我通常会给开发板设置一个固定的IP地址,比如192.168.1.100,然后在宿主机上配置SSH免密登录:

# 在宿主机上生成SSH密钥
ssh-keygen -t rsa

# 将公钥复制到开发板
ssh-copy-id user@192.168.1.100

这样以后传输文件或执行远程命令就不用每次都输密码了。

2. YOLOv5模型训练与优化

环境准备好后,就可以开始训练自己的YOLOv5模型了。虽然YOLOv5官方提供了很多预训练模型,但针对特定场景的数据集进行微调,通常能获得更好的效果。

2.1 数据集准备与标注

数据集的质量直接决定了模型性能的上限。我建议至少准备500-1000张标注好的图片,覆盖各种光照条件、角度和遮挡情况。

数据集结构示例:

custom_dataset/
├── images/
│   ├── train/
│   │   ├── image1.jpg
│   │   └── image2.jpg
│   └── val/
│       ├── image3.jpg
│       └── image4.jpg
└── labels/
    ├── train/
    │   ├── image1.txt
    │   └── image2.txt
    └── val/
        ├── image3.txt
        └── image4.txt

标注文件采用YOLO格式,每行表示一个目标:

<class_id> <x_center> <y_center> <width> <height>

这里的坐标都是归一化后的值(0-1之间)。

2.2 模型选择与训练配置

YOLOv5有多个版本(n、s、m、l、x),模型越大精度越高,但推理速度越慢。对于RK3588这样的边缘设备,我推荐从YOLOv5s开始,如果性能允许再尝试更大的模型。

训练配置文件(data.yaml):

# 数据集配置文件
path: ../custom_dataset
train: images/train
val: images/val

# 类别信息
nc: 3  # 类别数量
names: ['person', 'car', 'bicycle']  # 类别名称

开始训练:

python train.py \
  --img 640 \
  --batch 16 \
  --epochs 100 \
  --data data.yaml \
  --cfg models/yolov5s.yaml \
  --weights yolov5s.pt \
  --name custom_model

训练过程中要关注几个关键指标:

  • mAP@0.5:主要精度指标
  • mAP@0.5:0.95:更严格的精度评估
  • 训练损失:观察是否收敛

2.3 模型优化技巧

为了让模型在边缘设备上跑得更好,可以考虑以下几个优化方向:

1. 模型剪枝与量化

# 简单的后训练量化示例
import torch
import torch.quantization

model = torch.load('best.pt')
model.eval()

# 准备量化配置
model.qconfig = torch.quantization.get_default_qconfig('fbgemm')
torch.quantization.prepare(model, inplace=True)
# 校准过程(需要准备校准数据)
torch.quantization.convert(model, inplace=True)

2. 输入尺寸优化 YOLOv5默认使用640x640的输入,但可以根据实际场景调整。较小的输入尺寸(如416x416)能显著提升推理速度,但可能会损失一些精度。

3. 类别合并 如果某些类别在应用中区分度要求不高,可以考虑合并,减少模型复杂度。

3. 模型转换:从PyTorch到RKNN

这是整个流程中最容易出问题的环节。RKNN-Toolkit2虽然支持多种模型格式转换,但每个版本都有一些特定的要求。

3.1 导出ONNX中间格式

首先要把PyTorch模型转换成ONNX格式,这是RKNN-Toolkit2支持的输入格式之一。

import torch

# 加载训练好的模型
model = torch.hub.load('ultralytics/yolov5', 'custom', path='best.pt')
model.eval()

# 准备示例输入
example_input = torch.randn(1, 3, 640, 640)

# 导出ONNX
torch.onnx.export(
    model,
    example_input,
    'yolov5_custom.onnx',
    opset_version=12,
    input_names=['images'],
    output_names=['output'],
    dynamic_axes={
        'images': {0: 'batch_size'},
        'output': {0: 'batch_size'}
    }
)

提示:opset_version很关键,建议用11或12。版本太低可能不支持某些算子,版本太高可能RKNN-Toolkit2还不支持。

导出后一定要验证ONNX模型的有效性:

python -c "import onnx; model = onnx.load('yolov5_custom.onnx'); onnx.checker.check_model(model)"

3.2 RKNN模型转换

有了ONNX模型后,就可以用RKNN-Toolkit2进行转换了。这里有几个重要的参数需要配置:

from rknn_toolkit2.api import RKNN

# 创建RKNN对象
rknn = RKNN(verbose=True)

# 模型配置
rknn.config(
    mean_values=[[0, 0, 0]],
    std_values=[[255, 255, 255]],
    quant_img_RGB2BGR=True,
    target_platform='rk3588'
)

# 加载ONNX模型
ret = rknn.load_onnx(model='yolov5_custom.onnx')
if ret != 0:
    print('Load model failed!')
    exit(ret)

# 构建模型
ret = rknn.build(do_quantization=True, dataset='./dataset.txt')
if ret != 0:
    print('Build model failed!')
    exit(ret)

# 导出RKNN模型
ret = rknn.export_rknn('./yolov5_custom.rknn')
if ret != 0:
    print('Export model failed!')
    exit(ret)

关键参数说明:

参数说明推荐值
mean_values输入图像的均值减除[0, 0, 0]
std_values输入图像的标准差归一化[255, 255, 255]
quant_img_RGB2BGR是否将RGB转为BGRTrue
target_platform目标硬件平台rk3588
do_quantization是否进行量化True(推荐)

3.3 量化数据集准备

量化是提升NPU推理性能的关键步骤,需要准备一个代表性的数据集。我通常从训练集中随机选择100-200张图片。

dataset.txt文件格式:

./calib_images/img1.jpg
./calib_images/img2.jpg
./calib_images/img3.jpg

量化过程中可能会遇到精度下降的问题,这时可以尝试:

  1. 增加量化图片数量
  2. 调整量化算法参数
  3. 对某些层使用混合精度

4. RK3588部署与性能优化

模型转换完成后,就可以部署到RK3588开发板上了。这个阶段主要关注推理性能、内存占用和实际效果。

4.1 部署代码框架

在开发板上运行RKNN模型,需要用到RKNN-Toolkit2-Lite。下面是一个基本的推理框架:

import numpy as np
from rknnlite.api import RKNNLite
import cv2

class YOLOv5RKNN:
    def __init__(self, model_path):
        self.rknn = RKNNLite()
        ret = self.rknn.load_rknn(model_path)
        if ret != 0:
            raise Exception(f"Load RKNN model failed: {ret}")
        
        # 初始化运行时环境
        ret = self.rknn.init_runtime()
        if ret != 0:
            raise Exception(f"Init runtime failed: {ret}")
        
        self.input_size = (640, 640)
        self.classes = ['person', 'car', 'bicycle']  # 根据实际修改
        
    def preprocess(self, image):
        """图像预处理"""
        # 调整大小
        img = cv2.resize(image, self.input_size)
        # 颜色空间转换
        img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
        # 归一化
        img = img.astype(np.float32) / 255.0
        # 调整维度顺序
        img = np.transpose(img, (2, 0, 1))
        img = np.expand_dims(img, 0)
        return img
    
    def postprocess(self, outputs, conf_thresh=0.25, iou_thresh=0.45):
        """后处理:NMS和框解码"""
        # 这里需要根据YOLOv5的输出格式进行解析
        # 实际实现取决于模型的具体输出结构
        pass
    
    def detect(self, image):
        """执行检测"""
        # 预处理
        input_data = self.preprocess(image)
        
        # 推理
        outputs = self.rknn.inference(inputs=[input_data])
        
        # 后处理
        results = self.postprocess(outputs)
        return results
    
    def __del__(self):
        if hasattr(self, 'rknn'):
            self.rknn.release()

4.2 性能调优技巧

RK3588的NPU性能很强,但要想充分发挥其能力,还需要一些调优:

1. 内存优化

# 启用内部内存重用
rknn.config(
    # ... 其他配置
    optimization_level=3,  # 最高优化级别
    target_platform='rk3588'
)

2. 多核并行 对于较大的模型,可以尝试在多核上并行推理:

# 初始化多核运行时
ret = rknn.init_runtime(
    core_mask=RKNNLite.NPU_CORE_0 | RKNNLite.NPU_CORE_1 | RKNNLite.NPU_CORE_2
)

3. 批处理优化 如果应用场景允许批量处理,可以显著提升吞吐量:

# 批量推理
batch_size = 4
batch_images = [preprocess(img) for img in image_list]
outputs = rknn.inference(inputs=[batch_images])

4.3 实际性能测试

部署完成后,一定要进行全面的性能测试:

性能测试指标:

测试项测试方法预期目标
推理速度连续推理100次取平均< 50ms/帧
内存占用监控/proc/meminfo< 500MB
功耗测量板端电流< 5W
温度监控CPU/NPU温度< 85°C

测试代码示例:

import time

def benchmark(model, test_images, warmup=10, runs=100):
    # 预热
    for _ in range(warmup):
        model.detect(test_images[0])
    
    # 正式测试
    start = time.time()
    for _ in range(runs):
        for img in test_images:
            model.detect(img)
    end = time.time()
    
    avg_time = (end - start) / (runs * len(test_images)) * 1000
    print(f"平均推理时间: {avg_time:.2f}ms")
    return avg_time

5. 常见问题与解决方案

在实际操作中,你可能会遇到各种问题。这里我整理了一些常见问题及其解决方法。

5.1 模型转换问题

问题1:ONNX导出失败,提示不支持的算子

RuntimeError: Exporting the operator ... to ONNX opset version 12 is not supported.

解决方案:

  1. 降低opset版本到11
  2. 修改模型结构,替换不支持的算子
  3. 使用ONNX Simplifier简化模型
# 安装onnx-simplifier
pip install onnx-simplifier

# 简化模型
python -m onnxsim input.onnx output.onnx

问题2:RKNN转换时量化误差过大 量化后模型精度下降明显,特别是小目标检测效果变差。

解决方案:

  1. 增加量化数据集的数量和多样性
  2. 使用混合量化,对敏感层保持FP16精度
  3. 调整量化参数:
rknn.config(
    # ... 其他配置
    quantized_dtype='asymmetric_quantized-8',
    quantized_algorithm='normal',
    quantized_method='channel'
)

5.2 部署运行时问题

问题3:推理结果异常或全为零 模型能跑起来,但输出结果明显不对。

排查步骤:

  1. 检查输入数据预处理是否与训练时一致
  2. 验证模型输出层的解析逻辑
  3. 在PC端用RKNN-Toolkit2模拟推理,对比结果
# PC端模拟推理验证
rknn = RKNN()
rknn.load_rknn('model.rknn')
rknn.init_runtime(target='rk3588')

# 使用相同的输入数据
pc_outputs = rknn.inference(inputs=[test_input])
# 与板端结果对比

问题4:内存不足或推理速度慢 在资源受限的边缘设备上,内存和速度是常见瓶颈。

优化建议:

  1. 模型层面

    • 使用更小的模型版本(YOLOv5n)
    • 减小输入图像尺寸
    • 减少检测类别数量
  2. 推理层面

    • 启用NPU内部内存重用
    • 使用零拷贝内存传输
    • 优化后处理代码
  3. 系统层面

    • 关闭不必要的系统服务
    • 调整CPU频率策略
    • 使用性能模式

5.3 精度调优技巧

如果部署后检测精度不达标,可以尝试以下方法:

1. 训练数据增强 在模型训练阶段增加更多数据增强,提升模型鲁棒性:

# data.yaml中添加增强配置
augment: true
hsv_h: 0.015
hsv_s: 0.7
hsv_v: 0.4
degrees: 0.0
translate: 0.1
scale: 0.5
shear: 0.0
perspective: 0.0
flipud: 0.0
fliplr: 0.5
mosaic: 1.0
mixup: 0.0

2. 后处理参数调整 根据实际场景调整置信度阈值和NMS参数:

def postprocess(self, outputs, conf_thresh=0.25, iou_thresh=0.45):
    # 动态调整阈值
    if self.is_low_light_scene:
        conf_thresh = 0.15  # 低光照场景降低阈值
    # ... 后续处理

3. 多模型融合 对于关键场景,可以使用多个模型进行投票或加权融合:

class EnsembleDetector:
    def __init__(self):
        self.models = [
            YOLOv5RKNN('model_fast.rknn'),  # 快速模型
            YOLOv5RKNN('model_accurate.rknn')  # 精准模型
        ]
    
    def detect(self, image):
        all_results = []
        for model in self.models:
            results = model.detect(image)
            all_results.append(results)
        
        # 融合策略
        return self.fuse_results(all_results)

6. 实际应用与进阶优化

当基础流程跑通后,可以考虑一些进阶的优化和应用扩展。

6.1 实时视频流处理

对于视频监控等实时应用,需要处理连续的帧序列:

import threading
from collections import deque

class VideoProcessor:
    def __init__(self, model_path, camera_url):
        self.model = YOLOv5RKNN(model_path)
        self.cap = cv2.VideoCapture(camera_url)
        self.frame_queue = deque(maxlen=30)
        self.result_queue = deque(maxlen=30)
        
        # 多线程处理
        self.processing = False
        self.thread = threading.Thread(target=self.process_frames)
    
    def start(self):
        self.processing = True
        self.thread.start()
        
        while self.processing:
            ret, frame = self.cap.read()
            if ret:
                self.frame_queue.append(frame)
            
            # 显示最新结果
            if self.result_queue:
                result = self.result_queue.popleft()
                self.display_result(result)
    
    def process_frames(self):
        while self.processing:
            if self.frame_queue:
                frame = self.frame_queue.popleft()
                results = self.model.detect(frame)
                self.result_queue.append((frame, results))
    
    def display_result(self, result):
        frame, detections = result
        # 绘制检测框
        for det in detections:
            x1, y1, x2, y2, conf, cls = det
            cv2.rectangle(frame, (x1, y1), (x2, y2), (0, 255, 0), 2)
            cv2.putText(frame, f'{self.model.classes[cls]}: {conf:.2f}', 
                       (x1, y1-10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2)
        
        cv2.imshow('Detection', frame)
        if cv2.waitKey(1) & 0xFF == ord('q'):
            self.processing = False

6.2 模型更新与热加载

在实际部署中,可能需要在不重启应用的情况下更新模型:

class HotSwappableModel:
    def __init__(self, initial_model_path):
        self.current_model = YOLOv5RKNN(initial_model_path)
        self.new_model_path = None
        self.lock = threading.Lock()
        
        # 监控模型文件变化
        self.watcher = threading.Thread(target=self.watch_model_file)
        self.watcher.start()
    
    def watch_model_file(self):
        last_mtime = os.path.getmtime(self.current_model_path)
        while True:
            time.sleep(5)  # 每5秒检查一次
            try:
                current_mtime = os.path.getmtime(self.new_model_path)
                if current_mtime > last_mtime:
                    self.load_new_model()
                    last_mtime = current_mtime
            except:
                pass
    
    def load_new_model(self):
        with self.lock:
            # 加载新模型
            new_model = YOLOv5RKNN(self.new_model_path)
            # 原子替换
            old_model = self.current_model
            self.current_model = new_model
            # 释放旧模型资源
            del old_model
    
    def detect(self, image):
        with self.lock:
            return self.current_model.detect(image)

6.3 能效优化策略

对于电池供电的边缘设备,能效优化尤为重要:

功耗监控与调节:

class PowerAwareDetector:
    def __init__(self, model_path):
        self.model = YOLOv5RKNN(model_path)
        self.power_mode = 'balanced'  # balanced, power_save, performance
        self.detection_interval = 1.0  # 默认1秒检测一次
        
    def adjust_power_mode(self, battery_level):
        """根据电量调整工作模式"""
        if battery_level < 20:
            self.power_mode = 'power_save'
            self.detection_interval = 5.0  # 降低检测频率
            self.model.set_inference_mode('low_power')
        elif battery_level < 50:
            self.power_mode = 'balanced'
            self.detection_interval = 2.0
        else:
            self.power_mode = 'performance'
            self.detection_interval = 0.5  # 提高检测频率
    
    def adaptive_detection(self, frame, motion_detected=False):
        """自适应检测策略"""
        if self.power_mode == 'power_save' and not motion_detected:
            return []  # 省电模式下,无运动不检测
        
        # 根据模式调整输入尺寸
        if self.power_mode == 'power_save':
            small_frame = cv2.resize(frame, (320, 320))
            return self.model.detect(small_frame)
        else:
            return self.model.detect(frame)

6.4 模型压缩与加速

对于需要极致性能的场景,可以考虑进一步的模型优化:

1. 知识蒸馏 用大模型指导小模型训练,在保持精度的同时减少参数量。

2. 神经网络架构搜索(NAS) 自动搜索适合RK3588 NPU的模型结构。

3. 算子融合与图优化 手动优化计算图,减少内存访问和计算开销。

# 自定义算子融合示例
class OptimizedYOLO:
    def __init__(self):
        # 将一些连续的小算子融合成大算子
        self.fused_ops = self.create_fused_operations()
    
    def create_fused_operations(self):
        # 这里可以实现特定的算子融合逻辑
        # 例如将Conv+BN+ReLU融合为一个算子
        pass

走完整个流程后,最大的感受就是“细节决定成败”。每个环节都有很多小坑,比如版本兼容性、参数配置、数据预处理的一致性等等。我建议在正式部署前,一定要在开发板上做充分的测试,特别是长时间运行的稳定性测试。有时候模型刚跑起来看起来正常,但运行几个小时后就可能出现内存泄漏或性能下降的问题。

另外,不要过分追求极致的精度或速度,要根据实际应用场景找到平衡点。比如对于安防监控,可能更关注召回率(不要漏检),即使误检稍微多一点也能接受;而对于资源受限的移动设备,可能需要在精度和功耗之间做权衡。

最后,保持耐心很重要。边缘AI部署本来就是个系统工程,遇到问题多查资料、多实验,每次解决一个问题都是积累经验的过程。

rk3588对npu的再探索,yolov5使用rknn模型推理教程 博主在瑞芯微ITX-3588J-8K的开发板上跑了yolov5目标检测算法,调用了外置相机获取rtsp视频流,但是每帧处理需要833ms左右,和放PPT一样。本来想使用tensorrt进行加速推理,但是前提需要cuda,rk的板子上都是arm的手机gpu,没有nvidia的cuda,所以不能这样适配。那么转过来,使用开发板自带的NPU进行加速推理,岂不是最佳方案,因为它本身就是人工智能开发板,不用NPU相当于没有发挥它的全部能力。......... 阅读详情

相关推荐

RK3588上部署yoloV5

电脑win10 装的 vmware 16pro 操作系统ubuntu20.04开发板 rk3588 一根 usb-typeC的数据线 用来PC与开发板通信在ROCKCHIP芯片上的EVB板子上使用RKNN-Toolkit2 和 RKNPU工具 将onnx模型转化为rknn模型 并进行板端推理。

m0_51887082的博客 2296

rk3588部署yolov5

YOLOv5 训练得到pt文件,pt-->onnx-->rknn进行推理。

qq_59164231的博客 9112

【RK3588-linux开发】3、训练yolov5并在RK3588上运行

首先要看看官方文档,对于PC端的开放(模型转换与模拟测试)阅读,toolkit下载: Rockchip_User_Guide_RKNN_Toolkit2_CN-1.2.0.pdf 板载部署(C++/C)阅读其NPU的SDK开发文档,SDK下载: Rockchip_RKNPU_User_Guide_RKNN_API_V1.2.0_CN.pdf 按照下面步骤训练自己的yolov5模型,并转化为RKNN模型,并再PC端模拟和板载部署运行。 1. 训练yolov5 下载RK推荐的yolov5进行训练,该仓库

stupid_miao的博客 1万+

【边缘设备】yolov5训练与rknn模型导出并在RK3588部署~总结(亲测有效)

rk3588环境验证,在PC上训练YOLOv5的目标检测模型,并将模型导出,在板端使用NPU进行推理。

6453

【边缘设备】yolov5训练与rknn模型导出并在RK3588部署~1.环境准备(亲测有效)

在翻阅了网络上很多资料后,发现很多版本的信息比匹配。花了一周的时间配置环境,以及环境验证,然后写了这篇长文。有过程,有代码,有经验,欢迎大家批评指正。

4578

模型部署 RK3588开发板环境搭建、RK3588部署YoloV5目标检测项目

本文介绍了RK3588开发板环境搭建及YoloV5目标检测项目部署流程。主要内容包括:1)在Ubuntu本地安装CMake、GCC交叉编译工具链;2)在开发板端验证NPU驱动并更新RKNN推理运行库;3)创建Python3.8虚拟环境并配置rknn-toolkit2转换环境;4)提供相关资源链接(RKNN Toolkit2、模型库等)。通过图文结合的方式详细展示了驱动版本查询、库文件更新等关键步骤的操作过程和结果验证,为在RK3588平台上部署AI模型提供了完整的开发环境配置指南。

guoqingru0311的博客 1988

【YOLOv8部署至RK3588】模型训练→转换RKNN→开发板部署

之前博主发布过YOLOv8转RKNN模型并在开发板上部署的流程,但是遇到了许多问题,发现很难修补,遂决定在官方项目下进行模型转换与部署(之前的转换是在Github个人博主的项目下进行的)OK,进入正题,模型转换需要以下工具:ultralytics_yolov8、rknn_model_zoo、rknn-toolkit2,现在详细介绍这三者的关系。以上三个文件均与模型训练无关,而是用于模型转换的,其中,ultralytics_yolov8文件不是必需的,但最好还是下载一份,原因后面会讲;。

A_l_b_ert的博客 4万+

在RK3588上部署YOLOv8:从模型转换到量化剪枝的完整指南

通过本文的完整实践路线,我们成功在RK3588上实现了YOLOv8的高效部署。模型量化使体积缩小73%,剪枝技术进一步压缩模型至原大小的20%,知识蒸馏则在小模型上重现了大模型的智慧。未来可结合TensorRT、OpenVINO等工具探索更多优化可能,让边缘设备真正具备实时视觉理解能力。

uck2010的博客 2680

【YOLOv10部署RK3588】模型训练→转换RKNN→开发板部署

最近清华发布了不需要NMS的YOLO检测算法:YOLOv10,感觉挺新奇,准备尝试一下,并部署到国产RK3588开发板测试下效果。此前博主已经发布过YOLOv8n的相关内容,,其实具体实现方法都是差不多的,所以内容直接从YOLOv8中copy过来,具体不同细节再详细论述。

A_l_b_ert的博客 6848

RK3566/RK3588 yolov5部署(二)NPU冒烟测试及rknn_api使用

本文提供rk3566和rk3588平台下mobilenet测试代码rk3566:通过网盘分享的文件:NPU_Test_rk3566链接: https://pan.baidu.com/s/1kty3Q2x_QltjobGkijie6g?pwd=3566 提取码: 3566rk3588:通过网盘分享的文件:NPU_Test_rk3588链接: https://pan.baidu.com/s/1tmTFArfLFoYR7HJXHflXvg?pwd=3588 提取码: 3588。

2301_76564925的博客 2102

RK3566/RK3588 YoloV5部署(四) yolov5多线程部署

代码链接:通过网盘分享的文件:YoloV5_thread_pool链接: https://pan.baidu.com/s/1jz0cAIypxARTHh5nRVTsWQ?pwd=s84d 提取码: s84d。

2301_76564925的博客 1975

香橙派5 RK3588 yolov5模型转换rknn及部署踩坑全记录 orangepi 5

注意注意!opset一定要为12,不然后面onnx转rknn会报错。weights自己选你训练完成的best.pt,data选你自己设置的,我这里只是做一个最简单情况的演示。

m0_55217834的博客 3万+

实操rk3588讯为开发板部署和运行yolov5模型

跟着讯为在b站的视频(

hzh442436179的博客 2380

yolov5训练pt模型并转换为rknn模型,部署在RK3588开发板上——从训练到部署全过程

本文实现了yolov5模型从训练pt模型,到转换为rknn模型,最终部署在RK3588板子上使用NPU加速推理的过程。

m0_57315535的博客 4万+

Windows下TensorRT+YOLOv11部署避坑指南:从CUDA配置到模型加密全流程

本文详细解析了在Windows平台部署YOLOv11与TensorRT的全流程,重点涵盖从CUDA环境配置、工程编译适配到模型加密保护的实战指南。基于wang-xinyu的tensorrtx仓库,提供了详细的版本选择、编译问题修复方案,并深入探讨了如何对TensorRT引擎进行加密,以实现高效且安全的端到端部署。

vscode5coder的博客 450

Java Swing之多文档界面设计-JDesktopPane、JInternalFrame类简单应用示例

Java MDI多文档界面是一种用户界面风格,允许在一个主窗口中包含多个子窗口(文档窗口),每个子窗口可以显示不同的内容或功能模块,从而可以满足用户打开不同窗口完成不同功能的需求。开发多文档程序,一般需要JDesktopPane(桌面面板类)和JInternalFrame(内部窗体类)两个类。以下简单介绍,最后通过一个实例介绍实现逻辑。

编程语言教学工作者的博客 2209

RK3588部署Yolov5自训练模型

一. 训练Yolov5的模型 1.创建训练环境 2.拉取yolov5工程 3. 训练自己的模型 4.模型推理 二. 导出rknn模型 1. 创建导出环境 2. pt转onnx模型 3. onnx转rknn模型 三. 部署到rk3588 1. 安装rknn_toolkit2_lite 2. 推理测试

u010492025的博客 3475

VS2022离线环境下的NuGet包管理:从本地源到依赖项全解析

本文详细解析了在VS2022离线环境下如何高效管理NuGet包,包括搭建本地NuGet源的两种方案(本地文件夹源和私有NuGet服务器)、获取离线包的三大渠道以及依赖项处理的实战技巧。通过自动化脚本和依赖树分析工具,帮助开发者解决离线环境中的依赖项黑洞问题,提升开发效率。

5f4d3s2a1q的博客 1060

yolov8训练pt模型转换为rknn模型_部署在RK3588上--整个流程_笔记1

yolov8的多卡训练其实很简单,不需要使用繁琐的命令行指令,仅需把device='0,1,2,3’即可,注意一定要加\和引号。至此数据集的准备已经就绪,索引文件在data目录下的train.txt/val.txt/test.txt。使用如下命令,即可完成对新数据的预测,source需要指定为自己的图像路径,或者摄像头(0)进入data/文件夹,新建coco.yaml,内容如下,注意txt需要使用绝对路径。images目录下存放数据集的图片文件。使用如下命令,即可完成训练模型的导出。

m0_60657960的博客 4669

告别Keil手动分区!用CubeMX+VS Code一键生成带Bootloader的STM32 OTA工程

本文详细介绍了如何利用STM32CubeMX和VS Code实现STM32 OTA工程的自动化构建,告别传统Keil手动分区的繁琐流程。通过图形化配置Flash分区、自动生成链接脚本以及实现Bootloader跳转逻辑,开发者可以高效完成远程升级功能开发,显著提升嵌入式开发效率。

weixin_33720956的博客 389

Meta开源Ego-Exo4D数据集:如何用1400小时多模态视频训练你的AI模型

Meta开源的Ego-Exo4D数据集包含1400小时多模态视频,涵盖第一人称和第三人称视角、眼动追踪、IMU传感器等多种模态,是AI模型训练的宝贵资源。本文详细介绍了从数据集下载、预处理到模型训练的全流程,帮助研究者高效利用这一多模态数据集进行AI模型开发。

weixin_29159441的博客 342

RK3588:Rknn模型转换及部署YOLOV8模型教程--飞凌

rk3588部署YOLOV8模型

weixin_47464132的博客 6400

C++游戏开发入门:从环境配置到第一个完整项目

C++ 作为游戏开发领域的关键语言,其学习路径常因语法枯燥而令初学者却步。以项目驱动的方式学编程,能帮助学习者将变量、循环、函数、指针等基础概念融入实际游戏逻辑中,获得即时反馈与完整项目经验。掌握合适的开发环境是高效实践的前提,例如在 Windows 下使用 VS Code 搭配 MinGW-w64 编译器,配合调试器与构建脚本,即可搭建轻量可扩展的 C++ 游戏开发工作流。此类课程通常面向无基础人群,从控制台小游戏逐步过渡到带游戏循环的完整作品,过程中还需关注性能观察、素材授权与版本管理。无论你是刚接触编

weixin_30621959的博客 542

pt转onnx转rknn(YOLOv5部署到RK3588)

主要介绍了将YOLOv5-6.1部署到RK3588开发板的全过程,涵盖了从模型转换到代码调整的各个步骤

Circle的博客 1866

被滑块虐了3个月!我终于写出了零失败的Python滑块验证码通杀方案(AI识别+真人轨迹)

缺口识别的偏移量一定要算对:滑块的初始位置一般在图片左侧,宽度约50像素,一定要减去这个初始宽度,不然会滑多了;绝对不要用Selenium的drag_and_drop方法:这个方法是匀速滑动,直接被风控秒识别,必须自己分步控制鼠标移动;滑动前后必须加停顿:真人按住滑块会停0.1-0.3秒再开始滑,松开之前也会停0.05-0.1秒,不要按下去立刻就滑,滑完立刻就松;不要每次都滑的完美无缺:可以设置10%的概率故意滑错一次,然后刷新验证码重新滑,更像真人;无头模式通过率极低。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 501

手把手教你用LabelImg打造专属YOLO数据集:从标注到训练全攻略!

YOLO(You Only Look Once)是一种快速、高效的目标检测算法。它使用一种简洁的.txt文件格式来保存每张图片中的标注信息,适合构建自定义目标检测数据集。🔹 图像文件.jpg.png等;每张图片将对应一个同名的标签文件(.txtdog.jpg对应dog.txt;图像在训练前通常会被缩放成统一尺寸,例如 YOLOv3 默认输入为416x416。🔹 标签文件(.txt)是一个纯文本文件;每一行表示一个标注目标;字段说明类别编号,从0开始,例如:狗是0,猫是1x_center。

FJN110的博客 2465
上一篇: 超越PlayerPrefs:当你的Unity游戏需要更专业的数据存储方案时
下一篇: 蓝桥杯剪邮票真题解析:如何用DFS+排列组合高效解题(附完整代码)
linux6sysadmin
博客等级 码龄4年 59粉丝 1615原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值