首页 > 编程知识 正文

darknet训练自己的数据集,darknet网络组成

时间:2023-05-06 02:20:17 阅读:168175 作者:1009

darknet是用c和CUDA编写的开源神经网络框架,快速易用。 我以前在海康做caffe的工作。 本想研究caffe的源代码,但导师建议阅读darknet的源代码以加深对深度学习的理解,并加强c语言。 由此,记录下读我的darknet源代码的途径。

一. darknet安装

这个记录主要是读源代码,所以不会先拿到opencv gpu。 darknet的安装非常简单,直接安装源代码,在github上下载源代码:

3359 github.com/pj reddie/darknet

下载并解压缩后得到的darknet-master文件夹主要包含几个重要文件夹、makefile和几个许可证。cfg文件夹存储各种常见网络结构的配置文件,包括yolo、rcnn等。 要定义自己的网络结构,必须创建自己的cfg文件。 这种感觉在data文件夹下,有各种各样的数据集,比如今后演示中使用的dog图像。 存储在examples文件夹中的各种检查算法的例子,例如detector.c是检查用的代码, 根据在run_detector函数中输入的参数是train还是test,转到其内部的train_detector或test_detector,这是include文件夹中的一个文件scripts文件夹包含几个shell脚本,通过查看几个文件的名称应该可以获取数据集。src文件夹中是CNN库的许多详细实现,该文件夹中的代码应该要花很长时间研究。 其中包括BN层实现、卷积层实现、正则化等,我认为阅读这部分代码对理解深度学习的各项基础知识非常有帮助。

下载源代码只是第一步,之后需要进行编译。 这个部分做得很好。 您可以在cd进入darknet-master后运行make来编译它。 您可以看到这是在文件夹中添加了obj、backup和results三个文件夹,libdarknet.a静态库和libdarknet.a静态库。简单来说,动态链接的基本思想是: profile obj文件夹下有和所有目标文件。 这样darknet就可以非常容易地安装了。

二.简单使用

darknet的使用也很简单。 在darknet官网上下载经过训练的yolov3权重,然后在终端上运行

./darknetdetectcfg/yolo v3.cfgyolov3. weights data/dog.jpg这些指令绑定代码非常简单,首先在darknet.c的主函数中输入

intmain(intargc,char **argv )/test_resize('data/bad.jpg ' ); //test_box (; //test_convolutional_layer (; if(argc2) fprintf(stderr,' usage: %s functionn ',argv[0] ); 返回0; }GPU_index=find_int_arg(argc,argv,'-i ',0 ); if(find_arg(argc,argv,'-nogpu ' ) ) { gpu_index=-1; }#ifndef GPU gpu_index=-1; #elseif(GPU_index=0) cuda _ set _ device (GPU _ index ); }#endifif(0==strcmp(argv[1],' average ' ) ) average ) argv,argv ); }elseif(0==strcmp(argv[1],' yolo ' ) ) run_yolo ) argv,argv ); }elseif(0==strcmp(argv[1],' super ' ) ) run_super ) argv,argv ); }elseif(0==strcmp(argv[1],' lsd ' ) ) run_LSD ) argv,argv; }elseif(0==strcmp(argv[1],' detector ' ) ) run _ detector (argv,argv ); }elseif(0==strcmp(argv[1],' detect ' ) floatthresh=find_float_arg ) argv,argv,'-thresh ',5chache argv[4]: 0; char * outfile=find _ char _ arg (argc,argv,'-out ',0 ); intfullscreen=find_arg(argc,argv,'-fullscreen ' ); test_detector('CFG/CoCo.data ',argv[2],argv[3],filename,thresh, 5,outfile,fullscreen ); 您可以看到这个程序根据给定的argv来确定程序的方向。 如本示例所示,argv[1]是detect,即程序转至detector.c中的test_dector函数,即测试检测。 这样,args[2]、args[3]、args[

voidtest_detector(char*dataCFG,char *cfgfile,char * weight filename,float thresh,float hier _ thresh

通过比较,args[2]是要使用的检测网络的配置文件,定义了网络的结构。 args[3]是一个配置文件,用于测试要使用的网络权重,而args[4]是指要测试的图像。 从main的if分支中可以看到,可以不创建filename,但通过分析test_detector函数(如果不指定程序),这将得到coco数据集中的label列表此名称是根据标签列表索引的。 当然,这只是我对源代码缺乏深入了解的推测。 如果错了,欢迎指出来。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。