目录
前置环境
设备:Jetson Orin NX 16GB
系统:Ubuntu20.04
Jetpack:5.1.1
CUDA:11.4
准备FastMOT源代码
git clone https://github.com/GeekAlexis/FastMOT.git
创建虚拟环境
conda create -n fastmot python=3.8
conda activate fastmot
问题汇总
问题1:安装TensorFlow报错
执行./scripts/install_jetson.sh
报错信息:
ERROR: Could not find a version that satisfies the requirement tensorflow ==1.15.5+nv21.6 (from versions: 2.10.0rc0, 2.10.0rc1, 2.10.0rc2, 2.10.0rc3, 2.10.0, 2.10.1, 2.11.0rc0, 2.11.0rc1, 2.11.0rc2, 2.11.0, 2.11.1, 2.12.0rc0, 2.12.0rc1, 2.12.0, 2.12.1, 2.13.0rc0, 2.13.0rc1, 2.13.0rc2, 2.13.0, 2.13.1)
ERROR: No matching distribution found for tensorflow ==1.15.5+nv21.6
解决方法:
在link下载Jetpack对应版本的whl包
然后执行:
pip install tensorflow-2.12.0+nv23.04-cp38-cp38-linux_aarch64.whl
问题2:RuntimeError: Unable to read video stream
将videoio.py的WITH_GSTREAMER = True修改为WITH_GSTREAMER = False
问题3:No module named ‘tensorrt’
参考链接:link
确保已正确安装cuda
# This takes a a while.`
pip install pycuda
export PYTHONPATH=/usr/lib/python3.6/dist-packages:$PYTHONPATH
# 通过切换到您的virtualenv并导入来测试此更改tensorrt。
> import tensorrt as trt
> # This import should succeed
问题4:安装cupy
参考链接:link
报错信息:
note: This error originates from a subprocess, and is likely not a problem with pip.
error: legacy-install-failure
× Encountered error while trying to install package.
╰─> cupy
解决方法:
从conda-forge安装
conda install -c conda-forge cupy
问题5:ImportError: /lib/aarch64-linux-gnu/libp11-kit.so.0
参考链接:link
报错信息:
ImportError: /lib/aarch64-linux-gnu/libp11-kit.so.0: undefined symbol: ffi_type_pointer, version LIBFFI_BASE_7.0
解决方法:
打开至conda虚拟环境下lib文件夹中,路径为/home/anaconda3/envs/xxx/lib,在文件夹内启动终端,输入命令ls -l
sudo ln -s /lib/x86_64-linux-gnu/libffi.so.7.1.0 libffi.so.7
sudo ldconfig
问题原因:
Python 3.8.16版本在安装过程中,就会默认安装libffi-3.4.2,在该库中,就会出现旧版本兼容老版本问题,即出现libffi.so.7链接至libffi.so.8.1.0,进而产生报错。而在python3.8.10中,默认安装libffi-3.3版本,在该版本内,libffi.so.7链接至libffi.so.7.1.0,就不会产生上述问题。因此,另一种解决方式即为安装python 3.8.10,同样能解决该问题。
问题6:version `GLIBCXX_3.4.29‘ not found
参考链接:link
解决方法:
(1)使用指令先看下系统目前都有哪些版本的,确定是缺少GLIBCXX_3.4.29。
strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBCXX
(2)来查看当前系统中其它的同类型文件,找到一个版本比较高的
sudo find / -name "libstdc++.so.6*"
版本比较多,就选了一个版本较高的,我这里是3.4.29,使用之前的指令看看其是否包含需要的版本:
strings /home/unitree/anaconda3/envs/PaddleOCR/lib/libstdc++.so.6.0.29 | grep GLIBCXX
可以看到有需要的版本,接下来就是建立新的链接到这个文件上
(3)复制到指定目录并建立新的链接
# 复制
sudo cp /home/wuye/anaconda3/envs/tf2/lib/libstdc++.so.6.0.29 /usr/lib/x86_64-linux-gnu/
# 删除之前链接
sudo rm /usr/lib/x86_64-linux-gnu/libstdc++.so.6
# 创建新的链接
sudo ln -s /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.29 /usr/lib/x86_64-linux-gnu/libstdc++.so.6
总结
- 激活conda虚拟环境后,sudo pip xxx、pip xxx、sudo python xxx.py、python.py会有不同的效果,有无sudo两者的作用范围是不同的,在虚拟环境中一般不推荐使用sudo,除非需要在全局环境中安装。
- Nvidia厂商的GPU也分为不同的计算架构,版本号有Turing架构(compute_75)、Volta架构(compute_70)和Ampere架构(compute_86或compute_80),相同的代码,不同的架构容易造成代码库版本兼容性问题。
- github上的README.md要仔细看,能少踩很多坑,一些问题的解决方案就写在里面。