(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
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
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
我的tx2是安装好cuda的,查看cuda版本:
cat /usr/local/cuda/version.txt
到nvidia官网https://developer.nvidia.com/rdp/cudnn-download,u进行注册,邮箱验证,登录,下载对应cuda 的Cudnn
点最下面的archived auDNN Releases,
tx2- arm64平台,对应cuda9.0随便选了cudnn7.1.4 版本,选第一个 for linux即可,下面的不用管
下完后,进入下载目录并解压为 /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平台上实现的,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:
GPU版:
使GPU,CUDNN,OPENCV都为1,其次注意修改arch为62,以及检查划以下和自己机子的路径是否正确
检查:
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文件:
下面是进行摄像头实时检测:
./darknet detector demo cfg/coco.data cfg/yolov3.cfg yolov3.weights
读取视频文件进行检测:
./darknet detector demo cfg/coco.data cfg/yolov3.cfg yolov3.weights test1.MP4
这样看来编译应该没有问题,预测只是做了一次前向传播,没有结果我猜可能是weights的问题,于是重新拷贝了个yolov3.weights就可以了...实在不知道为什么我下载的weights是假的,所以下载还是要去官网,不要图省事...
这个.so是通过软连接创建的,所以不知道问题出在哪里,删掉这个文件就不会出现skip的问题,但是这样不影响make
查看了tx2的cpu占用:
./tegrastatus
发现卡停时候,cpu RAM满了,打开/cfg/yolov3.cfg,找到 testing下面的两行参数,取消注释。
重新make然后运行就ok了。