本人是在JESON TK1开发板上实现yolo的视频实时运行测试
darknet的安装很简单,从官网上克隆代码即可:
git clone https://github.com/pjreddie/darknet.git
修改makefile文件,使用opencv和cuda
GPU=1
OPENCV=1
切换目录
cd darknet
make通过就安装成功,若出现如下错误:
obj/avgpool_layer_kernels.o -o libdarknet.so -lm -pthreadpkg-config –libs OpenCV-L/usr/local/cuda/lib64 -lcuda -lcudart -lcublas -lcurand -lstdc++
/usr/bin/ld: cannot find -lcudart
/usr/bin/ld: cannot find -lcublas
/usr/bin/ld: cannot find -lcurand
参照cannot find -lcudart …解决方案
安装成功
下面进行视频测试
权重文件请自行在darknet官网下载,本博客使用了tiny-yolo-voc.weights
tiny-yolo-coco.weights (考虑到TK1开发板性能速度问题,只使用了小模型)
VOC数据集测试,连接摄像头,运行命令
cd darknet
#voc webcam test
./darknet detector demo cfg/voc.data cfg/tiny-yolo-voc.cfg tiny-yolo-voc.weights
测试速度不够快,修改网络输入图片大小到208x208,修改tiny-yolo-voc.cfg第四行
width=208
height=208
速度达到16帧左右,基本满足实时要求
同理:
coco数据集测试,连接摄像头,运行命令
cd darknet
#coco webcam test
./darknet detector demo cfg/coco.data cfg/tiny-yolo.cfg tiny-yolo-coco.weights
速度在15帧左右
本测试主要代码梳理:
./darknet detector demo cfg/voc.data cfg/tiny-yolo-voc.cfg tiny-yolo-voc.weights
上述命令的意思是进入darknet.c文件,这个文件在examples文件夹中,然后进入darknet.c的main函数,main函数主要是判断输入的参数,判断的时候以空格左键分隔符,根据输入参数运行代码,main函数的主要代码:
int main(int argc, char **argv)
{
//test_resize("data/bad.jpg");
//test_box();
//test_convolutional_layer();
if(argc < 2){
fprintf(stderr, "usage: %s <function>\n", argv[0]);
return 0;
}
gpu_index = find_int_arg(argc, argv, "-i", 0);
if(find_arg(argc, argv, "-nogpu")) {
gpu_index = -1;
}
#ifndef GPU
gpu_index = -1;
#else
if(gpu_index >= 0){
cuda_set_device(gpu_index);
}
#endif
if (0 == strcmp(argv[1], "average")){
average(argc, argv);
} else if (0 == strcmp(argv[1], "yolo")){
run_yolo(argc, argv);
} else if (0 == strcmp(argv[1], "voxel")){
run_voxel(argc, argv);
} else if (0 == strcmp(argv[1], "super")){
run_super(argc, argv);
} else if (0 == strcmp(argv[1], "lsd")){
run_lsd(argc, argv);
} else if (0 == strcmp(argv[1], "detector")){
run_detector(argc, argv);
} else if (0 == strcmp(argv[1], "detect")){