基本名词扫盲
1.卷积核,百度解释很清楚:
卷积核就是图像处理时,给定输入图像,在输出图像中每一个像素是输入图像中一个小区域中像素的加权平均,其中权值由一个函数定义,这个函数称为卷积核。 (你可能需要记住这个下划线)
2.HOG 基本概念:里面提及HOG 你也需要认识这个东西
3.高斯处理 (卷积核权重检测和干扰处理)
在 YOLO 源码中 https://github.com/pjreddie/darknet,你可以查看如下的project tree :
YOLO底层调用opencv 大致对模型集和check image 算法(分类器)做了优化。CVer应该有所印象。
下面对makefile 进行 解析
上面工程只拥有makefile工程,linux下个windows-msys、windows cgywin 中能够使用
最新版YOLO3的地址 https://github.com/AlexeyAB/darknet 里面包含跨平台CMakeLists.txt,从vs2017伊始,就兼容CMakeList,小于2017版本的CmakeLists会被工程化为vs文件,不过道理都是一样的。里面带了很多用法脚本,(其实我接触他如果不翻源码我根本不知道怎么使用)
文件树将不再介绍,vs2017 打开上图的cmakelist.txt配置编译器将生成多种版本,这里测试win32 提示
大概就是pthread 的问题,由于我研究重点不是兼容性问题,我只需要跑起来,鄙人对win体系也是深恶痛绝,所以这里大家请自行解决32位兼容问题。
我选择x64-release,没有配置 GPU选项,后期可能会移植到树莓派中
生成缓存,最后会有如下图所示( openmp 并行计算库,):
点工程结构树中cmakelist.txt 生成,然后安装:
你会发现如下几个文件:
dark的动态库dll,lib是编程时找到函数定义的链接库,头文件 darknet.h ,yolo_v2_class.hpp。执行程序userlib.exe与darknet.exe。
我复制和更改了一个文件image_yolov3.sh ——> image_yolov3.cmd, windows引用的测试程序cmd脚本:
执行image_yolov3.cmd脚本(这个我猜测 是依赖库opencv的问题,我并没有安装CV):
开始折腾opencv,直接下载windows安装版,省事(https://sourceforge.net/projects/opencvlibrary/files/3.4.6/opencv-3.4.6-vc14_vc15.exe/download),下载有点久,所以这段时间呢,可以先看看源码,查看源码的工具什么的都可以你可以vs 我这里习惯source insight。darknet.c文件中main.c
有c语言基础的基本上看这个都是秒懂:
1.统计命令行参数
2.预处理宏定义
3.根据传入参数调用函数
翻回脚本image_yolov3.cmd:
darknet.exe detector test ./cfg/coco.data ./cfg/yolov3.cfg ./yolov3.weights data/dog.jpg -i 0 -thresh 0.25
程序调用argv[1] 的参数 detector直接看
函数内部:
剩下那一长串的 find_XXX 都是参数命令行的解析。我们传入的参数很遗憾上面的都没有,命中了 一个test的逻辑:
test_detector(datacfg, cfg, weights, filename, thresh, hier_thresh, dont_show, ext_output, save_labels, outfile, letter_box);
//其中:
datacfg = "./cfg/coco.data"
cfg = "./cfg/yolov3.cfg"
weights = "./yolov3.weights"
filename = "data/dog.jpg"
thresh = "0.25"
hier_thresh = "0.5"
dont_show = 0
ext_output = 0
save_labels = 0
outfile = 0
letter_box = 0
源码分析先到这里吧,先安装opencv跑起来看看效果先,opencv 安装自行百度,一大堆。
***********************************************************************
抱歉,前段时间写的上面的图文讲解,里面程序报错 0x0000007b ,这个问题不是opencv库的问题,我之前清理过环境,以至于macorsoft runtime libaray 丢失。而且后面拷贝了库文件,居然32位和64位卑混用,于是乎用depends.exe 工具查看依赖,替换了库,这才运行成功。不过opencv 这个东西还是darknet的依赖库。过了一遍流程没跑通,所以看源码什么的就暂缓了。
***********************************************************************