cfx · 4月6日

【“星睿O6”AI PC开发套件评测】对比Jetson CPU/GPU推理posenet

1.复用已有AI软件生态,支持已有应用的无缝迁移
“星睿O6”开发套件,定位为面向AI PC、边缘等场景开发套件,为了让用户顺利过渡到新硬件,至关重要的是,原有开发者能简单高效的将他们之前开发的应用程序能够无缝运行或迁移到“星睿O6”平台。
虽然集成的“周易”NPU算力可达30TOPS,目前已成功适配多款主流AI模型,满足生成式AI在多元端侧场景的应用需求,但是,“周易”NPU提供的专有接口和工具链在已有应用的移植中,存在非常高的学习成本和开发成本。原有开发者要将之前开发的应用程序能够无缝运行或迁移到“星睿O6”平台,将付出很大的成本,没有足够的经济利益难以驱动开发者进行移植,从而无法达到生态的繁荣,进而更好的推动硬件的推广和销售。

2.TensorFlow Lite在移动端的地位
TensorFlow Lite (TFLite) 是 TensorFlow 框架在移动和嵌入式设备上的轻量级解决方案,旨在实现低延迟的设备端模型推理。它在移动端机器学习领域占据着重要的地位,原因如下:
a.全球部署超过30亿台的设备,广泛的应用支持: TFLite 可以在各种移动平台(如 Android 和 iOS)以及其他嵌入式设备上运行,使其成为开发人员部署 ML 模型的热门选择。
b.Google 的支持: 作为 Google 的官方移动端 ML 框架,TFLite 拥有强大的社区支持和持续的开发投入。
c.优化性能: TFLite 经过专门优化,可在资源受限的设备上实现高效推理,例如通过模型量化和硬件加速。

3.Host端编译Opencv(4.8)、TFLite(2.16.2)和可执行程序
a. 在 x64 Linux 主机上交叉编译 TensorFlow Lite 库 (linux aarch64):libtensorflowlite.so 、 libtensorflowlite_gpu_delegate.so(OpenCL)

b.准备模型和图像:
下载posenet_mobilenet_v1_100_257x257_multi_kpt.tflite 模型文件。
准备用于测试的图像文件。
编写 C++ 代码,并分别使用CPU 或 GPU 进行模型推理:

` // Load model

std::unique_ptr<FlatBufferModel> model = FlatBufferModel::BuildFromFile("posenet_mobilenet_v1_100_257x257_multi_kpt_stripped.tflite");

// Build the interpreter
ops::builtin::BuiltinOpResolver resolver;
InterpreterBuilder(*model.get(), resolver)(&interpreter);

#ifdef GPU_DELEGATE
TfLiteDelegate *MyDelegate = NULL;

const TfLiteGpuDelegateOptionsV2 options = {
    .is_precision_loss_allowed = 1, //FP16,
    .inference_preference = TFLITE_GPU_INFERENCE_PREFERENCE_FAST_SINGLE_ANSWER,
    .inference_priority1 = TFLITE_GPU_INFERENCE_PRIORITY_MIN_LATENCY,
    .inference_priority2 = TFLITE_GPU_INFERENCE_PRIORITY_AUTO,
    .inference_priority3 = TFLITE_GPU_INFERENCE_PRIORITY_AUTO,
};
MyDelegate = TfLiteGpuDelegateV2Create(&options);

if(interpreter->ModifyGraphWithDelegate(MyDelegate) != kTfLiteOk) {
    cerr << "ERROR: Unable to use delegate" << endl;
    return 0;
}
#endif // GPU_DELEGATE

interpreter->AllocateTensors();
interpreter->SetAllowFp16PrecisionForFp32(true);
interpreter->SetNumThreads(4);      //quad core`

4.在Radxa O6和Jetson nano上进行推理

a.拷贝编译的库到 Radxa O6开发板
使用 scp 命令将 libtensorflowlite.so 和 libtensorflowlite_gpu_delegate.so 、 posenet_mobilenet_v1_100_257x257_multi_kpt.tflite、图片、交叉编译好的可执行文件 拷贝到 Radxa O6 和 Jetson开发板中。

b.在 Radxa O6 开发板上执行推理
在 Radxa O6 开发板上,分别以默认 XNNPACK CPU和GPU delegate 运行交叉编译的可执行程序。效果如下图:
CPU_Posenet.jpg
O6 CPU运行效果
GPU_Posenet.jpg
O6 GPU运行效果
c.在 Jetson nano(4G) 开发板上执行推理
在 Jetson nano 开发板上,分别以默认 XNNPACK CPU和GPU delegate 运行交叉编译的可执行程序:

4.性能对比
本示例中未进行绑核操作,模拟APP被系统调度后默认的行为。经过多轮测试和观察,最佳性能如下:

Jetson CPUJetson GPUO6 CPUO6 GPU
15.612.811.819.6

单位FPS
perf.jpg
性能与当前主流的手机(8gen3/MTK9300)性能存在较大的差距。

推荐阅读
关注数
1086
内容数
17
搭载安谋科技“周易”NPU的此芯AI PC开发套件瑞莎星睿O6开发板文档、活动及评测等专栏,加开发者群请添加极术小姐姐(id:aijishu20))。
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息