YOLOv4中Makefile文件的修改与编译,以及遇到的一些问题
    
    
    
    前言
   
    
     提示:之前利用YOLOv4的darknet来训练自己的数据集的时候,发现GPU的利用率非常低,应该说是没有用到。后来才发现需要修改Makefile文件,但是上网查到很多都是说修改文件内容然后生成就好了,但是我纯小白不知道怎么生成呀,好长时间终于摸索出来了,分享给大家。本文讲解YOLOv4中Makefile文件的修改与编译,以及遇到的一些问题。
    
   
    
    
    一、环境配置
   
基本的一些环境配置可以看我的上一篇文章,本文主要讲解修改Makefile文件。
- 
 CMake软件下载
 
 :可以直接上
 
 官网下载
 
 。也可以直接下载我分享的百度云链接 链接:https://pan.baidu.com/s/1UC0mxZicelsKxvnU1eXfdQ
 
 提取码:grx0
 
   
- 
 Cmake软件安装
 
 。运行下载的文件,一路next,记得修改一下安装路径就可以了。
    
    
    二、使用步骤
   
    
    
    1.修改Makefile文件
   
    用记事本打开Makefile文件,将需要修改的内容
    
    GPU=1
    
    CUDNN=1
    
    CUDNN_HALF=1
    
    OPENCV=1
    
     
   
    
    
    2.编译Makefile文件
   
    修改Make文件之后,需要编译生成才能完成修改。这里就用到我们之前下载的CMake软件,其实也可以不用这个软件的,但是我没搞明白别的方法怎么用,这个软件是我发现的使用起来还挺简单的。
    
    打开软件
    
    
    
    修改Where is the soure code为Makefile所在的文件夹,Where to build the binaries可以选为同一个文件夹,之后点击Confifure
    
    
    
    选择你的VS版本,并将平台设为x64,点击Finish
    
    
    
    再点击 Generate生成。
    
    
    
    生成成功之后,点击open project
    
    
    
    随后在vs中打开了该程序,在最上面设置成Release x64,点击 生成>生成解决方案。
    
    在D:\darknet-master\Release目录下复制新生成的darknet.exe文件,粘贴到D:\darknet-master\build\darknet\x64路径下
    
    
    
    这样我们就完成了Makefile文件的修改和编译了。
   
    
    
    三、遇到的问题
   
    
    
    1. configure时,有warning提示没有opencv
   
    错误“By not providing “FindOpenCV.cmake” in CMAKE_MODULE_PATH”
    
    这是因为,Cmake没有检测到你的opencv,只要设置一个环境变量就行。变量OpenCV_DIR,值为你电脑中安装的opencv的build路径。
    
    
    
    修改完成后,重启电脑,再次运行就ok了。
   
    
    
    2. Generate时,有warning
   
    
    
    如图,CMake Warning (dev) in CMakeLists.txt:
    
    Policy CMP0104 is not set: CMAKE_CUDA_ARCHITECTURES now detected for NVCC,
    
    empty CUDA_ARCHITECTURES not allowed. Run “cmake –help-policy CMP0104”
    
    for policy details. Use the cmake_policy command to set the policy and
    
    suppress this warning.
   
    CUDA_ARCHITECTURES is empty for target “dark”.
    
    This warning is for project developers. Use -Wno-dev to suppress it.
    
    查阅policy-CMP后,发现,这是因为使用了 old behavior,但是这个没有影响,可以不理他。
   
 
