许可优化
许可优化
产品
产品
解决方案
解决方案
服务支持
服务支持
关于
关于
软件库
当前位置:服务支持 >  软件文章 >  Jetson Xavier NX人脸识别性能优化从CPU到GPU踩坑记

Jetson Xavier NX人脸识别性能优化从CPU到GPU踩坑记

阅读数 3
点赞 0
article_banner


项目背景

最近在做一个实时人脸识别项目,设备是 Jetson Xavier NX(一个手掌大小的 AI 小电脑)。

刚开始信心满满,觉得"嵌入式 AI"听起来很酷,结果一跑起来发现:慢得像幻灯片。

明明这设备宣传说"AI 性能很强",为什么我的程序跑不动?

折腾了一周,性能终于提升了 4 倍,过程中踩了不少坑。

今天分享给大家,希望你们少走弯路。



第一阶段:能跑就行,先验证功能

技术方案

  • 检测器:Haar Cascade(OpenCV 自带的传统模型)
  • 库:OpenCV + Python
  • 功能:检测人脸 → 存储特征 → 识别匹配

结果

  • FPS:20 左右
  • 问题 1:误检严重,经常把背景当人脸
  • 问题 2:漏检频繁,人脸明明在那,就是检测不到

这个阶段只是跑通流程,体验很差,但至少证明了"功能可行"。


Jetson Xavier NX

第二阶段:换模型,以为很简单

想法

既然 Haar Cascade 不行,那就换个深度学习模型吧。

我找到了一个开源的轻量模型:Ultra-Light-Fast-Generic-Face-Detector-1MB。

模型只有 1.3MB,专门为嵌入式设备优化的,看起来很合适。

实施

改了几行代码,把检测器换成 ONNX 模型:

代码块


net = cv2.dnn.readNetFromONNX('model.onnx')


      复制成功
     
     
     
     

重新跑,结果:

  • FPS 从 20 提升到 30+
  • 检测率明显提高,几乎不漏检了

我当时开心坏了,以为大功告成。

但是...

我后来发现,这个模型还是跑在 CPU 上,根本没用上 GPU。

Xavier NX 有个强大的 GPU,结果我白瞎了。



第三阶段:想用 GPU,结果一地鸡毛

坑 1:环境不支持,需要重新编译 OpenCV

我想让模型跑在 GPU 上,就在代码里加了这两行:

代码块


net.setPreferableBackend(cv2.dnn.DNN_BACKEND_CUDA)
net.setPreferableTarget(cv2.dnn.DNN_TARGET_CUDA)


      复制成功
     
     
     
     

运行,报错:cv2​.dnn.DNN_BACKEND_CUDA not found

一查才知道:pip 安装的 OpenCV 默认不支持 CUDA。

要用 GPU,必须自己编译一个支持 CUDA 的 OpenCV。

我当时的心情:💔

坑 2:存储空间不够

Xavier NX 的系统盘只有 14GB,系统已经占了 10GB,剩下 4GB。

编译 OpenCV 需要下载源码、依赖库、生成中间文件,至少要 10GB 空间。

我下载到一半,提示"磁盘空间不足",直接炸了。

解决方案:插了个 U 盘,把编译工作搬到 U 盘上。

坑 3:设备型号搞错了

在网上找教程时,我看到有人说"Jetson 编译 OpenCV 要用 CUDA_ARCH_BIN=5.3"。

我照着做,结果编译一直报错。

后来才发现:

  • Jetson Nano 的架构是 5.3
  • Xavier NX 的架构是 7.2

我的设备是 NX,参数当然不对。

教训:AI 聊天工具的上下文如果太长,它会"忘记"你的设备型号,给出错误建议。一定要反复强调关键信息。

坑 4:依赖库没装全

开始编译后,报了一堆错误:

代码块


CMake Error: CUDA_cufft_LIBRARY NOTFOUND
CMake Error: CUDA_nppc_LIBRARY NOTFOUND


      复制成功
     
     
     
     

我一脸懵,这些是啥?

后来查资料才知道,这些是 CUDA 开发库,需要单独安装:

代码块


sudo apt install libcufft-dev-11-4 libnpp-dev-11-4


      复制成功
     
     
     
     

我之前安装到一半就手贱停止了,导致包不完整,排查了半天才发现。

教训:依赖安装时别手贱打断,确认完整后再继续。

坑 5:编译时间太长

即使一切顺利,编译 OpenCV 也要 2-5 个小时。

我用 -j2(同时编译 2 个文件)跑,CPU 占满,风扇狂转,等得我怀疑人生。

教训:编译嵌入式设备的大型库,一定要有心理准备,别以为几分钟就能搞定。

坑 6:下载速度慢

编译过程中要下载一些依赖,默认源在国外,速度慢到怀疑人生。

解决方案:换成国内镜像源,比如清华源:

代码块


sudo sed -i 's|ports.ubuntu.com|mirrors.tuna.tsinghua.edu.cn|g' /etc/apt/sources.list


      复制成功
     
     
     
     


第四阶段:终于编译成功了(未完待续)

现在正在编译中,预计还要 2 小时...

编译完成后,我会测试 GPU 加速的效果,预期:

  • FPS 从 30 提升到 50-80
  • 延迟降低到 15ms 以内

到时候再更新结果。



经验总结

  1. 记录清晰的笔记 每一步操作、报错信息、解决方案都记下来 后续复盘时能快速定位问题 也方便写技术博客(比如这篇)
  2. 确认设备型号和架构 Jetson Nano、Xavier NX、Orin 的参数都不一样 别照搬教程,先确认自己的设备
  3. 提前检查磁盘空间 嵌入式设备存储小,编译前先看够不够 不够就用外接存储
  4. 依赖安装要完整 别手贱打断安装过程 缺依赖会导致编译失败,排查很耗时
  5. 换国内镜像源 下载速度能提升 10 倍 编译前先换好
  6. 耐心等待编译 大型库编译要几个小时,这是正常的 可以去做别的事,别干等着


彩蛋:给 AI 助手提需求的技巧

在这个项目中,我大量用到了 AI 聊天工具(比如 Claude、ChatGPT)。

踩过的坑:

  • 上下文太长,AI 会"忘记"你的设备型号
  • 给的建议看起来对,但不适合你的环境

改进方法:

  • 每次提问都带上关键信息: "我的设备是 Jetson Xavier NX,CUDA 架构 7.2" "系统盘只有 14GB"
  • 让 AI 先确认再给建议: "帮我确认一下,Xavier NX 的 CUDA_ARCH_BIN 应该是多少?"
  • 记录 AI 的建议,验证后再执行: 别盲目复制粘贴命令,先看懂再跑


下期预告

等编译完成后,我会写第二篇:

  • GPU 加速效果测试:CPU 30 FPS vs GPU XX FPS
  • 性能优化技巧:跳帧检测、ROI 裁剪等
  • TensorRT 尝试:能不能再快一倍?

敬请期待!



写在最后

如果你也在做嵌入式 AI 项目,遇到问题别慌:

  • 先看报错信息,抓关键词去搜
  • 记录每一步操作,方便复盘
  • 多用 AI 工具辅助,但要验证结果

踩坑是正常的,记录下来就是经验。

希望这篇文章能帮到你,少走弯路。

如果有帮助,欢迎点赞收藏!有问题也欢迎评论区讨论。




免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删

相关文章
技术文档
QR Code
微信扫一扫,欢迎咨询~
customer

online

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 board-phone 155-2731-8020
close1
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

姓名不为空

姓名不为空
手机不正确

手机不正确

手机不正确
公司不为空

公司不为空

公司不为空