PaddlePaddle在jetson NX的配置_副本
jetson NX的初次尝试
写在前面
转载自AI Studio 项目链接https://aistudio.baidu.com/aistudio/projectdetail/3482497
对于jetson系列的板子,只有它玩你的状况。
我使用的是jetson4.5系列,镜像烧写用的是jdkmanager的方式。推荐大家在安装各种包的时候,尽量使用能一次性安装的方式安装,不要一个依赖一个依赖的自己安装,后者总会遇到很多问题
系统盘(不管是ssd还是sd)内存一定要在30G以上,因为安装系统和最基础的包就要花掉25G
板子和电脑的文件传输方法:u盘或者邮箱
首先先进行开发板镜像的烧写
由于我拿到的板子上的sd卡是直接焊接在板子上,没法拿下来,无法直接安装成sd卡的形式。于是,我采用了sdkmanager的安装方法,并踩了不少坑。
第一步,在电脑上安装ubuntu虚拟机
在项目目录的data文件夹下,ubuntu虚拟机文件夹下,有压缩包。将其解压,双击
VMware-workstation-full-15.5.6-16341506.exe
,然后一路next安装这个软件。
然后在主页,点击添加虚拟机
内容选择典型,光盘映像目录选择,本项目压缩包下
ubuntu-18.04.5-desktop-amd64.iso
接下来加载然后设置虚拟机密码
把压缩包里面的
sdkmanager_1.6.0-8170_amd64.deb
拖到虚拟机目录下,然后在包含sdkmanager_1.6.0-8170_amd64.deb的文件夹的目录下打开命令行使用
sudo apt install ./sdkmanager_1.6.0-8170_amd64.deb
安装,然后使用
sdkmanager
检查安装是否成功(不报错就是成功)
第二部,烧写镜像
用线短接如图所示地方(连接如图2,3处),告诉系统现在是烧写模式
sd卡插好(在开发板主卡区域)
将开发版连上电脑,选择jetson连接的是虚拟机(注意不是电脑主机!!!)
然后虚拟机打开sdkmanager(这里会让注册英伟达开发者账号,还要填写个人信息。注意一定要注册完账号后及时填写个人信息没有填个人信息的话,后面登录会报错,会显示没有开发者权限,不让用sdkmanager)
填写完后会出现这个界面
host可选可不选(建议别选,不然相当于在虚拟机上安装同样的环境,没用还耽误时间)
linux可以选择其他版本,sdkmanager可能会提示更新也可以更新
之后是这个界面
注意此时不要选择jetson sdk components,不然安装镜像会出问题
然后点continue就可以烧写镜像了,等到镜像下载完并且create OS image ready(也就是两个进度条上面的出现对号了),就可以拔掉短接线了。 注意烧写过程中板子会很热,但风扇因为没有驱动无法转,此时建议给板子物理降温。还有结尾的时候,也就是instaling到99%的时候,可能还需要再等半个小时甚至一个小时,这个时候千万别关
当风扇开始转的时候说明烧写完了。
然后把你的ssd插上(当然如果你的sd卡内存够大也可以不插。但ssd启动快,且内存大),重启开发板,然后将开发板连上显示屏,用ubuntu的disk磁盘处理器,将ssd格式化然后分区然后设置为第一启动盘,具体可以参考work目录下的word教程
一般的教程到这里就已经结束了,接下来就得自己去安装各种库。
但如果自己安装opencv的话
sudo apt-get install libopencv-dev python-opencv
你会发现你无法用opencv打开你的摄像头。但这不是你摄像头的原因,因为
nvgstcapture
可以打开csi摄像头。
但如果你用以下常规的测试摄像头的代码尝试打开摄像头,会出现,程序没有任何反映的情况,而且不会有任何报错
import cv2
def gstreamer_pipeline(
capture_width=1280,
capture_height=720,
display_width=1280,
display_height=720,
framerate=60,
flip_method=0,
):
return (
"nvarguscamerasrc ! "
"video/x-raw(memory:NVMM), "
"width=(int)%d, height=(int)%d, "
"format=(string)NV12, framerate=(fraction)%d/1 ! "
"nvvidconv flip-method=%d ! "
"video/x-raw, width=(int)%d, height=(int)%d, format=(string)BGRx ! "
"videoconvert ! "
"video/x-raw, format=(string)BGR ! appsink"
% (
capture_width,
capture_height,
framerate,
flip_method,
display_width,
display_height,
)
)
def show_camera():
cap = cv2.VideoCapture(gstreamer_pipeline(flip_method=0), cv2.CAP_GSTREAMER)
while cap.isOpened():
flag, img = cap.read()
cv2.imshow("CSI Camera", img)
kk = cv2.waitKey(1)
# do other things
if kk == ord('q'): # 按下 q 键,退出
break
cap.release()
cv2.destroyAllWindows()
if __name__ == "__main__":
show_camera()
这个问题困扰了我好久,问过好多人都说可能是opencv的问题。于是我检查opencv的版本问题,发现系统里面的opencv是4.1.1,而python里面的确是3.2。可能是版本不匹配?
于是我卸载了全部的opencv,并下载了4.1.1的源码进行编译安装,一顿操作后,问题如初,没有解决。因此应该是操作过程中,没有将两个opencv建立联系。此时jetson的环境已经乱的不成样子,因为源码配置4.1.1各种问题层出不穷
我查了很多文章,发现他们的nano或者NX都是用电脑将一个各种依赖都装好的镜像写入sd卡,然后插上sd卡即可。于是,我重新进行了刷机,想试试能不能在安装的时候选择components,一起装上,这样应该没问题了。但因为sd卡内存不够,并且在安装完镜像后出现了死机(刷机三次都死机,怎么降温都没用),因此我只能选择只安装镜像。
但使用sdkmanager安装时,好像可以只选择component不选image,也就是第一遍短接安装镜像,第二遍不短接只安装component(只选择component),于是我想,可以先将镜像安装到sd卡里,然后sd卡的系统复制到ssd里,然后再y用ssd所带的环境为基础安装各种依赖,如是操作
安装完成后,终于成功,此时opencv在系统里和python上都一样,为4.1.1
后面的安装可以选择更改apt的镜像,也可以不改。反正我板子上apt直接安装也很快
安装nccl
先不要设置cuda环境变量,先安装nccl库,过程很漫长,有像报错一样的东西不要管他
sudo apt-get install libnccl2 libnccl-dev
配置cuda环境变量
如果你是远程电脑操作
sudo vim ~/.bashrc
如果你是用jetson显示屏操作
sudo gedit ~/.bashrc
文件最后添加
export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
export CUDA_HOME=$CUDA_HOME:/usr/local/cuda
刷新环境变量
source ~/.bashrc
安装pip
sudo apt install python3-pip
安装paddle-infer
从这个网站下载你想要安装paddle的版本.一定要看好cp后面的python版本和jetson版本以及cuda和cudnn,tensorrt的版本
可以使用
python3
查看当前的python是3.6还是3.7
然后把下载好的whl包放到jetson的home文件下并安装
pip3 install [你下载的包的名字]
检查安装成功了吗?
!python3
import paddle.fluid
查安装成功了吗?
```python
!python3
import paddle.fluid
paddle.fluid.install_check.run_check()
出现Your Paddle Fluid is installed successfully!则成功
测试padde-infer
测试所用代码参考:这篇文章
下载本项目work文件下的inference_model.rar,解压。
然后下载本项目work文件下的a.py,将上面的解压后得到的文件和a.py放到jetson NX的同一目录下
执行
!python3 a.py
应该会编译一会,因为要加载tensorrt
如果遇到如下报错:
Traceback (most recent call last):
File "a.py", line 108, in <module>
predictor = predict_config(model_file, params_file)
File "a.py", line 53, in predict_config
predictor = create_paddle_predictor(config)
paddle.fluid.core_noavx.EnforceNotMet:
C++ Traceback (most recent call last):
0 std::unique_ptr<paddle::PaddlePredictor, std::default_delete<paddle::PaddlePredictor> > paddle::CreatePaddlePredictor<paddle::AnalysisConfig>(paddle::AnalysisConfig const&)
1 std::unique_ptr<paddle::PaddlePredictor, std::default_delete<paddle::PaddlePredictor> > paddle::CreatePaddlePredictor<paddle::AnalysisConfig, (paddle::PaddleEngineKind)2>(paddle::AnalysisConfig const&)
2 paddle::AnalysisPredictor::Init(std::shared_ptr<paddle::framework::Scope> const&, std::shared_ptr<paddle::framework::ProgramDesc> const&)
const&, paddle::framework::AttributeMap, bool)
8 paddle::platform::GetCurrentTraceBackStringabi:cxx11
Error Message Summary:
Error: Operator multiclass_nms3 has not been registered
[Hint: op_info_ptr should not be null.] (at /home/nx/Paddle-release-2.0-beta/paddle/fluid/framework/op_info.h:140)
则因为paddle版本低,下载2.2版本可以解决
更多推荐
所有评论(0)