RK3588 TNN CPU/OpenCL ResNet50推理测试

一、背景知识

1.1 TNN框架简介

TNN(Tencent Neural Network)是腾讯优图实验室推出的高性能神经网络推理框架,支持多种硬件平台(CPU/GPU/TPU/NPU)的异构计算。主要特点包括:

  • 跨平台部署能力
  • 支持FP32/FP16/INT8量化
  • 提供模型压缩工具链
  • 高效的内存管理机制

1.2 精度类型说明

  • FP32:单精度浮点数(32位),最高精度但计算量最大
  • FP16:半精度浮点数(16位),内存占用减少50%,计算速度提升
  • INT8:8位整数量化,通过降低精度换取更高推理速度

二、性能数据

  • 模型:resnet50 输入:[1,3.224,224 float32] 输出:[1,1000 float32]
精度类型 CPU推理 OpenCL推理
FP16 104.066 ms MSE:0.00059 46.5272 ms MSE:0.00021
INT8 78.2465 ms MSE:0.00442 不支持

三、环境搭建详解

3.1 编译TNN框架

# 安装Python绑定依赖
pip3.10 install pybind11

# 克隆仓库并创建构建目录
git clone https://github.com/Tencent/TNN.git
cd TNN
rm build -rf
mkdir build && cd build

# 配置编译选项
cmake -DTNN_OPENCL_ENABLE=ON -DTNN_ARM82_ENABLE=ON \
	-DTNN_ARM_ENABLE=ON -DTNN_QUANTIZATION_ENABLE=ON \
	-DPYTHON_EXECUTABLE=/usr/bin/python3.10 \
	-DCMAKE_INSTALL_PREFIX=`pwd`/_install -DDEBUG=0 \
	-DTNN_CONVERTER_ENABLE=ON -DTNN_ONNX2TNN_ENABLE=ON ..

# 并行编译并安装	
make -j4
make install

3.2 OpenCL环境配置

# 替换系统默认OpenCL驱动
mv /lib/aarch64-linux-gnu/libOpenCL.so.1 /lib/aarch64-linux-gnu/libOpenCL.so.1.bk
ln -s /usr/lib/aarch64-linux-gnu/libmali.so /lib/aarch64-linux-gnu/libOpenCL.so.1

# 安装开发工具链
sudo apt install -y opencl-headers
sudo apt install -y ocl-icd-libopencl1
sudo apt install -y ocl-icd-opencl-dev
sudo apt install -y clinfo

# 配置Vendor信息
mkdir -p /etc/OpenCL/vendors/
echo "libmali.so" > /etc/OpenCL/vendors/mali.icd

# 验证安装
clinfo

四、完整实现流程

4.1 准备测试图片

wget https://raw.githubusercontent.com/hi20240217/csdn_images/refs/heads/main/YellowLabradorLooking_new.jpg

4.2 生成ONNX模型以及推理输入、输出

cat> resnet50.py<<-'EOF'    
import requests
from PIL import Image
from io import BytesIO
import torchvision.transforms as transforms
import torch
import numpy as np
import torchvision.models as models

# 读取图片
image = Image.open("YellowLabradorLooking_new.jpg")

# 定义预处理流程
preprocess = transforms.Compose([
    transforms.Resize(256),
    transforms.CenterCrop(224),
    transforms.ToTensor(),
    transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]),
])

# 应用预处理
img_t = preprocess(image)
input_tensor = torch.unsqueeze(img_t, 0).float()

input_np=input_tensor.numpy()

# 保存预处理好的输入,用于后面量化和精度对比
np.savetxt('resnet50_input.txt',input_np.reshape(-1), delimiter=' ', fmt='%.6f')
np.save('resnet50_input.npy',input_np)

# 加载预训练的ResNet50模型
model = models.resnet50(pretrained=True).float()
model.eval()  # 将模型设为评估模式

# 执行前向推理
with torch.no_grad():
    output = model(input_tensor).numpy()

# 保存推理的结果,用于后面对比精度
np.savetxt('resnet50_output.txt',output.reshape(-1), delimiter=' ', fmt='%.6f')

# 获取预测类别
predicted = np.argmax(output
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hi20240217

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值