9、yolo3直接部署到TX2

一、将YOLOV3直接部署到TX2上

1、运行在CPU模式下

(1)下载和编译YOLOV3源码
git clone https://github.com/pjreddie/darknet yolo3
cd yolo3
sudo make -j4
(2)下载预训练模型权重文件
wget https://pjreddie.com/media/files/yolov3.weights #可能会出下下载很慢的情况

可以直接将网址粘贴至windows下的浏览器,可直接下载,然后再将该文件放到TX2的工程目录下。

(3)识别示例文件

代码格式: ./darknet detect .cfg 预训练权重 预测权重
代码运行后首先加载网络,然后对/dog.jpg进行就识别检测,结果如下,此时单张处理图片的速度大概为40s,检测精度也很高。

./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg

该示例图片如下:
在这里插入图片描述
测试效果如下:
在这里插入图片描述
该测试的精度还是比较高的,但是显然处理的时间就很长了,下面我们将TX2开启到最高功耗模式,也就是性能最高的状态。

查看当前的工作模式:

sudo nvpmodel -q verbose

开启最高功耗的模式,即Max-N:

sudo nvpmodel -m 0

在这里插入图片描述
结果显示,这里仍旧也要74点多秒来处理,所以仍旧是非常慢的,下面我们让GPU工作起来

2、GPU工作下

我们打开工程目录下的Makefile文件,显然可以看到GPU是没有工作的,所以下面我们修改一下这个文件。
在这里插入图片描述
修改如下:

GPU=1
CUDNN=1
OPENCV=1
OPENMP=0
DEBUG=0

然后重新编译一下:

sudo make -j4

然后出现了下面的错误。
在这里插入图片描述
然后我们输入下面的命令看下opencv是不是存在。

python -c "import cv2; print(cv2.__version__)"

在这里插入图片描述
显然,是有装opencv的,那么为什么还会报错呢,有可能是环境变量的问题。我们查找下它的安装路径:

 sudo find / -iname "*opencv*"

在这里插入图片描述
在这里插入图片描述

然后我们将该文件复制到该目录中,用如下命令:

sudo cp -f /usr/lib/aarch64-linux-gnu/pkgconfig/opencv4.pc  /usr/lib/pkgconfig/

在这里插入图片描述
然后再修改下环境变量:

sudo gedit .bashrc
#其中/test/是你的路径,对应的你要找到opencv4.pc的路径,然后将/test/替换掉
export PKG_CONFIG_PATH=/test/:$PKG_CONFIG_PATH
source .bashrc

然后打开Makefile,将opencv修改为opencv4,然后又出现了新的错误

在这里插入图片描述
然后博主就怀疑是这个git源有问题,所以就在其他地方找了另外一个源,所以我们删除掉原来的工程项目(要在root权限下删除),重新克隆下。

git clone https://github.com/AlexeyAB/darknet yolo3

然后我们再把预训练模型的权重放到该目录下(按照之前的步骤,可以通过ftp传输和远程实现)。

./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg

结果如下:
在这里插入图片描述
然后我们再开启GPU和opencv,我们打开并修改Makefile文件。

sudo gedit Makefile

在这里插入图片描述

然后重新编译一下。

sudo make -j4

在这里插入图片描述
然后根据该提示再修改Makefile文件,再修改之前,我们需要找到nvcc的路径,显然这在cuda目录下。
在这里插入图片描述
将原来的NVCC=nvcc注释掉
然后修改成如下:

NVCC=/usr/local/cuda-10.2/bin/nvcc

也就是添加刚刚所查的路径
在这里插入图片描述
最后再重新编译一下,就可以通过了。

3、修改模型超参数

改为GPU模式后还需要对模型的batch size等超参数进行修改,否则TX2的内存将很快被耗尽,造成系统卡顿的现象。因此修改yolov3/cfg/yolov3.cfg文件,将Training注释掉,改Testing的batch为1,修改后文件的前几行如下所示:
在这里插入图片描述
然后运行下代码,检测下示例图片。

./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg

结果如下:
在这里插入图片描述
在这里插入图片描述

这里只花了不到1秒左右就可以处理完了,而之前需要30多秒的时间。

二、使用Tiny YOLOv3预训练模型

cfg文件夹里面包含众多已经训练好的模型, yolov3-tiny便是其中的一个轻量级的网络,相较与yolov3,他的检测速度有了很大的提高,可以跑一看看效果

1、下载权重文件

wget https://pjreddie.com/media/files/yolov3-tiny.weights

2、运行代码,检测示例图片

./darknet detect cfg/yolov3-tiny.cfg yolov3-tiny.weights data/dog.jpg

效果如下:
在这里插入图片描述
在这里插入图片描述
虽然速度上去了,但是这个精确度却下降了。

3、实时检测

./darknet detector demo cfg/coco.data cfg/yolov3-tiny.cfg yolov3-tiny.weights -c 1

在这里插入图片描述
下面采用如下的方法尝试解决.
1、安装ffmpeg

git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg
cd ffmpeg
./configure --enable-shared --prefix=/usr/local/ffmpeg # /usr/local/ffmpeg 为要安装的目录,建议设置为这个
sudo apt-get install yasm
make -j8
make install -j8
ffmpeg -version
export PKG_CONFIG_PATH=/usr/local/ffmpeg/lib/pkgconfig#每个人的可能不一样所以也需要自己去查找一下,然后在.bashrc中添加
cmake -D WITH_FFMPEG=ON ..#在opencv的目录下编译,但是博主一直找不到Cmakelist.txt文件

配置环境变量

export PATH="/usr/local/ffmpeg/bin:$PATH"#每个人的可能不一样

2、修改Makefile(没用)

#LDFLAGS+= `pkg-config --libs opencv4 2> /dev/null || pkg-config --libs opencv`
LDFLAGS+= `pkg-config --libs opencv`
#COMMON+= `pkg-config --cflags opencv4 2> /dev/null || pkg-config --cflags opencv`
COMMON+= `pkg-config --cflags opencv`

3、最后发现是命令参数不对,正确的应该如下:

./darknet detector demo cfg/coco.data cfg/yolov3-tiny.cfg yolov3-tiny.weights "nvarguscamerasrc ! video/x-raw(memory:NVMM), width=1280, height=720, format=NV12, framerate=30/1 ! nvvidconv flip-method=0 ! video/x-raw, width=1280, height=720, format=BGRx ! videoconvert ! video/x-raw, format=BGR ! appsink"

在这里插入图片描述
在这里插入图片描述
实验的效果是平均12.6fps,勉强达到实时的效果。

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值