在远程服务器上部署项目并运行
这个博客只是从项目部署的角度来写的,具体关于YOLOv5和deepsort等知识并不涉及。
部署的项目是上一个博客中提到的CV项目,上个博客是在Win10上部署,这个博客是在远端服务器上部署。(以后的项目都会要求在服务器上部署,所以要学会部署项目)
再次放上项目链接:Jetson 系列——基于yolov5和deepsort的多目标头部识别,跟踪,使用tensorrt和c++加速
连接到远端服务器
我一开始是在VS上部署的项目,本来是想用VS连接服务器,但是一搜全都是VSCode连接远程服务器的,然后我就查了一下VS和VSCode的区别,然后就选择了用VSCode来连接远程服务器。
Visual Studio 和Visual Studio Code的区别
总结来说VS是一个编译器,能够在上面编辑然后编译运行项目代码,而VSCode是一个编辑器,只能编辑代码而不能运行代码,只能在服务器上运行。
既然选择了VSCode,就要安装和部署VSCode。
VSCode安装参考博客:超详细VSCode安装教程(Windows)
重难点来了用VSCode连接远程服务器平台(虚拟机)
这个博客讲的非常详细,按照步骤一步步来就行。
链接:vscode连接虚拟机
补充一下:
做到博客中第三步之前要在这个下拉选项选择SSH Targets(我第一次弄的时候找了别的博客才找到这里)
连接上了远程服务器之后就能在上面部署和运行项目。
按照项目的博客一步步操作
因为是公司的虚拟机,大家都通用的,所以我新建了属于自己的文件夹,以后下载文件都放在这个文件夹里面。我下面称呼这个文件夹为 /cxy
1.用Git下载项目代码yolov5-deepsort-tensorrt
在 /cxy目录下运行:
sudo git clone https://github.com/RichardoMrMu/yolov5-deepsort-tensorrt.git
我的电脑必须加上sudo才能成功下载,我也不知道为什么,而且由于GitHub是外网,经常会出现下载失败,要多试几次。
2.下载yolov5官方代码和模型
注意yolov5版本必须是v5.0版,因为下面要用TensorRT进行加速,而TensorRT的yolov5只支持 v5.0版的,如果版本不对应会报错(血泪教训)。
在 /cxy目录下运行:
sudo git clone -b v5.0 https://github.com/ultralytics/yolov5.git
这里 -b v5.0 就是指定了下载版本
参考CSDN上的提问以及某大佬的回答。
之后要下载yolov5的模型:
cd yolov5
mkdir weights
cd weights
// 这里使用yolov5s模型
wget https://github.com/ultralytics/yolov5/releases/download/v5.0/yolov5s.pt
先进入yolov5文件夹中,然后新建weights文件夹来存放模型。也就是说
wget https://github.com/ultralytics/yolov5/releases/download/v5.0/yolov5s.pt
上面指令是在/cxy/yolov5/weights/文件夹中执行的
3.下载并配置TensorRT
因为tensorRT的yolov5版本要和上面下载的yolov5版本对应,所以下载指令为:
在/cxy文件夹下执行指令
sudo git clone -b yolov5-v5.0 https://github.com/wang-xinyu/tensorrtx.git
现在/cxy文件夹下应该有这三个文件:
4.将pytorch的模型转为tensorrt支持的模型文件
也就是yolov5s.pt->yolov5s.wts
.pt是我们之前下载的模型,它是支持pytorch的而我们要采用TensorRT进行加速所以要转换成TensorRT支持的 .wts文件。
将tensorrtx下的get_wts.py文件拷贝到yolov5文件夹下,然后将下载好的或者训练好的yolov5s.pt模型转换为wts模型
在/cxy文件夹执行指令:
cp tensorrtx/yolov5/gen_wts.py yolov5/
然后进入yolov5文件夹执行gen_wts.py将.pt文件转换成.wts文件。
即在/cxy/yolov5/文件夹下执行指令:
python3 gen_wts.py -w ./weights/yolov5s.pt -o ./weights/yolov5s.wts
这样在/cxy/yolov5/weights/文件夹中就生成了yolov5s.wts模型
5.编译tensorrtx/yolov5项目并获取tensorrt engine file
进入/cxy/tensorrtx/yolov5文件夹执行指令
mkdir build
创建build文件夹
进入build文件夹执行指令:
cp /cxy/yolov5/weights/yolov5s.wts /cxy/tensorrtx/yolov5/build/
将.wts文件复制到build文件夹中
在/cxy/tensorrtx/yolov5/build/文件夹下执行指令:
cmake ..
make
// 获得yolov5s.engine文件
sudo ./yolov5 -s yolov5s.wts yolov5s.engine s
// 测试是否获得了yolov5s.engine文件
sudo ./yolov5 -d yolov5s.engine ../samples
生成成功了,感动到流泪。
该生成的engine文件保存在:/cxy/tensorrtx/yolov5/build目录下。
6.获取deepsort特征提取的engine文件
先下载ckpt.t7
我是根据博客提供的百度云链接下载好上传到:/cxy/deep_sort_pytorch/deep_sort/deep/checkpoint
这个地址是我运行了一次它报错,提醒了在上面那个地址中没有ckpt.t7文件我才知道的。
然后下载deep_sort_pytorch:
在/cxy目录下执行指令:
sudo git clone https://github.com/RichardoMrMu/deep_sort_pytorch.git
下载deepsort-tensorrt
在/cxy目录下执行指令:
sudo git clone https://github.com/RichardoMrMu/deepsort-tensorrt.git
生成deepsort.onnx文件:
在cxy/deep_sort_pytorch文件夹中执行指令:
cp deepsort-tensorrt/exportOnnx.py deep_sort_pytorch/
python3 exportOnnx.py
这样在/cxy/deep_sort_pytorch中就生成了deepsort.onnx文件。
生成deepsort.engine文件
在/cxy/deep_sort_pytorch目录下执行指令:
mv ./deepsort.onnx ../deepsort-tensorrt/resources/
进入 cxy/deepsort-tensorrt目录:
cd ../deepsort-tensorrt/
在/cxy/deepsort-tensorrt目录下执行指令:
mkdir build
cd build
cmake ..
make
在build目录下执行:
./onnx2engine ../resources/deepsort.onnx ../resources/deepsort.engine
成功后可以在/cxy/deepsort-tensorrt/resources目录下看到生成的deepsort.engine文件:
7.将生成的两个engine文件放到项目中
我们在项目文件夹中创建一个/resources文件夹来存放这两个engine模型:
进入项目文件夹:
cd /cxy/yolov5-deepsort-tensorrt
mkdir resources
将两个文件复制进来:
在/cxy/yolov5-deepsort-tensorrt目录下执行指令:
//复制yolov5s.engine
cp /ssd/cxy/cxy2/tensorrtx/yolov5/build/yolov5s.engine ./resources/
//复制 deepsort.engine
cp /ssd/cxy/cxy2/deepsort-tensorrt/resources/deepsort.engine ./resources/
在
/cxy/yolov5-deepsort-tensorrt/rescorces目录下即可看到两个engine文件。
8.执行项目
项目目录为:/cxy/yolov5-deepsort-tensorrt
修改项目目录下/src/main.cpp函数
然后将要分析的视频文件同样放到resources目录下:
最后在项目中执行:
mkdir build
进入build目录,执行:
cmake ..
make
./yolosort // 运行二进制文件
可以看到成功执行了:
同时也能在results文件夹下看到保存的图片(results文件夹要自己提前建好)
要想保存文件就要修改/src/manager.cpp文件