658|3

17

帖子

0

TA的资源

一粒金砂(中级)

【米尔 瑞芯微RK3576 工业AI开发板】5.使用开发板实机运行异常检测AI模型 [复制链接]

本帖最后由 qianmo2001 于 2025-2-25 14:29 编辑

 【米尔 瑞芯微RK3576 工业AI开发板】5.使用开发板实机运行异常检测AI模型

 

开发板配置为4+32G

板载系统为出厂默认系统

RKNN-Toolkit-Lite和RKNN-Toolkit均来自米尔SDK中MYD-LR3576-Debian12-Distribution-L6.1.75-V1.0.0/MYD-LR3576/external/目录下。

rknn_toolkit2-2.0.0b0+9bab5682-cp38-cp38-linux_x86_64.whl

rknn_toolkit_lite2-2.0.0b0-cp38-cp38-linux_aarch64.whl

确保开发板中完成RKNN-Toolkit-Lite的安装并激活其所在的conda环境后,进入工程文件所在路径,执行以下命令,进行实际运行测试。

python runtime2.py

完整代码如下,完整工程见附件

import numpy as np
import time
import os
import matplotlib.pyplot as plt
from rknnlite.api import RKNNLite

# 滑动窗口切割函数
def sliding_window(data, window_size, step_size):
    X = []
    for i in range(0, len(data) - window_size, step_size):
        window = data[i:i + window_size]
        X.append(window)
    return np.array(X)

# 1. 加载数据集 (假设数据保存在 'data.npy' 文件中)
window_size = 16
step_size = 1
data_path = 'dataset/UCR/test.npy'  # 替换为您的实际数据路径
datax = np.load(data_path)
datax = datax[1000:1020]
print(datax.shape)
data = sliding_window(datax, window_size, step_size)
# 2. 创建 RKNN 对象
rknn = RKNNLite()

# 3. 配置 RKNN 模型(启用动态输入)
# rknn.config(target_platform='rk3576', dynamic_input=[[[1, 16, 1]]])  # 适应输入形状

# 4. 加载 ONNX 模型
# onnx_model_path = "tcn_autoencoder.onnx"  # 替换为您实际的模型路径
# rknn.load_onnx(model=onnx_model_path, inputs=['input'], input_size_list=[[1, 16, 1]])

# 5. 编译模型,不启用量化(如果不需要量化)
# rknn.build(do_quantization=False)

# 6. 导出 RKNN 模型
rknn_model_path = "tcn_autoencoder.rknn"
# rknn.export_rknn(rknn_model_path)

# 7. 加载 RKNN 模型
rknn.load_rknn(rknn_model_path)

# 8. 初始化 RKNN 模型
rknn.init_runtime()

# 9. 准备输入数据并逐个进行推理
print(data.shape)
num_samples = data.shape[0]  # 样本数量(num)
reconstruction_errors = []  # 用于存储每次推理的重建误差

# 遍历每个样本,逐个进行推理
for i in range(num_samples):
    input_data = data[i:i+1].astype(np.float32)  # 提取单个样本,形状为 (1, 16, 1)

    # 执行推理
    inputs = [input_data]
    outputs = rknn.inference(inputs=inputs)
    # 获取推理结果
    output_data = outputs[0]  # 获取模型输出(第一个输出)

    # 计算重建误差(均方误差)
    reconstruction_error = np.mean((output_data - input_data) ** 2, axis=(1, 2))  # 计算每个样本的均方误差
    reconstruction_errors.append(reconstruction_error)

# 10. 将重建误差保存为 numpy 数组
reconstruction_errors = np.array(reconstruction_errors)

# 11. 设置阈值并检测异常点
threshold = 0.001  # 设置重建误差的阈值
anomalies = reconstruction_errors > threshold  # 如果重建误差大于阈值,则为异常点

# 12. 输出检测到的异常点数量
print(f"检测到 {np.sum(anomalies)} 个异常点")

# 13. 输出所有重建误差
print("所有重建误差:", reconstruction_errors.shape)


# 创建图表和子图
fig, ax1 = plt.subplots()
# 绘制第一条曲线,使用默认的左侧Y轴
ax1.plot(datax[8:-8], label="Reconstruction Error",alpha=0.2, color='b')
ax1.set_xlabel('Sample Index')
ax1.set_ylabel('Reconstruction Error', color='b')
# 创建第二个Y轴
ax2 = ax1.twinx()
# 绘制第二条曲线,使用右侧Y轴
ax2.plot(reconstruction_errors, label="Reconstruction Error", color='r')
ax2.set_ylabel('Y values for ln(x)', color='r')
# 显示图表
plt.show()
    
rknn.release()

实机运行结果如下:

截图_2025-02-24_18-24-37.png  

终端显示已放弃,怀疑是系统资源不足,进程被强制终止,

尝试对数据集进行裁剪,减少模型的输入,无果

截图_2025-02-24_18-25-49.png  

重启开发板后,进行测试,发现程序在执行outputs = rknn.inference(inputs=inputs)这一行时出现异常,向终端抛出 “已放弃” 后,程序中断退出。

2025022420361121.zip (931.43 KB, 下载次数: 3)

最新回复

运行 SDK 里的 external/rknn-toolkit2/rknn-toolkit-lite2/examples/resnet18/ 的 demo 是可以的,说明开发板的运行环境是没问题的 使用 python3.11 有报错打出来 [attach]893849[/attach]     详情 回复 发表于 2025-3-7 19:35

回复
举报

7500

帖子

2

TA的资源

版主

这方面的资料不多,踩坑很正常,一起努力,做先行者!


回复

1

帖子

0

TA的资源

一粒金砂(初级)

运行 SDK 里的 external/rknn-toolkit2/rknn-toolkit-lite2/examples/resnet18/ 的 demo 是可以的,说明开发板的运行环境是没问题的
使用 python3.11 有报错打出来

image.png  

点评

感谢回复,BUG改好了  详情 回复 发表于 2025-3-9 22:14

回复

17

帖子

0

TA的资源

一粒金砂(中级)

小新生 发表于 2025-3-7 19:35 运行 SDK 里的 external/rknn-toolkit2/rknn-toolkit-lite2/examples/resnet18/ 的 demo 是可以的,说明开 ...

感谢回复,BUG改好了


回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网 8

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表