解读darknet-YOLO V2代码(一)
来源:互联网 发布:bms读取软件 编辑:程序博客网 时间:2024/06/07 11:27
解读darknet中的YOLO V2移植到vs2015后的代码,作者是AlexeyAB,github地址是https://github.com/AlexeyAB/darknet。
命令参数:detector demo data/voc.data yolo-voc.cfg yolo-voc.weights -c 0
程序入口:darknet.c
由382行的run_detector()进入detector.c
void run_detector(int argc, char **argv){char *out_filename = find_char_arg(argc, argv, "-out_filename", 0); char *prefix = find_char_arg(argc, argv, "-prefix", 0); float thresh = find_float_arg(argc, argv, "-thresh", .24); int cam_index = find_int_arg(argc, argv, "-c", 0); int frame_skip = find_int_arg(argc, argv, "-s", 0); 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); 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; } int clear = find_arg(argc, argv, "-clear"); char *datacfg = argv[3]; char *cfg = argv[4]; char *weights = (argc > 5) ? argv[5] : 0;if(weights)if (weights[strlen(weights) - 1] == 0x0d) weights[strlen(weights) - 1] = 0; char *filename = (argc > 6) ? argv[6]: 0; if(0==strcmp(argv[2], "test")) test_detector(datacfg, cfg, weights, filename, thresh); else if(0==strcmp(argv[2], "train")) train_detector(datacfg, cfg, weights, gpus, ngpus, clear); else if(0==strcmp(argv[2], "valid")) validate_detector(datacfg, cfg, weights); else if(0==strcmp(argv[2], "recall")) validate_detector_recall(datacfg, cfg, weights); else if(0==strcmp(argv[2], "demo")) { list *options = read_data_cfg(datacfg); int classes = option_find_int(options, "classes", 20); char *name_list = option_find_str(options, "names", "data/names.list"); char **names = get_labels(name_list);if(filename)if (filename[strlen(filename) - 1] == 0x0d) filename[strlen(filename) - 1] = 0; demo(cfg, weights, thresh, cam_index, filename, names, classes, frame_skip, prefix, out_filename); }}
find_char_arg()函数将输入的argv参数转换为程序需要的变量,程序在utils.c中实现。
char *out_filename = find_char_arg(argc, argv, "-out_filename", 0);
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;//argv[0]代表了程序第一个参数,即:darknet.exe,argv[1]为detector,argv[2]为demo,argv[3]为data/voc.data if(0==strcmp(argv[i], arg)){//strcmp是c、c++函数,用来比较str1,str2两个字符串,=为0,<为负数,>为正数
def = argv[i+1]; del_arg(argc, argv, i); del_arg(argc, argv, i); break; } } return def;}
未完待续
阅读全文
0 0
- 解读darknet-YOLO V2代码(一)
- darknet yolo源码解读
- darknet yolo v2 训练自己的数据
- darknet yolo v2 训练自己的数据
- yolo v2解读
- yolo v2 损失函数源码(训练核心代码)解读和其实现原理
- YOLO Darknet
- yolo v2 源码分析(一)
- yolo v2 损失函数源码解读
- Darknet (一) YOLO 基于 CentOS CPU 的部署使用
- yolo v2之车牌检测后续识别字符(一)
- Darknet YOLO 安装配置
- Yolo,darknet配置
- 【Darknet】【yolo v2】训练自己数据集的一些心得----VOC格式
- 完美解决:darknet yolo v2 Couldn't find open file:data/coco.names
- yolo v2
- YOLO V2
- YOLO v2
- postgres 并发控制
- docker 学习有感
- java导出简单的word模板
- SpringBoot使用JavaConfig配置ActiveMQ
- 仿探探卡片图片展示
- 解读darknet-YOLO V2代码(一)
- 以Attention Model为例谈谈两种研究创新模式
- 文章标题
- linux 通过sh脚本执行java程序-(1)
- java面试(1)单例模式的几种写法
- hadoop错误org.apache.hadoop.yarn.exceptions.YarnException Unauthorized request to start container
- 6 什么是自编码(Autoencoder)?
- Codeforces 886E (Codeforces Round #445) Maximum Element 组合数学+DP
- GOJ1446 并查集判断逻辑错误(是否说谎)