本文主要是介绍darknet源码剖析(二),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
进入run_detector函数:
char *prefix = find_char_arg(argc, argv, "-prefix", 0);
其中find_char_arg位于src/utils.c文件中,
char *find_char_arg(int argc, char **argv, char *arg, char *def)
{int i;for(i = 0; i < argc-1; ++i){if(!argv[i]) continue;if(0==strcmp(argv[i], arg)){def = argv[i+1];del_arg(argc, argv, i);del_arg(argc, argv, i);break;}}return def;
}
-prefix参数作用不明,不过通过分析上述代码的功能可以了解,若设置-prefix参数,则使用设置值,否则使用默认值,在当前代码中是0。两次del_arg函数的作用是删除-prefix与其对应的值。
float thresh = find_float_arg(argc, argv, "-thresh", .5);
float hier_thresh = find_float_arg(argc, argv, "-hier", .5);
int cam_index = find_int_arg(argc, argv, "-c", 0);
int frame_skip = find_int_arg(argc, argv, "-s", 0);
int avg = find_int_arg(argc, argv, "-avg", 3);
if(argc < 4){fprintf(stderr, "usage: %s %s [train/test/valid] [cfg] [weights (optional)]\n", argv[0], argv[1]);return;
}
char *gpu_list = find_char_arg(argc, argv, "-gpus", 0);
char *outfile = find_char_arg(argc, argv, "-out", 0);
int *gpus = 0;
int gpu = 0;
int ngpus = 0;
其余代码功能与之类似,在此不详细分析了。在当前训练模式中都没有涉及,直接使用默认值。
if(gpu_list){printf("%s\n", gpu_list);int len = strlen(gpu_list);ngpus = 1;int i;for(i = 0; i < len; ++i){if (gpu_list[i] == ',') ++ngpus;}gpus = calloc(ngpus, sizeof(int));for(i = 0; i < ngpus; ++i){gpus[i] = atoi(gpu_list);gpu_list = strchr(gpu_list, ',')+1;}} else {gpu = gpu_index;gpus = &gpu;ngpus = 1;}
上述代码用于设定训练GPU,由于没有设置gpu_list,因此进入else分支,gpu_index在cuda.c文件中,
int gpu_index = 0;
因此gpu为0,ngpus为1。
int clear = find_arg(argc, argv, "-clear");int fullscreen = find_arg(argc, argv, "-fullscreen");int width = find_int_arg(argc, argv, "-w", 0);int height = find_int_arg(argc, argv, "-h", 0);int fps = find_int_arg(argc, argv, "-fps", 0);
上述参数没有设置,使用默认值,均为0。
char *datacfg = argv[3];char *cfg = argv[4];char *weights = (argc > 5) ? argv[5] : 0;char *filename = (argc > 6) ? argv[6]: 0;
上述参数分别为cfg/data.voc,用于指定数据集保存地址,模型文件保存地址等信息。cfg/yolov3-voc.cfg,用于指定训练模型配置,darknet53.conv.74用于指定预训练模型。
else if(0==strcmp(argv[2], "train")) train_detector(datacfg, cfg, weights, gpus, ngpus, clear);
根据参数“train”,进入train_detector函数,参数分别为cfg/data.voc,cfg/yolov3-voc.cfg,以上文件位于cfg文件夹中,darknet53.conv.74从官网上下载,gpus=0,ngpus=0,clear=0。
这篇关于darknet源码剖析(二)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!