YOLOv3 Demo踩坑记录

环境

OS ubuntu 18.04
GPU GeForce GTX 1080 Ti
python 3.7.5
pytorch 1.2.0
cuda 10.0.130
cudnn 7602

记录

在工作目录下,运行

git clone https://github.com/pjreddie/darknet
cd darknet

进入darknet目录,因为要使用GPU训练,所以要修改配置文件Makefile,将第一行的
GPU=0修改为GPU=1

然后运行

make

出现报错,关键报错信息如下:

./src/gemm.c: In function ‘time_gpu’:
./src/gemm.c:232:9: warning: ‘cudaThreadSynchronize’ is deprecated [-Wdeprecated-declarations]

这是因为cuda在10.0及之后的版本中删除了cudaThreadSynchronize函数。需要使用另一个函数cudaDeviceSynchronize。观察报错知error出现在gemm.c的232行。

于是将gemm.c的第232行的cudaThreadSynchronize()改为cudaDeviceSynchronize()

再运行一次make

又出现报错

/bin/sh: 1: nvcc: not found
Makefile:92: recipe for target 'obj/convolutional_kernels.o' failed
make: *** [obj/convolutional_kernels.o] Error 127

这是因为程序找不到nvcc才产生报错。于是找到自己的nvcc安装位置。比如我用的机器是/usr/local/cuda-10.0/bin/nvcc

再次修改Makefile文件,将其中NVCC=nvcc修改为NVCC=/usr/local/cuda-10.0/bin/nvcc

重新运行make。编译成功。

接着运行测试命令,测试YOLOv3在本机上是否成功运行

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

得到报错

./darknet: error while loading shared libraries: libcudart.so.10.0: cannot open shared object file: No such file or directory

运行命令查看darknet的动态库依赖关系

ldd darknet

得到输出:

        linux-vdso.so.1 (0x00007ffd26389000)
        libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f78d0d2c000)
        libmvec.so.1 => /lib/x86_64-linux-gnu/libmvec.so.1 (0x00007f78d0b02000)
        libcudart.so.10.0 => not found
        libcublas.so.10.0 => not found
        libcurand.so.10.0 => not found
        libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f78d08e3000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f78d04f2000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f78d1499000)

not found可知,程序是找不到libcudart.so.10.0, libcublas.so.10.0, libcurand.so.10.0这三个库。也就是动态链接库的链接问题。

修改.bashrc文件,在文件末尾添加

export PATH=/usr/local/cuda-10.0/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-10.0/lib64/

然后执行下面的命令,使修改生效

source ~/.bashrc

再执行ldd命令查看依赖是否能找到

(cdx) name@machine:~/my/YOLOv3/path$ ldd darknet
        linux-vdso.so.1 (0x00007fff05164000)
        libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007efc3153e000)
        libmvec.so.1 => /lib/x86_64-linux-gnu/libmvec.so.1 (0x00007efc31314000)
        libcudart.so.10.0 => /usr/local/cuda-10.0/lib64/libcudart.so.10.0 (0x00007efc3109a000)
        libcublas.so.10.0 => /usr/local/cuda-10.0/lib64/libcublas.so.10.0 (0x00007efc2cb04000)
        libcurand.so.10.0 => /usr/local/cuda-10.0/lib64/libcurand.so.10.0 (0x00007efc2899d000)
        libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007efc2877e000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007efc2838d000)
        /lib64/ld-linux-x86-64.so.2 (0x00007efc31cab000)
        libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007efc28189000)
        librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007efc27f81000)
        libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007efc27bf8000)
        libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007efc279e0000)

一切正常,运行下面的命令看是否能正常使用

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

得到输出:

data/dog.jpg: Predicted in 0.427469 seconds.
dog: 100%
truck: 92%
bicycle: 99%

YOLOv3-GPU的Demo成功运行!

你可能感兴趣的:(YOLOv3 Demo踩坑记录)