yolov3报错darknet: ./src/cuda.c:21: check_error: Assertion `0' failed. Aborted (core dumped)

此文主要针对配置与问题解决。
一.配置GPU和CUDA信息

Darknet在GPU上运行可以得到500倍的提速,编译使用GPU要求显卡是Nvidia卡并且正确安装了CUDA。

GPU环境下的编译配置都是在 /darknet/Makefile 文件中定义的,GPU环境的编译有3点更改需要注意。

  1. 更改Makefile前两行GPU和CUDNN的配置:

(备注:makefile 用vim打开,按ESC,再输入:wq,实现保存退出)
GPU=1

CUDNN=1

  1. 更改CUDA的路径

48~51行,在"ifeq ($(GPU), 1)"语句块中修改为自己的CUDA安装路径,更改前默认路径如下:

ifeq ($(GPU), 1)

COMMON+= -DGPU -I/usr/local/cuda/include/

CFLAGS+= -DGPU

LDFLAGS+= -L/usr/local/cuda/lib64 -lcuda -lcudart -lcublas -lcurand

例如修改为:

ifeq ($(GPU), 1)
COMMON+= -DGPU -I/usr/local/cuda-9.0/include/
CFLAGS+= -DGPU
LDFLAGS+= -L/usr/local/cuda-9.0/lib64 -lcuda -lcudart -lcublas -lcurand

23行,修改NVCC的路径:

NVCC=/usr/local/cuda-8.0/bin/nvcc

  1. 修改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列表:
显卡计算能力查询:https://developer.nvidia.com/cuda-gpus,根据自己的GPU型号的计算能力进行配置,例如配置为:
我的gtx1060,对应6.1
所以为ARCH= -gencode arch=compute_61,code=sm_61

YOLOv3训练自己的数据
https://www.jianshu.com/p/f4518fe04da1

你可能感兴趣的:(yolov3)