对应论文:
You Only Look Once: Unified, Real-TimeObject Detection
第一步,安装Darknet。
1. 安装基本系统Installing The Base System
依次输入如下命令:
git clone https://github.com/pjreddie/darknet.git
cd darknet
make
如果make成功,可以看到控制台打印如下信息:
然后再输入如下命令:
./darknet
可以看到控制台打印的信息为:
接下来安装CUDA和opencv。安装CUDA是为了GPU加速(比CPU快500倍以上),安装opencv之后可以显示图片(不安装的话会把最终结果图片保存在硬盘里)。这两个安装是可选的,可以不用安装。
由于安装CUDA步骤比较繁琐,故此处不在说明,可以参考英伟达官网的教程说明。
如果CUDA安装成功,则可以输入nvidia-smi 命令查看显卡。另外,还需要在darknet目录下修改Makefile,修改为
GPU=1
修改之后再make一下。
如果make之后出现如下错误(前提是CUDA确实安装成功了):
/bin/sh: 1: nvcc: not found
make: ***[obj/convolutional_kernels.o] Error 127
则需要设置一下环境变量,如下:
export PATH=/usr/local/cuda-7.5/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-7.5/lib64:$LD_LIBRARY_PATH
如果有多个GPU,则可以使用-i <index> 选择使用哪个GPU,示例用法如下:
./darknet -i 1 imagenet test cfg/alexnet.cfg alexnet.weights
如果想要用GPU编译,但是想用CPU计算,则可以使用-nogpu 来使用CPU,示例用法如下:
./darknet -nogpu imagenet test cfg/alexnet.cfg alexnet.weights
opencv的安装可以参考网上的教程。
安装完之后,修改Makefile ,使得
OPENCV=1
修改完之后,同样需要重新make
输入如下语句
./darknet imtest data/eagle.jpg
如果opencv安装成功,则会显示如下图片:
2. 下载作者训练好的weight文件
输入命令
wget http://pjreddie.com/media/files/yolo.weights
大小1G左右。
接下来便可以运行测试demo了。
输入如下命令:
./darknet yolo test cfg/yolo.cfg yolo.weights data/dog.jpg
然后程序便开始运行了。控制台输出如下:
可以看到对于data文件夹下的dog.jpg图片,预测出了car,bicycle,dog。如果安装了opencv,会直接显示结果;如果没有安装,则会将结果保存在darknet文件夹下的predictions.png。结果如下图:
如果使用GPU版本,运行的时候可能会出现如下错误:
30:Detection Layer
forced:Using default '0'
Loadingweights from yolo.weights...Done!
CUDAError: invalid device function
darknet:./src/cuda.c:21: check_error: Assertion `0' failed.
Aborted (core dumped)
前面网络加载均正确,但是最后有关CUDA的错误。
这是由于不同的GPU架构不一样,需要在Makefile文件中将--gpu-architecture=compute_52, --gpu-code=compute_52(这是默认的),我们需要修改为适合我们GPU的值。
默认的值对应的GPU是Titan X GPU,即对应compute_52
Tesla K80 GPU对应的是compute_30,
我的GPU是Tesla K40c,对应的是compute_35,也就是改成
--gpu-architecture=compute_35,--gpu-code=compute_35
其他型号可以参考如下图,也可以去下面的链接查看。
网址为:http://docs.nvidia.com/cuda/cuda-compiler-driver-nvcc/index.html#virtual-architecture-feature-list
修改完Makefile之后,然后重新make,然后再运行
./darknet yolo test cfg/yolo.cfg yolo.weights data/dog.jpg
运行完之后,可以发现运行时间为0.118654s,比CPU运行时间(7.010997s)短多了。