英伟达Jetson开发板踩坑记录总结
1   测试项目
- 人体骨架检测:VideoPose3d
- 安卓版人体骨架检测,支持网络摄像头videopose3d_android
- 人体骨架检测(多人追踪版):VideoPose3D-for-multi-person-tracking
- 谷歌的人体骨架检测:posenet-pytorch
- 人脸年龄修改:HRFAE
2   VideoPose3d
- Human3.6M数据集下载:Human3.6M全部数据集和Human3.6M部分数据集
2.1   训练推理自定义视频
设置过程参见:Inference in the wild
2.1.1   安装ffmpeg
1 | sudo apt install ffmpeg |
2.1.2   安装detectron2
配置流程参照:Installation
1 | # 方案1:直接pip安装 |
2.1.3   下载预训练模型
1 | # 如果VideoPose3D目录下没有checkpoint文件夹的话,先mkdir checkpoint |
2.1.4   推理2D关键点
- 在 inference 文件夹中新建两个文件夹 input_directory 和 output_directory,input_directory用来存放需要处理的自定义视频,output_directory用来存放程序生成的每个视频的2D关键点数据文件,后缀名是.npz。
- 将需要处理自定义视频放入VideoPose3D/inference/input_directory/中,切记需要先放入视频后再执行后面的命令。若不提前放入视频,最后执行run.py是会出现报错:keyError:output.mp4。其中「推理2D关键点」步骤中不会有ffmpeg相关视频处理的日志输出,「创建自定义数据集」步骤中不会显示出处理了xxx.npz文件和处理了多少帧frame,只输出saving和done这两句简单的日志,并且这种情况在data目录中生成data_2d_custom_myvideos.npz的数据集文件只有798字节,不到1KB的大小,属于无效文件。
- 执行命令推理2D关键点
1 | cd inference |
- 创建自定义数据集:程序根据VideoPose3D/inference/output_directory/的每个视频的2D关键点数据文件.npz,在data目录下生成自定义的data_2d_custom_myvideos.npz文件。
1 | cd data |
- 渲染自定义视频并导出坐标:output.mp4是在VideoPose3D根目录下,不是inference/output_directory/。
1 | python3.7 run.py -d custom -k myvideos -arc 3,3,3,3,3 -c checkpoint --evaluate pretrained_h36m_detectron_coco.bin --render --viz-subject test_video.mp4 --viz-action custom --viz-camera 0 --viz-video /home/nvidia/VideoPose3D/inference/input_directory/test_video.mp4 --viz-output output.mp4 --viz-size 6 |
2.2   训练推理h36m视频
数据集设置步骤参考:Dataset setup
- 准备数据文件:在data目录下新建h36m文件夹,传入3d数据集的压缩包,目录结构图如下
1 | data/ |
- 数据处理
1 | # 解压数据集: |
- 下载预训练模型
1 | mkdir checkpoint |
- 测试Human3.6M模型数据
1 | python run.py -k cpn_ft_h36m_dbb -arc 3,3,3,3,3 -c checkpoint --evaluate pretrained_h36m_cpn.bin |
3   HRFAE
官方要求的依赖库(注意torch需要是cuda版本的,因为源码是使用cuda设备的方法)
- Python 3.7
- Pytorch 1.1
- Numpy
- Opencv
- TensorboardX
- Tensorboard_logger
别人测试成功的依赖库版本:参见成功运行HRFAE面部年龄编辑
- Python 3.7.13
- Pytorch 1.10.2
- Numpy 1.21.5
- Opencv 4.6.0
- Tensorboard 1.14.0
- TensorboardX
- Tensorboard-logger
3.1   预训练模型的配置步骤
- 安装依赖库
1 | pip3.7 install TensorboardX Tensorboard_logger |
- 修改test.py代码
1 | cd HRFAE |
- 下载预训练模型
1 | # 科学网络条件好的,可以直接参考官方命令下载checkpoint |
- 运行命令生成结果
1 | cd HRFAE |
3.2   进程被Killed的故障排查
现象:终端输出一句「Killed」后,进程就闪退退出了。
原因:这是由于pytroch程序占用过多内存,引起系统OOM(Out of memory)机制。
解决方式:无。在我的尝试方法中,尝试了增加虚拟内存的大小至13GB,仍然是无法解决,依然是触发OOM了(即使我对pytorch进程禁用系统OOM killer,并观察内存占用情况,物理4GB全部吃满,虚拟内存zram占用到3.6GB后就整个系统卡死了)。推测可能还因为显存不足。
内存管理的相关命令:
1 | # 查看虚拟内存使用分配机制,vm.swappiness = 0:最大限度使用物理内存,vm.swappiness = 100:积极的使用交换空间 |
查看系统是否主动杀掉进程的日志排查:
1 | # 查看系统内核日志中最后7行 |
3.3   自训练模型的配置步骤
3.4   Windows x86版环境搭建
- 安装miniconda3:跳转下载
- 创建并切换新的虚拟环境
1 | conda create -n hrfae python=3.7 |
- 先下载并安装torch和torchvision的cuda版whl(建议先关闭科学上网,避免浪费科学上网的流量),使用
pip install
即可:torch-1.13.1+cu117-cp37-cp37m-win_amd64.whl和torchvision-0.14.1+cu117-cp37-cp37m-win_amd64.whl。别使用conda install torch
安装torch,否则易出现一些版本依赖的问题。例如:解决python urllib3 v2.0 only supports OpenSSL 1.1.1+, currently
。这是因为openSSL版本太低,可以安装低版本解决:pip install urllib3==1.23 -i https://pypi.tuna.tsinghua.edu.cn/simple
。 - 之后一一安装其他库,如果
conda install
找不到库,就使用pip install
,例如Tensorboard-logger
。
4   硬件型号
NVIDIA Jetson TX2 NX,16GB eMMC,额外挂载一个120G的固态盘。
5   烧录系统
5.1   烧录前准备
- 一台Ubuntu 18.00 LTS系统的PC(其他的jetson设备不能作为刷机主机,必须用ubuntu电脑。也不能用vbox或者vmware之类的虚拟机创建ubuntu刷机主机,因为虚拟机系统无法处理usb等底层的驱动,这会导致刷机时一直提示未正确进入刷机模式,但实际机器已经真正进入到刷机模式的)
- 一条micro-usb数据线
- 根据硬件型号选择对应版本的驱动包(BSP包)和示例根文件系统(目前适配TX2 NX的最新版为R32.7.4)。
5.2   烧录步骤
- 在刷机主机ubuntu系统中启用ssh。
- 通过WinSCP将驱动包(BSP包)和示例根文件系统复制至刷机主机系统中的家目录
/home
。 - 刷机命令
1 | # 安装必要库 |
5.3   烧录后无法进入到桌面环境
Jetson报错无法进到桌面环境: Failed to start nvpmode1 server. 和Failed to start load kernel modules
无桌面环境的条件下进入到终端操作的两种方式:
- ssh连接虚拟ip:jetson的usb有虚拟ip,可以通过ssh远程连接,用上位机通过USB数据线(有的USB线不能传数据只能充电,因为只有电源线和地线)连接jetson。打开上位机远程登陆开发板,登陆ip为:192.168.55.1:
ssh nvidia@192.168.55.1
- 按ctrl+alt+F1-F6等组合键切换命令窗口1-6
Failed to start nvpmode1 server一般是桌面环境出问题引起的,重装桌面环境即可。
1 | sudo apt-get install nvidia-l4t-x11 |
Failed to start load kernel modules一般配置方面出问题,重新运行更新配置。
1 | # 切换到root模式,并保留当前终端环境 |
5.4   为TX2 NX这种老硬件安装Ubuntu 20.04
为Jetson TX2 NX或者Jetson Nano这种老硬件安装Ubuntu 20.04(官方最新只支持Ubuntu 18.04)的两种方式:
- 使用社区提供的三方系统ubuntu 20.04:Install PyTorch on Jetson Nano和Jetson-Nano-Ubuntu-20-image。这种方式需要烧录到SD卡,并且系统解压后高达19.1GB,建议是准备一个64GB容量的SD卡,即TF卡。
- 设置软件源更新(我尝试过按官方升级的方式修改源,并未成功,估计是连20.04也太老了):Jetson Nano 系统升级至Ubuntu 20.04
6   为开发板设置SSD固态为系统盘
NVMe SSD固态硬盘仅作为系统盘(rootfs和用户区),系统的启动引导依然是通过SD卡或者内置EMMC的存储,比如升级设备树dtb仍然是在SD卡或者EMMC中。
- 格式化硬盘:打开软件列表搜索disk,打开ubuntu自带的Disks工具,选择识别到的SSD,按Ctrl+F对硬盘进行快速格式化,点击Format(不覆盖已存在的数据),点击Format(只是弹窗查看确认该操作影响到的设备),输入密码提权操作。默认最大分区,直接下一步。分区名字填ssd,其他选项默认(Type:ext4),点击create创建。点击分区左下角的三角符号(▶)进行挂载(状态变化:Not Mounted -> Mounted at /media/nvidia/ssd)。
- 下载系统盘转换程序的源码:
git clone https://github.com/jetsonhacks/rootOnNVMe.git
。如果克隆仓库失败,访问网页下载压缩包,再解压通过WinSCP上传到开发板家目录(上传后记得将文件的权限设置为0755,否则运行程序时会提示无权限)。
1 | cd rootOnNVMe |
- 运行命令
df -h
:可以看到挂载根目录的分区大小已经是SSD固态硬盘的120G的容量,不是以前EMMC的16G。
7   Jetson TX2更换软件源
备份并编辑软件源
1 | # 备份/etc/lib路径下的source.list文件, |
清华源:
1 | deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ xenial-updates main restricted universe multiverse |
假如默认官方源被删除的话,可以用下面的可用官方源恢复:
1 | deb http://ports.ubuntu.com/ubuntu-ports/ bionic main restricted |
8   配置python
查看torchvision的README页面,可知torch和torchvision对应版本信息,以及所要求的python版本。
torch | torchvision | Python |
---|---|---|
1.10 | 0.11 | >=3.6, <=3.9 |
综合考虑,因为需要安装v1.10.2的pytorch,因此python选用v3.7(很多深度学习项目要求最低的python版本是v3.7),避免v3.8-v3.9可能会因此太新导致编译出错。
8.1   pyton3.6
系统自带pyton3.6.9,运行pip3报错:pip3:command not found
解决方法:sudo apt install python3-pip
8.2   pyton3.7
pyton3.7版本需要手动编译。下载python3.7.16源码压缩包
1 | # 通过ssh连接到开发板系统,通过winscp上传python源码压缩包到开发板的家目录 |
8.2.1   系统缺乏库的一些报错:
- 缺乏libssl-dev库:pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available。实际上
- 缺乏libffi-dev库:ModuleNotFoundError: No module named '_ctypes'
- 缺乏libbz2-dev库(Detectron2需要用到):ModuleNotFoundError: No module named '_bz2'
- 缺乏liblzma-dev库(Detectron2需要用到):ModuleNotFoundError: No module named '_lzma'
8.2.2   TLS/SSL报错的另类解决方式
如果因为缺乏libssl-dev库,导致编译出来的python报错TLS/SSL的话,实际上这个问题可以通过换pip源解决,必须是http源。
创建并编辑pip配置文件:
1 | mkdir ~/.pip |
pip源设置内容:
1 | [global] |
8.2.3   安装系统库时的依赖版本报错
报错内容:libssl-dev : Depends: libssl1.0.0 (= 1.0.2g-1ubuntu4) but 1.0.2g-1ubuntu4.15 is to be installed
报错原因:要装的库OpenSSL,它需要依赖的包是X,但需要的X是A版本,但是系统环境中已经存在另外的程序,它也需要的依赖X,并且需要的是X另外一个版本B,两个版本之间发生冲突了。所以无法安装。
解决方法:sudo apt install libssl1.0.0=1.0.2g-1ubuntu4
,即安装推荐的折中版本(报错提示有给出)。
8.3   pypi清华源
- 临时使用:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple some-package
- 设置默认 (版本需>=10.0.0) :
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
- 升级pip本体
- 官方源升级pip:
python -m pip install --upgrade pip
- 清华源升级pip:
python -m pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --upgrade pip
- 官方源升级pip:
9   解决报错「Illegal instruction (core dumped)」
为了防止出现 “Illegal instruction (core dumped)” 报错,需要在 ~/.bashrc 最后添加如下语句,保存修改后,重启系统
1 | export OPENBLAS_CORETYPE=ARMV8 |
若是export导出环境变量之后,仍是出现相同的报错的话,则可能是安装包版本问题或者程序包问题。
10   安装jetson-stats查看开发板情况
安装jetson-stats前记得把pip源更换为清华源:sudo -H pip3.7 install -U jetson-stats
安装好jetson-stats之后,可以安装nvidia-jetpack包,使用jetson_release查看开发板信息(注意需提前装好jetson-stats)
1 | sudo apt install nvidia-jetpack |
10.1   The jetson_stats.service is not active
报错情况,jtop(jetson_stats.service)不能运行,systemctl查看服务状态为activating:
1 | The jetson_stats.service is not active. Please run: |
解决方法:把pip源更换为清华源后,重新安装jetson-stats。
11   为开发板安装CUDA、cuDNN、TensorRT库
示例根文件系统并未包含cuda等库,因此烧录系统之后,需要手动安装CUDA、cuDNN、TensorRT库。
- 打开sdk-manager下载网站,注册英伟达开发者帐号(注意是developer.nvidia.com域名,搜索nvidia register关键字注册的域名可能是partner.nvidia.com,即nvonline)。
- 下载最新的deb安装包,当前最新的是NVIDIA SDK Manager 1.9.3.deb。
- 安装sdk-manager:
sudo apt install sdkmanager_1.9.3-10904_amd64.deb
- 运行sdk-manager:终端运行命令
sdk-manager
或者在应用程序列表中找到SDKManager图标打开。 - 登录帐号(developer开发者帐号会打开浏览器登录,nvonline是直接在软件内页面登录),建议勾选上「Stay logged in」,避免因为安装出错后重复打开应用又要重新登录。
- sdk-manager第一步:等待程序自动检测出开发板信息,若没正确识别到开发板,请手动在Target Hardware选择正确的开发板型号(比如我的是TX2 NX型号)。剩余默认即可,附加SDK(DeepStreem)不需要勾选上。
- sdk-manager第二步:HOST COMPONENTS设置的是烧录主机的环境(清华镜像源可装),TARGET COMPONENTS(开发板环境,Jetson OS不要勾选,因为前面的步骤已经烧录过了。其他的SDK Components全部勾上)(清华源无法安装,会报错:SDK Manager received errors while using apt commands on your system,需换回官方源,并且是需要编辑开发板上的sources.list,编辑host主机上的sources.list源是没用的)。用micro-usb线连接开发板和烧录主机,点击下一步,提示指定路径不存在,点击create完成创建即可,这里输入烧录主机的密码用来提权。之后弹出一个窗口设置开发板帐号密码信息: 确认开发板型号,IPv4用192.168.55.1(usb连接的虚拟ip),系统账户名和系统密码,其余默认,之后点击Install确认安装库。
- sdk-manager第三步:安装过程。
- sdk-manager第四步:exit退出。
- 设置环境变量:sdk-manager安装好库之后,会自动添加export环境变量语句到用户级的.bashrc配置文件中(注意只是添加而已,仍需手动source ~/.bashrc,确保是在普通账户的终端下执行该命令)。但是root账户目录的.bashrc配置文件需手动配置
1 | # 刷新bash配置,普通账户nvidia的终端下执行该命令 |
- 查看cuda库的安装状态的命令:
jtop
和nvcc -V
/nvcc --version
。 - 配置 cuDNN:sdk-manager虽然安装了cuDNN,但没有将对应的头文件、库文件放到cuda目录。
1 | # sdk-manager安装路径 |
- 测试Cudnn(可选)
1 | sudo cp -r /usr/src/cudnn_samples_v8/ ~/ |
12   安装pytorch和pytorch vision
12.1   pyton3.6
12.1.1   为python3.6安装pytorch
pyton3.6直接访问nvidia官网PyTorch for Jetson帖子下载官方编译提供的版本:点击跳转下载whl,安装命令:pip3.6 install torch-1.10.0-cp36-cp36m-linux_aarch64.whl
12.1.2   为python3.6编译torchvision
12.2   pyton3.7
12.2.1   为python3.7编译pytorch
由于英伟达官方只提供python3.6版本的pytorch安装包,并且torch库官方下载站也没有arm芯片(aarch)的cu102版whl安装包,cpu版倒是有提供,因此pyton3.7的cuda版pytorch需要自行从源码编译。
编译步骤参考nvidia官网PyTorch for Jetson帖子的Instructions小节的Build from Source内容。
- 设置开发板功率模式
1 | # 设置最大功率模式,CPU和GPU频率最大 |
- 下载PyTorch源码(v1.10.2)
1 | cd /home/nvidia |
- 根据patch内容手动为patch新修复的代码:就是根据patch文件内容查找对应文件的对应行数,同步改动的代码。如果懒得改动的话,直接下载我修改好的文件,上传替换就行。patch代码主要解决编译报错的问题(详见编译步骤参考帖子)
1 | cd pytorch |
- 设置构建参数的环境变量(如果有改变终端,记得重新export这些环境变量)
1 | export USE_NCCL=0 |
- 安装构建必要的系统库:
sudo apt install cmake libopenblas-dev libopenmpi-dev
,这里我使用的ubuntu官方源。 - 编译源码构建程序(在构建之前建议先备份pytorch文件夹,毕竟克隆不容易:
cp -r pytorch pytorch.bak
):
1 | cd pytorch |
- 检测pytorch安装是否成功
1 | python3.7 |
12.2.2   为python3.7编译torchvision
查看torchvision的README页面,可知torch和torchvision对应版本信息,以及所要求的python版本。
torch | torchvision | Python |
---|---|---|
1.10 | 0.11 | >=3.6, <=3.9 |
编译步骤参阅:Development installation
下载及编译torchvision源码:
1 | # 我的网络环境没法直连github域名,手动指向cdn的ip(ping github.com得到ip),确保git的全局设置http的ssl证书验证关闭 |
测试安装是否成功:
1 | import torchvision |
13   配置opencv with cuda
13.1   python3.6环境
使用python3.6环境,可以直接使用这个帖子给出的预编译的opencv包——官方隐藏资源:Jetson伪超频与CUDA版OpenCV。
预构建好的deb文件:OpenCV-4.5.0-aarch64.tar.gz
可以先卸载系统自带的CPU版的opencv4.1.1,再执行安装deb包。
如果想自行从源码构建opencv with cuda,编译步骤可参考Install OpenCV on Jetson Nano。
13.2   python3.7环境
- 卸载默认不带cuda的opencv
1 | sudo apt purge libopencv* |
- 下载opencv和opencv_contrib源码
1 | # 访问网页离线下载 |
- 安装依赖库(参见Install OpenCV on Jetson Nano)
1 | # reveal the CUDA location |
- 配置cmake
1 | cmake \ |
如果cmake提示找不到OpenBLAS头文件和库文件的话,可以尝试方法修复:
1 | # -- Could not find OpenBLAS include. Turning OpenBLAS_FOUND off |
- 编译及安装
1 | # 使用-j参数多线程编译时会报错(makefile文件引起的),可能是由于我修改了opencv/cmake/OpenCVFindOpenBLAS.cmake文件引起的 |
- 测试opencv安装情况
1 | # 假设编译安装好系统opencv with cuda后,python没有找到cv2,则安装opencv-python包启用。 |
14   配置conda(可选,但不推荐)
不推荐配置,jetson tx2 nx型号能够安装成功的版本较老,并且创建虚拟环境后,默认的base环境一旦conda install任意包之后,再次运行conda的任何命令都会报错:illegal instruction (core dump)
,pip可以正常工作。如果是新建其他名称的虚拟环境,则是pip会报错:illegal instruction (core dump)
,而conda install可以正常工作。
anaconda下载:
miniconda下载:点击跳转
Archiconda下载:点击跳转
tx2 nx硬件只有这个版本能成功安装:Miniconda3-py37_4.9.2-Linux-aarch64.sh,而之后的新版本都会报错:illegal instruction (core dump)
。
14.1   conda基本操作
1 | # 创建了名为xxx的虚拟环境,指定虚拟环境的 Python 版本为3.7 |
14.2   修改conda源
1 | nano ~/.condarc |
14.3   使用yml配置文件创建虚拟环境报错(这个我实测没生效)
现象:使用yml文件创建conda环境时出现Solving environment: failed 和 ResolvePackageNotFound 的错误
原因:因为部分包的版本详细是根据机器配置而定,导出来的版本不一定适用当前的机器
解决方法:剔除环境配置文件environment.yml中的版本信息,只需删除第二个等号之后的内容即可
1 | pytorch=1.1.0=py3.7_cuda10.0.130_cudnn7.5.1_0 |
15   参考文献
[1] Nvidia xavier NX 通过 flash.sh 烧录 linux 系统[EB/OL]. https://blog.csdn.net/Yan_uuu/article/details/126947983.
[2] Jetson Xavier NX 镜像制作、烧录及克隆[EB/OL]. https://blog.csdn.net/qhdd123/article/details/123815911.
[3] 解决 Jetson:Failed to start nvpmode1 server. 和 Failed to start load kernel modules[EB/OL]. https://blog.csdn.net/alianfibakic/article/details/123807606.
[4] Jetson TX2 更换软件源[EB/OL]. https://blog.csdn.net/qlulibin/article/details/80271096.
[5] Ubuntu18.04 默认源恢复默认源恢复备份源[EB/OL]. https://blog.csdn.net/ZeyiRTangent/article/details/114885286.
[6] PyPI 镜像使用帮助[EB/OL]. https://mirrors.tuna.tsinghua.edu.cn/help/pypi/.
[7] Ubuntu 编译安装 python3.7.10, 解决‘_ctypes‘和 ssl 问题, 建立软链接 python3.7 和 pip3.7[EB/OL]. https://blog.csdn.net/tmaccs/article/details/117029067.
[8] ubuntu18.04 下源码编译安装最新版本 Python3[EB/OL]. https://zhuanlan.zhihu.com/p/62930419.
[9] ubuntu pip is configured with locations that require TLS/SSL[EB/OL]. https://blog.csdn.net/a1007720052/article/details/107342695.
[10] libssl‑dev : Depends: libssl1.0.0 (= 1.0.2g‑1ubuntu4) but 1.0.2g‑1ubuntu4.15 is to be installed[EB/OL]. https://blog.csdn.net/weixin_38890593/article/details/102783551.
[11] TX2开启最大功耗模式[EB/OL]. https://www.cnblogs.com/gezhuangzhuang/p/11674062.html.
[12] 使用git --recursive进行循环克隆,由于网络原因,出现克隆失败的情况。[EB/OL]. https://blog.csdn.net/qq_43212651/article/details/116376103.
[13] 解决c++: internal compiler error: 已杀死 (program cc1plus)[EB/OL]. https://blog.csdn.net/chenmeng0508/article/details/122283442.
[14] Jetson nano增加Swap分区大小操作指南[EB/OL]. https://blog.csdn.net/qq_33475105/article/details/108372878.
[15] 玩转NVIDIA Jetson (25)--- jetson 安装pytorch和torchvision[EB/OL]. https://blog.csdn.net/huiyuanliyan/article/details/126686036.
[16] Ubuntu 安装PHP找不着BZip2[EB/OL]. https://blog.csdn.net/handsome_926/article/details/77933926.
[17] ModuleNotFoundError: No module named '_lzma'[EB/OL]. https://zhuanlan.zhihu.com/p/404162713.
[18] Error :: You must put some 'source' URIs in your sources.list[EB/OL]. https://askubuntu.com/questions/496549/error-you-must-put-some-source-uris-in-your-sources-list.
[19] 3d-pose-baseline[EB/OL]. https://github.com/una-dinosauria/3d-pose-baseline.
[20] How to stop jetson_clocks?[EB/OL]. https://forums.developer.nvidia.com/t/how-to-stop-jetson-clocks/144713.
[21] VideoPose3d:环境搭建+制作自己的视频[EB/OL]. https://blog.csdn.net/willbetter01/article/details/120906567.
[22] 【VideoPose3D】可视化自定义视频[EB/OL]. https://blog.csdn.net/qq_44942539/article/details/121983187.
[23] Windows下VideoPose3D成功运行记录2:运行自定义视频[EB/OL]. https://www.bilibili.com/read/cv19291005/.
[24] How to Use OpenCV with CUDA Support in Python[EB/OL]. https://saturncloud.io/blog/how-to-use-opencv-with-cuda-support-in-python/.
[25] Jetson Xavier NX OpenCV 安装[EB/OL]. https://zhuanlan.zhihu.com/p/411901208.
[26] Nvidia Jetson TX2 配置Cuda 加速的Opencv[EB/OL]. https://blog.csdn.net/weixin_62651190/article/details/129348245.
[27] Guide to build OpenCV from source with GPU support (CUDA and cuDNN)[EB/OL]. https://gist.github.com/minhhieutruong0705/8f0ec70c400420e0007c15c98510f133.
[28] How to install OpenCV 4.2.0 with CUDA 10.0 in Ubuntu distro 18.04[EB/OL]. https://gist.github.com/changx03/b4aa9bb2827217c3a6a7e08365441417.
[29] Jetson带CUDA编译的opencv4.5安装教程与踩坑指南,cmake配置很重要![EB/OL]. https://blog.csdn.net/weixin_39298885/article/details/110851373.
[30] ubuntu 编译安装支持CUDA的OpenCV[EB/OL]. https://blog.csdn.net/qq_44523137/article/details/124098406.
[31] Install OpenCV on Jetson Nano[EB/OL]. https://qengineering.eu/install-opencv-on-jetson-nano.html.
[32] 「解析」Jetson Orin NX 安装 CUDA/cuDNN[EB/OL]. https://blog.csdn.net/ViatorSun/article/details/129909317.
[33] OpenCV 4.2.0 and CuDNN for Jetson Nano?[EB/OL]. https://forums.developer.nvidia.com/t/opencv-4-2-0-and-cudnn-for-jetson-nano/112281?page=2.
[34] Correction in OpenCV's default CMAKE search Path for OpenBLAS Library on Ubuntu-64bit Machines [Solution] [EB/OL]. https://github.com/opencv/opencv/issues/12957.
[35] jetson tx2 安装miniconda失败原因(illegal instruction (core dump)原因解析与简易安装miniconda[EB/OL]. https://blog.csdn.net/buxiangyaomingzi/article/details/123297295.
[36] TypeError: load() missing 1 required positional argument: 'Loader' in Google Colab[EB/OL]. https://stackoverflow.com/questions/69564817/typeerror-load-missing-1-required-positional-argument-loader-in-google-col.
[37] 解决创建conda环境时Solving environment: failed 和 ResolvePackageNotFound 的错误[EB/OL]. https://blog.csdn.net/hshudoudou/article/details/126407029.
[38] 关于Ubuntu下ZRAM的配置和使用[EB/OL]. https://blog.xzr.moe/archives/88/.
[39] 解决python urllib3 v2.0 only supports OpenSSL 1.1.1+, currently[EB/OL]. https://blog.csdn.net/weixin_43205308/article/details/130830307.
[40] 从TensorFlow被kill到增加Swap分区[EB/OL]. https://www.zhihu.com/column/p/30562899.
[41] Linux运行程序时,程序进程莫名退出(被杀死)[EB/OL]. https://blog.csdn.net/ispringmw/article/details/112719262.
[42] linux 环境下进程被 killed掉原因分析和解决方法[EB/OL]. https://blog.csdn.net/ktigerhero3/article/details/80004315.
[43] Linux OOM Killer机制 以及防止被OOM Killer杀死的方法[EB/OL]. https://blog.csdn.net/top_explore/article/details/107733974.