Yolo v1测试和训练问题总结

0.配置环境
ubuntu 16.04
opencv3.1
cuda8.0
cudn6.0

1.问题

(1). Darknet安装,执行如下命令测试时,报错:
./darknet -i 1 imagenet test cfg/alexnet.cfg alexnet.weights

报错:
yolov1/darknet-master# ./darknet -i 1 imagenet test cfg/alexnet.cfg alexnet.weights
Not an option: imagenet

解决方法:
./darknet -i 0 test ./data/horses.jpg cfg/alexnet.cfg alexnet.weights

(2).
root@amax:/data/gpu_cuda8_cudnn6_py2/yolov1/darknet# make
mkdir -p obj
mkdir -p results
gcc -DOPENCV pkg-config --cflags opencv -DGPU -I/usr/local/cuda/include/ -DCUDNN -Wall -Wfatal-errors -Ofast -DOPENCV -DGPU -DCUDNN -c ./src/gemm.c -o obj/gemm.o
gcc -DOPENCV pkg-config --cflags opencv -DGPU -I/usr/local/cuda/include/ -DCUDNN -Wall -Wfatal-errors -Ofast -DOPENCV -DGPU -DCUDNN -c ./src/utils.c -o obj/utils.o
./src/utils.c: In function ‘fgetl’:
./src/utils.c:265:9: warning: ignoring return value of ‘fgets’, declared with attribute warn_unused_result [-Wunused-result]
fgets(&line[curr], readsize, fp);
^
gcc -DOPENCV pkg-config --cflags opencv -DGPU -I/usr/local/cuda/include/ -DCUDNN -Wall -Wfatal-errors -Ofast -DOPENCV -DGPU -DCUDNN -c ./src/cuda.c -o obj/cuda.o
gcc -DOPENCV pkg-config --cflags opencv -DGPU -I/usr/local/cuda/include/ -DCUDNN -Wall -Wfatal-errors -Ofast -DOPENCV -DGPU -DCUDNN -c ./src/convolutional_layer.c -o obj/convolutional_layer.o
./src/convolutional_layer.c: In function ‘cudnn_convolutional_setup’:
./src/convolutional_layer.c:145:5: error: too few arguments to function ‘cudnnSetConvolution2dDescriptor’
cudnnSetConvolution2dDescriptor(l->convDesc, l->pad, l->pad, l->stride, l->stride, 1, 1, CUDNN_CROSS_CORRELATION);
^
compilation terminated due to -Wfatal-errors.
Makefile:59: recipe for target ‘obj/convolutional_layer.o’ failed
make: *** [obj/convolutional_layer.o] Error 1
分析:
Makefile中配置:
GPU=1
CUDNN=0
OPENCV=1

【引用】:原因:我猜测是因为训练openpose用的这个caffe是在老版本的基础之上进行修改得到的,因此支持的cudnn也是老版本,因此当你的系统的cudnn版本>6就会产生上述问题,而你下载的官方的caffe会随着cudnn的版本更新而更新上述cudnn.hpp文件,以及其他相关的源码,因此在编译官方的caffe时不会出现此问题。而我的系统中的cudnn版本时8.0,产生上述错误。

(3).
./src/image.c:481:14: warning: assignment makes pointer from integer without a cast [-Wint-conversion]
if( (src = cvLoadImage(filename, flag)) == 0 )
^
./src/image.c: At top level:
./src/image.c:496:29: error: unknown type name ‘CvCapture’
image get_image_from_stream(CvCapture *cap)
^
compilation terminated due to -Wfatal-errors.
Makefile:59: recipe for target ‘obj/image.o’ failed
make: *** [obj/image.o] Error 1

解决方法:
在报错的文件中,#ifdef OPENCV 模块中添加下面这行代码:来自这里
#include “opencv2/videoio/videoio_c.h”
多个文件都要添加,注意修改完整。

(4).模型加载
29: Dropout Layer: 12544 inputs, 0.500000 probability
30: Connected Layer: 12544 inputs, 1715 outputs
31: Detection Layer
forced: Using default ‘0’
Loading weights from yolo.weights…Done!
CUDA Error: invalid device function
darknet: ./src/cuda.c:35: check_error: Assertion `0’ failed.
Aborted (core dumped)

解决:
编译时与实际显卡型号不匹配,需要修改配置文件。
修改ARCH配置(该项在以前编译的过程中压根就没有注意,但是最近出现的cuda error都是因为这个隐秘的大坑。工程从别处拷贝个过来,两台机器的显卡不一样,但是本人直接编译。工程是直接可以编译的,但是一运行yolo模型就会出现cuda error。各位同学应该紧密关注自己显卡的型号,并将arch配置成符合自己显卡型号的配置)
如果经过1和2的配置修改后编译的darknet运行可能会报以下错误:
Loadingweights from yolo.weights…Done!
CUDA Error:invalid device function
darknet: ./src/cuda.c:21: check_error: Assertion `0’ failed.
Aborted (core dumped)
就是上述忽略自身显卡型号造成的。
这是因为配置文件Makefile中配置的GPU架构和本机GPU型号不一致导致的。
更改前默认配置如下(不同版本可能有变):
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]

compute_30表示显卡的计算能力是3.0,几款主流GPU的compute capability列表:
GTX Titan x : 5.2
GTX 980 : 5.2
Tesla K80 : 3.7
Tesla K40 : 3.5
K4200 : 3.0
修改过后重新编译即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weixin_41813620

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值