没有网的情况下采用将安装包全部都下载下来,再安装的方式。darknet在windows上编译问题比较多,经历了3天的踩坑,终于搭建好。。。下面简单记录一下安装过程。
1.下载cuda,cudnn,anaconda,opencv,opencv_python,vs。安装顺序:anaconda->opencv_python->opencv->vs->cuda->cudnn。
本机环境:Windows版本:Windows Servel 2016, GPU:Nvidia Tesla V100。
2.anaconda安装
根据下面的教程,下载好exe文件,拷贝到离线主机上进行安装。我安装的版本是Anaconda3-2023.03.0-Windows-x86_64.exe。python版本为3.10。
Windows下的Anaconda详细安装教程_windows安装anaconda-CSDN博客
anaconda和python版本的对照:
Anaconda版本和Python版本对应关系(持续更新...)_anaconda python版本-CSDN博客
anaconda的卸载:
Win10下面正确卸载Anaconda方法_彻底卸载anaconda win10-CSDN博客
Anaconda彻底卸载及重安装_anaconda卸载-CSDN博客
3.opencv_python安装
针对python版本选择适合的opencv_python(Links for opencv-python)进行下载。采用pip安装。我安装的版本是:opencv_python-4.5.4.60-cp310-cp310-win_amd64.whl
pip install opencv-python版本
教程:pip和Anaconda中安装opencv-python_opencv-python conda-CSDN博客
4.opencv库的安装,后面用于VS编译使用。其实就是一个opencv包的解压,再进行环境变量的配置。
OpenCV 最新版windows下安装教程_releases - opencv-CSDN博客
5.vs的安装
最开始安装的2022版,但是darknet编译出错,提示版本不匹配,采用2019版安装成功。这里下载的2019社区版。下载链接:Visual studio 2019 社区版下载和安装_vs2019社区版下载-CSDN博客
安装步骤:
下载好vs_community_2019.exe后,打开cmd,输入命令:
vs_community_2019.exe --layout C:\Users\win\Desktop\vs2019_offline --add Microsoft.VisualStudio.Workload.ManagedDesktop --add Microsoft.VisualStudio.Workload.NativeDesktop --includeRecommended --lang en-US zh-CN
--layout为离线包下载位置,这里仅安装:“.NET 桌面开发” 、“C++ 桌面开发” 。安装包下载完后将安装包拷贝到离线主机上,然后进入安装包,利用vs_community_2019.exe或者vs_setup.exe输入下面命令进行安装。
vs_community_2019.exe --noWeb --add Microsoft.VisualStudio.Workload.ManagedDesktop --add Microsoft.VisualStudio.Workload.NativeDesktop --includeRecommended
注意:--noWeb表示无网安装。安装界面右下载选在下载后安装。安装的插件根据自己的系统选择,例如,我的系统是Windows Servel 2016,则取消掉win10和win11的插件,如下图是windows11系统,则勾选掉windows10.
选完之后就可以进行安装了。
参考:
VS2022(Visual Studio 2022)最新安装教程_vs2022安装教程-CSDN博客
离线环境下安装微软Visual Studio 2022 生成工具_vs2022离线安装-CSDN博客
Visual studio 2019 社区版下载和安装_vs2019社区版下载-CSDN博客
Visual Studio 2019离线安装教程(脱机安装、局域网安装)_vs2019离线安装教程-CSDN博客
https://www.cnblogs.com/sailJs/p/16864697.html
创建脱机安装 - Visual Studio (Windows) | Microsoft Learn
6.cuda的安装
在终端中输入:
nvidia-smi
根据显示的cuda的版本号下载适合自己显卡的cuda文件,根据cuda文件选择合适的cudnn文件进行下载。具体的安装步骤,可以参考:
最详细!Windows下的CUDA与cuDNN详细安装教程_windows安装cuda和cudnn-CSDN博客
注意,因为前面已经安装了VS,因此注意将Visual Studio Integration勾选上。
7.cudnn的安装
根据cuda的版本,选择适配的cudnn版本。下载链接:Log in | NVIDIA Developer
安装教程:
最详细!Windows下的CUDA与cuDNN详细安装教程_windows安装cuda和cudnn-CSDN博客
上述安装完成后就可以编译darknet了。
8.darknet的编译
打开build文件夹下的darknet文件夹,并用写字板打开darknet.vcxproj,用搜索功能查找CUDA ,并修改为自己CUDA的版本号,我的CUDA版本是12.0,所以修改为CUDA 12.0(一共有两处需要修改的)并保存,如下图,将9.0改成12.0
- 确认C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\BuildCustomizations文件夹里面是否有下面这几个文件(因为我的是CUDA12.0,所以文件名中需带有12.0,也就是说自己CUDA的版本号)。
修改算力为自己显卡的算力,如V100的算力是70。则进行如下修改:
将
<CodaCompile>
<TargetMachinePlatform>64</TargetMachinePlatform>
<CodeGeneration>compute_35,sm_35;compute_86,sm_86</CodeGeneration>
</CodaCompile>
修改为:
<CodaCompile>
<TargetMachinePlatform>64</TargetMachinePlatform>
<CodeGeneration>compute_70,sm_70</CodeGeneration>
</CodaCompile>
注意compute_70,sm_70前面不要有其他的版本,否则会编译不通过。
然后使用vs2019打开darknet.sln文件,vs2019会弹出:
直接点确定即可
首先将Vs2019上方调成release x64
然后点击工具栏的项目->属性进入darknet的属性页。
首先选择VC++目录中的包含目录和库目录
点击链接器 → 输入 → 附加依赖项
添加opencv\build\x64\vc16\lib目录下的opencv_worldXXXX.lib,带d的是debug文件,我们是release模式所以选择不带d的,我的是opencv_world490.lib,不同版本的opencv后面数字不一样
最后右键项目点击生成即可
在x64目录下可找到darknet.exe
依次按上面方法编译C文件和yolo_console_dll.sln文件(yolo_console_dll.sln文件我没编译,现在还没啥影响)。编译yolo_cpp_dll.sln会生成yolo_cpp_dll.dll文件,采用darknet_images.py文件生成预测时会用到。
将darknet.exe, pthreadVC2.dll, yolo_cpp_dll.dll放到任意文件夹即可训练,测试。
安装教程参考:
https://zhuanlan.zhihu.com/p/45845454
Windows搭建Darknet框架环境-Yolov4-GPU_darknet windows-CSDN博客
【全网最全最完整】windows下darknet安装搭建与模型训练方法【亲测有效】_darknet在windows下的安装-CSDN博客
https://medium.com/geekculture/yolov4-darknet-installation-and-usage-on-your-system-windows-linux-8dec2cea6e81
9.问题总结:
9.1.Could not locate zlibwapi.dll. Please make sure it is in your library path
解决:解决问题:Could not locate zlibwapi.dll. Please make sure it is in your library path!-CSDN博客
9.2.编译时出现算力不匹配:
解决:在网址CUDA GPU | NVIDIA 开发者中查找算力。并且 在vcxproj中进输入<CodeGeneration>compute_自己的算力,sm_自己的算力</CodeGeneration>,不要在前面输入其他的算力。
如果这个方法没有效果,可参考下面解决方案:
解决:Darknet编译时报MSB3721错误 | 蓝伟洪的博客
9.3.could not find module 'darknet.dll'
解决:
编译yolo_cpp_dll.sln生成yolo_cpp_dll.dll,然后将darknet.py文件中的darknet.dll改成yolo_cpp_dll.dll。接着可能还报错,网上说因为python版本的问题,可以在darknet.py的Import库后添加两句话来解决:
os.add_dll_directory('c:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v11.1/bin')
os.add_dll_directory(os.path.dirname(__file__))
解决参考:
链接:
Issues · AlexeyAB/darknet · GitHub
【SOLVED】 Python `darknet.py` ERROR : `Could not find module 'darknet.dll'`, *** NO NEED *** to downgrade to py 3.7 on Windows 11 · Issue #8846 · AlexeyAB/darknet · GitHub
Python 3.8 issues with yolo_cpp_dll.dll · Issue #4956 · AlexeyAB/darknet · GitHub
python - Import darknet FileNotFoundError: Could not find module - Stack Overflow
https://medium.com/geekculture/yolov4-darknet-installation-and-usage-on-your-system-windows-linux-8dec2cea6e81