TX2下ubuntu16.04的YOLOV3环境配置,使用demo和问题解决

一、首先是一些基础配置

1. 更换软件包镜像:

(1)更换下载源通过国内镜像网站快速下载Ubuntu的各种包,(中科大源)

cd /etc/apt/
sudo cp sources.list sources.list.bak
sudo gedit sources.list

 将下面的源添加到文件头部

deb http://mirrors.ustc.edu.cn/ubuntu/ xenial main restricted universe multiverse
deb http://mirrors.ustc.edu.cn/ubuntu/ xenial-security main restricted universe multiverse
deb http://mirrors.ustc.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse
deb http://mirrors.ustc.edu.cn/ubuntu/ xenial-proposed main restricted universe multiverse
deb http://mirrors.ustc.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse
deb-src http://mirrors.ustc.edu.cn/ubuntu/ xenial main restricted universe multiverse
deb-src http://mirrors.ustc.edu.cn/ubuntu/ xenial-security main restricted universe multiverse
deb-src http://mirrors.ustc.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse
deb-src http://mirrors.ustc.edu.cn/ubuntu/ xenial-proposed main restricted universe multiverse
deb-src http://mirrors.ustc.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse

 换源后更新源和已经安装的包:

sudo apt-get update
sudo apt-get upgrade


2. gcc/g++降级

cuda8.0对gcc5不支持,在编译时会出问题,对于tensorflow也太高。

我的tx2是cuda9.0,但还是将Ubuntu16.04自带的gcc和g++降级到4.9版本。

!注意降级可能对一些c/c++编译过程有影响

sudo apt-get install -y gcc-4.9
sudo apt-get install -y g++-4.9
cd /usr/bin
sudo rm gcc
sudo ln -s gcc-4.9 gcc
sudo rm g++
sudo ln -s g++-4.9 g++

查看gcc,g++版本:

gcc -v  
g++ -v

TX2下ubuntu16.04的YOLOV3环境配置,使用demo和问题解决_第1张图片
3. 对nouveau禁用

nouveau是ubuntu自带的显卡驱动,在禁用后才能使用NVIDIA驱动。 建立一个黑名单文件,将nouveau加入。

sudo gedit /etc/modprobe.d/blacklist-nouveau.conf

新建的文件中输入:

blacklist nouveau
options nouveau modset=0

保存文件并退出,然后在终端执行如下命令:

sudo update-initramfs -u

检查禁用是否成功:

lspci | grep nouveau

二、安装cuDNN

我的tx2是安装好cuda的,查看cuda版本:

cat /usr/local/cuda/version.txt



到nvidia官网https://developer.nvidia.com/rdp/cudnn-download,u进行注册,邮箱验证,登录,下载对应cuda 的Cudnn

点最下面的archived auDNN Releases,

TX2下ubuntu16.04的YOLOV3环境配置,使用demo和问题解决_第2张图片

tx2- arm64平台,对应cuda9.0随便选了cudnn7.1.4 版本,选第一个 for linux即可,下面的不用管

TX2下ubuntu16.04的YOLOV3环境配置,使用demo和问题解决_第3张图片
下完后,进入下载目录并解压为 /home/nvidia/cuda,进入/home/nvidia

然后复制头文件和动态链接库:

sudo cp cuda/include/cudnn.h /usr/local/cuda/include/
sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64/

库文件增加权限:

sudo chmod a+r /usr/local/cuda/include/cudnn.h 

创建软连接:

cd /usr/local/cuda/lib64/
sudo chmod a+r libcudnn.so.7.1.4  //自己查看.so的版本 对应更改
sudo ln -sf libcudnn.so.7.1.4 libcudnn.so.7
sudo ln -sf libcudnn.so.7 libcudnn.so
sudo ldconfig 

完成,查看cudnn版本号:

cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2

yolov3——darknet的安装

yolov3是在darknet平台上实现的,darknet安装教程按照官网步骤就可以了,官网链接https://pjreddie.com/darknet/install/

git clone https://github.com/pjreddie/darknet.git    #从github上下载darknet安装包

darkent官网下载权重,放在darknet文件夹 :

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

然后打开目录下的MakeFile,首先了解

#Arch 就是GPU的架构版本
ARCH= -gencode arch=compute_20,code=[sm_20,sm_21] \# Fermi 架构 常见 gtx480 gtx580
     -gencode arch=compute_30,code=sm_30 \# Kepler 架构 常见 gtx680 
     -gencode arch=compute_35,code=sm_35 \# Kepler 架构 常见 gtx780 
     -gencode arch=compute_50,code=[sm_50,compute_50] \# Maxwell 架构 常见 gtx750Ti gtx8 到9 系列 M
     -gencode arch=compute_52,code=[sm_52,compute_52]# Maxwell 架构 常见 gtx8 到9 系列
     -gencode arch=compute_61,code=[sm_61,compute_61]# Pascal 架构 常见 gtx 10系列
     -gencode arch=compute_70,code=[sm_70,compute_70]# Volta 架构 这个不常见,用作超算或者数据中心的,新出了一款2999刀的volta卡 Tesla V100,值得入手.
 
#高版本code不能在低版本的卡上跑,架构不同的其特性也有差距,所以尽量查一下你的显卡是在那个计算能力上的

我是在Jetson TX2应用,就对着一段进行了修改,(TX2的GPU是Pascal架构,计算能力为6.2),计算能力:https://developer.nvidia.com/cuda-gpus

修改如下,

ARCH= -gencode arch=compute_30,code=sm_30 \
      -gencode arch=compute_35,code=sm_35 \
      -gencode arch=compute_50,code=[sm_50,compute_50] \
      -gencode arch=compute_52,code=[sm_52,compute_52] \
      -gencode arch=compute_62,code=[sm_62,compute_62]

CPU 版:

只用CPU,则GPU,cuDNN都为0:

TX2下ubuntu16.04的YOLOV3环境配置,使用demo和问题解决_第4张图片

GPU版:

使GPU,CUDNN,OPENCV都为1,其次注意修改arch为62,以及检查划以下和自己机子的路径是否正确

TX2下ubuntu16.04的YOLOV3环境配置,使用demo和问题解决_第5张图片

检查:

NVCC=nvcc

COMMON+= -DGPU -I/usr/local/cuda/include/

LDFLAGS+= -L/usr/local/cuda/lib64 -lcuda -lcudart -lcublas -lcurand

然后可以编译:

cd ~/darknet
make

CPU版编译快,然后运行图片检测,GPU编译会慢一点:

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

运行成功后会出现下面的图片,并在darknet目录下生成predictions.png文件:

TX2下ubuntu16.04的YOLOV3环境配置,使用demo和问题解决_第6张图片

下面是进行摄像头实时检测:

 ./darknet detector demo cfg/coco.data cfg/yolov3.cfg yolov3.weights

读取视频文件进行检测:

./darknet detector demo cfg/coco.data cfg/yolov3.cfg yolov3.weights test1.MP4

遇到的问题

运行./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg,得到的预测图片没有bounding box和分类:

这样看来编译应该没有问题,预测只是做了一次前向传播,没有结果我猜可能是weights的问题,于是重新拷贝了个yolov3.weights就可以了...实在不知道为什么我下载的weights是假的,所以下载还是要去官网,不要图省事...

在编译gpu版本时候出现skipping incompatible  /usr/local/cuda/libcudnn.so

这个.so是通过软连接创建的,所以不知道问题出在哪里,删掉这个文件就不会出现skip的问题,但是这样不影响make

在编译gpu版本后,运行./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg到一半,出现killed,卡停

查看了tx2的cpu占用:

./tegrastatus

发现卡停时候,cpu RAM满了,打开/cfg/yolov3.cfg,找到 testing下面的两行参数,取消注释。

改为:

重新make然后运行就ok了。

 

 

你可能感兴趣的:(TX2,yolov3)