【darknet学习笔记】train_classifier()函数调用参数说明

更多修改darknet训练图像分类笔记,见:修改darknet源代码,使其能够直接训练二进制图像数据

classifier.c文件中的train_classifier()函数声明:

void train_classifier(char *datacfg, char *cfgfile, char *weightfile, int *gpus, int ngpus, int clear, int dont_show, int mjpeg_port, int calc_topk);

其中包括参数:

char *datacfg,数据说明文件路径,图像分类数据说明文件一般命名为meta.data

char *cfgfile,网络结构说明文件路径,一般以*.cfg命名

char *weightfile,权重文件路径.

int *gpus,训练图像分类使用gpu编号

int ngpus,训练图像分类使用gpu数量

int clear,

int dont_show,

int mjpeg_port,

int calc_topk

classifier.c中run_classifier()函数调用train_classifier()代码:

char *data = argv[3];
char *cfg = argv[4];
char *weights = (argc > 5) ? argv[5] : 0;
int clear = find_arg(argc, argv, "-clear");
int dont_show = find_arg(argc, argv, "-dont_show");
int mjpeg_port = find_int_arg(argc, argv, "-mjpeg_port", -1);
int calc_topk = find_arg(argc, argv, "-topk");
train_classifier(data, cfg, weights, gpus, ngpus, clear, dont_show, mjpeg_port, calc_topk);

darknet训练图像分类指令:

darknet classifier train data/METAL/metal.data data/METAL/darknet19_448.cfg pretrained_weights/darknet19_448.conv.23

data:训练图像分类指令中第四个参数,即data/METAL/metal.data,分类数据描述文件路径

cfg:训练图像分离指令第五个参数,即data/METAL/darknet19_448.cfg,网络模型文件路径

weights:训练图像分类指令第六个参数,即pretrained_weights/darknet19_448.conv.23,权重文件路径

clear

dont_show

mjpeg_port

calc_topk

1.参数gpus,ngpus, gpu_index

ngpus是训练使用gpu个数,

gpus是一个数组,数组中存放gpu编号

指令中通过-gpus指定gpu的编号,如果没有使用-gpus指定,则默认使用1个gpu训练图像分类任务,gpus中存放gpu_index.

 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 = (int*)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_index:darknet训练图像指令,通过-i参数来指定,如果没有指定,调用cuda_set_device设置。

    gpu_index = find_int_arg(argc, argv, "-i", 0);
    if(find_arg(argc, argv, "-nogpu")) {
        gpu_index = -1;
        printf("\n Currently Darknet doesn't support -nogpu flag. If you want to use CPU - please compile Darknet with GPU=0 in the Makefile, or compile darknet_no_gpu.sln on Windows.\n");
        exit(-1);
    }

#ifndef GPU
    gpu_index = -1;
#else
    if(gpu_index >= 0){
        cuda_set_device(gpu_index);
        CHECK_CUDA(cudaSetDeviceFlags(cudaDeviceScheduleBlockingSync));
    }
#endif

 

发布了373 篇原创文章 · 获赞 151 · 访问量 33万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章