0
点赞
收藏
分享

微信扫一扫

Ubuntu16.04 LibTorch部署yolov5

灵魂跑者 2022-01-07 阅读 117

本文分为两个部分:Ubuntu16.04安装OpenCV和部署

项目地址

一、Ubuntu16.04安装OpenCV

1、安装相关软件包
sudo apt install  build-essential

sudo apt install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev  

sudo apt install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
2、下载OpenCV 并编译安装
Github下载网址:https://github.com/opencv(可以选择具体版本)
解压压缩包得到opencv-x.x.x文件夹
cd opencv-x.x.x
mkdir build
cd build
# 执行命令
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
# 其中/usr/local 是opencv的安装路径
#使用多线程编译(编译需要的时间会更短一些)
sudo make -j8
# 编译结束后
sudo make install
3、配置环境
sudo gedit /etc/ld.so.conf.d/opencv.conf 
#打开文件可能是空白的,在文末添加以下内容
/usr/local/lib
# 执行以下命令使得配置路径生效
sudo ldconfig 
sudo gedit /etc/bash.bashrc  
# 在文末添加以下内容
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig  
export PKG_CONFIG_PATH  
# 执行以下命令使得配置路径生效
source /etc/bash.bashrc  
# 最后进行更新
sudo updatedb 
4、验证OpenCV版本信息
pkg-config --modversion opencv
5、安装过程中遇到的问题
1、在 sudo make -j8 这一步可能会发生 Makefile:160: recipe for target ‘all’ failed 的报错
原因:Linux系统安装过Anaconda3,存在一些冲突
解决办法:

1、在安装OpenCV时将~/.bashrc中的Anaconda3环境变量注释掉,但是后面别忘了再打开注释,具体操作如下:

sudo gedit ~/.bashrc 
# 注释掉anaconda3相关的环境语句
# export PATH="/home/xxx/anaconda3/bin:$PATH"
# 执行以下命令使得配置路径生效
source ~/.bashrc
# 此时激活conda环境,应该是提示错误的
# 安装完毕或者需要使用虚拟环境时记得把注释去掉,别忘记source一下

2、https://blog.csdn.net/lyxleft/article/details/100901981

二、 Ubuntu16.04 LibTorch部署yolov5

环境:CUDA10.2 OpenCV3.4.12 PyTorch1.6.0 cudatoolkit=10.2 LibTorch 1.6.0 yolov5-3.0
1、安装PyTorch1.6.0(GPU)
conda install pytorch==1.6.0 torchvision==0.7.0 cudatoolkit=10.2 -c pytorch
PyTorch官网:https://pytorch.org/
以前的版本下载:https://pytorch.org/get-started/previous-versions/
2、安装LibTorch1.6.0(这里需要和PyTorch版本一致)

下载地址:https://download.pytorch.org/libtorch/cu102/libtorch-cxx11-abi-shared-with-deps-1.6.0.zip

下载后并解压,需要记住解压后文件夹的路径

3、修改yolov5-3.0工程中 models/export.py
# 只修改这里仅支持CPU
model.model[-1].export = True  修改为
model.model[-1].export = False
# 一并修改以下内容支持GPU
img = torch.zeros((opt.batch_size, 3, *opt.img_size)) 修改为
img = torch.zeros((opt.batch_size, 3, *opt.img_size)).to(device='cuda')
model = torch.load(opt.weights, map_location=torch.device('cpu'))['model'].float()
# 修改为
model = torch.load(opt.weights, map_location=torch.device('cuda'))['model'].float()
4、产生yolov5s.torchscipt.pt权重文件(已经获得yolov5s.pt权重文件并将其放在weights文件夹下)
#首先进入yolov5工程项目
cd yolov5/
# 添加路径
export PYTHONPATH="$PWD"
# 执行命令产生 yolov5s.torchscipt.pt 
# 注意 这里需要修改export.py 并清楚知道产生CPU还是GPU的权重文件
python models/export.py --weights weights/yolov5s.pt --img 640 --batch 1 
# 在weights/下产生yolov5s.torchscipt.pt,并将其移至libtorch-yolov5-master/weights/下
5、编译产生可执行文件
# 进入libtorch-yolov5工程项目
cd libtorch-yolov5-master/
#修改CMakeLists.txt
# 设置LibTorch文件夹路径
set(Torch_DIR /home/xxx/libtorch/share/cmake/Torch)
# 如果安装了多个版本的OpenCV版本 可以通过一下语句进行设置
find_package(OpenCV 3 REQUIRED) // 会自动在系统中寻找OpenCV3.x.x版本
mkdir build
cd build/
cmake ..
make
6、运行可执行文件进行推理
# 注意这里执行 CPU或者GPU 推理时 对应第4步产生的yolov5s.torchscript.pt权重文件
# CPU推理
$ ./libtorch-yolov5 --source ../images/bus.jpg --weights ../weights/yolov5s.torchscript.pt --view-img
# GPU推理
$ ./libtorch-yolov5 --source ../images/bus.jpg --weights ../weights/yolov5s.torchscript.pt --gpu --view-img
7、问题记录

1、执行下述命令时:

 ./libtorch-yolov5 --source ../images/bus.jpg --weights ../weights/yolov5s.torchscript.pt --gpu --view-img
error:
terminate called after throwing an instance of 'torch::jit::ErrorReport'
what():
aten::_convolution(Tensor input, Tensor weight, Tensor? bias, int[] stride, int[] padding, int[] dilation, bool transposed, int[] output_padding, int groups, bool benchmark, bool deterministic, bool cudnn_enabled) -> (Tensor):
Expected at most 12 arguments but found 13 positional arguments.

原因:PyTorch版本和LibTorch版本不一致

解决办法:可以重新安装虚拟环境,下载并安装相同版本的PyTorch和LibTorch

2、执行make时 出现下述错误:

/home/xxx/opencv-3.4.12/build/lib/libopencv_imgcodecs.so.3.4.12:对‘TIFFReadRGBAStrip@LIBTIFF_4.0’未定义的引用

原因:anaconda3 导致TIFF库有冲突

解决办法:

conda remove libtiff

3、执行下述命令时:

 ./libtorch-yolov5 --source ../images/bus.jpg --weights ../weights/yolov5s.torchscript.pt --gpu --view-img
models/export.py(43): <module>
RuntimeError: Expected all tensors to be on the same device, but found at least two devices, cuda:0 and cpu!

已放弃 (核心已转储)

原因:CPU或者GPU推理时 与第4步产生的yolov5s.torchscript.pt权重文件不对应(CPU推理对应CPU产生的yolov5s.torchscript.pt权重文件 GPU推理对应GPU产生的yolov5s.torchscript.pt权重文件)

解决办法:重新生成yolov5s.torchscript.pt权重文件,并对应选择进行推理

举报

相关推荐

0 条评论