darknet(yolov4)在win环境下编译和使用

使用环境 win+mingw64+CPU,无GPU

1. 准备工作

2. CMAKE生成makefile

选择源文件路径和目标路径

选择opencv路径,取消CUDA选项

configure generate

在目标路径打开终端,输入make,编译。

3. 编译问题处理

  1. src/httplib.h报错 _gthread_time_t __ts’ has incomplete type

根据错误,查找发现是std::this_thread::sleep_for(std::chrono::milliseconds(1));引起的。因为貌似并没有用到http部分,直接屏蔽该行。

  1. :classifier.c:(.text+0x6d6a): undefined reference to `timersub’

在src/gettimeofday.h文件中timersub只在MSVC编译器下被编译。在ifdef外加上

#define timersub(a, b, result)                       \

  do {                                               \

    (result)->tv_sec = (a)->tv_sec - (b)->tv_sec;    \

    (result)->tv_usec = (a)->tv_usec - (b)->tv_usec; \

&#xA0; &#xA0; if ((result)->tv_usec < 0) { &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; \

&#xA0; &#xA0; &#xA0; --(result)->tv_sec; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0;\

&#xA0; &#xA0; &#xA0; (result)->tv_usec += 1000000; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0;\

&#xA0; &#xA0; } &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0;\

&#xA0; } while (0)&#xA0;

4. 开启优化

./darknet.exe detect ./cfg/yolov4.cfg yolov4.weights ./data/dog.jpg

结果得到一个36秒的超慢结果。。

./data/dog.jpg: Predicted in 36142.325000 milli-seconds.

bicycle: 92%
dog: 98%
truck: 92%
pottedplant: 33%

回到CMAKE中,打开AVX

在openmp后面加上-ffp-contract=fast -mavx -mavx2 -msse3 -msse4.1 -msse4.2 -msse4a

编译问题:

gemm.c报错未定义__cpuidex。

gemm.c修改为

void cpuid(int info[4], int InfoType) {
    __cpuid(InfoType , info[0], info[1], info[2], info[3]);
}
// #ifdef _WIN32
// //  Windows
// #define cpuid(info, x)    __cpuidex(info, x, 0)
// #else
// //  GCC Intrinsics
// void cpuid(int info[4], int InfoType) {
//     __cpuid_count(InfoType, 0, info[0], info[1], info[2], info[3]);
// }
// #endif

若还有错误,则修改C:\mingw64\lib\gcc\x86_64-w64-mingw32\8.1.0\include\cpuid.h。

输入测试命令,跑了14秒。

./data/dog.jpg: Predicted in 14656.837000 milli-seconds.

bicycle: 92%
dog: 96%
truck: 92%
pottedplant: 33%

5 其他模型

yolov4-tiny.weights 0.6s

./data/dog.jpg: Predicted in 624.065000 milli-seconds.

bicycle: 60%
dog: 84%
truck: 79%
car: 45%

yolov3.weights 3s

./data/dog.jpg: Predicted in 3315.204000 milli-seconds.

bicycle: 99%
dog: 100%
truck: 93%

yolov3-tiny.weights 0.4s

./data/dog.jpg: Predicted in 476.301000 milli-seconds.

dog: 81%
bicycle: 38%
car: 71%
truck: 41%
truck: 62%
car: 40%

6. 继续优化

调整cfg中的参数,可以继续优化识别速度和准确率

Original: https://blog.csdn.net/qq_30297521/article/details/121765471
Author: 科技与思想
Title: darknet(yolov4)在win环境下编译和使用

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/686640/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球